Sto ancora ragionando sugli eventi, sulle parole e sulle cose che sono successe al workshop dell'ugidotnet di giovedì scorso. L'occasione stavolta viene dai discorsi che negli ultimi minuti di presenza, al termine delle sessioni ho avuto la fortuna di poter ascoltare e ai quali ho con piacere partecipato.

Un Raffaele che in punta di fioretto menava stoccate come solo lui sa fare, ha detto una cosa, che se volete non ha nulla a che vedere con la programmazione, e con l'informatica in senso più ampio. Citava il caso nel quale scambiando le posizioni dei pulsanti di un utente medio, il giorno successivo questo sbagliava ogni operazione che li prendesse in causa. Un caso questo che mi riguarda da vicino ultimamente, dato che mi trovo in una situazione analoga, ma quello che conta è che questa affermazione mi è rimasta in testa da quando l'ho sentita e solo ora comincio ad assaporarne il recondito significato.

Tutto questo ha un nome: Pattern.

In ultima analisi, quello che fa un data enter, che usa mille e mille volte una applicazione non è altro che costruirsi un pattern che poi si limita a ripetere alla stregua di una macchinetta, ottenendo sempre una soluzione migliore della volta precedente. Occorre pensarci bene. Sfido chiunque a non aver mai apprezzato un pattern di questo tipo, magari pigiando la medesima sequenza di tasti sulla tastiera e apprezzandone l'efficacia e l'armonia nella digitazione ogni volta che la si ripete.

Ecco quindi spiegato in due parole il significato da manuale di pattern: una soluzione conosciuta per un problema ricorrente.

Se ne possono trarre due conclusioni a mio parere. Innanzitutto che il pattern è tanto più efficace, quanto più è sperimentato. In fin dei conti l'esperienza nell'uso dei pattern porta a trovare sempre più soluzioni che vi possano essere ritagliate e soprattutto a dare una applicazione migliore e più efficace del pattern stesso. In secondo luogo, è l'esperienza che porta al pattern e non viceversa. Il pattern nasce innanzitutto dal riconoscimento di un problema ricorrente e poi della soluzione che gli si può dare. E come una costruzione mentale, diventa quasi un automatismo, che permette di migliorare l'eleganza e con essa l'efficacia del codice.

powered by IMHO

tags: - categories:

Giusto perchè si sappia, stamane ho proprio fatto la figura del pollo. Ieri sera mi sono iscritto ad un fantomatico servizio che si chiama sms.ac del quale avevo ricevuto notifica via mail su MSN da parte di un amico.

Quelle cose che uno non ci pensa su due volte. Prova a iscriversi perchè lo incuriosiscono, tanto poi al massimo non le usa.

Bene, stamattina tutti i miei contatti in MSN hanno ricevuto una mail analoga a quella che mi ha fregato.

NON SOTTOSCRIVETE SMS.AC!

powered by IMHO

tags: - categories:

Stasera ho deciso di installare un virtual pc, con il framework 2.0 e Sql Server 2005 Express, per fare qualche esperimento e predisporre l'ambiente di sviluppo per .TRAQ. Probabilmente molti di voi lo avranno già fatto, ma ecco lo stesso alcune indicazioni per chi volesse provarci.

  1. tanto per cominciare, occorre installare la giusta versione di framework 2.0 in base alla versione di Sql Server 2005 che si intende utilizzare. Personalmente ho scelto di installare la CTP di Ottobre perchè è l'unica che consente di utilizzare il Sql Express Manager che è stato rilasciato da poco. Le versioni scaricabili del framework sono attualmente due: 2.0.40607 e 2.0.40903 . Con la prima versione è possibile installare esclusivamente Sql Server Express Beta 2, mentre con la seconda versione si può installare la CTP di ottobre.
  2. Al termine dell'installazione per potersi connettere a Sql Server è necessario abilitare alcuni protocolli che di default non sono abilitati. L'installazione di default di Sql Express crea una named instance denominata appunto SqlExpress accessibile esclusivamente utilizzando il protocollo shared memory. Mediante l'uso di Sql Computer Manager è possibile abilitare anche le named pipes e il protocollo tcp. Ecco come fare:
  • aprire il Sql Computer Manager
  • trovare il nodo Services -> SqlServer e avviare il servizio
  • trovare il nodo Server Network Configuration -> Protocols for SQLEXPRESS
  • abilitare con il menu di contesto Np e Tcp
  • chiudere il Sql Computer Manager
  • aprire l'applet dei servizi e lanciare SqlBrowser
  • impostarne l'avvio automatico se necessario

Questo procedimento vi porterà a potervi connettere al database anche per mezzo dei consueti protocolli di rete che di default sono disabilitati. In particolare vale la pena notare che occorre avviare il servizio SqlBrowser che consente al client di trovare qual'è la porta su cui esso deve connettersi. Il servizio SqlBrowser inoltre è deputato al SQL Server Discovery, ovvero a pubblicare l'istanza di database e a renderla visibile ai client che la cercassero sulla rete.

A questo punto è possibile connettersi a SqlServer con l'express manager specificando come nome ".\sqlexpress" oppure "servername\sqlexpress". Di default il metodo di autenticazione scelto è la Windows Authentication, ma se in fase di installazione lo avete specificato è possibile anche usare l'autenticazione di SqlServer e il classico utente "sa".

powered by IMHO


Eccolo lì, mi hanno incastrato anche stamattina. E un sabato che poteva essere una bella occasione da passare con la mia famiglia si trasforma in una normale giornata di ufficio come ce ne sono tante, il cappello da "maialino" in testa a buttare giù chilometri di codice.

Talvolta mi chiedo se davvero ne valga la pena. Buttare così le proprie ore a fare qualcosa che altri ritengono urgente, e intanto mia figlia passa la giornata a giocare con le zie, o peggio a guardare la dannosissima televisione. Mi consolo pensando che lo sto facendo anche per lei. Per garantirgli un futuro, la possibilità di crescere bene, di studiare.

Ma il dubbio è forte.

powered by IMHO

tags: - categories:

Nessuno se la prenda se adesso dirò che l'intervento che mi ha regalato le maggiori soddisfazioni al Workshop è quello che ha tenuto Marco Abis. Rispetto le metodologie di sviluppo agile mi sono da sempre sentito vicino e convinto, ma davvero mai avevo sentito narrare con tanto trasporto di questo argomento.

Eccomi quindi ora, ancora una volta, a ricordare alcuni passi di quell'intervento, che mi sono stati ricordati dalle foto nel blog di Luca Minudel. In particolare mi riferisco al momento in cui Marco, davanti ad un grafico che indicava l'andamento dell'indice ciclomatico, puntanto il dito sul culmine di una curva sosteneva che quello fosse il momento in cui inizia il refactoring.

Togliete il cappello da "maialino" e mettete quello del refactoring, e la curva si abbassa.

Molti di noi sanno che in realtà, quello che succede è che il cappello da maialino raramente ce lo fanno togliere, e quindi alle fine l'andamento di un progetto nel tempo è molto più simile ad una scalata dell'Everest che alla passeggiata collinare che il grafico ci suggeriva. Nell'economia dei tempi e del business "miope", quello che succede è che una volta arrivati al culmine della curva, ove tutto funziona, male ma funziona, arriva il capo e ci informa che sì, siamo stati bravi, abbiamo risolto il problema, ma siccome lui dovrà passare il Natale alle Bahamas è opportuno che il progetto finisca lì e che si cominci ad arrancare sulla dorsale "ciclomatica" di un altro progetto, cercando di arrivare alla sospirata vetta "ciclomatica".

La mia non vuole essere una critica all'intervento di Marco, ma piuttosto un prendere coscienza di tali problematiche, per darvi una risposta, nella convinzione che mi muove che il ragionamento fila e anche bene. Il nostro sforzo quindi deve essere quello di andare oltre la curva. Non importa quando, come o perchè, ma dobbiamo avere la capacità di sentire il nostro codice, i fasci di istruzioni che lo percorrono e che ne danno vita, gli intoppi che tali istruizioni incontrano e spianarli, facendo sempre qualche passo oltre la curva.

Non necessariamente è obbligatorio che il refactoring avvenga quando il codice è terminato e funzionante. L'occasione si può incontrare più facilmente invece quando si aggiungono nuove funzionalità. Una volta che si è giunti in vetta non ha probabilmente alcun senso intervenire nel codice che funziona (con buonapace delle ferie del nostro capo), ma lo ha certamente correre a testa bassa sulla china del refactoring per preparare la rincorsa che ci consentirà di raggiungere le vetta successiva.

Personalmente vedo questa attività analoga al reimpastare la creta, per renderla più malleabile, in vista della azione scultorea che essa dovrà subire fino a raggiungere la forma desiderata. Lo stesso avviene con il refactoring. Si prende il codice, lo si osserva bene e si comincia a menare fendenti. Una classe nasce e un'altra muore. un parametro cambia tipo, una metodo cambia nome, una variabile fa altrettanto. Il tutto in una azione coordinata di accerchiamento al problema che lo stritola. E alla fine si è pronti. Si mettono assieme le cose e la vetta è raggiunta.

Davvero credetemi. non mi capita spesso di parlare di qualcosa con tale veemenza, ma lo faccio proprio perchè ritengo che se è vero, come penso che sia, che la programmazione è solo un'altra forma di arte, la più nuova e sconosciuta, allora il refactoring è la giusta strada.

powered by IMHO

tags: - categories:

36 post in tre giorni è un record degno del guinness dei primati.

Se facciamo un rapido calcolo significa che entro 8,1 giorni Lorenzo sarà in testa alla classifica dei blogger. Non c'è gara, questo è davvero troppo per me. Oltretutto il mio contratto di lavoro parla chiaro. Oltre i 5 scatta il licenziamento per giusta causa!

Mi arrendo.

powered by IMHO

tags: - categories:

Seguendo il panico di Lorenzo in merito alla licenza di IMHO, mi sono soffermato a pensare se ne valga davvero le pena.

Dato che suppongo di essere l'unico latore dell'interpretazione della licenza che ho fornito per imho, ho deciso che è il caso di esplicitarne il vero significato così di consentire un po' a tutti di farsi un'idea di come utilizzare i componenti che ne fanno parte (e che tra l'altro sono pensati proprio per essere riutilizzati)

Il senso della mia GPL è il seguente:

Fintanto che usate imho o alcuni suoi pezzetti, per software liberamente distribuibili i componenti che fanno parte di imho non subiranno mai nessuna censura da parte mia, basta che nell'about ci mettete un link alla sorgente originale. Questo vale sia per altre GPL che per qualsiasi altro tipo di licenza. Se proprio non volete esser GPL pure voi, che ci posso fare?

Se poi decidete che è il caso di farne una versione commerciale allora ne parliamo. Mai avuto l'idea di fare il buon samaritano...

Se a Lorenzo serve una build con licenza LGPL non ha che da dirlo et voilà... il gioco è fatto!

powered by IMHO

tags: - categories:

Volevo spendere due parole su questo epiteto bonario che Andrea Saltarello, durante le sessioni di ieri ha spesso indirizzato verso le comunità di sviluppatori Java.

A prescindere dal fatto che il mio amore per la saga di Guerre Stellari mi porta ad apprezzare l'idea di vedermi nei panni di Luke Skywalker, nella lotta tra bene e male, trovo che questa definizione racchiuda al suo interno un significato "recondito" molto importante e per nulla deleterio.

E' bene innanzitutto che ci mettiamo in testa che se loro sono il "lato oscuro" non necessariamente noi siamo quello "luminoso". Tuttavia, in questa frase si nasconde l'accezione che il mondo Java nasconde una indiscutibile "potenza sconosciuta" che dobbiamo naturalmente imparare a conoscere e far diventare anche nostra.

Ma c'è una considerazione cui essi dovrebbero pervenire: se è vero questo, occorre tenere presente che, pur riconoscendo loro tutta la positività dell'esperienza Java e di tutto ciò che sta loro attorno, non è per nulla scontato che il "bene" stia dalla loro parte.

powered by IMHO

tags: - categories:

Questa è uno delle frasi più significative che ho incontrato durante le sessioni sul refactoring.

Il design emerge.

Come Michelangelo sosteneva che il suo lavoro non era altro che il fare emergere da un blocco di pietra la scultura che esso conteneva, noi, novelli Michelangioli, scolpiamo con sapienti colpi di refactoring la cruda roccia di bit per trarne una figura compiuta, armonica e funzionante.

Volete vedere il blocco di pietra della vostra prossima applicazione?

public void Main(string [] args)
{
}

E adesso a colpi di refactoring fatene emergere il design.

E' tutto li.

powered by IMHO

tags: - categories:

della mia vita e di altre amenità

In queste ore sto ultimando le demo per la presentazione del prossimo meeting di XeDotNet, il 6 Novembre 2009. In quell'occasione terrò una sessione, di circa 1 ora e 20 minuti dal titolo ambizioso: Silverlight do it better: Silverlight 3.0, Ria Services e le LOB applications.

Il titolo cela una sessione in cui cercherò di illustrare gli strumenti per lo sviluppo di applicazioni con Silverlight, partendo dalla modaltà Out of Browser, passando poi ai controlli di tipo data-driven (DataGrid, DataForm, etc...) per poi dedicare sicuramente più di metà della sessione ai Ria Services.

E proprio questi ultimi sono la parte che vi consigio di non perdere. Proprio mentre mi studiavo Ria Services in questi giorni mi sono reso conto della reale potenza di questo strumento. Si tratta di uno strumento davvero ben fatto, che finalmente risolve elegantemente il problema dell'accesso ai dati. Nonostante Ria Services siano solamente una CTP, sono notevolmente stabili e soprattutto dispongono di una licenza Go-live che consente di usarli anche in ambienti di produzione.

Vi aspetto numerosi.


Aggiungi Commento