.NET Framework
There are 41 entries for the tag
.NET Framework
Introduzione Sono circa due settimane che il mio blog gira con Subtext 2.0, la nuova ed ultima release del noto blog engine, che annovera fra i suoi creatori anche il buon Simone Chiaretta. Decido di dare oggi l’ufficialità di questa cosa, perchè la migrazione è stata sì indolore, ma un po’ preoccupante per alcuni sintomi. Parecchi di voi mi hanno detto via mail e via messenger che ogni tanto il mio blog si apriva senza skin. Urgh! Nella parte Admin del blog ogni tanto avevo una strana exception, che veniva tracciato...
Supponiamo l’esistenza di una classe Player che tra le altre proprietà ne esponga una di tipo intero denominata Strength. Supponiamo l’esistenza di una classe Team che tra le altre proprietà ne esponga una di tipo List<Player> denominata AcquiredPlayers. Supponiamo l’esistenza di una classe Match che calcola l’incontro tra due Team diversi e ne calcola l’esito. Un match viene vinto dal Team che raggiunge il punteggio più alto. Tale punteggio è la somma dei valori della proprietà Strength dei giocatori appartenenti ad un Team (semplificando, chiaramente). Es: l’istanza team1 ha acquisito...
Ok, il titolo di questo post è più confuso che altro. Amen. Nei giorni scorsi ho creato una class library per .NET Framework 3.5, all’interno del quale ci sono Windows in XAML, ResourceDictionary, immagini e video. C’è anche una bella classe TagDataTemplateSelector, che eredita da DataTemplateSelector. Come ben sa chi sviluppa in WPF, una classe figlia di DataTemplateSelector ha un metodo pubblico SelectTemplate, che restituisce un DataTemplate piuttosto che un altro, in base alla logica che implementiamo nel metodo stesso. Questo serve ad esempio se avete una ListBox e volete applicare un template differente per ogni elemento: supponiamo...
Una query CAML può far riferimento ad un gran numero di campi, sia per effettuare ordinamenti, sia per applicare filtri. Inizialmente pensavo che il nome di questi campi potesse essere trovato semplicemente sfogliando la document library da Internet Explorer. In realtà quello che si legge nelle ColumnHeaders navigando un website Sharepoint è il Display Name. Nelle query CAML bisogna far riferimento ai campi attraverso il loro Internal Name. Dove trovare questo famigerato Internal Name? Il buon Vincent Rothwell, MCTS di Sharepoint, ha redatto sul suo blog questa bella tabella HTML che elenca Display Name, Internal Name, Guid e Type...
Attraverso CAML possiamo fare tutta una serie di query che vanno ad interrogare il contenuto di una document library. Per esempio, se volessimo aggiornare i metadati di un file pubblicato in una document library dobbiamo prima averne l'ID univoco. Questo lo abbiamo visto precedentemente, quando abbiamo ottenuto l'ID dell'ultimo file uploadato. Quale CAML dobbiamo scrivere per sapere l'ID di un qualsiasi file? E' molto semplice: <Where>
<Eq>
<FieldRef Name="FileLeafRef" />
<Value Type="Text">{0}</Value>
</Eq>
</Where>
Se usiamo questo CAML...
Ho scritto il metodo seguente, che dato un nome di una lista di Sharepoint ed un nome di file pubblicato, restituisce il suo ID univoco. Questo ID può essere utile durante la chiamata ai web-services di Sharepoint. Vediamo insieme come funziona. 1 public void ReadFileID(string listName, string fileName)
2 {
3 string name;
4 Lists l = new Lists();
5 l.Credentials = new NetworkCredential(this.Username, this.Password, this.Domain);
6
7 XmlDocument doc = new XmlDocument();
8 ...
Di per sè non è una cosa estremamente complicata. E' possibile accedere ad una document library di Sharepoint come se fosse un normale path di rete. Detto questo, potete per esempio uploadare un file locale su un server con una banalissima File.Copy - pratica che a me personalmente non piace perchè non è asincrona e soprattutto blocca il thread corrente fino a quando l'operazione non è completata (con successo o meno). Per l'upload ho preferito usare questo blocco di codice... public void UploadDocument(string localFilename, string remoteFilename)
{
FileStream strm = new FileStream(localFilename, FileMode.Open,...
Introduzione per chi non sa di cosa si sta parlando Facciamola breve. L'evento Validating è il metodo più vecchio per validare il contenuto di un controllo in un'applicazione Windows Forms. L'evento Validating si scatena un attimo prima che un determinato controllo perda il focus: nell'event handler implementate il controllo che volete, e se le cose non vanno come dovrebbero, impostate a true il valore della proprietà Cancel del parametro di tipo CancelEventArgs. Quindi, supponiamo: 1 private void textBox1_Validating(object sender, CancelEventArgs e)
2 {
3 if(string.IsNullOrEmpty(this.textBox1.Text))
4 ...
In un'applicazione WPF che sto programmando nel tempo libero ho creato un'animazione che parte automaticamente all'apertura della Window principale dell'applicazione stessa. Essa prepara l'interfaccia utente con un po' di "effetti speciali": il titolo dell'applicazione appare con un fade-in stessa cosa per il background, ma con un leggero ritardo rispetto al titolo altre scritte appaiono ruotando e spostandosi velocemente sullo schermo, posizionandosi vicino al titolo poi appare il menù principale, anch'esso con un fade-in il logo VivendoByte viene posizionato in basso a destra sullo schermo...
Il .NET Framework è composto da un altissimo numero di classi. Vi siete mai chiesti quante ne conoscete e quante ne avete usate? Non sto dicendo nulla di nuovo se vi dico che questo numero dipende per la maggior parte dal tipo di lavoro che fate, dal tipo di clienti che avete e dall'ambito nel quale siete più o meno costretti a sviluppare i vostri applicativi. I numeri raccontati in questo post danno una visione di insieme. Grazie a Lorenzo che me l'ha trovato! I tipi definiti nel .NET Framework 1.0 erano ben 3.581; nella versione 2.0 erano il...
Come requisito, leggetevi prima l'articolo su MSDN pubblicato dal nostro amico Giancarlo "Janky" Sudano su Linq to SQL. Se avete voglia e se volete partire rapidamente con questo ORM, potete dare un'occhiata all'ottimo tutorial del mio omonimo Igor: l'avevo letto quando era stato messo on-line, ma l'ho ripreso ieri quando ho voluto ripercorrere i passaggi sul mio piccolo progetto che io chiamo "campo di battaglia" per studiare le nuove tecnologie ed i nuovi framework ai quali sono interessato. Ieri sera ho mappato il mio domain-model su un database SQL Server 2005 Express Edition. Il domain-model contiene classi come Player,...
Premessa: il post è volutamente ironico. Chiedo scusa a tutti (ma proprio a tutti) i miei amici di UGIdotNET: vi prego, siate clementi nei commenti! :-)
Molto tempo fa dissi che prima che succedesse una cosa, ne sarebbero accadute delle altre. Sono stato smentito. Quella cosa è accaduta ieri mattina.
Ieri ho programmato e ho messo on-line la mia prima pagina in ASP.Net.
E ne ho persino due prove. La prima è lo screenshot di Visual Studio 2008:
La seconda è la mia nuova home-page. Che emozione...l'estensione è .aspx.
Chi l'avrebbe mai detto???
Sapevo che VS2008 potesse creare siti Web, sapevo che esisteva una...
Da questo post del mio amico Alessandro Del Sole sono venuto a sapere che esiste un portale denominato MSDN Code Gallery, dove è possibile uploadare esempi di codice, piccoli progetti, prototipi che illustrano il funzionamento di una determinata tecnologia, video e così via. Non mi sembra che sia attivo da molto tempo, perchè i vari progetti sono stati tutti uploadati nel 2008, ed anche la loro quantità mi fa pensare che sia online da relativamente poco tempo. Alcuni di questi progetti vengono poi referenziati direttamente da MSDN, come nel caso di Visual Basic LINQ Video Series Samples. Le funzionalità...
Ad una ListBox generalmente possiamo fornire oggetti da visualizzare in due modi differenti: o utilizziamo il data-binding con la proprietà ItemsSource oppure accedendo alla proprietà Items, attraverso la quale possiamo aggiungere/rimuovere/ricercare oggetti. La proprietà Items è di tipo ItemCollection, una classe che espone un'interfaccia davvero semplice e potente al tempo stesso. Supponiamo di avere una Window con una ListBox popolata in questo modo. Se volessimo accedere agli oggetti contenuti nella ListBox possiamo scrivere in C# quanto segue: 1 ItemCollection photos = ListPhotosSelected.Items;
Possiamo sapere se la collection è vuota attraverso la proprietà IsEmpty.
Possiamo navigare all'interno della...
La cosa più bella nello sviluppare piccole applicazioni opensource/freeware in autonomia è quella di poter cogliere l'occasione per studiare le nuove tecnologie, o i nuovi strumenti che i nuovi framework ci danno. Per esempio, ecco la schermata del mio WPF Technorati Plug-in for Windows Live Writer: Assumiamo che la ListBox a sinistra sia popolata con una semplice List<string>. Tale lista di stringhe viene ritornata dal web-service di Technorati, che ci restituisce per l'appunto i primi 100 tags utilizzati su un determinato blog. La nuova funzionalità che ho aggiunto permette all'utente di filtrare l'elenco dei tags...
Il .NET Framework è composto da una moltitudine di classi, tipi, interfacce, enum. Saremmo spaesati se non potessimo esprimere in alcun modo un concetto come: ok, adesso fammi lavorare solo con questa parte del framework. La keywork using ce lo permette. Dalle migliaia e migliaia di classi del framework, la using seleziona/filtra solo la parte che ci interessa: System, System.Data, System.Windows, System.Xml, System.Security e così via. Saremmo tutti più confusi se non esistesse la using, e tantomeno il suo amico namespace. Avremmo tutti gli oggetti in un unico grande calderone, tutte le classi mischiate assieme, senza alcuna suddivisione...
E bravo il mio amico Giancarlo, che ha pubblicato un ottimo articolo su Linq to SQL. Prendete questo giudizio con le dovute cautele, perchè conosco poco Linq e dintorni e quindi la mia idea potrebbe essere sfalsata dal fatto che questo Linq mi sembra tutto rose e fiori. Linq to SQL è l'Object Relational Mapper di Microsoft, capace - detto brutalmente - di persistere su database il proprio domain model, composto da oggetti di business. L'articolo descrive molto bene l'architettura di Linq to SQL, il DataContext, l'Identity Map, il tutto con un linguaggio semplice e chiaro, anche per chi...
Le forze vitali mi stanno abbandonando. Detto più terra terra: ho sonno. Ma ho trovato questo post che potrebbe darmi qualche spunto per debuggare le applicazioni WPF - semplici o meno semplici - che sto scrivendo. Prendiamo un semplice blocco XAML come questo: <TextBlock FontSize="12" Margin="4" Text="{Binding ElementName=tagsListBox, Path=SelectedItems.Count}" /> Lo XAML inserisce una TextBlock che visualizza il numero di elementi selezionati nella ListBox tagsListBox. La proprietà Path che ho specificato esprime la proprietà di cui voglio mostrare il valore; ricordo nel frattempo che WPF supporta le proprietà come dire...annidate...cioè posso separare con il punto fino a...
E' da un po' che avevo installato sul mio Vista l'ultima release di Microsoft Expression Blend 2 - December Preview (EB2), ma non gli avevo mai dato un'occhiata seria. Vorrei provarci, anche se un certo Corrado mi ha detto che a lui non piace molto lo XAML generato da questo tool che però, volente o nolente, serve per essere un po' più produttivi con Windows Presentation Foundation. Ho letto l'elenco delle features. Alcune di queste sono quasi ovvie (Synchronized File Changes, Keyboard Shortcuts, Search Text Boxes), mentre altre sono decisamente più interessanti. Per esempio, con EB2 le soluzioni...
Qualche giorno fa Alessandro Melchiori mi ha segnalato un bug nel tool Visual Studio Recent Items Eraser. Prima dell'uscita di Visual Studio 2008, questo tool cancellava dal registro di Windows l'elenco dei progetti ed i files recenti. Ho dovuto (voluto?) aggiornare il tool quando è uscito VS2008, che chiaramente va a scrivere in punti diversi del registry. Alessandro mi ha detto che l'ultima release del tool non funzionava bene con VS2008. Effettivamente, ha ragione. La release che era online fino a questa sera cancellava chiavi sbagliate all'interno del registry: non spaventatevi, le chiavi erano inesistenti, quindi dal punto...
Le applicazioni WPF sono normalissime applicazioni che, se ben progettate, possono essere unittestate come si fa con tutte le altre applicazioni. E' sufficiente mantenere una buona separazione tra oggetti business, strato di logica ed interfaccia grafica, e scrivere test adeguati automatizzati per misurare con efficacia la qualità della nostra applicazione. Non che la cosa sia semplice, è ovvio, altrimenti...cosa siamo qui a fare?? Se vi può interessare l'argomento, ecco un bell'articolo dal titolo Using MVC to Unit Test WPF Applications. Il titolo non lascia spazio a dubbi. 14 pagine stampate. Buona lettura! Link : http://www.codeproject.com/KB/WPF/MVCtoUnitTestinWPF.aspx...
Ogni tanto nel mio tempo libero la passione per la programmazione su Flickr sboccia. Ho scritto un piccolo metodo che scarica in locale tutte le fotografie appartenenti ad un certo photoset di Flickr. Il codice bene o male è questo: 1 public void DownloadPhotos(string photosetId)
2 {
3 Stream stream;
4 FileStream saveFileStream;
5 Uri uri;
6 string filename;
7
8 Photo[] ps = conn.PhotosetsGetPhotos(photosetId);
9
10 foreach (Photo p in ps)
11 ...
Ieri tutti quelli che hanno Visual Studio 2008 installato e funzionante - con la sola eccezione delle versioni Express - sono corsi a configurarlo per poter vedere come funziona il meccanismo che permette di vedere il codice sorgente del .NET Framework. Effettivamente, è la notizia del giorno. Come era stato annunciato da un po' di tempo, infatti, con VS2008 è possibile debuggare il framework e vedere il codice sorgente di tutte le classi comprese in determinati assembly e namespace. Vi rimando direttamente a questo post di un certo Shawn Burke che spiega nel dettaglio come e cosa impostare dentro...
Se avete bisogno di generare via codice un file di risorsa da poter includere in una soluzione, ecco il codice che potrebbe servirvi... static void Main(string[] args)
{
string filename = "D:\\registers.resx";
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("key1", "value1");
dict.Add("key2", "value2");
dict.Add("key3", "value3");
dict.Add("key4", "value4");
IDictionaryEnumerator enumerator = dict.GetEnumerator();
ResXResourceWriter writer = new ResXResourceWriter(filename);
do
{
writer.AddResource(enumerator.Key.ToString(), enumerator.Value.ToString());
...
Se volete disabilitare i balloons che Pocket PC 2003 visualizza quando il livello di carica della batteria scende al di sotto di una certa soglia, potete farlo manualmente andando - se ricordo bene - sotto Start --> Impostazioni --> Alimentazione --> Avvisi. Qui ci sono due checkbox, disattive di default, che vi permettono di spegnere due notifiche: una riguarda il livello basso di carica (battery low) e l'altro il livello molto basso di carica (battery very low). Se dovete fare questa cosa su 100 palmari diversi, che andranno in produzione, può essere comodo inserire questa cosa nel vostro software,...
Gli extension method sono una delle novità puramente sintattiche del .NET Framework 3.5. Mi piace chiamarle sintatticamente perchè tecnicamente parlando è possibile ottenere lo stesso risultato con le vecchie versioni del framework. Facendola breve, utilizzando gli extension method è possibile "estendere" un tipo, dotandolo di uno o più metodi, senza creare nuovi tipi, senza la necessità di mettere mano a codice sorgente che magari non avete e - in fin dei conti - senza modificare il tipo originale. Maggiori dettagli su questa pagina di MSDN. Supponiamo di aver definito un tipo Holiday come segue: public...
All'ultimo workshop UGIdotNET del 13 Dicembre, Dino Esposito ha illustrato al meglio, e in un modo che solo lui può ottenere, qual'è il trend delle applicazioni future sul Web. Questo trend prende il nome di Silverlight. So poco o nulla di queste tecnologie Web, ma un'idea ce l'ho e non riesco a non dirvela più di tanto. Oggi è il 19, sono passati 6 giorni dal workshop e non ce la faccio più a stare zitto. La morale è che nelle versioni future, che oggi non sono nemmeno in alpha, Silverlight richiederà l'installazione del .NET Framework 3.0 sul PC...
La classe MediaElement di Windows Presentation Foundation mette a disposizione l'evento MediaFailed, al quale possiamo sottoscriverci per gestire tutti i casi in cui il player di WPF non riesca per qualche motivo a renderizzare il contenuto impostato dal source, sia esso video ed audio. Questa sera, mentre il mio amico Fabio guidava, io ero di fianco a lui con il notebook aperto e ho buttato giù due linee di XAML. Eccole qua: 1 <StackPanel Orientation="Vertical">
2
3 ...
Esercizio. Aprire il vostro browser preferito, raggiungete www.google.com e nella casella di ricerca inserite il testo seguente: site:blog.vivendobyte.net marco eraser
Con questa stringa di ricerca ricercate all'interno del mio blog tutti i post in cui compaiono le parole marco ed eraser. Google vi restituisce 4 collegamenti. Osservate i primi due.
I primi due collegamenti puntano a due URL diversi, ma il titolo del post è lo stesso. Due post con lo stesso nome. Il primo è stato scritto il 22 Novembre, l'altro il 27 Novembre. Riuscite a raggiungere il post più vecchio (il secondo in elenco, quello del...
Uao, che titolo altisonante che ho tirato fuori dal cilindro questo pomeriggio. Vi illustro lo scenario. Immaginatevi un piccola applicazione mobile (Pocket PC o Windows Mobile, non importa) composta essenzialmente da 5 form diverse: Form1, Form2, Form3, Form4 e, sorpresa, Form5. L'applicazione parte mostrando Form1. Su ciascuna form ci sono due pulsanti - Next e Previous - per poter navigare avanti ed indietro da una forma all'altra. Gli stati possibili all'interno dell'applicazione sono i seguenti, con le varie possibilità di navigazione... Partenza=Form1, Indietro=Form1, Avanti=Form2 Partenza=Form2, Indietro=Form1, Avanti=Form3 ...
Probabilmente chi di voi sviluppa su Windows Mobile 5 o 6 può risolvere questo tipo di problema in modo diverso, magari con il meccanismo State and Notification Broker di cui ha parlato Mighell sull'ultimo numero di IoProgrammo. Ma con Pocket PC 2003 certe cose non sono possibili. Il mio problema era questo (parlo al passato perchè ormai l'ho risolto): la mattina, quando riaccendevo il palmare dopo averlo spento la sera prima, la mia applicazione era ancora aperta, ma Windows si metteva in primo piano, facendo di fatto scomparire l'applicazione. Nel caso in cui si voglia creare un'applicazione blindata, questo...
Ho apportato alcune divertenti modifiche al mio plug-in per Windows Live Writer per inserire i technorati tags da associare a ciascun post. Vi riporto un vecchio screenshot del plug-in, graficamente è rimasto lo stesso, per cui rende l'idea: Il mio plug-in utilizza una cache locale dei tags salvata in C:\Documents and Settings\<username>\Dati applicazioni\VivendoByte Technorati Tags. La cache in questione è un normalissimo file XML, che viene deserializzato/serializzato ogni volta, e che serve per popolare la ListBox che vedete nella parte sinistra della form che vedete qui sopra. Questo ha principalmente lo scopo di evitare di inserire...
Chi di voi legge il Muro di UGIdotNET le saprà già, quindi potete saltare tranquillamente questo post. Visual Studio 2008 ed il .NET Framework 3.5 usciranno entro fine mese. Questa data di uscita è valida per tutti gli MSDN Subscriber (compreso me), mentre l'uscita al pubblico vera e propria è prevista per l'anno prossimo, a gennaio/febbraio. La seconda novità è che gli sviluppatori di Microsoft Italia hanno aperto un nuovo blog, MSDN Italia. Lo scopo è quello di fornire informazioni a tutti gli sviluppatori ed architetti del nostro piccolo mondo IT italiano. Non vi resta che sottoscriverlo. ...
Il buon amico Marco Minerva ci informa che Microsoft ha rilasciato la versione definitiva delle guidelines da seguire per sviluppare applicazioni sotto Windows Vista. Sicuramente interessante, perchè si parla di come sfruttare WPF per aderire a queste convenzioni, di come disegnare l'interfaccia utente, quali font utilizzare, etc. etc. Secondo me è utilissimo, almeno per me, nel senso che la maggior parte delle volte rimango bloccato su come disegnare un'interfaccia, ma non dal punto di vista tecnico, quando dal punto di vista estetico e funzionale. Anni fa lavoravo con un grafico che mi disegnava le interfacce, poi io le realizzavo fisicamente...
Qualche giorno fa ho proposto sul mio blog l'implementazione di due interfacce diverse da utilizzare con WCF. La prima implementazione di IFatturazione espone due metodi che ritornano l'XML che rappresentano i tipi: [ServiceContract()]
public interface IFatturazione
{
[OperationContract]
string GetXmlArticolo(string Codice);
[OperationContract]
string GetXmlCliente(string Codice);
}
Il primo GetXmlArticolo prende in input il codice dell'articolo...
Senza scendere nei dettagli di WCF, è chiaro come client e server comunichino fra loro attraverso un'interfaccia. Supponiamo di aver definito un'interfaccia IFatturazione che espone i seguenti membri pubblici: [ServiceContract()]
public interface IFatturazione
{
[OperationContract]
int GetImportoFattura(string denominazione);
[OperationContract]
string GetXmlArticolo(string Codice);
[OperationContract]
string...
Vi ho già parlato altre volte (forse troppe) del mio piccolo RapportinoMaker. Eppure, vi dirò, nella sua semplicità mi permette di esplorare, disegnare e sfruttare componenti che altrimenti non avrei mai visto. Vi faccio un piccolo riassunto perchè ci tengo. RapportinoMaker è un software che gira dalla console di Windows. Accetta al massimo due argomenti: il mese e l'anno di cui si vuole generare il rapportino. Quindi, per esempio, possiamo lanciarlo con una riga simile a questa: Dopo aver premuto Invio, RapportinoMaker apre il database di Outlook, preleva tutti gli appuntamenti del mese e dell'anno...
In questi giorni ho sfogliato e letto alcuni degli articoli di IoProgrammo. Vi vorrei anche parlare dell'articolo sulla programmazione managed del buon Mighell, ma non ho ancora avuto il tempo di leggerlo e pensarlo con calma. Una cosa però è certa: sull'ultimo numero ci sono due svarioni che lasciano a bocca aperta.
A pagina 33 c'è un articolo su PHP 5.0 che illustra le nuove features sulla OOP, quindi ereditarietà degli oggetti, polimorfismo e così via. Il mio vecchio sito www.igordamiani.it, che adesso punta direttamente a www.vivendobyte.net era completamente sviluppato in PHP, e quindi ogni tanto mi fa piacere leggere qualcosa...
Ebbene sì, proprio io che con ASP.Net, web-services, IIS e compagnia bella non c'entro proprio nulla, ho passato il weekend a studiare WCF e a trovare un'applicazione pratica. Non è che non avevo nulla da fare, anzi: WCF mi serve per RapportinoMaker in modi che per adesso è troppo lungo spiegarvi, ma lo farò! La molla è stato il libro in allegato ad IoProgrammo, di cui ho già parlato qua. Venerdì ho fatto qualche viaggio in metropolitana di troppo, e ho avuto modo di leggere i primi capitoli di volata, e l'argomento mi ha appassionato. Ieri, sebbene fosse sabato, sono...
Se avete intenzione di utilizzare Windows Communication Foundation nel prossimo futuro e se non se sapete un'acca come me, vi consiglio di acquistare il nuovo numero di IoProgrammo, quello di Novembre, che ho visto in edicola stamattina: in allegato c'è un bel libro del nostro amico Fabio Cozzolino proprio su WCF. Fabio, lo ricordo, fa parte di DotNetSide, la community pugliese .NET che si dà sempre un bel daffare per divulgare le tecnologie .NET in lungo ed in largo, da WPF a WCF fino a WF. IoProgrammo con in allegato il libro di Fabio costa 9,90 Euro, una spesa modica...
Questa è una notizia da leggere con calma e da digerire per bene. Fate così: sedetevi, prendete una lattina della vostra bevanda preferita - io ho optato per un bel Estathè - chiudete gli occhi, fate un bel respiro e riapriteli. Leggete di seguito. La notizia è che con l'uscita di Visual Studio 2008 verrà rilasciato il codice sorgente del .NET Framework 3.5!!! Il titolo del post originale recita "Releasing the Source Code for the .NET Framework Libraries", e potete leggerlo qui. Ah, ferma: è scritto da un certo Scott Guthrie, che non è di certo l'ultimo arrivato. Non verrà...