giovedì 28 gennaio 2010 #

Corso TDD a Bologna

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ù.

posted @ giovedì 28 gennaio 2010 12.12 | Feedback (2)

giovedì 14 gennaio 2010 #

WPF ed ereditarietà visuale

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.

Technorati Tags: ,,

posted @ giovedì 14 gennaio 2010 19.34 | Feedback (13)

mercoledì 6 gennaio 2010 #

Esperimenti con MongoDb

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.

posted @ mercoledì 6 gennaio 2010 11.57 | Feedback (3)

sabato 28 novembre 2009 #

V UgiALT.net Conference: a che punto siamo

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.

 

Technorati Tags: ,

posted @ sabato 28 novembre 2009 17.51 | Feedback (8)

domenica 15 novembre 2009 #

Avoid DataGrid (Seconda puntata)

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 :

shot_000015

shot_000016

shot_000017

shot_000018

 

 

 

shot_000019   shot_000020

Capture3

Technorati Tags: ,,

posted @ venerdì 27 novembre 2009 0.00 | Feedback (7)

domenica 22 novembre 2009 #

Agile Day 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:

posted @ domenica 22 novembre 2009 19.02 | Feedback (3)

venerdì 13 novembre 2009 #

Avoid DataGrid* [OT del Venerdi**]

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: ,,

posted @ venerdì 13 novembre 2009 13.06 | Feedback (29)

sabato 7 novembre 2009 #

Internet in Italia (reprise)

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!

 :-|

Technorati Tags: ,,

posted @ sabato 7 novembre 2009 10.03 | Feedback (11)

sabato 17 ottobre 2009 #

Nuova edizione del corso sul TDD

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: ,

posted @ sabato 17 ottobre 2009 15.25 | Feedback (4)

venerdì 16 ottobre 2009 #

Back from Berlin AgileTestingDays

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: ,

posted @ venerdì 16 ottobre 2009 15.13 | Feedback (12)