giovedì 28 gennaio 2010
#
Segnalo agli interessati che il 25 e 26 Febbraio terrò a Bologna un’altra edizione del corso sul Test Driven Development. Il corso avrà un taglio molto pratico cosi da permettere ai partecipanti di sporcarsi le mani con i test e con i mock objects.
Maggiori informazioni qui: http://www.overneteducation.it/F_Corsi_detail.aspx?Cod_Corso=SQM006 Oppure contattatemi direttamente per saperne di più.
giovedì 14 gennaio 2010
#
Una delle “mancanze” che alcuni lamentano in WPF è l’assenza dell’ereditarietà visuale delle Window e dei UserControl.
In realtà (come per le griglie :-)) non è un problema, esistono semplici meccanismi che permettono di ottenere lo stesso risultato.
Una delle tecniche è quella di utilizzare un template per stilare una BaseWindow o un BaseControl:
Supponiamo di avere una BaseView (Window) base dalla quale facciamo derivare tutte le finestre della nostra applicazione:
Definiremo una classe BaseView che eredita da Window e avrà tutti i metodi/propriertà necessarie:
public class BaseView : Window
{
// ...
}
Questa è solo una classe e non ha parte visuale.
La parte “visuale” la disegno con Expression Blend come stile della BaseView e vado a ridefinire il ControlTemplate mettendo al suo interno tutti i controlli che voglio vedere in tutte le finestre che ereditano:
<Style TargetType="{x:Type Common:BaseView}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Common:BaseView}">
<StacckPanel>
<!-- Altri controlli: toolbar? -->
<ContentPresenter/>
<!-- Altri controlli: footer? -->
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Questo stile viene poi applicato a tutte i controlli di tipo BaseView che avranno quindi tutti un aspetto comune.
Quindi per sfruttare il template è sufficiente che le finestre dell'applicazione ereditino da BaseView:
<MyApplication:BaseView>
....
</MyApplication:BaseView>
UPDATE: ho messo un progetto d’esempio qui.
mercoledì 6 gennaio 2010
#
Durante questo periodo di ferie ho potuto affrontare alcuni temi presenti nella mia personale lista dei “TO-DO”.
Il rumore intorno ai Database Documentali e al movimento #NoSQL sta crescendo grazie anche al fatto che grandi nomi (Facebook, Amazon, SourceForge e altri) li usano da tempo in produzione.
Cosi ho scaricato gli eseguibili di MongoDB e il relativo driver C# ed ho scritto un primo esempio di utilizzo.
Il server è un’applicazione console (che può essere installata come servizio) che rimane in ascolto su una certa porta (configurabile):
D:\mongodb-win32-x86_64-1.2.1\bin>mongod.exe --dbpath ./data
Tue Jan 05 19:16:20 Mongo DB : starting : pid = 0 port = 27017 dbpath = ./data master = 0 slave = 0 64-bit
Tue Jan 05 19:16:20 db version v1.2.1, pdfile version 4.5
Tue Jan 05 19:16:20 git version: 45992de574979343f34fdfe96b069d5d1eff0182
Tue Jan 05 19:16:20 sys info: windows (6, 0, 6002, 2, 'Service Pack 2') BOOST_LIB_VERSION=1_39
Tue Jan 05 19:16:20 waiting for connections on port 27017
Cosi il server è avviato e in ascolto per eventuali comandi. Non ho creato nessun database per ora.
Da visual studio ho creato un mini progetto per fare alcuni esperimenti:
Mongo mongo = new Mongo();
mongo.Connect();
Database db = mongo.getDB("MyTestDb");
IMongoCollection posts = db.GetCollection("Persons");
Document doc = new Document();
doc["Name"] = "Emanele";
doc["Surname"] = "DelBono";
posts.Insert(doc);
Document example = new Document();
example["Name"] = "Emanuele";
ICursor cursor = posts.Find(example);
foreach (Document document in cursor.Documents)
{
Console.WriteLine(document.ToString());
}
Nel primo blocco creo un database “MyDbTest” e seleziono la collection su cui lavorare (“Persons”).
Poi creo un nuovo documento. La classe Document, messa a disposizione dal driver C#, rappresenta un “chunk” di informazione da salvare nel database. Alla base è un Dictionary in cui key, value raprresentano nome della proprietà e valore ma può contenere qualsiasi tipo di gerarchia complessa. Internamente i dati sono memorizzati in JSON (come molti database documentali).
Il documento creato viene salvato nel database usando l’istruzione insert.
Nell’ultimo blocco vado a recuperare l’informazione. Nello specifico costruisco un documento che fa da “esempio” per la ricerca e il metodo Find estrae tutti i documenti che hanno la chiave Name = “Emanuele”.
Insomma, il succo della semplicità, più di cosi non si può pretendere. Le performance sembrano buone, ci sono altri metodi per estrapolare le informazioni in modo più mirato, supporta lo storage per grossi documenti (video, foto, ecc…).
Sicuramente bisogna lavorarci un po’ per capirne i limiti e apprezzarne ancora di più i pregi, ma l’inizio è fantastico (e sta, ripeto, nella semplicità) e in applicazioni non troppo complesse dal punto di vista dei dati sembra essere l’ottimo: pensate ad un blog engine in cui potete salvare un intero post (con testo, foto, commenti, tags, ecc…) con una semplice insert di un Documento.
Sul sito di MongoDB trovate molta documentazione.
Nel frattempo i miei esperimenti continueranno (spero). Sto provando a scrivere un mapper che permette di trasformare oggetti di dominio in Document cosi da evitare il mapping manuale. Dovrebbe essere abbastanza semplice prendendo spunto dai vari serializzatori e deserializzatori JSON.
sabato 28 novembre 2009
#
Lunedi scorso alle ore 10.00 AM abbiamo ufficialmente aperto le iscrizioni tramite il sito http://conference.ugialt.net e i 130 posti disponibili si sono esauriti in meno di 9 ore. Il record va a Andrea Balducci che si è iscritto alle ore 10:00:16 e si aggiudica il premio per il partecipante più agile!
I posti sono esauriti, adesso siamo a 165 iscritti, ma consiglio a tutti coloro che vorrebbero partecipare di mettersi comunque in lista, sicuramente alcuni posti si libereranno e la coda si accorcierà.
Buona anche la raccolta donazioni, quest’anno avremo alcuni speaker stranieri e stiamo raccogliendo un po’ di soldi per riuscire a ripagarli i costi di viaggio, quindi se siete iscritti e non l’avete ancora fatto potete donare qualcosa tramite paypal cliccando qui.
La cosa interessante è tutti gli iscritti lo hanno fatto sulla fiducia. Infatti solo questa settimana abbiamo iniziato a pubblicare stralci di agenda ma la raccolta delle sessioni non è ancora terminata.
Potete trovare l’elenco delle sessioni fin’ora proposte qui. Come vedrete ce n’è per tutti i gusti: Monotouch, Distributed Version Control, Database Documentali e Relazionali, BDD, Jquery, REST, DDD, HTML5, Validazione e altri ancora.
Quindi le premesse ci sono tutte, nelle prossime settimane definiremo l’agenda definitiva e dopo Natale ci dedicheremo alla logistica, ai libri e alle licenze omaggio che stiamo raccogliendo dagli sponsors.
domenica 15 novembre 2009
#
In un mio post di qualche giorno fa ho scritto di come la pigrizia dei programmatori porta spesso ad un uso spropositato e inopportuno della “mitica” DataGrid.
Volevo riportare alcuni esempi per dimostrare che si può vivere felici anche senza usare la datagrid, ma prima voglio fare alcune premesse. La DataGrid spesso arriva perchè qualcuno ha pensato male alla gestione delle informazioni:
1) Se a seguito di una ricerca o all’apertura di una pagina/form visualizzate una griglia con n-mila righe in decine di pagine avete un problema: visualizzare più di 20-30 record e visualizzarne 1000 è la stessa cosa: l’utente non sta trovando quello che cerca. Se una ricerca ritorna più di 20 record sarebbe meglio consigliare all’utente di cambiare le chiavi di ricerca: chi è mai arrivato a pagina 3 della ricerca di google? Se non trovo qualcosa in pagina 1 (o al massimo in pagina 2) rifaccio la ricerca. Impiego meno tempo!
2) Se visualizzare più di 5 campi avete un problema: che senso ha visulizzare subito tutte le informazioni di una persona in una griglia di 15 colonne? Date la possibilità all’utente di identificare la persona cercata (nome e cognome) e usate un modo alternativo per visualizzare i dettagli solo quando e se serve.
3) Se fate l’editing in griglia avete un problema: l’editing in-line è scomodo per l’utente, non permette di visualizzare agevolmente tutte le informazioni, lascia poco spazio per gli evenutali messaggi d’errore ed esteticamente è brutto.
Detto ciò, ecco alcuni esempi, trovati in rete, per mostrare un elenco di record che non sia una griglia :

domenica 22 novembre 2009
#
Venerdi scorso a Bologna si è tenuto il sesto Agile Day una conferenza nazionale dedicata alle tematiche della progettazione e sviluppo agile delle applicazioni.
Ritengo senza dubbio che sia la migliore conferenza in Italia a cui uno sviluppatore/manager/cliente possa partecipare. A differenza delle altre è una giornata in cui impari cose che non troverai mai in un libro o in blog, è una conferenza da cui torni pieno di idee e di spunti per migliorare il tuo modo di lavorare.
La caratteristica più interessante è la possibilità di organizzare openspace al volo, e così fuori programma nel pomeriggio Alberto Brandolini ha tenuto una sessione dedicata al DDD affrontandolo con un approccio molto diverso da come siamo abituati parlando di contesti e discutendo casi reali.
Molto interessante anche la sessione di apertura di Peter Steven che ha spiegato come l’unico modo per affrontare con successo un progetto fixed price sia quello di farlo in modo agile (sul suo blog trovate le slide della sessione).
Poi tutte le chiacchierate con i tanti amici che hanno partecipato!
Per finire: fantastica la cena Bolognese doc.
PS. Per chi volesse demo e slide della sessione mia e di Alessandro sulla Continuous Integration li può scaricare da qui.
Technorati Tags:
Italian Agile Day
venerdì 13 novembre 2009
#
In questo periodo molte aziende stanno migrando o scrivendo nuove applicazioni usando WPF.
Questo framework ha il considerevole vantaggio di lasciare la massima libertà per poter realizzare applicazioni con un appeal e un modello di interazione davvero alternativi ai vecchi modelli di windowsforms e sicuramente migliori per l’utente finale.
E cosa succede?
Appena aperta la toolbox mi chiedono: “Dove la DataGrid?”
Ma è possibile che l’unico modo di visualizzare le informazioni su uno schermo sia di metterle in una griglia?
Ho ormai alle spalle parecchie applicazioni WPF e solo in un caso ho usato la DataGrid perchè il contesto lo richiedeva, ma in tutti gli altri casi ho usato ListBox, ItemsControls, StackPanel, ecc…applicando un template che mettesse in risalto le informazioni importanti e lasciasse all’utente la possibilità di entrare nel dettaglio.
Quindi,visto che possiamo disegnare qualsiasi controllo, visto che abbiamo in mano un pennello e una tavolozza di strumenti, vi prego non disegnate una DataGrid e pensate ai vostri clienti :-)
* Non è stata usata nessuna datagrid per generare questo post
** Si ringrazia Igor Damiani per la concessione del titolo.
Technorati Tags:
DataGrid,
WPF,
Rant
sabato 7 novembre 2009
#
Mi riaggancio al post di Simone sulle differenze di investimenti tra Italia e Europa, segnalando questo video preso da Current TV: http://current.com/items/91311404_file-1-i-padroni-di-internet.htm
Nella seconda parte del video si parla della questione digital divide da un’altra prospettiva alla quale non avevo mai pensato. Nel video non si fa riferimento diretto all’Italia, ma si racconta di come in molti paesi non democratici la connettività sia volutamente messa in secondo piano per evitare che la gente trovi canali alternativi per avere informazione (quindi cultura).
Pensiamoci un attimo: perchè mai l’attuale governo italiano dovrebbe investire sull’accesso ad Internet per tutti? Abbiamo già bellissime televisioni (ora anche digitali!!) e giornali, molto meglio costruire un ponte!
:-|
sabato 17 ottobre 2009
#
Il 16 e 17 Novembre a Milano presso Overnet terrò il corso sul Test Driven Development già tenuto la scorsa primavera a Bologna.
Il corso inizia con l’introduzione dello unit testing e degli strumenti necessari (xUnit, Moq), passa dal refactoring e arriva al design test driven.
In questa occasione ci saranno alcune novità dovute all’aggiornamento alla versione 3.0 del linguaggio C#.
Maggiori informazioni e iscrizioni qui: http://www.overneteducation.it/F_Corsi_Detail.aspx?Cod_Corso=SQM006
Technorati Tags:
Corsi,
TDD
venerdì 16 ottobre 2009
#
In questi giorni sono stato a Berlino per gli "Agile Testing Days" una conferenza dedicata al tema del testing delle applicazioni. Tra gli speaker nomi eccellenti come Mary e Tom Poppendieck, Tom Gilb, Lisa Crispin, Emanuele DelBono (:-D), Gojko Adzic e altri.
I partecipanti vanivano da varie parti del mondo: norvegia, germania, francia, svezia, corea, australia, USA, ecc.. (nessun italiano a parte noi e uno degli organizzatori) e lavorano in grandi nomi del nostro mercato: Nokia, Siemens, Samsung, Motorola ecc...
E' stato molto interessante conoscere queste persone e parlare con loro di processi, agilità, testing ecc...ma la cosa che più mi ha stupito è che per la maggior parte di loro è normale parlare di agilità, di user stories, di scrum, di TDD ecc...tutti applicano queste pratiche da tempo nello stesso modo in cui noi mangiamo la pizza. Ciò vuol dire che mentre da noi è cool usare le user story qui è da lamer non usarle e la gente si stupisce se gli diciamo che da noi i team non scrivono i test per le loro applicazioni.
Tutto questo per ribadire che sarebbe ora che anche in Italia queste pratiche venissero applicate senza scusanti del tipo "bello ma da noi non funziona", altrimenti rischiamo di rimanere piccoli artigiani di provincia in un mondo che sta davvero applicando i principi di industrializzazione e di ingegneria al software.
Non si tratta di un divario tecnologico ma di mentalità e metodologico, cosi la smetteremo di fare conferenze in cui si spiega come introdurre un processo agile in azienda per evitare l’ennesimo fallimento ma faremo conferenze per capire come migliorare il nostro processo di sviluppo per renderlo ancora più efficace.
Technorati Tags:
AgileTD,
rant