Merp incluso nel GitHub Archive Program

Da qualche anno, nel tempo "libero", sviluppo Merp, una applicazione open source che scelsi di creare per dotare la seconda edizione del mio libro "Microsoft .NET: Architecting Applications for the Enterprise" di un esempio vero di DDD/CQRS/ES invece dei soliti "snippettini".

Nel tempo, Merp ha suscitato un po' di interesse e i suoi 115 fork e 347 star lo hanno portato ad essere incluso nel "GitHub Archive Program"per, testuali parole, essere "preservato per le future generazioni"  insieme a mostri sacri quali .NET Core, Angular, Hadoop, NodeJS, Rails ed altri ancora.

Speriamo abbiano scelto un commit decente: 1000 anni di insulti e sfottò nuocerebbero ulteriormente alla mia sindrome dell'impostore.

2020 GitHub Archive Program

Lightning talk a Microsoft Build

Prima che scoppiasse la pandemia, l'ultimo evento "fisico" al quale ho partecipato come speaker è stato il Microsoft Ignite The Tour: 2 talk, dei quali uno tecnico e l'altro, a me molto più caro, dedicato alla tecnologia quale strumento di inclusione.

Quando mi è stato proposto di tornare sul tema, oltretutto a Microsoft Build, ho accettato al volo: ne parlerò quindi stasera verso le 18:30 con un lightning talk all'interno dello slot "Supporting the (other) communities".

Ci vediamo qui.

Logo Microsoft Build 2020

#MicrosoftBuild #a11yDays #inclusione #accessibility

Cronache di AWS: prospettiva .NETvski

Non tutto il lock-down vien per nuocere: approfittando della logistica favorevole, del tempo risparmiato non dovendo fare avanti e indietro tra casa/ufficio/clienti e non volendo dedicare la totalità del tempo libero al binge watching, ho finalmente deciso di dedicarmi in modo organizzato ad un tema che avevo nel backlog da un po’: un bell’approfondimento dei miei skill AWS.

Per rendere quanto più real world possibile il mio approfondimento, mi sono dato un obbiettivo pratico da affiancare alle attività didattiche: prendere Merp e farlo girare su AWS; ciò, principalmente, per due motivi; il primo è che il progetto usa una serie significativa di componenti (server web, coda di messaggi, SQL Server, MongoDB, …) e, quindi, pubblicarlo comporta dover toccare una gamma abbastanza ampia di servizi quali, ad esempio:

  • RDS for SQL Server per i read model
  • Amazon DocumentDB per gli event store che on-premises sarebbero ospitati da MongoDB
  • EC2 per vari motivi (SSH, compute, …)
  • AmazonSQS come trasporto per Rebus
  • Beanstalk per le applicazioni web e Lamba per endpoint HTTP

Il secondo motivo è che, disponendo di un progetto reale, ho potuto impostare un percorso di application modernization composto da step successivi che, partendo dal solito lift&shift, mi portassero, per così dire, per “aspera a PaaS”.

Ne è nata una esperienza, ancora in corso, piena sia di momenti “?” sia di momenti “a-ah!” ed ho pensato di documentarla in una serie di contenuti che pubblicherò su UGIdotNET, e composta da articoli che documenteranno il percorso del progetto (es: definizione di un environment ASP .NET Core per il supporto ad AWS) e tip che, invece, saranno dedicati a necessità puntali (es: come faccio a connettermi con il mio client MongoDB al cluster DocumentDB?).

Il primo è qui: chiunque voglia seguire il percorso potrà forkare Merp e smanettare (il progetto è sotto licenza AGPL 3) in prima persona.

Proverò anche, parallelamente ad articoli e tip, a postare sul blog per una serie di considerazioni più individuali che al progetto in sè puntando a condividere, ad esempio, risorse utili trovate durante il percorso: tool, pubblicazioni, webinar, tutto quanto mi sia sembrato utile e non sia direttamente contenuto nelle mie pubblicazioni.

Proprio relativamente ai webinar, ne segnalo un paio che seguirò prossimamente: soprattutto “Serverless and Container .NET Best Practices” mi torna particolarmente utile.

In giro: prossimi eventi [UPDATED]

Ispirato da Lorenzo, ho deciso di iniziare a pubblicare sul blog gli eventi nei quali sarò presente:
  • Il 31 gennaio sarò presente, in qualità di speaker, alla tappa milanese del Microsoft Ignite Tour; nello specifico, terrò  la sessione "Azure tales: real world Event Sourcing" (codice BRK3589) alle 9:30 nella sala "Amber 7" e, con gli amici (in rigoroso ordine alfabetico) Daniele, Laurent e Martina sarò uno dei sedicenti esperti protagonisti dell'Ask The Expert "Here's how the cloud will solve all your problems" (codice THR2506) alle 17:10 nel Theater 2
  • Sempre il 31 gennaio, ma IMHO merita un punto a parte, insieme ad Enos terrò alle 10:50 la sessione “Implementing bots and Alexa skills with Azure Cognitive Services and the Microsoft Bot Framework” nel meetup organizzato da UGIdotNET presso il Microsoft Ignite Tour
  • L'1 febbraio parteciperò all'evento "Ignite your Azure", il primo incontro organizzato dal neonato Azure Meetup Milano
  • il 7 febbraio, presso la Microsoft House, sarò speaker presso l’evento “Azure Experience: migrare le tue applicazioni? E’ possibile!” durante il quale terrò due sessioni dedicate, rispettivamente, ai pattern ricorrenti nella migrazione di applicazioni verso Azure ed ad illustrare alcune delle opportunità abilitate dalla adozione del cloud a valle della migrazione. L’intenzione, per intenderci, consiste nello sfatare un po’ dei miti per i quali “migrare in cloud la mia applicazione? Impossibile, perché bla bla bla bla, …”

L’invito è sempre il solito: se ci sarete ed avete voglia di fare 2 chiacchiere, non esitate a farvi avanti.

Adesso fa’ qualcosa che serva…

“…che è anche per te se il tuo paese è una merda” (cit.)

Amsterdam, giugno 2004. Keynote di TechEd Europe. Di fronte a 4000 persone Jean-Philippe Courtois, l’allora presidente di Microsoft EMEA, cede il palco ad uno speaker che, un po’ esitante, viene accompagnato alla scrivania e si accinge ad effettuare la propria demo. E’ accompagnato perché è un non vedente, e per i successivi 10 (o erano 15? 20, forse?) interminabili minuti non fa altro che provare a navigare su normalissimi siti web lasciando che lo screen reader, collegato all’impianto audio del centro congressi, “leggesse” ciò che riusciva a capire dei siti. Cioè poco. Troppo poco. Pochissimo. Nisba. Nada. UN CAZZO.

Io, che ormai sviluppavo “professionalmente” applicazioni web dal 1998, tutto d’un tratto capii perché le table (& c.) siano il Male e quanto fossi stato stronzo superficiale a non interessarmi di tematiche di questo tipo per 6 anni. 6 anni non son bruscolini, sono una significativa finestra temporale di stronzaggine superficialità.

Ma il tempo è gentiluomo, no? Concordo e, infatti, ha impedito che quella sensazione di profonda vergogna svanisse dalla mia memoria.

“Never again, is what you swore the time before” (cit.)

Ed ecco perché, piccolo esempio, il sito UGIdotNET usa le estensioni semantiche di HTML5 permettendo ad uno screen reader che le supporti di *sapere* quale sia il contenuto della pagina.

Ecco perché, soprattutto, UGIdotNET (associazione della quale mai come in questo caso sono orgoglioso di essere presidente) sta organizzando, in collaborazione con DevMarche e l’Unione Italiana dei Ciechi e degli Ipovedenti, gli HACK-cessibility Days, una manifestazione di sensibilizzazione sull'Accessibilità e sulle Disabilità Visive dedicata a sviluppatori software, designer e maker che si svolgerà ad Ancona il 19 e 20 maggio.

Chi, potendo partecipare, non lo facesse perché “Ma si, che vuoi che sia…” non sarebbe molto diverso dall’Andrea di 13 anni addietro; non vorrei essere nei suoi panni, faccio già fatica a stare in quelli dell’Andrea del 2017.

Microsoft <3 Open Source (?)

Lo scorso dicembre, su invito di Microsoft Italia ho partecipato in qualità di relatore al meetup “Microsoft e la openness” organizzato in seno a WPC; è stata una serata interessante ed alcuni partecipanti mi hanno riferito che molte tra le informazioni che ho fornito non erano loro note: ho pensato quindi di raccogliere in questo post un sunto di quanto mostrato in quella sede.

Ossimoro

L'ossimoro (dal greco ὀξύμωρον, composto da ὀξύς, «acuto» e μωρός, «ottuso»[1]) è una figura retorica che consiste nell'accostamento di due termini di senso contrario o comunque in forte antitesi tra loro.[Wikipedia]

Apparentemente difficile, leggendo il titolo di questo post, non pensare che sia un ossimoro: dovremmo/potremmo forse dimenticare affermazioni quali “Linux è un cancro”? Certamente no, la mia storia familiare è incompatibile con il prendere alla leggera un riferimento al suddetto brutto male. Però… C’è un però: la comunicazione può essere infelice ma, come dice Rachel a Bruce Wayne, “è quello che fai che ti qualifica” (cit.); beh, se portiamo la nostra riflessione sul piano delle azioni l’ossimoro sbadisce e con esso la sorpresa derivante da avvenimenti quali la trasformazione di .NET in un progetto open source o l’ingresso di Microsoft nella Linux Foundation.

Eccola, la storia di .NET espressa sotto forma di tabella cronologica:

  • 8/2000: HP, Intel e Microsoft iniziano a lavorare congiuntamente alle specifiche di CLI (Common Language Infrastructure)
  • 10/2001: le specifiche CLI diventano lo standard ECMA 335
  • 4/2003: le specifiche CLI diventano lo standard ISO 23271
  • 19/7/2001: nasce Mono, prima implementazione FOSS di ISO/IEC 23271
  • 30/4/2004: Mono 1.0
  • 27/6/2016: rilascio di .NET Core sotto licenza MIT (solo il 40% del codice è contribuito da Microsoft)

In estrema sintesi, .NET ha la openness nel proprio DNA, essendo uno standard ISO: ne esiste una implementazione open da 12 anni, si chiama Mono. Ma allarghiamo il campo da uno specifico contesto, quello .NET appunto, alla azienda Microsoft e facciamolo ricorrendo allo stesso strumento, ossia quello della timetable.

  • 27/6/2016: rilascio di .NET Core sotto licenza MIT
  • 28/3/2012: rilascio dello stack web (ASP.NET, WebAPI, EF) sotto licenza MS-PL (codice)
  • 3/10/2007: rilascio di .NET Framework sotto licenza MS-RSL
  • 1/5/2006: rilascio del AJAX Control Toolkit sotto licenza MS-PL (codice)
  • 6/2004: rilascio di Windows sotto licenza Shared Source
  • 5/4/2004: rilascio di WiX sotto licenza CPL
  • 3/2002: rilascio di Rotor per FreeBSD, OS X 10.2 e Windows XP (licenza non commerciale, codice)
  • 2001: lancio della iniziativa Shared Source

E insomma, ne vien fuori che il primo progetto rilasciato da Microsoft sotto una licenza OSI risale al 2004 (ed era il motore di Windows Installer usato da “roba” come Office, non bruscolini) ed i primi vagiti di openness addirittura al 2001/2002 con Rotor, ossia… Il runtime e la Base Class Library di .NET J

Il percorso che porta la Bash in Windows 10, Microsoft ad essere tra i maggiori contributor allo sviluppo di Linux nonché l’azienda che dedica il maggior numero di sviluppatori alla realizzazione di progetti FOSS, parte da lontano, da 15 anni addietro e possiamo dire che una comunicazione sconveniente rendeva, ehm… Difficile accorgersene.

“Body and soul come together” dicevano i Depeche Mode, e di certo vedere comunicazione ed azione essere finalmente sinergiche è estremamente positivo nonché qualcosa che non vedevo l’ora avvenisse. Ad maiora.

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: ,,
«settembre»
domlunmarmergiovensab
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910