giovedì 4 gennaio 2007
Questo articolo apparso su CodeProject sembra molto interessante:
A new feature available in Vista is the ability to have a callback when your application crashes. This can allow you to attempt to persist your applications data before it is terminated. Upon restart, you can then reload that persisted data, thus giving your user a better experience (of course, it shouldn't crash in the first place, but we're being realistic, right!).
Per il download e per maggiori dettagli, clic qui.
Utilizzando il metodo Delete degli oggetti File, FileInfo, Directory e DirectoryInfo, i file e le cartelle vengono cancellati dal sistema senza finire nel Cestino. Qualora si voglia passare per quest'ultimo, è necessario fare ricorso al Platform Invoke:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct SHFILEOPSTRUCT
{
public IntPtr hwnd;
public int wFunc;
public string pFrom;
public string pTo;
public short fFlags;
public bool fAnyOperationsAborted;
public IntPtr hNameMappings;
[MarshalAs(UnmanagedType.LPWStr)]
public string lpszProgressTitle;
}
[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
private static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);
private const int FO_DELETE = 3;
private const short FOF_ALLOWUNDO = 0x40;
private const short FOF_NOCONFIRMATION = 0x10;
public static void Delete(string path, bool showConfirmationDialog)
{
SHFILEOPSTRUCT shf = new SHFILEOPSTRUCT();
shf.wFunc = FO_DELETE;
if (showConfirmationDialog)
shf.fFlags = FOF_ALLOWUNDO;
else
shf.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;
shf.pFrom = path + '\0';
SHFileOperation(ref shf);
}
Questo codice, opportunamente arricchito, andrà a far parte del mio progetto Extension for .NET Framework, ma intanto ho voluto postarlo qui in anteprima per tutti gli affezionati lettori del mio blog
.
La classe SpeechSynthesizer del .NET Framework 3.0 (di cui ho già parlato in questo post) consente di redirezionare l'output del Text-To-Speech su varie destinazioni, ovvero l'uscita audio del PC (default), un file WAV oppure un generico Stream. Sfruttando quest'ultimo, è possibile realizzare uno Speech Server minimale in grado di fornire funzionalità di Text-To-Speech anche a sistemi che non hanno la potenza adatta per gestire un motore di TTS oppure che non dispongono di una sua implementazione (come nel caso dei Pocket PC con il .NET Compact Framework 2.0).
L'idea è semplice: sul server è in esecuzione un servizio che accetta le connessioni dai vari client, quindi legge la stringa che si vuole venga pronunciata, crea uno stream contenente il "parlato" e lo restituisce indietro. In tal modo, quest'ultimo non deve fare altro che riprodurre lo stream (che è semplicemente uno stream WAV) per ottenere l'effetto del Text-To-Speech. Il cuore dello Speech server è il seguente:
1 using(MemoryStream ms = new MemoryStream())
2 {
3 //Legge la stringa dalla connessione TCP.
4 //...
5
6 //Genera il Text-To-Speech.
7 using (SpeechSynthesizer ss = new SpeechSynthesizer())
8 {
9 ss.SelectVoice("ScanSoft Silvia_Dri40_16kHz");
10 ss.SetOutputToWaveStream(ms);
11 ss.Speak(text);
12 }
13
14 //Converte lo stream in array di byte e lo invia al client.
15 //...
16 }
In particolare, la riga 10 redireziona l'output del Text-To-Speech su un MemoryStream, che poi viene convertito in byte e rispedito al mittente. Naturalmente è possibile tutta una serie di ottimizzazioni: ad esempio, si può comprimere l'array di byte prima di inviarlo al client, in modo da limitare la quantità di dati che passano sulla rete e riducerre così il tempo di risposta.
Ero quasi sicuro di averla scampata... Quand'ecco che all'improvviso Marco De Sanctis ha taggato anche me
. Vediamo quali sono le 5 cose meno compromettenti che posso raccontarvi:
- Il mio primo contatto con l'informatica è stato un Vic20 di seconda mano.
- Il mio primo vero programma (se escludiamo le canzoncine scritte utilizzando il comando PLAY del GwBasic) è stato un software che ho sviluppato in GwBasic (anche se in questo contesto sviluppare mi sembra una parola grossa
) quando ero alle medie: si trattava di un'applicazione per la stampa delle pagelle, che per un certo periodo è stata effettivamente utilizzata! - Nonostante queste "premesse", ho fatto il Liceo Classico, anche se poi ho frequentato la Facoltà di Informatica... Infatti una delle domande che mi hanno posto più spesso durante gli anni dell'Università era: ma come, hai fatto il Classico ed ora sei venuto ad Informatica?!
- Ho una grande passione per il cinema: guardo un po' di tutto, ma non vado pazzo per i film horror. E mi piace tantissimo il mare... Complice il fatto di abitare a due passi della costa, ho passato praticamente tutte le estati in spiaggia.
- "Da grande" vorrei fare il Software Architect.
Ora la parte più divertente... Vediamo chi posso nominare (in ordine rigorosamente casuale): Paolo Ongari, Dino Esposito, Alessandro Gervasoni, Pierre Greborio e Alessio Mariali, tocca a voi
(chiedo scusa se qualcuno fosse già stato taggato... Ma l'ora è tarda...).
Negli ultimi tempi mi è capitato di dover ridistribuire lo spazio libero delle partizioni del mio Hard Disk, un Maxtor da 80 GB. Per compiti di questo tipo ho sempre utilizzato Partition Magic, che ho conosciuto per la prima volta con l'ormai vecchiotta versione 5.0. In particolare, prima di Natale l'ho utilizzato per aggiungere 10 GB alla partizione D, prendendoli dalla partizione C. La procedura, dopo il riavvio della macchina, ha richiesto 15 minuti abbondanti.
Oggi ho dovuto ripetere l'operazione e riportare i 10 GB sulla partizione C. Questa volta, però, influenzato dai commenti positivi di varie riviste, ho voluto provare Acronis Disk Director Suite. Anche questo strumento è dotato di wizard ed ha un'interfaccia utente che ricalca quella di Partition Magic, quindi il periodo di apprendimento è stato pressoché nullo. Inoltre, le funzionalità disponibili (a patto di usare quella che Acronis chiama Manual Mode) sono le stesse di Partition Magic. Due programmi che sembrano uguali, quindi... In realtà c'è una bella differenza: per riassegnare i 10 GB tra le partizioni, Disk Director ha impiegato meno di 3 minuti!
Dopo questa esperienza, credo proprio che manderò in pensione Partition Magic 
Poche ore fa ho fatto un check-in del progetto Extensions for .NET Framework, in cui ho aggiunto una classe per la gestione delle applicazioni a singola istanza. Queta estensione serve solo per i progetti realizzati in C#, dal momento che in VB .NET per ottenere lo stesso risultato è sufficiente attivare una casella di spunta nelle proprietà del progetto.
Questa pagina della Knowlege Base di Microsoft fornisce una panoramica su SQL Server 2005 Compact Edition RC1 e sulle note da tenere presente quando viene installato in un sistema con Visual Studio 2005 e SQL Server 2005.
Così come quello di Outolook Express, anche lo splash screen del suo successore Windows Mail può essere disabilitato intervenendo sul Registro di configurazione. In questo caso, bisogna navigare fino alla chiave HKEY_CURRENT_USER\Software\Microsoft\Windows Mail e quindi aggiungere ad essa un valore DWORD di nome NoSplash, che deve essere posto uguale ad 1.