Marco Russo

.NET, Business Intelligence e dintorni
Albero genealogico dei linguaggi

Per un motivo che non saprei nemmeno spiegare, mi sono appena imbattuto in un albero genealogico dei linguaggi piuttosto aggiornato. Pur non essendo completo, è interessante vedere come nel tempo percorsi apparentemente incompatibili abbiano cominciato a "fondersi" (programmazione funzionale e a oggetti).

Per avere altri link si può andare alla pagina che contiene il diagramma che ho visto, con molti link a diagrammi analoghi. Ripassare (o studiare) un po' di storia non fa mai male e aiuta a vedere le cose in prospettiva diversa, perché uno ripensa a tutti i linguaggi che ha usato e che magari oggi non saprebbe più usare (lo dico anche a titolo personale!).

Robot e Mesh

Posto non molto tecnico, pur parlando di tecnologia.

Primo argomento, i Robot. Microsoft ha organizzato una competizione chiamata RoboChamps (già solo il sito in Silverlight vale la pena) che consente a chi usa Microsoft Robotics Developer Studio di far esercitare il "suo" robot in un'arena dove l'obiettivo non è distruggere tutto, ma più semplicemente uscire da un labirinto, fare un sistema di guida automatica, passeggiare su Marte e raccogliere dati da mandare sulla Terra, salvare persone intrappolate dopo un terremoto e vincere una gara di Sumo tra robot. Certo, alla fine il torneo è una competizione che porterà il codice dal simulatore al mondo reale (robot veri!) e il gran finale con robot reali sarà a PDC 2008. Ah, già, quest'anno a fine ottobre ci sarà la PDC, la conferenza dove vengono di solito annunciate le novità più importanti dei prossimi anni per gli sviluppatori che lavorano con tecnologie Microsoft. La competizione servirà a indorare la pillola?

Leggendo alcuni articoli (tecnici e non) su Mesh ho percepito l'idea dei giornalisti che Microsoft stava "finalmente" puntando a un modello non più basato su Windows. In realtà, sarebbe più corretto dire "non più basato solo sul desktop". Per capire la differenza date un'occhiata a questa demo che spiega meglio di molte parole cosa si può fare con Mesh. Purtroppo la beta non è ancora disponibile a tutti, comunque l'idea mi sembra molto più evolutiva (dal punto di vista di Windows) che non rivoluzionaria. Chiaramente è ancora presto per fare commenti e predire come sarà adottata questa tecnologia, però in un certo senso è come se piano piano si realizzassero cose che si erano immaginate già parecchi anni fa (in particolare da quando si cominciò a parlare di Web Services). Per inciso, guardando questa demo ho scoperto Channel 10: una manna se volete perdervi in demo e preview varie... come questo post su Microsoft Surface che punta a una prova reale (non una demo fatta su un palco).

Cosa dicono di LINQ

La settimana scorsa ho avuto l'opportunità di presentare alla European PASS Conference 2008 il mio lavoro sulle relazioni molti-a-molti tra dimensioni in Analysis Services e la possibilità di usarle per scopi "non convenzionali" nella modellazione multidimensionale. Chiaramente, in una conferenza su SQL Server, questo non era l'argomento più "caldo" e ciò di cui mi sono trovato a parlare spesso con partecipanti e speaker riguardava direttamente o indirettamente LINQ.

Purtroppo, alcune delle preoccupazioni che io e Paolo condividevamo prima di scrivere due libri sull'argomento si stanno rivelando reali. Due "problemi" vengono percepiti da chi vede LINQ per la prima volta (relativamente a persone che hanno a fare con i database, questo va chiarito). Primo, LINQ viene associato a LINQ to SQL. Secondo, "se il codice SQL non lo posso controllare, che fine fanno le prestazioni"?

Devo dirlo, comincio a preoccuparmi per il fatto che, se questa sarà la percezione di LINQ, essa creerà problemi nella diffusione e soprattutto nel corretto uso di LINQ. Per cominciare, non credo che LINQ to SQL sia l'implementazione più importante di LINQ. Ciò che ritengo importante è l'approccio a un modello di programmazione più dichiarativa che contestualmente semplifica il modo con cui i dati vengono trattati all'interno di un programma. Se ci si concentra su una singola implementazione significa che si trascura l'aspetto pervasivo di LINQ rispetto alle diverse fonti dati che si possono gestire. Dal mio punto di vista, LINQ to Objects è l'implementazione più importante di LINQ - il rischio è che la si consideri invece un accessorio privo di reale importanza, mentre è da lì che si dovrebbe partire.

Per quanto riguarda l'aspetto prestazionale, è evidente che ciò dipende da molteplici fattori ma ancora una volta c'è un errore di percezione. Il fatto che esista uno strumento non significa che lo si debba usare. Se ho un'automobile in garage, posso anche prenderla per andare a comprare il giornale all'edicola distante 300 metri, ma ci sono altri mezzi di trasporto più efficienti (anche in termini di tempo, oltre che di costi e consumi). Assumere che a priori si debba sempre usare lo stesso strumento indipendentemente dal lavoro che va effettuato è un errore. Molte applicazioni possono trarre vantaggio da LINQ to SQL. In molte altre, non avrebbe senso utilizzarlo. E' più ragionevole parlare di confronto tra LINQ to SQL e prodotti di ORM come NHibernate, perché pur essendo implementazioni molto diverse tra loro, per lo meno il terreno di confronto è simile.

Ragionerò ancora molto su queste cose preparando le sessioni per DevCon 2008. Se qualcuno vuole contribuire alla discussione, i commenti sono aperti.

Visual C++ 2008 Feature Pack (RTM)

Segnalo che è stata rilasciato il Visual C++ 2008 Feature Pack, della cui beta avevo parlato a gennaio. Un post contenente alcuni link interessanti per scoprire cosa c'è a disposizione è questo di Jason Zander.

Se qualcuno mantiene ancora applicazioni in MFC, sarei felice di ricevere feedback su questa release (potete usare i commenti al post).

LINQPad, un tool per imparare LINQ (e non solo)

Ho da poco cominciato a usare LINQPad e devo dire che è un tool molto utile. Si può usare per provare query LINQ in maniera interattiva. Se si usa LINQ to SQL, LINQPad genera automaticamente la classe DataContext necessaria e fornise un ambiente di esecuzione delle proprie query.

Al momento si sente la mancanza di qualcosa simile a IntelliSense, ma una prossima versione di LINQPad dovrebbe includere una funzione di AutoComplete. Consiglio di provare questo tool a tutti quelli che vogliono studiare LINQ e a quelli che, pur conoscendolo, vogliono avere un ambiente in cui sia molto semplice sviluppare e provare le proprie query LINQ.

SQL Server Data Services

Una delle novità annunciate al MIX 08 è SQL Server Data Services (SSDS). Si tratta di un servizio analogo ad Amazon S3 e Amazon SimpleDB.

Il primo approccio di chi per lavoro usa database relazionali e mastica SQL a colazione, probabilmente è riduttivo. Per quattro operazioni che fa questo servizio, perché dovrei rinunciare a tutta la potenza che ho a disposizione nel mio database?

Certo, questo ragionamento ha basi fondate. Ma se pensiamo a scenari nuovi, il ragionamento è diverso. Per esempio, esistono situazioni in cui avere la gestione di un database o dover accedere a un servizio appositamente costruito (disponibile 24x7) per salvare pochi dati di un'applicazione, rende poco significativo avere o meno un database relazionale dedicato con possibilità di amministrare ogni dettaglio del database stesso. Probabilmente esistono miriadi di applicazioni (lo smar client parzialmente connesso è il primo esempio che mi viene in mente) che possono trarre vantaggio da questo tipo di servizi.

Siamo solo agli inizi, non è detto che lo scenario enterprise debba essere quello che userà prima questi servizi, non è chiaro cosa succederà nel futuro. Un aspetto interessante è che l'informatica continua a oscillare tra modelli distribuiti e centralizzati, rimbalzando da una parte all'altra un po' per moda e un po' per effettiva necessità. Come lo classifichiamo un database distribuito su migliaia di nodi a basso costo che però dall'esterno compare come un'unica entità?

Comunque, Amazon ha un bel vantaggio, Microsoft rincorre, ma probabilmente questo mercato è ancora talmente agli albori che è un po' presto per tirare le somme. L'unica certezza (per Microsoft) è di mettere LINQ sopra a qualsiasi servizio di accesso ai dati, e SSDS non fa eccezione.

DreamSpark

Microsoft ha annunciato un'iniziativa chiamata DreamSpark, che sostanzialmente consente agli studenti di utilizzare gratuitamente alcuni prodotti Microsoft per lo sviluppo di applicazioni.

Purtroppo l'iniziativa non è ancora disponibile in Italia, ma dovrebbe esserlo a breve.

Tra i prodotti è incluso SQL Server 2005 Developer Edition, che consente di provare anche le funzionalità di Analysis Services e Integration Services che non sono comprese nella versione Express (che è sempre stata gratuita). Se uno studente potrebbe non avere ancora le motivazioni (se non le conoscenze e soprattutto i dati...) per sviluppare un sistema di analisi multidimensionale... molto probabilmente potrebbe avere dati da analizzare con gli algoritmi di Data Mining di SQL Server 2005 (e tra poco 2008). I dati possono riguardare i propri hobby o le proprie passioni (una per tutte: correlazione tra vittorie di una squadra di calcio e la sua formazione...) e magari si trovano e/o recuperano dalla rete gratuitamente.

Dico queste cose perché oggi come oggi... è impossibile trovare qualcuno con le conoscenze adatte (analisi dei dati, data mining, capacità analitica, basi statistiche e conoscenze tecnologiche adeguate). Il mercato non è ancora maturo, ma prima o poi lo diventerà e in ogni caso la mancanza cronica di offerta non potrebbe soddisfare alcun tipo di domanda (in realtà esistono aziende che si occupano di prodotti di data mining, ma non esiste un'expertise diffusa sui prodotti Microsoft). Insomma, se siete studenti, quando DreamSpark sarà disponibile in Italia, almeno uno sguardo per vedere se è roba che può interessarvi io lo darei. Suggerisco per cominciare l'uso di Excel 2007 con Data Mining Add-In...

Programmatori Visual Basic 6: Ultima Chiamata

Pochi giorni fa in una chiacchierata ho fatto alcune considerazioni che mi hanno portato a scrivere questo post che qualcuno potrebbe considerare provocatorio, ma dal mio punto di vista non lo è affatto.

Il messaggio è destinato a chi ancora oggi sceglie come ambiente di sviluppo Visual Basic 6.

Dieci anni fa uscì sul mercato la versione finale di Visual Basic, la numero 6. Fu anche l'ultima versione di un ambiente di sviluppo che, con .NET, avrebbe visto un rinnovamento completo (anche se non definitivo). In realtà, per molti Visual Basic 6 fu semplicemente uno dei tanti miglioramenti seguiti a Visual Basic 3. Molti usarono Visual Basic 6 esattamente come usavano Visual Basic 3. Altri ne apprezzarono i miglioramenti, qualcuno ne scoprì alcune capacità solo alcuni anni dopo.

Nel 2000 arrivò .NET, o per lo meno fu annunciato, visto che la prima versione fu rilasciata nel 2002. La migrazione non fu cosa semplice, e infatti molti si rifiutarono di passare al nuovo ambiente. In questi dieci anni ho visto molte applicazioni scritte in Visual Basic 6 morire di morte naturale e passare a nuova vita in .NET, in C# o Visual Basic (o in qualunque altro linguaggio .NET, è poco importante). Ma, e questo è il motivo per cui scrivo, in questi dieci anni (e in particolare negli ultimi 5) ho anche visto nuovi progetti creati in Visual Basic 6. Sempre meno, ma più di quanti sarebbe sensato (per me) vedere.

Tra pochi giorni ci sarà il lancio di Visual Studio 2008. Visual Basic ha perso il suffisso .NET, ma solo perché ormai si dà per scontato che sia tale. Nonostante gli appelli, nessuna nuova versione retro-compatibile con Visual Basic 6 è stata rilasciata da Microsoft. Nessuna speranza, nonostante gli appelli, che ciò possa avvenire in futuro.

Se con .NET 1.0 e Windows Forms un programma scritto in Visual Basic 6 poteva non sfigurare, oggi la situazione si fa complicata. Troppe tecnologie sono diventate inaccessibili a chi è rimasto ancorato al passato. Windows Presentation Foundation (WPF) è l'elemento più importante. Siamo solo agli inizi di quello che sarà un vero cambiamento nell'interfaccia utente Windows che siamo abituati a usare quotidianamente, ma chi ostinatamente non accetta il nuovo oggi è esattamente nella stessa posizione di chi, conoscendo soltanto il Cobol, con l'avvento di Windows pretendeva di continuare a programmare in Cobol in un ambiente a finestre che richiedeva un modello di programmazione orientato agli eventi.

WPF è solo lo strato più visibile di un grande cambiamento che investe (e investirà) non solo l'intera infrastruttura, ma anche i paradigmi di programmazione oggi più diffusi. Pensate a un modello di programmazione più dichiarativo che iterativo, a ragionare per servizi anziché per componenti, a immaginare una reale componentizzazione nel processo di realizzazione del software, a servizi di infrastruttura che non sono usati esternamente al bisogno, ma che diventano la struttura portante di un sistema informativo in cui l'applicazione custom non è più il collante di oggetti diversi ma essa stessa il risultato di un'architettura dove la personalizzazione avviene su alcuni componenti "annegati" in un ambiente eterogeneo.

Siete spaventati? Non dovreste. Quando avete iniziato a programmare, la novità non vi spaventava. Perché deve farlo oggi?

Comunque la pensiate, signori programmatori Visual Basic 6, per voi questa è l'ultima chiamata.

La distanza che vi separa dai moderni ambienti di sviluppo è grande, ma tutto sommato potete ancora riconoscere qualcosa di familiare negli strumenti che avete oggi a disposizione. Domani, probabilmente, questa distanza sarà definitivamente incolmabile.

Pensateci. Provateci.

Altrimenti, tra poco, dovrete appendere la tastiera al chiodo.

Sessione su LINQ al lancio di Visual Studio 2008

Venerdì 29 febbraio io e Paolo faremo una sessione su LINQ in occasione del lancio di Visual Studio 2008 a Milano. La nostra sessione sarà alle 9.30 e confesso che mi sembra impossibile riuscire in un'ora a fare un riassunto efficace: in questi giorni stiamo completando il libro Programming Microsoft LINQ, che uscirà a maggio in inglese e probabilmente verrà anche tradotto in italiano (ma non sappiamo ancora quando). Chi vuole saperne di più potrà venire alla prossima DevCon... ma... ancora qualche giorno e potremo darvi tutti i dettagli.

Chi non vuole aspettare può leggere (è gratis) il libro precedente, Introducing Microsoft LINQ, che è basato sulla Beta 1 e quindi un po' obsoleto rispetto ad alcune sintassi e soprattutto per certi nomi di tipi e metodi. Tuttavia, è ancora completamente valido per comprendere i concetti di base e avere un primo orientamento. Se qualcuno vorrà farci domande e magari confrontarsi con noi sull'impatto che LINQ ha nelle applicazioni reali, saremo felici di incontrarvi e discuterne insieme. Una mail preventiva può aiutarci a definire un punto di incontro, il momento di fine sessione non è mai il migliore a causa della fretta di smontare dal palco per lasciare il posto alla sessione successiva...

Miglioramenti nella copia dei file in Vista SP1

Il recente Service Pack 1 di Windows Vista offre dei miglioramenti su una delle operazioni fondamentali di un sistema operativo: la copia dei file.

Questa era una notizia nota, ma finalmente (è proprio il caso di dirlo) Mark Russinovich ci offre una spiegazione più tecnica e dettagliata dei cambiamenti introdotti in Windows Vista che in certe situazioni hanno peggiorato le prestazioni (migliorandole in altri contesti - e qua si capisce quali), insieme alla descrizione dei miglioramenti introdotti in Windows Vista SP1 (con qualche compromesso in alcune situazioni).

La lettura è molto interessante perché quello della copia dei file è un meccanismo che è molto cambiato in Windows Vista rispetto alle precedenti versioni di Windows. Ovviamente, quello che è stato fatto in Vista SP1 è presente anche in Windows Server 2008.

Bene, adesso che il SP1 è arrivato, qualche azienda in più comincerà ad adottare Vista. Forse, non avevano tutti i torti ad aspettare...

LINQ to SQL vs. LINQ to Entities

Segnalo questo whitepaper molto introduttivo, Introducing LINQ to Relational Data, che riassume le principali differenze tra LINQ to SQL e LINQ to Entities. Ne consiglio la lettura soprattutto a chi non ha mai provato LINQ to Entities (o entrambi).

Prime applicazioni scritte usando LINQ

Oggi ho visto una piccola applicazione usando LINQ to SQL e LINQ to XML: si tratta di WikiSpider, che colpirà soprattutto per il fatto di avere un'interfaccia utente WPF particolarmente accattivante.

La cosa più interessante, però, è aprire il codice. Un'istruzione come quella che segue, dal mio punto di vista, da sola giustifica l'uso di LINQ.

var pages = from p in linksDoc.Descendants("page")
    select new {
        Title = p.Element("title").Value,
        Id = p.Element("id").Value,
        Touched = p.Element("touched").Value,
        RevisionId = p.Element("revid").Value,
        Links = (from l in p.Descendants("l")
                select l.Value).ToList()
}; 

Il risultato è in realtà una sola pagina (ma in un altro scenario potrebbe essere una lista) con all'interno un elemento che è a sua volta una lista di link. Gli elementi chiave della query sono due: la brevità (e con Visual Basic sarebbe stato ancora più corto, bisogna ammetterlo) e la chiarezza. Se conoscete altre applicazioni "pubbliche" che usano LINQ, sarei grato se me le segnalaste, mi interessa capire che direzione prende l'adozione di LINQ nel mondo reale.

 

Posted: gen 31 2008, 08.06 by marco | with no comments
Filed under:
Come scrivere SELECT ... NOT IN in LINQ

Dopo uno scambio di mail con Sandro che mi ha sollecitato sul tema, ho scritto un post (in inglese) su come realizzare una query LINQ equivalente al costrutto sintattico NOT IN di SQL. In breve, il punto chiave è usare Contains che definisce una query con EXISTS (o NOT EXISTS, come nel nostro caso).

Visual C++ 2008 Feature Pack (beta)

Anche se ormai C# ha preso il posto di C++ come linguaggio di riferimento per chi sviluppa in Windows (almeno in termini volumetrici per applicazioni di una certa complessità), non si può dire che il C++ sia fuori da un percorso di innovazione, anzi! Anche perché, ricordiamolo, la maggior parte dei prodotti di Microsoft sono scritti in C++.

La direzione in cui sta andando il C++, cioè la sua prossima versione di standard, sarà C++0x. Tra le tante, il supporto a lambda expression e lambda functions è particolarmente interessante (quanta strada dal primo C++...).

La beta di Visual C++ 2008 Feature Pack che è disponibile da pochi giorni offre, oltre ad alcune novità per MFC, anche un'implementazione di TR1, una serie di librerie che di fatto estendono le C++ Standard Library.

Algoritmi e strutture dati

Inauguro il 2008 segnalando la libreria DSA (Data Structures and Algorithms) scritta da Granville Barnett: si tratta di una serie di classi per .NET che implementano strutture dati (alberi, double linked list, set, ecc.) e algoritmi come vari tipi di sort, fattoriale, metodi su stringhe, ecc.

La libreria è su CodePlex, quindi gratuita e con tanto di sorgenti. Vengono usati gli extension method di C# 3.0, estendendo così anche la classe String aggiungendo metodi come Reverse, Strip, WordCount e altri. Devo dire che gli extension method sono una delle novità di C# 3.0 più interessanti, soprattutto grazie all'integrazione con IntelliSense che offre la possibilità di vedere tutti i metodi accessibili su un oggetto (con e senza Extension Methods) senza conoscere il nome della classe che li contiene realmente. Certo, bisogna almeno mettere una using...

More Posts Next page »