Un team come pochi

Nell’autunno del 2014 ho tenuto un corso che avrebbe impattato non poco nel mio lavoro nei mesi a venire. Solo che al momento non lo sapevo. Quella mattina arrivano tre figure: Davide, Sabrina ed Ivano. Ufficialmente avevano bisogno di un corso di architettura del software, implementata attraverso .NET Framework con C# attraverso un’applicazione desktop WPF. Il loro obiettivo, una volta terminato il corso, era buttare via una vecchia applicazione C++ scritta negli anni ’90, che ormai stava diventando davvero antiquata ed ingestibile, per riscriverla con tecnologie più moderne ed al passo con i tempi.

Il corso è durato soltanto qualche giorno, al termine del quale è stata richiesta la mia collaborazione al progetto. Beh, alla fine abbiamo lavorato assieme per circa quattro anni. Io per la maggior parte del tempo lavoravo da casa, in autonomia; una volta al mese andavo in trasferta per un paio di giorni in sede, dal cliente, che è praticamente ad un tiro di schioppo dall’aeroporto di Malpensa. Quello che è saltato fuori alla fine di tutto è una bella applicazione Windows Presentation Foundation, con Model-View-ViewModel fatto come dio comanda, repository, separation of concerns, dependency injection, Entity Framework, unit-testing, etc. etc. Non voglio scendere nei dettagli, ma devo dire che è stata una bella sfida. Abbiamo inserito spunti di reflection e di Roslyn per la compilazione dinamica. Abbiamo utilizzato pesantemente i controlli Infragistics, in qualche caso ristilizzando molti componenti WPF per adattarli alla user experience voluta dal cliente. E’ stato bello ed intenso, a tratti un po’ complicato per la difficoltà di coordinamento tra gli sviluppi da fare e le altre mie attività a cui venivo assegnato.

Eccoci qua. Da sinistra verso destra: Davide M. – Sabrina P. – Ivano R.

Di loro tre ricordo con piacere il clima divertente e costruttivo con il quale si lavorava, tutti i pranzi nella mensa aziendale, le serate al pub, la serata in pizzeria per festeggiare il mio compleanno. Ricordo una serata particolare con Davide passata da un pub all’altro, quando poi mi riaccompagnò in hotel alle ore 2:00: ed il giorno dopo eravamo tutti e due belli pimpanti davanti al nostro codice C#. Ricordo il supporto logistico di Davide quando squarciai la gomma della mia Honda Civic in una delle mie mattine in trasferta, andando a sbattere come un perfetto idiota contro un marciapiede di Cardano al Campo (Varese).

Adesso, avendo io cambiato azienda e ruolo, li ho abbandonati. Il prossimo software che dovranno scrivere (ho partecipato ad una prima analisi ed alla stesura di un prototipo funzionante) lo dovranno fare da soli, ma so per certo che sarà migliore del primo che abbiamo scritto assieme.

Ciao Davide! Ciao Sabrina! Ciao Ivano! In bocca al lupo!

Send to Kindle

Corso C# avanzato in quel di Venezia? Terminato!

Un sentito grazie a Matteo, Marcomattia, Ivano, Paolo ed Enrico (rigorosamente da sinistra a destra nella foto qui sotto), per avermi pazientemente ascoltato per quattro giorni durante il mio corso su C# avanzato, da lunedì 27 a giovedì 30 di questa settimana. Di cosa abbiamo parlato? Di generics, eventi, delegate, LINQ, async & await, di un pezzetto di mondo di TPL, Reflection, e di molto altro ancora che qui non posso menzionare.

E’ molto molto bello avere avuto l’ennesima conferma del fatto che ci sono sviluppatori davvero tosti, in tutte le parti d’Italia; questa volta li ho incontrati nella provincia veneta. E’ stato un corso nel quale anche io ho imparato qualcosa, perché come è facile intuire quando si tiene un corso a gente tosta, anche quest’ultima è parte attiva e dà il suo contributo. Grazie ad Enrico (l’ultimo sulla destra nella foto) ho conosciuto per esempio Service Stack e CSLA, che vorrei approfondire – se il tempo me lo permetterà – in futuro.

Beh, insomma, ci siamo scattati una fotografia tutti assieme come ricordo, che mi fa piacere pubblicare qua sul mio blog, più che altro perché è uno degli ultimi corsi che tengo. Ma questa è un’altra storia di cui vi parlerò a breve su queste stesse pagine.

P.S. : un “congratulazioni” ad Ivano P. che, nella serata di ieri, ha sostenuto e superato l’esame di certificazione su C#. Avanti così!!!!

Send to Kindle

Visual Studio 15.8 alla ricerca della parentesi graffa (chiusa) mancante

Se dopo l’installazione della versione 15.8 di Visual Studio 2017 avete problemi ad inserire nel codice la parentesi graffa chiusa (“}”), effettivamente c’è un bug, del quale fortunatamente esiste già un workaround. Seguite questi passaggi:

  • Aprite Visual Studio 2017
  • Andate nel menù Tools –> Options
  • Andate nella sezione Envinronment –> Keyboard
  • Nella casella di ricerca indicata da “Show commands containing” digitate “Edit.ExpandSelectiontoContainingBlock”
  • Vedrete che c’è la combinazione di tasti Ctrl+Shift+Alt+=
  • Cliccate sul pulsante Remove e confermate su OK per chiudere la finestra di dialogo

Et voilà, il problema è risolto. Ovviamente ci si attende che Microsoft risolva questa piccola svista con i prossimi rilasci.

Un ringraziamento a questi due tweet di Matteo Pagani e di Alessio Iafrate, che mi hanno permesso di trovare la soluzione.

Send to Kindle

Il silenzio sui social

Ci sono regole non scritte grazie alle quali il mondo si regge. Sono le regole del buonsenso. Ma affinchè queste regole continuino a funzionare, è necessario che esse vengano costantemente rispettate e seguite da tutti. E’ sufficiente che una sola persona evada da questa visione per far saltare gli schemi. Immaginate un autista contromano, oppure qualcuno che continua a suonare all’impazzata i citofoni della palazzina dove vivete, volumi delle radio e delle TV al massimo livello, uno che salta la fila alle poste, e così via. Sarebbe l’anarchia, no?

Una di queste regole è quella che riguarda il silenzio sui social. E’ di pochi giorni fa il dramma che ha colpito la città di Genova, con il crollo del ponte Morandi, che ha purtroppo causato la morte di decine di persone, con feriti, sfollati, eccetera eccetera. Sui social ovviamente si è scatenata la bagarre, a torto o a ragione. Discussioni infinite sulle cause, su chi doveva intervenire, sui selfie dei vari personaggi politici che hanno partecipato ai funerali di stato, sugli allarmi inascoltati lanciati negli anni precedenti, sui fischi a quelli del PD & sugli applausi a quelli dell’attuale maggioranza. E, si sa, come sempre sui social ogni cosa è amplificata ed esasperata.

Ho visto anche qualche amico invocare un po’ di silenzio, nel segno del rispetto verso chi ha perso la vita e verso i loro familiari. Io personalmente sono anche d’accordo, ma come dicevo all’inizio, è necessario che questo silenzio sia rispettato da tutti, altrimenti il meccanismo non sta in piedi, ma proprio per niente. Non trovo corretto aprire il proprio profilo Facebook e vedere un elenco infinito di post e condivisioni che rappresentano solo una parte dell’opinione pubblica, a maggior ragione che non rappresenta il mio. Secondo me, stiamo vivendo un’epoca nella quale ciascuna deve fare la sua parte, esprimendo la propria idea ed opinione. Per dirla diversamente: immaginatevi di aprire Facebook e di trovare un elenco spropositato di sciocchezze e fake news (alcune oggettive, altre meno). Come reagireste? Non vi verrebbe voglia di gridare la vostra verità? Credo proprio di sì. Anche perchè il risultato di un eventuale vostro non agire, sarebbe ancora più disastroso: tutte le notizie che circolano sui social sarebbero di parte, non vi rappresentano. Dal mio punto di vista è come leggere continuamente che 1+1 fa 3. No, c’è qualcosa che non va.

Tra l’altro, ritengo che il silenzio sui social per certi versi non debba esistere. D’altronde, nei bar e nei luoghi pubblici le persone hanno sempre parlato tra di loro, anche di fronte a fatti di cronaca, per cui perchè questo non deve avvenire anche sui social? Semmai la cosa difficile è parlarsi e confrontarsi con educazione, garbo e rispetto l’uno dell’altro. Purtroppo i social ad oggi banalizzano molto il dialogo (per la serie: se non sei con me, allora sei contro di me), e lo rendono aspro, duro e violento. Chissà, magari un giorno questo atteggiamento svanirà, ma è molto più probabile che i social così come li conosciamo oggi spariranno, soppiantati da altre forme di comunicazione digitali.

Send to Kindle

L’importanza dei tempi morti

Partiamo da un semplice presupposto: noi umani non siamo macchine pensate per produrre solo ed esclusivamente profitto, e non siamo stati progettati per avere una availability lavorativa del 99,99%. Per vivere bene, a lungo ed in salute abbiamo bisogno dei nostri tempi morti, che vengono scioccamente chiamati così ma che invece non lo sono affatto, almeno per quanto mi riguarda. La notte, durante il sonno, noi non facciamo nulla di cosciente, ma il nostro cervello lavora comunque ed ha bisogno di farlo, e si occupa di attività che non potrebbe svolgere durante il giorno. Il sogno è una fra queste, ad esempio. E, credetemi, sognare serve.

Per questa ragione, mi preoccupa un po’ sentire parlare amici e colleghi di come diminuire i tempi morti nelle proprie giornate, allo scopo di ritagliare tempo per il lavoro. Oggi si sta cavalcando moltissimo l’idea della macchina che guida da sola, e tantissimi (giustamente?) non vedono l’ora che diventi realtà. “Sai quanto tempo potremmo guadagnare ogni giorno?”, “Sai quanto tempo passo in coda per andare al lavoro?”. Certo, ovviamente, ovvio che in queste circostanze l’auto a guida autonoma potrebbe tornare utile. Ma mi dà terribilmente fastidio vedere come ci siano persone disposte a tutto pur di guadagnare tempo. Fidatevi: il tempo non basta mai, se riempiamo troppo le nostre giornate. Sarebbe una continua rincorsa. Non per niente a volte si afferma di aver bisogno di giornate da 48 ore. In futuro qualcuno potrebbe proporre di non dormire così tanto, o che mangiare come facciamo oggi è del tutto inutile (potremmo ingoiare una pillola in 15 secondi con tutte le sostanze che abbiamo bisogno), etc. etc. Passare del tempo bloccati in auto è ovvio che è una perdita di tempo, ma sarebbe una perdita di tempo anche un serata in pessima compagnia o un pranzo indigesto; la soluzione ad un pranzo indigesto non è evitare di mangiare, ma è mangiare meglio. La soluzione ad un viaggio in auto andato storto non è evitare di guidare facendolo fare ad una macchina o ad un software, ma è guidare in condizioni migliori (partire in un altro momento). Dobbiamo distinguere tra attività noiose e monotone, per le quali i software sono portati, ed attività che ad oggi sembrano perlopiù dei contrattempi ma che possiamo migliorare.

I “tempi morti” dal mio punto di vista sono importanti. Quante volte vi è capitato di avere un’idea mentre facevate tutt’altro? Magari proprio alla guida o mentre siete in bagno a farvi la barba? I “tempi morti” sono intervalli di tempo durante i quali non fate razionalmente una determinata attività, ma il vostro cervello – fidatevi – sta lavorando eccome. E dietro le quinte sta proprio lavorando a quel problema di AngularJS o WPF che vi affligge. Penso che per vivere e lavorare bene una persona debba assolutamente godere di tempi morti, passati davanti ad un videogioco, alla lettura di un libro, alla guida di un’auto durante una gita fuori porta, in coda alla cassa, in attesa alle Poste o all’ospedale. Come dicevo all’inizio, non siamo individui pensati per produrre e basta, ma dobbiamo soprattutto vivere. Ed i tempi morti sono parte della vita. Personalmente, per lavorare bene ed in modo efficace ho bisogno dei miei tempi di svago, e non riesco a switchare da un’attività all’altra a costo zero, come fa in modo continuo un PC. Prima di passare da un corso all’altro, per esempio, ho bisogno di tempo per fare altro, per staccare la spina un attimo, perchè non è per nulla semplice gestire classi di X persone parlando di tecnologia e di sviluppo del software.

Ritengo che il consumismo sfrenato ci stia un po’ facendo perdere parecchio di vista la bussola della nostra vita. Siccome abbiamo sempre più da fare, sempre più da leggere e da scrivere e da criticare, sempre più da correre e sempre più in fretta, siamo costantemente alla ricerca di blocchi di secondi e minuti da ritagliare qua e là. No, così non va. O perlomeno non è il modo in cui mi piace vivere.

Send to Kindle

Visual Studio 2017 ed il mese di aprile

Beh direi che di carne sul fuoco ce n’è abbastanza. Alla faccia di chi diceva che UWP è “poco considerato”. Ho raccolto qui sotto una serie di link tratti da MSDN sugli ultimi rilasci avvenuti nelle scorse ore per quanto riguarda Visual Studio 2017, .NET Framework, Universal Windows Platform.

Visual Studio 2017 Update
https://blogs.msdn.microsoft.com/visualstudio/2017/04/05/visual-studio-2017-update/

Visual Studio 2017 Performance Improvements
https://blogs.msdn.microsoft.com/visualstudio/2017/04/05/visual-studio-2017-performance-improvements/

Announcing the .NET Framework 4.7
https://blogs.msdn.microsoft.com/dotnet/2017/04/05/announcing-the-net-framework-4-7/

Updating your tooling for Windows 10 Creators Update
https://blogs.windows.com/buildingapps/2017/04/05/updating-tooling-windows-10-creators-update/#.WOXeGqlgXqU.twitter

Annoncing UWP Community Toolkit 1.4
https://blogs.windows.com/buildingapps/2017/04/03/announcing-uwp-community-toolkit-1-4/#.WOUMb6b_YB4.twitter#lyhX2JFgJp6liyL7.97

Windows 10 Creators Update SDK
https://blogs.msdn.microsoft.com/chuckw/2017/04/06/windows-10-creators-update-sdk/

Fresh Bits – Windows 10 Creators Update and Creators Update SDK
https://blogs.msdn.microsoft.com/marcelolr/2017/04/05/fresh-bits-windows-10-creators-update-and-creators-update-sdk/

Submissions using Windows 10, version 1703 are now being accepted!
https://blogs.msdn.microsoft.com/windows_hardware_certification/2017/04/05/submissions-using-windows-10-version-1703-are-now-being-accepted/

Team Explorer for TFS 2017
https://blogs.msdn.microsoft.com/bharry/2017/04/05/team-explorer-for-tfs-2017/

What’s new in Windows 10 Creators Update (Coming April 11)
https://blogs.msdn.microsoft.com/techtalks/windows-10/whats-new-in-windows-10-creators-update-coming-april-11/

Send to Kindle

Trello API su NuGet

Volevo segnalare la presenza di questi 3 package pubblicati su NuGet:

Manatee.Trello

Manatee.Trello.ManateeJson

Manatee.Trello.WebApi

Dopo la solita autenticazione effettuata via OAuth, avete tutta una serie di funzionalità read/write verso Trello, che vi permettono di leggere e scrivere bacheche, board, task e tutte le informazioni relative.

Ho provato, giusto per curiosità, le funzionalità di base, e ci sono tutte. Magari può interessare a qualcuno di voi in ascolto, magari per realizzare un client di qualche tipo, preferibilmente desktop (WPF) o meglio ancora UWP!

Smile

Send to Kindle

Documentazione UWP in formato PDF

E se vi dicessi che ci sono 5133 pagine di documentazione su UWP che vi stanno aspettando?

Mi è capitato sottomano un tweet, oggi, parecchio interessante.

You can download all Windows UWP docs in PDF form.

Ero già al corrente del fatto che la documentazione ufficiale UWP fosse stata spostata sul nuovo portale, ma onestamente questa news del formato PDF mi era proprio sfuggita. Detto questo, è sufficiente per esempio raggiungere l’url https://docs.microsoft.com/en-us/windows/uwp/get-started/your-first-app ed effettivamente in basso a destra c’è un bel link:

image

Cliccando il link, parte il download del file PDF. Se lo si fa con Edge, il download sembra che abbia qualcosa che non vada: appare il tradizionale viewer dei PDF, sembra che non stia scaricando nulla. L’ho fatto con Chrome e la cosa va un po’ meglio: c’è una progress-bar che mostra chiaramente il download in corso.

L’unico problema?
Il file pesa 54,5Mb, e comprende ben 5133 pagine di documentazione.
Buona lettura!

Send to Kindle

Visual Studio 2017 esce il prossimo 07/03

Beh, secondo questo post ufficiale Visual Studio 2017 uscirà ufficialmente il prossimo 7 marzo. Sarà un martedì. Quel giorno mi raccomando: scaldate i PC, riavviate i vostri modem per scaricare il più velocemente possibile i file iso per effettuare il setup.

Avrò occasione, qua sul mio blog ed in altre parte del web (ho delle sorprese in merito), di raccontarvi tutte le novità del nostro IDE. Vi parlerò di sviluppo di applicazioni desktop e di applicazioni UWP, di Azure, e di tanto altro ancora, come ormai è consuetudine.

Non mancate l’appuntamento!!!!

Send to Kindle

[Ammy.5] Modifiche a runtime del codice

Il linguaggio Ammy supporta una feature a mio avviso straordinaria, anche se ad oggi presenta dei piccoli bug, già segnalati.

Mentre la vostra applicazione WPF è in running, potete tranquillamente continuare a lavorare sul codice della UI – scritta in Ammy – senza interromperne l’esecuzione.

Per farlo, il runtime di Ammy utilizza i socket. Ecco il motivo per cui la prima volta che fate F5 con Visual Studio il firewall di Windows intercetta la comunicazione di rete:

image

Ovviamente dovete cliccare su Consenti accesso. Fatto questo potete mantenere l’applicazione in esecuzione (magari su un monitor secondario), tornare in Visual Studio ed editare in tutta libertà il codice Ammy. Ogni volta che salverete il file, Visual Studio scatenerà un refresh della Window.

Sulla homepage ufficiale di Ammy c’è un bel video di poco meno di 30 minuti che vi mostra questa caratteristica del linguaggio. Cito testualmente dalla fonte: “Note that application was always running during the development, never needing to restart”.

Voglio farvi notare un’ultima cosa, prima di salutarvi. Nell’editor di codice Ammy c’è un pallino che indica la validità del codice Ammy (lo ricordo, che riprende la sintassi dal JSON). Quindi:

  • Pallino verde: tutto ok
  • Pallino rosso: qualcosa non va in Ammy

image

Personalmente, ad oggi trovo piuttosto ostico scrivere Ammy. Dopo 10 anni di XAML, è dura cambiare linguaggio per la UI, ma i vantaggi ci sono, cerco di adeguarmi, per cui butto sempre un occhio a questo indicatore per avere una conferma visiva. Per ora non sto usando Ammy in alcun progetto reale per un cliente, ma non si sa mai.

Ok! Mi hai detto che ci sono dei bug, quali sono?
I bug di Ammy sono tanti, essendo un linguaggio in fase di sviluppo. Per rimanere sul tema di questo post, accade la seguente cosa. Supponiamo di avere un po’ di code-behind, legato ad un evento di un qualsiasi controllo della UI. Ricordate la PasswordBox di cui abbiamo parlato nell’ultimo post? Supponiamo di sottoscriverne l’evento PasswordChanged.

PasswordBox {
#Cell(1, 1),
VerticalAlignment: Center,
HorizontalAlignment: Stretch,
PasswordChanged: "changed"
}

E’ esattamente come faremmo con lo XAML. L’intellisense ci viene in aiuto, fino ad un certo punto. Purtroppo dobbiamo scrivere noi l’event handler legato a questo evento. Una volta che avete sottoscritto l’evento e predisposto l’event handler nel code-behind, ovviamente tutto funziona. Fate per scrivere una password, e passate dal codice del vostro handler. Nulla di strano fino a qua.

Se successivamente modificate il codice Ammy a run-time e salvate, la Windows viene aggiornata, ma l’event handler si sgancia. Morale: dovete stoppare e riavviare l’applicazione. Da tener presente che tutto questo accade se lavorate con eventi ed un po’ di code-behind. Se approcciate con MVVM il problema non si pone, ma c’è comunque.

Happy coding!

Send to Kindle