Technology Experience
.NET World

VS2017 : Close All But Tool Windows

Con il rilascio di Visual Studio 2017 version 15.9 è comparsa una nuova voce di menù in Visual Studio 2017, posizionata sotto il menù Window.

Si va ad affiancare alla già nota Close All Documents.

Mentre la Close All Documents chiude indiscriminatamente tutti i tab aperti, senza farsi troppe domande, la Close All But Tool Windows chiude tutti i tab aperti (quindi ogni tipo di file sorgente .cs, .xaml, .css, .ts e via dicendo) lasciando però aperti eventuali tab contenenti strumenti di Visual Studio. Ad esempio:

  • Find and Replace, che utilizzo molto
  • Test Results
  • JSON Outline
  • Web Browser (c’è qualcuno che lo usa?)
  • Diagnostics Tools

Più in generale, tutti quei tool e pannelli che si aprono dai menù tradizionali di Visual Studio.
Comodo?

Send to Kindle
.NET World

Visual Studio 2017 15.9.2 – Export / Import configuration

Premessa
Se avete a che fare con un’installazione piuttosto corposa/complessa di Visual Studio 2017, che comprende cioè un gran numero di linguaggi, framework, strumenti, emulatori, etc. etc. probabilmente andate un po’ in panico quando lo dovete installare su una macchina nuova (o magari quando reinstallate il vostro PC). I casi sono due:

  1. andate per intuito
  2. o – come me – utilizzate un documento RTF di qualche tipo, che gestite nel tempo, che vi elenca esattamente tutti i componenti di cui avete bisogno

Quindi, lanciate l’installer di Visual Studio 2017, andate prima nella sezione Workloads e selezionate “a grandi linee”, poi vi spostate nella sezione Individual Components e selezionate in modo più preciso e puntuali tutto ciò che vi occorre. Che andiate ad intuito oppure seguendo una checklist, poco cambia.

La novità di Visual Studio 2017 – Release 15.9
Con l’ultimo rilascio di Visual Studio 2017 c’è una novità. E’ possibile esportare in un file .vsconfig la configurazione attuale dei componenti del vostro VS2017, allo scopo di poterla importare in un altro installer. Questo semplifica di molto le operazioni per un nuovo setup, evitando di dover selezionare a mano, di sbagliarsi in qualche modo, etc. etc.

L’operazione di export di per sè è praticamente immediata. Il file .vsconfig è sostanzialmente un file in formato json che contiene l’elenco di tutti i package della configurazione corrente. Lo esportate da una parte, lo importate successivamente sullo stesso o su un altro PCe vi troverete tutto quanto già selezionato senza troppe complicazioni. Bene così.

Send to Kindle
.NET World

Evitare l’autoscroll della ListBox in WPF

La settimana scorsa ho notato un comportamento standard della ListBox di WPF, che ho sempre accettato in realtà senza rendermene conto, ma che nell’applicazione che stiamo sviluppando non andava troppo bene. In pratica, la ListBox compie uno scroll automatico quando viene selezionato un elemento parzialmente visibile, allo scopo di farlo vedere completamente all’utente. Guardate il video qua sotto.

All’inizio del video, per esempio, viene cliccato e selezionato il numero 6. Trattandosi di un elemento parzialmente renderizzato, e quindi parzialmente visibile, cosa succede? Che WPF fa scorrere la ListBox verso l’alto per fare in modo che l’utente possa vedere l’intero item. La stessa cosa accade poco dopo con il numero 4094, e dopo ancora con il 4125.

Si può evitare questa cosa? Certo che sì.

Si tratta di intercettare l’evento RequestBringToView, che la ListBox scatena proprio nei casi citati sopra. By default, allo scatenarsi di quell’evento (ed in realtà anche di altri, come il GotFocus) la ListBox chiama automaticamente il metodo BringToView(), proprio per portare in visibilità l’elemento selezionato. Il gioco sta nel bloccare questo comportamento predefinito, in questo modo.

1
2
3
4
5
6
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<EventSetter Event="RequestBringIntoView"
Handler="ListBoxItem_RequestBringIntoView" />
</Style>
</ListBox.ItemContainerStyle>

In pratica grazie ad un piccolo snippet XAML si va ad intercettare l’evento RequestBringToView, facendo eseguire una riga di codice C# che va marcare l’evento come gestito, evitando il normale comportamento della ListBox.

1
2
3
4
5
private void ListBoxItem_RequestBringIntoView
(object sender, RequestBringIntoViewEventArgs e)
{
e.Handled = true;
}

Questa piccola implementazione vale per ListBox, ListView, GridView, etc. etc.

Send to Kindle
My personal life

Sandro Tonali, ovvero: scoprire il proprio talento per vivere meglio

Penso che una delle migliore cose che possano capitare ad una persona sia quella di scoprire, fin da piccoli, il proprio talento. Facendo qualche veloce ricerca sul web, si trovano diverse definizioni della parola “talento”. Qualche esempio:

Capacità intellettuale non comune associata a genialità o estro vivace.

Dote, specialmente in quanto propensione a qualcosa, capacità in un’attività, in un settore.

Ingegno, predisposizione, capacità e doti intellettuali rilevanti, specialmente in quanto naturali e intese a particolari attività.

Mentre, tratto da questa pagina, trovo…

Il talento è dote. Se ne è naturalmente provvisti, e se non c’è non si può imparare – inclinazione troppo più profonda di una capacità, troppo più radicata di una passione, troppo più caratterizzante di un volto o di una maniera, per poter essere riprodotta o finta. È un taglio del sé.

Aggiungo del mio: avere un talento per una certa attività non significa di per sé che la faresti sempre ad ogni ora del giorno e della notte, è semplicemente quella cosa che ti esce istintiva, con il minimo sforzo, mentre magari vedi gli altri che per raggiungere lo stesso obiettivo arrancano. Il talento si palesa con un’intuizione naturale che hai innata dentro, ma che comunque richiede studio & dedizione costanti nel tempo per tutti i perfezionamenti del caso che faranno di te un professionista completo.

Io penso di averlo nel mio lavoro, così come tanti altri ce l’hanno nel loro. E probabilmente anche mio cugino, Sandro Tonali, ce l’ha nel suo. Visto che quando era piccino giocava a calcio virtuale sulla Playstation, poi è cresciuto ed ha cominciato a giocare veramente a pallone, fino a raggiungere il calcio giocato, quello vero, nella serie B con il Brescia.

Ed in questi giorni è stato convocato da Roberto Mancini con la nazionale maggiore, per giocare un’amichevole contro gli Stati Uniti il 20 Novembre, accanto a gente come Chiellini, Bonucci, Verratti, Insigne, Immobile e via dicendo. Paura vera.

Mi capita sempre più spesso di vederlo in TV, intervistato o sul campo da gioco, e devo dire che sono proprio felice per lui. Perchè a 18 anni probabilmente ha già capito da un po’ qual è il suo talento, e probabilmente è circondato dalle persone giuste capaci di farglielo fruttare come si deve. Bravo a lui, alla sua famiglia più vicina, e chiunque sta contribuendo al suo successo!

Buona fortuna, cugino!

Send to Kindle
.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
My daily work

Ogni era ha il suo reborn

Il mio primo blog su quello pubblicato su UGIdotNET, all’indirizzo http://blogs.ugidotnet.org/idamiani. Era gestito da .TEXT, se non ricordo male, e si chiamava Technology Experience. Poi, nell’aprile del 2007, mi staccai da UGIdotNET e diedi vita al mio blog indipendente, pubblicato attraverso il mio dominio vivendobyte.net, e lo rinominai come Technology Experience (reborn). Questo è il blog che continuate a leggere anche oggi. Nei mesi e negli anni a venire ho aprofittato dei miei piccoli e grandi cambiamenti  lavorativi per incrementare il lato reborn.

Non ricordo esattamente l’evento scatenante che mi portò ad inserire reborn 2 nel titolo. E non ricordo neppure reborn 3 e reborn 4. Gli ultimi anni sono stati troppo frenetici, probabilmente.

Oggi il mio blog diventa reborn 5.

Questo incremento è dovuto al cambiamento lavorativo di cui vi ho raccontato nel mio ultimo post. Nuovo stile, grafica leggermente rifatta, nuovo tema (che a quanto pare è anche responsive, per cui su dispositivi mobile non dovreste più avere gli stessi problemi di prima).

Beh, buona lettura!

Send to Kindle