venerdì 5 gennaio 2007
Secondo la definizione di Wikipedia:
ReadyBoost consente di utilizzare la memoria di periferiche esterne (chiavette USB 2.0 o altre..) per estendere la quantità di memoria di sistema da usare per il SuperFetch e l'avvio più veloce di Windows (le memorie flash esterne non sono veloci quanto la RAM, ma possono comunque offrire prestazioni superiori a quelle dei dischi rigidi magnetici). È possibile rimuovere un'unità EMD (External Memory Devices) in qualsiasi momento senza perdite di dati. Una periferica USB può essere utilizzata come unità EMD per diversi anni anche se viene utilizzata intensivamente, grazie all'uso di un algoritmo di ottimizzazione. Infine, i dati contenuti nell'unità EMD sono crittografati per impedire l'accesso non autorizzato ai dati quando viene rimossa l'unità.
Attivare la tecnologia ReadyBoost in Windows Vista è semplicissimo: infatti, quando si collega una chiavetta USB al PC, la finestra di Auto Play visualizza un'opzione che consente di abilitarla con un semplice clic del mouse. Maggiori informazioni sono disponibili su questa pagina.
In questa pagina si può trovare un altro articolo che spiega come far funzionare correttamente Visual Studio 2005 su Windows Vista. Seguendo i suggerimenti riportati sono riuscito ad ottenere un ambiente di sviluppo funzionante correttamente, anche se rimane qualche problemino che spero venga risolto con l'Update del Service Pack 1.
Negli ultimi mesi ho cercato di scrivere codice .NET rispettando le Naming conventions suggerite per i vari linguaggi. Oggi ho trovato un free ebook chiamato .NET Coding Guidelines, che credo mi sarà molto utile:
.NET Coding Guidelines is a 100+ page ebook (PDF) on naming conventions, best coding practices and patterns written by the industry expert Steven Sartain and delivered to you for Free by SubMain.
The document covers:
- Naming Guidelines
- Class Member Usage Guidelines
- Guidelines for Exposing Functionality to COM
- Error Raising & Handling Guidelines
- Array Usage Guidelines
- Operator Overloading Usage Guidelines
- Guidelines for Casting Types
- Common Design Patterns
- Callback Function Usage
- Time-Out Usage
- Security in Class Libraries
- Threading Design Guidelines
- Formatting Standards
- Commenting Code
- Code Reviews
- Additional Notes for VB .NET Developers
Questo libro raccoglie un gran numero di informazioni e le organizza in maniera sistematica, rendendone facile la consultazione. Gli esempi sono sia in C# sia in VB .NET; per quest'ultimo linguaggio è anche presente una sezione che fornisce alcune regole generali per la scrittura di codice (ad esempio, legate all'uso del Case e del Goto).
Credo proprio che questo librò finirà nella libreria dei miei testi indispensabili
. Il download è disponibile qui.
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...).