Skip to main content

Come impedire a Windows di svegliarsi autonomamente dopo la sospensione – standby – sleep mode

Tra le caratteristiche più interessanti delle ultime versioni di Windows vi sono senz’altro le rinnovate modalità di sospensione (standby o anche, più di recente, sleep mode) e ibernazione (hibernate mode) che consentono, se utilizzate in modo opportuno, non soltanto di risparmiare un considerevole quantitativo di energia ma anche di allungare le aspettative di vita del proprio PC.

Uno dei problemi più comuni che spesso affligge chi tenta di utilizzare queste importanti funzionalità è dato dalla fastidiosa tendenza di Windows a ripristinare autonomamente il sistema, spesso a pochi minuti di distanza dal comando di sospensione e/o ibernazione: una eventualità che nullifica completamente i benefici di cui sopra, costringendo l’utente a scegliere tra salvare il proprio lavoro e spegnere il PC o rischiare che il PC si svegli da solo, restando poi acceso per ore.

Per risolvere il problema è opportuno comprendere le motivazioni che spingono Windows a ripristinare il sistema: vediamo quali sono.

(altro…)

 

PHP lock e semafori con WinCache e/o APC

Alzi la mano chi, lavorando con PHP, non ha mai avuto la necessità di limitare l’accesso simultaneo a una funzione o a un metodo di una classe. Si tratta di un’esigenza tipica delle cosiddette maintenance task, ovvero di quelle procedure eseguite a intervalli regolari senza l’ausilio di un cron job vero e proprio ma al primo accesso di un qualsiasi utente a partire da una determinata ora. E’ probabile che, se vi siete imbattuti in questo articolo, siate alla ricerca di un modo per impedire che l’accesso simultaneo di più utenti possa provocare l’esecuzione simultanea della medesima task prima del completamento della stessa.

In altri linguaggi di programmazione (ASP.NET/C#, Phyton et. al.) questa esigenza si risolve facilmente utilizzando procedure di thread synchronization come i ben noti semafori o lock, in modo simile al seguente esempio (C#):

In PHP, contraddistinto sotto Windows da una implementazione thread-unsafe e, sotto Linux, da una esecuzione isolata per ciascun processo, non esiste una funzionalità nativa per ottenere un lock di questo tipo. Un tipico workaround utilizzato dagli sviluppatori è quello di ricorrere al flock(), una tecnica di lock basata sulla creazione di semafori creati direttamente sul filesystem: in poche parole, un lock ottenuto sfruttando la creazione/presenza/eliminazione di un file che fa le funzioni di semaforo e ha il compito di tenere sincronizzati i thread/processi. Pur trattandosi di un approccio assolutamente percorribile, questa tecnica ha almeno due difetti: le performance non eccezionali – dovute alla necessità di effettuare frequenti operazioni IO – e la scomodità di dover gestire i file/semafori con tutto quello che ne consegue – path, permessi e via dicendo. Fortunatamente esiste un metodo decisamente più pratico, a patto che l’installazione PHP preveda l’utilizzo di una delle numerose librerie di caching disponibili. Le più note e utilizzate sono:

  •  WinCache, di cui abbiamo già avuto modo di parlare in un paio di occasioni, realizzata da Microsoft e disponibile in tutte le distribuzioni PHP per Windows.
  • APC, scaricabile dall’apposita pagina PECL.

Trattandosi di librerie dedicate alla gestione di un’area di cache condivisa tra i vari processi/thread di esecuzione PHP, ciascuna di esse prevede una funzione specifica per acquisire il lock: vediamo quali sono e come implementarli all’interno del nostro codice.

Nella lista non è presente OPCache, l’ottima libreria sviluppata da Zend e disponibile in tutte le distribuzioni di PHP recenti per Windows e Linux, perché – almeno allo stato attuale – non mette a disposizione dello sviluppatore una user cache su cui poter intervenire in modo arbitrario.

(altro…)

 

Volume Shadow Copy Service Error: Unexpected error querying for the IVssWriterCallback interface – come risolvere

Se avete installato programmi di backup nativi o di terze parti (noi utilizziamo l’ottimo Cobian Backup) può capitarvi di riscontrare il seguente errore nel vostro registro di sistema:

Il messaggio, piuttosto esplicativo, è dovuto alla mancanza di permessi del servizio Volume Shadow Copy.

Soluzione 1: Registry Editor

La prima operazione che consigliamo di effettuare per risolvere il problema è quella di modificare le impostazioni di accesso al servizio VSS nel registro di sistema, assegnando le autorizzazioni del caso all’account di esecuzione del servizio. Questi i passaggi che consigliamo di compiere:

(altro…)

 

ASP.NET Entity Framework 6.1 – Elenco esaustivo delle Data Annotations

A corredo dei numerosi articoli su EF6 scritti negli ultimi mesi, presentiamo una sintesi dell’ottimo articolo scritto da Julie Lerman e ripreso dal MSDN Data Developer Center, che ha il pregio di presentare in modo ordinato tutte le data annotation messe a disposizione da Entity Framework 6 per corredare le nostre classi in modo da orientare nel modo giusto la generazione della base dati in ottica code-first.

L’approccio code-first, per chi non lo sapesse già, è un metodo di sviluppo che consente di concentrarsi sul domain design, ovvero sulla creazione delle classi che rappresenteranno il nostro model, sfruttando la capacità di Entity Framework di creare automaticamente la struttura dati (il database, per intenderci) necessaria ad ospitarle.

code-first

In questa modalità di sviluppo le Data Annotation rivestono un ruolo fondamentale, in quanto consentono di orientare al meglio la generazione automatica del database definendo una serie di caratteristiche specifiche per ciascuna proprietà delle nostre model classes nel caso in cui le convenzioni normalmente adottate da EF non siano ottimali per i nostri scopi.

(altro…)