Technology Experience

.NET World

Programmazione, libri, snippet di codice, articoli tecnici

.NET World

“Get Latest Version” da command line: assicurarsi di usare il tf.exe corretto

Per voi che, lavorando seriamente, utilizzate TFS come source control, vi potrebbe tornare utile sapere che è possibile effettuare tutta una serie di operazioni dalla command-line, sia essa il classico command prompt del DOS, piuttosto che PowerShell. A quale scopo? Per automatizzarle, per esempio, perchè per certi versi è più comodo fare doppio click su uno script già bello pronto, piuttosto che aprire Visual Studio, raggiungere il Source Control Explorer, e poi cliccare dal menù contestuale la voce Get Latest Version (GLV).

Vi rimando a questa pagina per maggiori informazioni.

E’ possibile fare davvero di tutto: gestire check-out e check-in, ottenere informazioni sul proprio workspace, gestire i branch, aggiungere/rimuovere nuovi file o cartelle, consultare i pending changes, e molto altro ancora.

Quella che serviva a me, per velocizzarmi il lavoro, è quello di effettuare il GLV. Ci sono diverse sintassi per farlo; quella che utilizzo io è forse la più semplice:

CD C:TFSNomeAppNomeBranch
%ExeTf% get "$/Nomeapp/NomeBranch" /recursive

E’ possibile aggiungere il parametro “/preview” per simulare un GLV senza però sovrascrivere le cartelle ed i file del proprio workspace locale.

Sappiate che potreste incappare in un errore di esecuzione che tra le altre cose dice: “Unable to determine the workspace using TF.exe“. E’ segnalato in tantissime pagine sul web, compresa questa su StackOverflow. Troverete tantissime soluzioni; forse l’errore più comune e frequente è che TF.exe va eseguito da una cartella già mappata nei percorsi locali di TFS. Ecco il motivo per cui io nel mio script ho inserito un comando CD prima di eseguirlo. In più bisogna assicurarsi di usare i parametri giusti nello script che riportano username, password (oppure un utente di dominio), e così via.

Nel mio caso la questione era ancora più subdola. Sul mio HD il file TF.exe è presente in più copie, forse una per ciascuna versione di Visual Studio installata.

Il primo si trova qui: “C:Program Files (x86)Microsoft Visual Studio2017EnterpriseCommon7IDECommonExtensionsMicrosoftTeamFoundationTeam Explorer”. Un secondo invece si trova in “C:Program Files (x86)Microsoft Visual Studio 12.0Common7IDE”.

E’ assolutamente necessario lanciare il TF.exe corretto, altrimenti continuerete a ricevere lo stesso errore.

Se utilizzate Visual Studio 2017 Enterprise Edition, insomma, va lanciato il primo. Tornando allo script iniziale, ho banalmente valorizzato la variabile %ExeTf% come “C:Program Files (x86)Microsoft Visual Studio2017EnterpriseCommon7IDECommonExtensionsMicrosoftTeamFoundationTeam Explorer f.exe” ed il gioco è fatto.

Send to Kindle
.NET World

Godere della Windows Timeline sotto Android

Una delle feature che mi capita di utilizzare con Windows 10 (non così spesso, ma quando ne ho bisogno diventa vitale) è la Timeline, ciò quella funzionalità che traccia e salva sul cloud (ebbene sì) le attività che fate su documenti e pagine web, in modo che se switchate da un PC all’altro…siete in grado di recuperare i link, le pagine visitate ed i documenti aperti da OneDrive. Quindi immaginatevi di aprire dal vostro account documenti Excel oppure Word, scansioni in PDF, immagini, qualsiasi file…Timeline se lo ricorda.

Maggiori informazioni sulla Windows Timeline le trovate qui.

Questa cosa funziona su tutti i PC Windows sui quali accedete con lo stesso Microsoft Account, ovviamente, ma non solo. Se avete un telefono Android ed installate il Microsoft Launcher, come ho fatto io, potete raggiungere la Timeline anche sotto Android.

Qui sopra potete vedere una schermata tratta dal mio smartphone personale, un Asus Zenfone 4 Max, su cui ho installato il Microsoft Launcher. Quelle che vedete qui sopra sono le ricerche del 27 ottobre scorso fatte con Edge, che uso come browser principale. Qui sopra non le vedete, ma la Timeline vi mostrerebbe anche voci relative a fogli Excel, il tutto raggruppato per giorni, ore, domini visitati, etc. etc.

L’app Microsoft Launcher pubblicata sul Play Store aggiunge altre funzionalità al vostro telefono Android: la gestione degli sfondi, degli widget, delle pagine e delle gesture. Prevede anche un menù contestuale per ogni tile, così che possiate per esempio disinstallare le app in modo rapido e con un look’n’feel simile al caro Windows.

Send to Kindle
.NET World

Utilizzare git dietro ad un proxy aziendale

Quando siete all’interno di una LAN aziendale protetta da un proxy, potreste avere dei problemi ad utilizzare gli strumenti di Git sotto Windows.
Mi riferisco in particolare a tre strumenti, quelli che utilizzo più spesso:

  • il tool git dalla command line
  • la “GitHub extension for Visual Studio” (con Visual Studio 2017)
  • il tool “GitHub Desktop” per Windows

Senza indicare il proxy aziendale, tutti questi tool vi daranno errori di diverso tipo, probabilmente di timeout, perchè la connessione alla rete non è diretta ma passa appunto attraverso un proxy. Come si risolve un problema di questo tipo?

1) Prima opzione: agendo manualmente sul file .gitconfig
Aprite la cartella %USERPROFILE% da esplora risorse ed editate a mano il file .gitconfig.

Basta andare in un qualsiasi punto del file ed aggiungere i due parametri:

[http]
proxy = <vostro_proxy>
[https]
proxy = <vostro_proxy>

E’ decisamente la strada più rapida ed efficace se siete dev ed avete un Notepad++ pronto all’uso.

2) Seconda opzione: utilizzando il command “git”
Con il secondo modo otteniamo alla fine lo stesso risultato, ma andiamo però ad utilizzare direttamente il tool “git” dal classico command prompt oppure da Powershell.
E’ sufficiente eseguire questi due comandi:

git config --global --add http.proxy <vostro_proxy>
git config --global --add https.proxy <vostro_proxy>

Quello che otterrete alla fine è la modifica del file .gitconfig di cui parlavamo prima. Eventualmente potete fare un check della configurazione corrente con il comando:

git config --list
Send to Kindle
.NET World

Utilizzare npm dietro ad un proxy aziendale

L’altro giorno ho voluto installare Angular CLI sul mio PC che utilizzo per lavorare, che è collocato dietro un proxy aziendale. Quindi, il tradizionale comando:

npm install -g @angular/cli

ovviamente non funziona, nel senso che dopo un certo timeout vi dà un errore perchè npm non riesce a scaricare i pacchetti indispensabili per avere Angular ready-to-run. Come fare? E’ necessario configurare npm, aggiungendo due parametri “proxy” e “https-proxy”, in questo modo:

npm config set proxy url
npm config set https-proxy url

Ovviamente al posto di “url” indicato l’IP del vostro proxy.
Ed il gioco è fatto!

Send to Kindle
.NET World

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
.NET World

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
.NET World

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
.NET World

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
.NET World

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
.NET WorldVisualStudioTips.net

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