A long time ago in a galaxy far, far away...

15 anni fa, il 6 agosto 2001 per la precisione, un gruppo di folli (me compreso) si incontravano presso un notaio e fondavano l'associazione no profit "User Group Italiano .NET" che per tutti sarebbe poi diventato UGIdotNET o UGI. Erano tutti figli di MFC e/o VB6, con qualche hipster che aveva avuto anche qualche frequentazione con ATL. Sostanzialmente, quindi, figli di COM (no, non è un insulto) che avevano deciso di dedicarsi a quello che, nato COM+ 2.0, divenne invece .NET; erano i tempi della beta 2 della versione 1.0, ed una RTM (o GA, come si dice oggi) avrebbe richiesto ancora circa un anno di attesa ma nonostante ciò l'amore dei suddetti folli per quel gran bel pezzo di ... tecnologia era tale da giustificare questa avventura. E il mondo “tech” era diverso, molto diverso da quello attuale.

Il primo presidente dell'associazione fu Pierre Greborio, che ci “abbandonò” per trasferirsi in California e lavorare in Microsoft: un classico caso di "fuga di cervello e di stomaco", visto che è anche una buona forchetta (malattia diffusa tra noi dev). Ricordo che, diventato il nuovo presidente, una delle mie prime scelte fu di spostare il focus da .NET a ISO23271 che, per coloro che non lo sapessero, è lo standard ISO che definisce (i puristi scusino l'approssimazione) le specifiche del CLR e della Base Class Library. Scelsi questo spostamento perché avevo notato i primi vagiti di un progetto interessante chiamato Mono che allora faceva ridere e/o alzare il sopracciglio a tanti, ma che oggi invece "altrettanti tanti" (magari anche qualche detrattore poco lungimirante) usano quotidianamente in una delle sue declinazioni: Xamarin, per intenderci.

Se la memoria non inganna (alla mia età può capitare), fu infatti UGIdotNET la prima community .NET a pubblicare, nel 2002, contenuti su Mono ed a dedicare una sessione durante un proprio evento a questo progetto: sessione condotta, tra l'altro, proprio da uno degli sviluppatori di Mono ossia "quel" Massimiliano Mantione che avevo conosciuto ad un Linux Day nel 2004.

Lungimiranza, si diceva: come associazione, infatti, abbiamo sempre cercato di offrire supporto sia in merito a quanto disponibile/utilizzabile immediatamente, sia a quanto sarebbe probabilmente stato utile nel futuro, immediato o meno. Che fosse tecnologia o metodologia. Ed eccoci quindi già nel 2003 a parlare di unit testing e metodologie agili, nel 2004 a parlare di design del codice per poi essere recidivi, con l’aggiunta di Domain Driven Design, nel 2006 e via così, attraverso 42 eventi organizzati e centinaia di sessioni erogate, fino ad oggi. Sempre cercando di fondere le necessità del presente con quelle del futuro, sempre, sostanzialmente, cercando di essere guidati dal pragmatismo e non dalle mode. Le persone che hanno reso possibile tutto ciò sono elencate qui, ed ognuna di loro ha il mio ringraziamento più sentito.

Con tanta presunzione ma anche un pochino di consapevolezza pensiamo di avere un passato importante, che merita un futuro altrettanto importante: stiamo lavorando sulle iniziative future e speriamo di iniziare a condividerle quanto prima ma, per un attimo, vorremmo concentrarci sul presente, sui nostri 15 anni che ci apprestiamo a festeggiare settimana prossima con un evento piccolo ed organizzato tardi ed in fretta a valle di qualche chiacchiera e telefonata tra amici intenzionati a “festeggiare”. Piccolo perché, date le succitate condizioni organizzative, gli iscritti sono pochi: 60, al momento, e considerando il fisiologico drop rate degli eventi gratuiti significa che saremo circa 40. Sarà piccolo, quindi “intimo” e soprattutto bellissimo.

Se avete voglia di unirvi a noi, è ancora possibile iscriversi.

“Now, this is fun”

“This eagerness to change”

E insomma, un anno fa pubblicavo il mio ultimo post chiedendomi, tronfio come un vero bauscia sa/deve essere, in quale modo avremmo potuto migliorare l’anno successivo. E allora, quest’anno, io e Daniele siamo partiti da un principio ispiratore: “diversity”. Diversity perchè:

  • se il fenomeno startup ha dimostrato di poter essere un game changer in tema sia di scelte tecnologiche sia di approccio allo sviluppo del software (“va veloce e spacca tutto”, ci disse Marco)
  • se la track “business” inserita in agenda un anno addietro ha riscosso un riscontro che ci ha fatto capire che potevamo toglierla dalla “riserva protetta” e renderla un first class citizen anche se i temi sono (apparentemente) slegati dallo sviluppo software in senso stretto
  • se la partecipazione alla CFP di “signorine & giovanotti” cresce ogni anno ed è un toccasana in un settore storicamente prettamente maschile, con alcuni esemplari (io tra questi) per datare i quali qualcuno potrebbe proporre il Carbonio14
  • se anche chi ci ospita (e s[u|o]pporta) da anni mette la barra a dritta e avanti tutta verso Linux e OS X

Beh, allora il cambiamento è l’unica strategia evolutiva sensata (e qui la mia verve agilista va in sollucchero). E quindi:

  • Volevamo le startup? Ecco Xmetrics, che ci viene a raccontare come anche in Italia un tecnico possa avere una idea, capire che la sua preparazione tecnica non è condizione sufficiente per “farcela”, imparare la lezione ed a questo punto trovare un investitore (anche) grazie al quale trasformare la propria idea in realtà. Ah si, ed avere come testimonial un campione olimpico, scusate se è poco. Io per avere una startup finanziata con oltre 1M $ che abbia per testimonial Martin Gore farei carte false, per dire.
  • L’anno scorso abbiamo inserito i “pezzi grossi” in agenda? E allora quest’anno abbiamo pescato dall’altro lato della pozza e portato in Italia un Senior Director di Microsoft Corporation. Ok, sostanzialmente ha accettato poichè interessato a mangiare decentemente per una settimana più che per il prestigio del nostro evento, ma questo è un trascurabile dettaglio di implementazione, oltretutto dotato di access modifier “private” Sorriso
  • Vogliamo scongiurare il ricorso al Carbonio 14? Ed allora anche le tematiche devono guardare avanti e prendere atto di quanto potente sia ormai il “lato consumer della Forza” ed il suo impatto anche sugli scenari applicativi “tradizionali” e quindi in agenda abbiamo: IoT, wearable, Kinect, Docker, Unity3D, Enterprise UX… Oh, io la sessione su Microsoft Band non me la perdo Sorriso

Questo (ed altro) riuscendo però, a nostro avviso, a non snaturarci: .NET, C++, cloud computing, NoSQL, Xamarin, etc sono lì come sempre in fondo, ad esempio, di “roba” come Mono ne parliamo da prima che fosse “cool” farlo.

Cerchiamo, semplicemente, di rendere il take away dei Community Days utile sia nell’immediato sia in prospettiva. Ci abbiamo provato anche quest’anno, venite e diteci se ci siamo riusciti.

Ci vediamo ai Community Days 2015?

Tag di Technorati: ,

“L’importante è esagerare”

So bene che “scherza coi fanti ma lascia stare i santi”, ma per parlare dei Community Days 2014 non potevo prendere in prestito frase migliore… Potrei parlare del fatto che abbiamo sfondato la quota delle 1000 iscrizioni e che stiamo praticamente “soppalcando” le sale. Potrei parlare di quanto io sia lieto di vedere che il numero di community che quest’anno supportano l’evento è il più alto di sempre e le ringrazio di cuore perchè senza di loro l’evento lo puoi anche organizzare ma non riusciresti ad erogarlo. Potrei parlare del fatto che avremo una inedita track dedicata C++, un linguaggio tanto potente quanto spesso bistrattato, grazie alla disponibilità del neonato user group C++ che ha scelto il nostro palcoscenico per il proprio “debutto in società”. Potrei parlare del fatto che tanti eventi “piazzano” in agenda sessioni dedicate performance e scalabilità, e la nostra umile (ma convinta) risposta è una sessione ad hoc tenuta da uno degli sviluppatori di StackOverflow (#meico). E potrei anche azzardare l’affermazione che avere in keynote l’Amministratore Delegato di Microsoft Italia (che, immaginerete, ha una agenda piuttosto “piena”) significa che, insomma, il nostro “piccolo grande” evento ormai è un po’ meno “piccolo” ed un po’ più “grande”, e non solo dimensionalmente.

Ma se dovessi dirvi perché quest’anno i Community Days esagerano, beh… Vi direi di dare una occhiata alla agenda della terza giornata perchè è una di quelle che a noi tecnici sembrano tanto inutili e che poi, dovessimo mai dotarci di partita IVA o addirittura aprire una azienda, potrebbero letteralmente salvare la vita. Quando 10 anni fa avviai Managed Designs avrei tanto avuto bisogno di non essere tanto ignorante da non ritrovarmi a pagare per gli errori commessi nella generazione di offerte (es: assicurare il margine di contribuzione ed includere una quota di risk management) o nelle scelte tecnologiche perché, da semplice tecnico, non immaginavo che tutti i progetti potessero concludersi in attivo ma i costi indiretti potessero mandare il bilancio aziendale in negativo e i soldi, a quel punto, li deve mettere l’imprenditore, cioè io. O voi. Oppure perchè BYOD è una buzzword che oggi è tanto “cool” ma, esattamente come la scelta degli smartphone, non si fa (esclusivamente) di pancia ma anche dovendo considerare le norme di legge perché, altrimenti, indovinate chi le paga le sanzioni? E potrei continuare… Insomma, 10 anni addietro avrei voluto che una giornata del genere ci fosse e soprattutto avrei voluto non essere tanto presuntuoso da pensare che, se anche ci fosse stata, non mi sarebbe servita perché, ehi, io ero bravo a scrivere software ed alla fin fine l’importante è quello. E invece no, ci sono skill altrettanto importanti per un “imprenditore” (anche di se stesso) e sono veramente “orgoglione” di avere avuto la possibilità di inserire questi temi in agenda.

Hai ragione Enzo, l’importante è esagerare: non so cosa io e Daniele potremo inventarci l’anno prossimo ma ti assicuro che guarderemo in fondo al cilindro per vedere se sia rimato qualche piccione :-)

Tag di Technorati: ,

Andrea @ WPC 2013

Ormai ci siamo: settimana prossima “arriva” WPC e, per la 12a volta, abbasserò la qualità dell’evento partecipandovi in qualità di relatore. Sperando di far cosa utile ai partecipanti, provo a spiegare quale sarà il taglio delle mie 2 sessioni in modo da permettere di capire se preferirle (o viceversa) a quelle contemporanee.

  • Idiomatic Domain Driven Design: siete reduci dalla prima lettura del “blue book” oppure “non ho letto il libro, ma ho trovato un po’ di documentazione online”? Bene, probabilmente ora ricadete in una delle seguenti categorie: 1) pensate che DDD “per il nostro scenario è troppo costoso, mica dobbiamo lanciare i razzi sulla Luna”, oppure 2) vi siete persuasi che, giacchè la prima “D” in “DDD” significa “Domain”, allora la chiave di volta sia il Domain Model e quindi… Evvai con le classi “Cliente”, “Fattura”, “Prodotto”, mapping con l’O/RM di turno e passa la paura. Ecco, in questa sessione “scopriremo” che:
    1. in DDD, l’implementazione è un “dettaglio”. Un interessantissimo dettaglio, ma pur sempre un dettaglio. DDD è una strategia, non “solo” un insieme di (design) pattern
    2. l’implementazione di DDD “si… può… fare!” (cit.) senza che costi uno sproposito e adeguandola allo stack tecnologico per sfruttarne le peculiarità (ecco perchè nel titolo c’è scritto “Idiomatic”)
    3. la classe “Fattura” potrebbe anche non esistere, e sarebbe comunque DDD
  • Designing Web Solutions: in questa sessione cercherò, dando per già acquisita una buona competenza relativa al tipico stack tecnologico di una applicazione web, di spiegare a quali temi architetturali dedicare attenzione in funzione di vari scenari. In questo contesto, con l’espressione “temi architetturali” intendiamo, ad esempio: gestione degli URL del sito, eventuale API esposta dal sito, microdata, sitemap, security, fruizione mediante device eterogenei, integrazione con servizi esterni… Per ogni tema, oltre ad affrontare il problema dal punto di vista concettuale vedremo anche delle ipotesi implementative. “Codice”, insomma.

Ci vediamo a WPC? :-)

Technorati Tags: ,,

Sito UGIdotNET, da M1 a v1.

Ho aggiornato la copia online della versione beta del sito UGIdotNET, basandola sulla build M1 che ho chiuso da qualche giorno. Ecco le principali caratteristiche:

  • Responsive, testata con:
    • Windows: Chrome (ok), FireFox (ok), IE10 (ok)
    • iOS7: Chrome (ok) e Safari (ok)
    • iOS6: Chrome (ok) e Safari (che ha qualche problemino)
  • pervasivo, seppur non completissimo, supporto degli structured data di http://schema.org  (sono quelli supportati dai crawler di Bing, Google, Yahoo! e Yandex)
  • Al di fuori della home page, è tutto HTML5 valido secondo il validator del W3C. Perché “al di fuori della home page”? Perché la sintassi di Angular mi sta costringendo ad inserire alcuni caratteri che il validator considera errati: cercherò un workaround o, più probabilmente, di capire dove mi sono perso qualcosa :-)
  • [NEW] Implementata la gestione delle sottoscrizioni alle newsletter (leggasi: la possibilità di desottoscriversi)

Dal mio punto di vista M1 chiude, salvo “imprevisti”, la v1 anche se mancano delle feature importanti che ho già nel backlog ma slittano al prossimo aggiornamento del sito, auspicabilmente non lontano.

Da ora in poi mi dedicherò, fino alla pubblicazione (spero entro un paio di settimane) in produzione, esclusivamente al fix dei bug che mi saranno segnalati dotati di repro. Ne conosco già qualcuno (es: responsive su iOS6), ma ogni segnalazione è davvero benvenuta, grazie.

Technorati Tags:

Sito UGIdotNET, beta 2

Ho pubblicato un aggiornamento della versione beta del nuovo sito UGIdotNET, ecco il changelog:

  • [UPDATE] Alcuni cambiamenti in home page, sia estetici (es: appaiono gli abstract anche per i tip e il numero di video è stato aumentato a 4) sia “sotto il cofano” (es: video e blog nella barra di dx vengono popolati mediante AngularJS).
  • [NUOVO] Le pagine “lista” di articoli, news e tip hanno i feed atom/rss
  • [NUOVO] E’ disponibile la sezione “Eventi
  • [NUOVO] Aggiunta la pagina “Collabora
  • [UPDATE] La pagina di gestione del profilo utente permette ora di modificare: dati anagrafici, indirizzo e-mail e password
  • Fix e ottimizzazioni varie.

Il layout, analogamente a quanto detto in precedenza, non è ancora definitivo anche se ho avviato uno spike per realizzare un template responsive basato su Bootstrap. Come al solito, segnalatemi eventuali bug (dotati di repro) e ribadisco la raccomandazione di utilizzare il nuovo sito, nonostante sia una beta, in sostituzione di quello attuale.

Technorati Tags:

Never mind the bollocks: here’s the MvcMate

Premessa: l’ho mostrato durante la mia sessione ai #CDays13 di Roma e mi stanno arrivando alcune mail al riguardo, quindi approfitto del blog per una risposta “pubblica e cumulativa”: ecco il sorgente di MvcMate, disponibile anche come package NuGet. Per coloro che non erano presenti, MvcMate è una libreria che sviluppiamo in Managed Designs a supporto dei nostri progetti web: fondamentalmente, è nata quando ho deciso di iniziare a impacchettare tutte quelle primitive che, pur generalmente utili, erano invece sparpagliate all’interno dei vari progetti (uno su tutti: la beta del nuovo sito UGIdotNET).

Al momento, la libreria contiene:

  • alcuni ActionResult custom: Atom10Result, ImageResult, JsonpResult e Rss20Result
  • un action filter: MinifyAttribute
  • un html helper: Html.Upload/UploadFor
  • una constraint per il routing engine: NotEqualConstraint

L’idea alla base di MvcMate consiste nell’aggiungere funzionalità ad ASP.NET ed ASP.NET MVC facendole sembrare “native” cioè quanto più indistinguibili, nell’uso, da quelle built-in: in sostanza, uno degli obbiettivi è quello di generare la più bassa frizione possibile all’adozione della libreria. Per esempio, relativamente agli action result sono disponibili degli extension method della classe controller che permettono di scrivere, all’interno di una action, codice quale:

   1: public ActionResult MyJsonp()
   2: {
   3:     var model = new {FirstName = “Mario”, LastName=”Rossi”};
   4:     return this.Jsonp(model);
   5: }

Man mano che avrò tempo integrerò le altre primitive già pronte e, d’ora in poi, quelle che produrremo ex novo saranno implementate direttamente nella libreria: inizialmente saranno disponibili nel sorgente per poi finire anche nel package NuGet.

Il sorgente contiene anche alcuni sample che mostrano l’utilizzo di tutte le funzionalità della libreria e, a mio avviso, è una interessante “palestra” per coloro che volessero approfondire MVC per capire come “faccia a fare cosa” (es: come vengono generati gli attributi del markup che permettono di usare jQuery Validate in combinazione alle data annotation?) oppure come effettuare unit testing in un contesto di questo tipo (la libreria è per la maggior parte sviluppata facendo TDD). Per coloro che volessero dare un’occhiata al sorgente, alcuni approfondimenti utili potrebbero essere questo articolo o quest’altro.

Relativamente a CodePlex, ho scelto Git in modo da permettere fork e pull request: in generale, commenti e suggerimenti sono benvenuti così come ogni forma di supporto. Non sparate sul pianista, però; ok? :-)

Nuovo sito UGIdotNET, siamo in beta

Come ho mostrato ieri in occasione dei Community Days di Roma, abbiamo pubblicato la versione beta del nuovo sito UGIdotNET; in questo contesto, “versione beta” significa: “ad eccezione dei forum e della gestione della modifica del proprio profilo utente, tutte le funzionalità del sito dovrebbero essere ‘production ready’: in caso contrario, segnalatemelo”. Alcune note:

  • Il database utenti è condiviso tra i siti, quindi ogni account valido per “www” lo è anche per “beta”, e viceversa. Es: potete registrarvi su “beta” e effettuare login da “www”
  • Per tutta una serie di (credo buoni) motivi, il nuovo sito utilizza delle rotte differenti ma tutti gli url “legacy” dovrebbero essere supportati
  • Layout e grafica sono assolutamente non definitivi ed, anzi, molto probabilmente soggetti a profonda rivisitazione
  • Le ottimizzazioni “serie” non sono ancora state effettuate (early optimization is evil), quindi le performance non sono ancora quelle desiderate/desiderabili
  • L’archivio di workshop ed eventi non è ancora online, ma dovrebbe arrivare presto (ricordando che: Assert.AreEqual(“presto”, “compatibilmente con il fatto che sviluppo il sito nel tempo libero”;)
  • La funzionalità di ricerca è assolutamente primitiva: ho optato per una implementazione “quick & dirty” in attesa di realizzare quella “vera”
  • Il sito *non* è feature complete (es: i forum danno errore 404): in questo senso, il lavoro da fare è ancora moltissimo e potrebbe anche essere un buon momento per darci dei suggerimenti. In questo caso, optate per la “forma” della user story (es: In qualità di utente, desidero poter reimpostare la password dimenticata al fine di poter effettuare login)

My 2 cents: usate il sito beta in sostituzione di quello “stabile” e comunicatemi eventuali bug, possibilmente dotati di “repro”.

Technorati Tags: ,

Annunciaziò Annunciaziò! (cit.)

Citando Mauro, sono felice ed orgoglioso di annunciare che: Hibernating Rhinos and Managed Designs announce enterprise partnership related to RavenDB. Aziendalmente è un passo molto importante e devo innanzitutto ringraziare Mauro per aver avuto l’idea e, con il “solito” formidabile supporto dei bottegai tutti, per averla resa possibile: Ayende è persona giustamente esigente e riuscire ad ottenere questo accreditamento da parte sua è un risultato in sé.

Cosa significa questo accordo? Significa che Managed Designs è il partner d’elezione per coloro che, nelle zone coperte dall’accordo (sostanzialmente Europa centrale, occidentale ed orientale), desiderassero consulenza (in tutte le sue forme: architetturale, affiancamento, formazione, planning, …) dedicata al DBMS RavenDB: un accordo di questo tipo ci metterà alla prova non soltanto tecnicamente ma anche logisticamente: a tutt’oggi, ad eccezione di qualche occasione particolare, siamo stati sostanzialmente una azienda focalizzata sul mercato italiano, mentre questo accordo ci “obbliga” –con piacere- ad acquisire un respiro internazionale che ci permetta di condividere l’esperienza e la soddisfazione acquisite utilizzando questo notevole (“Oste, è buono il vino?”) DBMS ed evitare che la sua adozione sia dovuta alla volontà di rendere il proprio progetto à la page bensì alla consapevolezza che, quando così fosse, tale strumento è quello che meglio soddisfa i requisiti.

E’ l’inizio, insomma, di una nuova avventura quindi… “IO SPERIAMO CHE ME LA CAVO”.

L’importanza di chiamarsi… Framework

Ok, spero innanzitutto che Oscar Wilde non si stia troppo lamentando per la citazione a sproposito presente nel titolo :-) Ciò premesso, questo tip appena pubblicato su UGIdotNET mi ha riportato alla mente un episodio che descrissi in questo post: più che sull’argomento in sè ho riflettuto sul fatto che nell’anno 2000, quando mi trovai a dover risolvere il problema citato nel post, spesi svariate giornate per giungere alla soluzione ivi descritta perchè per scoprire l’esistenza di quella modalità di scrittura “non logged” di SQL Server dovetti spulciare la documentazione di SQL Server ed altrettanta ne spulciai per capire come, utilizzando le estensioni custom del suo driver ODBC, trarre vantaggio da quella tecnica.

Per certi versi si trattò di un interessante esercizio speculativo che mi lasciò in dote qualche conoscenza in più in merito ad alcuni internals di SQL Server, ma con il senno di poi penso che i servizi offerti dalla classe SqlBulkCopy sono un ottimo esempio di cosa dovrebbe fare un framework, ossia offrire delle primitive ad un (ragionevole) livello di astrazione che permetta allo sviluppatore di dedicare il proprio tempo alla soluzione della parte “pregiata” (si ok, si scrive “pregiata” ma si legge “domain”…) di un problema potendo far affidamento su un substrato tecnologico che sia in grado di sfruttare la tecnologia/piattaforma sottostante.

In questo senso, nonostante l’ipertrofia che ormai lo caratterizza, penso a quanto valore ci sia nel .NET Framework che ormai diamo per scontato e quanto avrei preferito, mentre nel 2000 dovevo risolvere da solo il problema in oggetto, aver a disposizione SqlBulkCopy potendo dedicare meno tempo al lavoro e magari usare il tempo risparmiato per un Mojito in buona compagnia… :-)

«dicembre»
domlunmarmergiovensab
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567