Il manifesto agile

Nel lontanto 2001, precisamente in Febbraio, in una località sciistica nelle Wasatch mountains dello Utah, 17 guru dello sviluppo software tra i quali personaggi del calibro di Martin Fowler, si incontrarono per studiare nuove e migliori metodologie di sviluppo sotware. Da questo profiquo incontro nacque il famoso “Manifesto for Agile Software Developmentche è stato il primo passo ufficiale verso un nuovo modo di gestire i progetti software. Nella nostra azienda seguiamo più o meno consciamente questi principi e devo dire che portano reali vantaggi soprattutto perchè principi semplici e abbastanza facilmente adottabili e dunque rappresentano il punto di incontro tra “non avere nessun processo”(totale anarchia, BIG BALL OF MUD) ed “avere un Processo” (lento, pesante, eccessivamente burocratico). Qui’ ne propongo una mia traduzione:

Il manifesto dello Sviluppo Software Agile

Diciassette anarchici concordano:

Stiamo portando alla luce metodologie migliori di sviluppo software facendolo in prima persona e aiutando altre persone a farlo. Attraverso questo lavoro siamo arrivati a concludere:

  • Individui e interazioni piu’ che processi e strumenti.
  • Software funzionante piu’ che una documentazione esauriente.
  • Collaborazione con il committente piu’ che negoziazione contrattuale.
  • Rispondere al cambiamento piu’ che seguire un piano prestabilito.

Significa che, nonostante apprezziamo gli aspetti che si trovano sulla destra di questi punti, diamo maggiore valore agli aspetti citati alla sinistra.

Seguiamo questi principi

  • La nostra piu’ alta priorita’ deve essere quella di soddisfare i requisiti del committente attraverso precoci e continui rilasci di software di qualita’.
  • Non bisogna temere il cambiamento dei requisiti, anche se avviene in fasi avanzate dello sviluppo. I processi agili sfruttano il cambiamento per il vantaggio competitivo del committente.
  • Consegnare software funzionante in maniera frequente: ogni paio di settimane o al piu’ ogni paio di mesi, con una preferenza per scale temporali ridotte.
  • I committenti e gli sviluppatori lavorano insieme quotidianamente per tutta la durata del progetto.
  • E’ necessario basare i progetti su individui motivati. Bisogna dare l’ambiente e il supporto di cui necessitano e avere fiducia in loro sul fatto che il lavoro verra’ portato a termine.
  • Il piu’ efficiente ed efficace metodo per trasmettere le informazioni al team e per far si che esse circolino al suo interno e’ la conversazione faccia a faccia.
  • Un software funzionante e’ la principale misura dello stato di avanzamento del progetto.
  • I processi agili promuovono un’attivita’ di sviluppo software sostenibile. Promotori , sviluppatori ed utenti devono essere in grado di mantenere un passo costante a tempo indeterminato.
  • La Semplicita – l’arte di massimizzare il lavoro non svolto – e’ essenziale.
  • Le migliori architetture, i migliori requisiti e progetti emergono da team auto-organizzati.
  • Ad intervalli regolari, il team deve riflettere su come diventare piu’ efficace, e dunque regola ed adegua il suo comportamente di conseguenza.

Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas

www.agileAlliance.org

Capire (veramente) il web design

Segnalo l’articolo di Jeffrey ZeldmanUnderstanding Web Design” apparso su “A list apart” il 20 novembre scorso. Tratta in maniera perfetta un tema su cui ho sempre riflettuto: troppi siti vengono realizzati per esser “belli da vedere”, “d’effetto”, “stupefacenti”, “incredibili” e via dicendo. Nascono così piccoli o grandi Cattedrali nel deserto: servizi e siti che non guarda nessuno e nessuno usa, o quasi: diciamo perfettamente inutili.

Poi arrivano alcuni web design, quelli veri (pochi a dir la verità) che applicano al web concetti quali “utilità”, “usabilità”, “user driven design”, “pragmatismo”, “web standard” e creano dei siti con un layout essenziale ma perfettamente funzionale allo scopo del sito.

Poi arriva la gente e se ne frega altamente della grafica mozzafiato, delle sfumature, degli elementi grafici elaboratissimi e usa quotidianamente servizi come google, del.icio.us, twitter, facebook, flickr… Nell’articolo Zeldman fa un paragone a mio parere eccezionale: un buon design web dovrebbe essere (non in tutti i casi ovviamente) come il carattere Helvetica: semplice ed essenziale, dovrebbe sparire e sacrificarsi per dare spazio alla comunicazione.

Per chi fosse interessate a questo argomento segnalo inoltre un ottimo testo (solo in inglese e a pagamento, ma costa poco…) scaricabile in pdf da http://www.webdesignfromscratch.com/save-the-pixel-book.cfm di Ben Hunt (quello di Web design from sratch).

Echoes, Silence, Patience and Grace

foo-fighters-echoes-silence-patience-and-grace-front.jpg

Post decisamente off-topic: voglio segnalare un album molto interessante uscito a settembre 2007 che mi era sfuggito: Echoes, Silence, Patience and Grace di quei mattacchioni dei Foo Fighters, la band del ex-batterista dei Nirvana Dave Grohl. Sesto lavoro in studio, preceduto ad agosto dal fantastico (e pluripremiato) singolo “The Pretender“: un brano che trasuda camionate di puro rock. Le mie tracce preferite: “the pretender”, “erase/replace”, “come alive” e “The Ballad Of The Beaconsfield Miners” (un curioso pezzo in stile bluegrass dedicato a due minatori che, rimasti bloccati in una minera, avevano chiesto un iPod con musica dei Foo Fighters). Un album fatto di suoni definiti e presenti, riff ricchi di personalita’ (quelli che si ricordano) e soprattutto possiede la cosa che manca di piu’ alla musica oggi: le idee. Magari non si può parlare di capolavoro ma è comunque un ottimo disco: consigliato!

Finalmente la release ufficale di Ext 2.0

untitled-1.gifEra ora ! Con quasi un mese di ritardo rispetto alle previsioni e’ finalmente uscita la versione definitiva della libreria JavaScript ExtJS 2.0.

Con le sue innovazioni, principalmente architetturali, rappresenta un grande passo avanti nella direzione di rich Internet application veramente complete e moderne.
In questa release migliora l’organizzazione del codice (in senso OO), la documentazione, le performance, la facilita’ di programmazione. In particolare tra le tante novita’ ho apprezzato il nuovo modello a componenti/container per l’interfaccia utente, molto piu’ object oriented del passato (ancora piu’ ispirato probabilmente agli usuali framework UI delle piattaforme Java e .NET).

Aumentano le funzionalita’ e i widget; da segnalare le griglie con raggruppamenti e totali, gli scrolling tabs (finalmente!), il layout di tipo anchor che permette appunto di ancorare i widget ad esempio ad un lato della form e tantissimo altro.
Consigliabile dare uno sguardo all’impressionante sample Desktop Sample App che getta le basi per un vero e proprio sistema operativo “remoto”.

Io e i miei colleghi stiamo studiando questo framework ormai da diversi mesi e lo stiamo utilizzando per lo sviluppo di una applicazione abbastanza imponente. Si tratta di un applicativo gestionale per l’organizzazione del lavoro di aziende che effettuano la raccolta differenziata dei rifiuti. Per chi e’ curioso ho pubblicato una demo molto preliminare. Ovviamente la libreria ExtJs 2.0 e l’approccio total AJAX ha un ruolo importantissimo: ci permette di realizzare software web based, con tutti i vantaggi che ne comporta, ma con look&feel simile ad un software desktop. In passato sviluppavamo applicazioni di questo tipo usando l’approccio tradizionale: PHP che genera normali pagine xhtml con form etc. Per quanto questo approccio vada benissimo per applicazioni specifiche e orientate ad Internet (ad es. un CMS o simile) e’ deleterio per lo sviluppo di applicazioni gestionali, soprattutto se si abbracciano metodologie agili che prevedano la prototipizzazione rapida: troppi dettagli di controllare. Una libreria di alto livello permette di astrarsi dei mille problemi dell’interfaccia utente e concentrarsi sulle business rules e sull’usabilita’ complessiva.

Posso tranquillamente affermare che Ext ha cambiato il modo di lavorare del nostro team in relazione a questo tipo di progetti aumentando di molto la produttivita’; per questo motivo sto investendo grandi energie nello studio di questa libreria. E si.. bisogna dire le cose come stanno: ExtJS e’ una libreria piuttosto vasta e complessa e ha di conseguenza una learning curve un po’ impegnativa, senza contare che necessita la perfetta comprensione di JavaScript cosa non scontata, ma e’ tempo ben speso. Dopo un po’ si incomincia a capire il modo corretto per affrontare qualsiasi problemi e si incomicia ad andare molto spediti…

Ovviamento Ext e’ una libreria client, il lato back office bisogna svilupparselo da se’ o trovarlo in rete, non importa in quale linguaggio o con quali strumenti: Ext e’ neutrale rispetto alla tecnologia lato server. Io ad esempio uso un framework PHP+MySQL sviluppato internamente, tutte le comunicazioni avvengono tramite JSON etc, ma volendo e’ possibile usare ad esempio ASP.NET con XML o qualsiasi altra cosa assurda vi venga in mente.

In definitiva consiglio vivamente Ext 2.0 a chiunque abbia bisogno di sviluppare, per lavoro o per hobby, applicazioni AJAX di qualsiasi grado di complessita’, in particolare modo se di tipo business/gestionale, purche’ abbia un po di tempo da investire nel suo apprendimento.

ExtJS: un framework JavaScript

Chiunque sviluppi applicazioni AJAX sa che è fondamentale dotarsi al più presto di un buon framework JavaScript come ad esempio jQuery, Prototype o YUI; in questo modo abbiamo a disposizione un ambiente consistente e facile da programmare, le innumerevoli piccole differenze tra i browser spariscono, si possono utilizzare effetti grafici quasi all’altezza di Flash etc.

La libreria ExtJS sviluppata dal vulcanico (in termini di produttività…) Jack Slocum e’ tutto questo ma e’ anche qualcosa in piu’: propone un ambiente di sviluppo completo di quasi tutti i componenti presenti nelle normali applicazioni desktop. Possiamo contare su griglie, menu, dialog box, bottoni, finestre, tree, tab panel e tanto altro. Penso che nulla più di qualche esempio possa rendere l’idea:

Da circa un mese sto studiando questa libreria e posso dire che è veramente interessante e per certi versi rivoluzionaria rispetto al parco di librerie presenti in Rete. Partita come semplice estensione della YUI dalla quale dipendeva strettamente (all’inizio si chiamava YUI-Ext) ora è totalmente indipendente. Da non molti mesi è inoltre arrivata ad un certo grado di maturità (adesso la versione stable è la 1.1.1) ed è in lavorazione la 2.0 che pare uscirà tra non molto, diciamo prima di Natale.

Pro:

  • Licenza Open Source LGPL
  • Molto potente: diciamo che con un po’ di impegno è possibile sviluppare software che assomigliano notevolmente come aspetto e funzionalita’ ai programmi desktop scritti in Java con Swing oppure .NET WinForms.
  • Ben strutturata: il sorgente è complesso ma immediatamente comprensibile, spesso vengono utilizzati design pattern etc. e best practices dello sviluppo software.
  • I temi grafici sono intercambiabili e tutti molto curati.
  • Discreti esempi e tutorial
  • Compatibile con YUI, Prototype o jQuery

Contro:

  • Estremamente pesante: quasi 1MB tutto compreso. Questo la rende molto più adatta per lo sviluppo delle cosiddette RIA (Rich Internet Application) anziche’ normali siti. Ad esempio io la sto usando per sviluppare un gestionale piuttosto complesso: magari in futuro posto qualche screenshot.
  • La curva di apprendimento è inizialmente molto ripida, anche se dopo un po’ il tutto diventa più chiaro :-)
  • La documentazione non è perfetta e spesso decisamente carente;  ma è comprensibile essendo questo un progetto molto giovane.
  • Qualche problema di prestazioni con le griglie: sono estremamente pesanti… ma comunque tollerabile.

Alternative:

  • Interessante e per certi versi molto simile a ExtJs l’impronunciabile Qooxdoo

In ogni caso ExtJS e’ assolutamente da provare !

Corso linux

Uso Linux per tanti motivi, soprattutto come server Internet e ovviamente ne penso tutto il bene del mondo. E’ gratuito, è sicuro, facile,veloce… gli aggettivi si sprecano: l’unico problema e’ che ancora oggi (nonostante l’encomiabile lavoro dello staff di distribuzioni come Ubuntu o simili) non risulta semplicissimo da usare per chi proviene dal mondo Windows.

Di tanto in tanto mi capita di tenere corsi introduttivi su Linux e nel tempo ho preparato delle brevi dispense. Ho pensato che magari potrebbero interessare qualcuno alle prime armi e così ho deciso di pubblicarle in rete. Le dispense sono in pdf e sono in versione molto preliminare, immagino dunque non esenti da errori ed imprecisioni… in ogni caso sono distribuite as-is e con licenza GPL. Gli esempi proposti dovrebbero essere distro-indipendent, io in ogni caso uso Fedora Core. Ovviamente sono ben accetti commenti e proposte di modifica di qualsiasi genere:

Download Server2Go
Scarica dispense UnixLinux 1

Download Server2Go
Scarica dispense UnixLinux 2

Server2Go: un webserver nella chiavetta USB

Vi è mai capitato di dover distribuire una versione beta di una vostra applicazione PHP+Apache+ Mysql ad un cliente o dover mostrare il vostro portfolio di applicazioni o siti web ? A me si, ed è sempre un problema: si può installare tutto l’insieme di programmi sul PC del cliente (cosa spesso non fattibile per molti motivi…) o cercare di installare l’applicazione su un server pubblico, cosa tipicamente pericolosa e poco pratica trattandosi di codice spesso non ancora definitivo, dunque mi sono messo a cercare e ho scovato un’ottima distribuzione WAMP (Windows Apache Mysql PHP) portatile: Server2Go.

Server2Go è un completo ambiente PHP che praticamente gira su una chiavetta USB senza “inquinare” il PC; è costantemente aggiornato e completo di tutto: Apache 2.0.58, Mysql 5.0.41, PHP 5.2.3 e SQLite 2;

Download Server2Go
Scarica Server2Go

Ecco come si usa: è sufficiente scompattare il file che si trova nella sezione download su una comune chiavetta USB da 256MB o masterizzare il tutto su CDROM, è completamente autonoma e non necessita dunque di installazione. Per avviare la distribuzione è sufficiente eseguire un normale EXE.

Con questa operazione viene avviato un server Apache sulla porta 4001 e un server Mysql sulla porta 7188 (in ogni caso sono configurabili), cosa che scongiura conflitti con server già presenti sul PC. L’ambiente è già preconfigurato con l’ultima versione di PHP zeppo di ogni sorta di estensione o modulo aggiuntivo (ne esiste anche una versione lite con lo stretto necessario). Tramite il file pms_config.ini è inoltre possibile personalizzare il tutto in molti modi: per fare alcuni esempi si può cambiare lo splash-screen con una propria immagine png o decidere di eseguire all’avvio un certo browser che punta direttamente ad un determinato URL o cose del genere.

E’ distribuito con licenza donationware il che significa che possiamo distribuirlo gratuitamente senza problemi ma per un uso commerciale si ha l’obbligo “morale” di effettuare una donazione a piacere, cosa che inoltre permette di scaricare alcuni programmi in più quali un browser semplificato, SimpleBrowser, privo della barra e dei menu e dei vari orpelli: si tratta di un container nel quale viene fatto girare il motore di Internet Explorer che permette di trasformare una web application in una specie di applicazione desktop..

Insomma una soluzione efficace ad uno dei tanti problemi che capitano al povero sviluppatore….