.NET Architectonics Pensieri, parole, opere ed omissioni. http://blogs.ugidotnet.org/dinoes/Default.aspx Dino Esposito http://blogs.ugidotnet.org/dinoes/Default.aspx Subtext 2020-05-16T13:43:02Z La sanità, il muratore e la cattedrale http://blogs.ugidotnet.org/dinoes/archive/2014/11/27/la-sanita-il-muratore-e-la-cattedrale.aspx 2014-11-27T12:01:02Z 2014-11-28T09:41:54Z In Italia non esiste una classe dirigente che capisca l'importanza del software. Questa classe dirigente--a cominciare dal piu tennologico e italiota dei primi ministri--si riempie la bocca di cose-da-cominciare-a-fare e di cose-da-smettere-di-fare ma non va mai oltre il paroleggio. E le parole, anche quelle dorate di uno "ubiquitous language" perfetto, restano parole e non diventano quasi mai implementazione. La mia riflessione è che questo accada certamente perché la politica è un mestiere con forti tradizioni di famiglia. Ma andando oltre, provando ad avvicinarsi al cuore del problema, io mi azzarderei a dire che accade perché nessuno sa bene cosa sia il software e a cosa serva. E nessuno ha idea di quanto sia vitale. E nessuno si azzarda a dotarsi di advisor giusti. Gli advisor ci sono ma sono pescati tra coloro che non sono riusciti a fare politica. Se già un politico è scarso, l'advisor di un politico è ancora più scarso. Entri in un ospedale--almeno un grande ospedale--e ti rendi conto che le procedure ci sono; che gli operatori seguono delle regole di business chiare e definite. Ti rendi pure conto che quelle regole determinano processi che funzionano. E quando ci sono storture e brutture è soprattutto per l'ossessione burocratica e numerica dei costi. E ti rendi conto, però, che queste regole di business e questi processi sono implementati come se fossimo fermi al 1980. E' tutto di carta--ed è un costo. E' tutto un tracciare di carta--ed un doppio costo. E' tutto di una lentezza esasperante e burocratica--ed un costo. Così finisce che la burocrazia ritarda l'intervento se per caso il nome del medico curante non è scritto a penna sulla cartella di carta. E però non ti fanno entrare se non hai la tessera sanitaria. E la tessera sanitaria viene usata, udite udite, solo per fare una fotocopia. Follia. C'è sulla gazzetta ufficiale firmata da monti (!!!) l'istituzione della cartella clinica elettronica. Ma nessuno al ministero ha mai fatto un passo per capire come implementarla. Cioè monti (o chi per lui) si limita a dire dal 1. gennaio entra in vigore la cartella elettronica. Cazzi vostri. E comimcia un "cazzi vostri" burocratico che prima o poi raggiunge la foglia del grafo. Ma la foglia non può fare nulla. E nulla si fa. Sono stati fatti timidi tentativi di implementazione, ma ciascuna ASL ha chiamato la sua software house di fiducia e si sono arenati per manifesta incapacità di gestire un progetto "così complesso". Ma come "ciascuna ASL"? Già, proprio così: niente centralizzazione. Eppure il software complesso nel mondo reale esiste e viene scritto; e avviene anche in Italia. Basta prendere le persone giuste, con skills reali e misurabili, prenderli dal mondo reale e non dal sottobosco della politica e pagarli come si deve per fargli elaborare un progetto. I costi? Follia. Giusto per dare un'idea: le mie tariffe (altissime per gli standard italiani, ma nella media europea) produrrebbero un costo di gran lunga inferiore (!!!) a quanto si paga normalmente nel sottobosco della politica; per il nulla. Si vede che siamo un paese di letterati: tutti devono aver letto i pilastri della terra di Ken Follett. Dove un muratore, Tom, pagato da un priore costruisce una cattedrale. A dire il vero, Tom costruisce mezza cattedrale. E la cattedrale poi crolla. Ecco, appunto. Ma quello era il medioevo; noi saremmo nel 2015.<img src="/dinoes/aggbug/101906.aspx" width="1" height="1" /> A noi c'ha rovinato l'autsursing http://blogs.ugidotnet.org/dinoes/archive/2014/09/26/a-noi-cha-rovinato-lautsursing.aspx 2014-09-26T10:49:32Z 2014-09-26T10:49:32Z Autsursing all'italiana è l'atto di "ricorrere ad altre imprese per lo svolgimento di alcune fasi del processo produttivo" delegando COMPLETAMENTE ad esse tempistica (salvo vaghe alzate di voce), documentazione e soprattutto controllo di qualità. In sostanza, un'azienda trova più comodo pagare e lavarsi le mani dell'implementazione di parte dell'infrastruttura del proprio business. E' un vecchio tormentone sempre attuale quello che Petrolini prima, e Sordi poi, hanno genialmente proposto e riproposto nel passato. "A me m'ha rovinato la guera", diceva il personaggio Gastone, fatuo e inconcludente, riferendosi negli anni 20 alla Grande Guerra che gli avrebbe impedito l'affermazione professionale e umana. A mio modo di vedere, invece, un fondamentale malinteso sul senso ultimo dell'outsourcing è alla base di molti problemi di digitalizzazione di molte aziende italiane e, manco a dirlo, della PA. Outsourcing è l'atto di "ricorrere ad altre imprese per lo svolgimento di alcune fasi del processo produttivo". In sostanza, un'azienda trova più economico e scalabile per il proprio business acquistare servizi da altre aziende specializzate invece che costruirsi al proprio interno una struttura ad hoc. Autsursing all'italiana, invece, è l'atto di "ricorrere ad altre imprese per lo svolgimento di alcune fasi del processo produttivo" delegando COMPLETAMENTE ad esse tempistica (salvo vaghe alzate di voce), documentazione e soprattutto controllo di qualità. In sostanza, un'azienda trova più comodo pagare e lavarsi le mani dell'implementazione di parte dell'infrastruttura del proprio business. Nell'IT che succede? Che l'azienda X (che può tanto essere una mini SRL, quanto una PMI o un mastodonte parastatale) si rivolge ad un vendor hw/sw il quale gli suggerisce un'azienda partner--tipicamente un aggregatore/integratore di sistemi. E fin qui nulla da dire. Il portfolio naturalmente fa la differenza e quindi l'azienda partner viene scelta sulla base della credibilità dimostrabile. E fin qui tutto bene. Aziende di consulenza nazionali o più finiscono per dividersi la torta--che siano quelle che hanno a che fare con motori, che si occupino di accenti o repliche. Il problema nasce dal fatto che queste aziende che prosperano sul autsursing hanno strutture poco agili e non possono permettersi di tenere il personale a spasso in attesa di allocazione. Ciò che finisce per contare quindi NON è la qualità del lavoro, l'innovazione fornita, il valore aggiunto e duraturo. Conta portare il "progetto a casa" così da avere l'approvazione per inserire un'altra casella nel portfolio in vista del prossimo cliente. Ciò che manca è la valutazione oggettiva soprattutto da parte del cliente finale della qualita del lavoro. E nel caso in cui il lavoro NON sia fatto a regola d'arte manca COMPLETAMENTE il senso della "punizione". Lo scorecard resta immacolato; manco fosse una roba read-only. Uno dice "ho chiamato la super azienda X che mi ha raccomandato il super vendor Y. Che altro potevo fare di meglio? Se fanno un lavoro di merda mica è colpa mia? Non è mia responsabilità". Tocca inserire su wikipedia anche la definizione diautsursing. <img src="/dinoes/aggbug/101885.aspx" width="1" height="1" /> Bootstrap e la tassonomia http://blogs.ugidotnet.org/dinoes/archive/2013/12/16/bootstrap-e-la-tassonomia.aspx 2013-12-12T20:45:12Z 2013-12-12T20:45:12Z <p>Stando a <strong>Wikipedia</strong> e ai vaghi ricordi liceali, la tassonomia è la disciplina della classificazione. <strong><a href="http://getbootstrap.com">Twitter Bootstrap</a></strong> fa proprio quello,né più meno di Linneo che se ben ricordo si applicò alla classificazione delle specie animali e vegetali. </p> <p>Poteva anche farlo un'altro framework CSS/JS/HTML ma alla fine ciò che serviva al popolo web era una lista verosimile di elementi HTML, di quelli che si usano oggi e non di quelli che si sarebbero dovuti usare in una certa maniera nei primi anni 80. </p> <p>HTML ha vinto alla grande la battaglia--a dire il vero poco più di una scaramuccia--con le orde del cosiddetto RIA. Credo fosse l'ultima mia volta ad un <strong><a href="http://www.communitydays.it/">Community Days</a></strong> molti anni fa quando mi lanciai nella profetica visione di un mondo che usa XAML invece di HTML e C# invece di JavaScript. La visione storica era assolutamente veritiera; ma gli strumenti che si sono affermati sono stati altri. Ma se ci pensate, Twitter Bootstrap eleva HTML al rango di un linguaggio più alto livello anche se non complesso come il super-ingegnerizzato XAML. E il JavaScript viene arricchito da framework che più o meno simulano un linguaggio di più alto livello di astrazione. </p> <p>Twitter Bootstrap ci dice due cose essenziali.</p> <ol> <li>Le pagine web oggi hanno bisogno di elementi che in HTML non ci sono, ma si possono creare. Bootstrap non solo dice quali ma dice pure come debbano essere creati. E lo fa solo con CSS, HTML e un pizzico di jQuery tra l'altro operando una selezione tra le quintalate di plugin che fanno la stessa cosa. Per ogni nuovo elemento--drop-down, breadcrumb, pager, tab, carousel, modal che sia--ci dice il layout HTML e come programmarlo e quali siano gli eventi intercettabili.</li> <li>Le pagine web devono essere <em>responsive</em>. E integrando meccanismi HTML responsive al suo interno forse Bootstrap riesce a trovare le parole giuste per spiegare che mobile web è altro da mobile-first. E che <em>mobile-first</em> è solo approssimazione. </li> </ol> <p>Non è sorprendente che in molti casi sia sufficiente avere un sito che più o meno si vede su mobile. In questi casi, Bootstrap fa un eccellente lavoro. Però al tempo stesso divenendo responsive un fatto automatico e naturale diventa più facile per tutti capire quando ci vuole qualcosa di più--ovvero <strong><a href="http://www.nuget.org/packages/wurfl_official_api">server-side detection di capabilities</a></strong> e classificazione delle view più o meno secondo i breakpoint di Bootstrap. </p> <p>PS: Quando si parla di server-side detection di dispositivi NON si parla di avere una view HTML per ogni accidenti di telefono né di farsi a mano il parsing delle UA string. Si parla di usare  strumenti che dicano se un certo browser appartiene ad una certa classe: smartphone, tablet, etc. Solo che rispetto a CSS media queries ci sono centinaia di capability su cui differenziare HTML e anche CSS e JavaScript.</p> <p> </p> <p> </p> <p> </p><img src="/dinoes/aggbug/101742.aspx" width="1" height="1" /> Il valore del codice http://blogs.ugidotnet.org/dinoes/archive/2013/12/12/il-valore-del-codice.aspx 2013-12-12T20:14:27Z 2013-12-12T20:17:47Z <p>Casualmente mi imbatto in un post di <a href="http://blogs.ugidotnet.org/topics/archive/2013/12/06/i-dev-dovrebberohellip.aspx">Mauro Servienti</a> dall'intrigante titolo <strong>"I dev dovrebbero"</strong>. Il punto che emerge è che il  codice--almeno nella maggior parte dei casi--influisce per una piccola parte sul successo del progetto. </p> <p>Chiaramente Mauro generalizza, e di sicuro non si può dire che l'affermazione sia un falso storico. Il commento più appropriato al solito sarebbe il classico "<strong>Dipende</strong>". Tuttavia la ragione che mi spinge a commentare in un altro post è che nel primo capitolo della nuova edizione di <strong><a href="http://www.amazon.com/Microsoft%C2%AE-NET-Architecting-Applications-PRO-Developer/dp/073562609X/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1386871055&amp;sr=1-1&amp;keywords=dino+esposito">MS .NET Architecting Applications for the Enterprise</a></strong> (casualmente nel momento in cui scrivo #7 su Amazon tra i libri .NET a cinque anni--cinque--dalla pubblicazione) c'è un riferimento al <strong>ruolo del codice</strong> nel successo di un progetto. </p> <p> </p> <p><font face="Arial"><em>If you ask the question "What does make projects fail?" then probably the most common answer you receive will trace failures back to business-related issues such as missing requirements, inadequate project management, wrong cost estimates, lack of communication and even incompatibility between people in the various teams. You <strong>hardly see the perception that bad code</strong> may hurt.  <strong><a href="https://www.facebook.com/NAA4E">#naa4e</a></strong></em></font></p> <p>E' interessante notare come Mauro faccia in un commento l'esempio della centralina di un'automobile--per chi è importante la realizzazione tecnica. Ecco, la ciccia sta tutta qua.</p> <p>Un'autovettura non si sfascia quasi mai; solo rarissimamente ha bugs e come nel software il bug si aggiusta. A differenza del software, un'autovettura rimane quella, funziona e non richiede cambiamenti al motore e i cambiamenti fatti alla carrozzeria sono disaccoppiati dal motore. </p> <p>Ma se un'auto dovesse essere rimontata spesso, aggiustata di continuo, fatta evolvere ... beh anche la centralina avrebbe il suo perché.</p> <p>L'auto è in un certo senso <strong>code-that-just-works</strong>. Purché funzioni, ci si può accontentare anche del primo livello di maturità CMMI--basta funziona. E--facile battuta gratuita--le macchine tedesche hanno di solito un livello CMMI più alto di altre macchine. Ma se devi metterci le mani dentro anche la qualità del codice ha un costo; anzi soprattutto la qualita del codice è il costo.</p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p><img src="/dinoes/aggbug/101741.aspx" width="1" height="1" /> Xamarin vs. PhoneGap http://blogs.ugidotnet.org/dinoes/archive/2013/11/11/xamarin-vs.-phonegap.aspx 2013-11-11T11:28:20Z 2013-11-11T11:31:20Z Tutti abbiamo o avremo molto presto il problema di scrivere nel minor tempo possibile applicazioni mobile per almeno due piattaforme, forse tre. Inutile dire che due delle piattaforme sono in un qualche ordine dettato dal business e sono iOS e Android; la terza piattaforma è altrettanto ovviamente Windows Phone. Quali opzioni abbiamo oggi per ridurre il costo di sviluppo portandolo al di sotto della soglia data dalla semplice somma dei costi di sviluppo per ciascuna piattaforma? Di opzioni ce n’è almeno tre: Xamarin Studio, una qualsivoglia implementazione di Cordova e Appcelerator Titanium. In questo post mi limito ad un confronto diretto tra Xamarin Studio e PhoneGap, l’implementazione più conosciuta (ma non certo l’unica) della piattaforma open-source Cordova. <br /><br /> Xamarin Studio è un IDE separato, addirittura disponibile come estensione di Visual Studio, che permette di scrivere applicazioni per iOS e Android. È disponibile per Windows e Mac. Le applicazioni si basano sugli SDK nativi delle piattaforme ma la API esposta al programmatore è essenzialmente una variante del .NET Framework. Si trovano a disposizione classi ad hoc per la piattaforma target e classi con la stessa interfaccia di quelle del .NET Framework. Il linguaggio di programmazione è C#. La parte “magica” della soluzione Xamarin è che il compilatore rimappa le chiamate alle classi C# su funzionalità base della piattaforma sottostante e produce un eseguibile ARM imfiocchettato come un bundle iOS o Android. <br /><br /> L’applicazione che viene generata è una classica applicazione nativa in cui la struttura—presentation e business logic—viene sviluppata nello stesso modo di una analoga applicazione nativa scritta usando direttamente gli SDK della piattaforma. PhoneGap è una implementazione di Cordova—la piattaforma open-source attualmente gestita da Apache Software Foundation e originariamente basata sul prodotto PhoneGap acquistato da Adobe nel 2011. Oggi PhoneGap è semplicemente una distribuzione Cordova gestita da Adobe e paragonabile a Icenium di Telerik e PhoneJS di Devxpress. L’applicazione che viene generata è una applicazione nativa a tutti gli effetti. Lo sviluppo, tuttavia, è basato su HTML, CSS e JavaScript. <br /><br /> Un’applicazione PhoneGap è semplicemente una collezione di pagine HTML che, lette dalle risorse dell’applicazione nativa, girano dentro una WebView a tutto schermo. Dal punto di vista della struttura fisica l’applicazione è basata su una sola view (o activity secondo il gergo Android). Tutto ciò che accade viene gestito via JavaScript, codificato via HTML e sottoposto ai vincoli e alle performance del browser del dispositivo. Tanto un’applicazione Xamarin che un’applicazione PhoneGap sono perfettamente in linea con le direttive Apple e sono approvate o respinte unicamente sulla base di quello che fanno o non fanno. <br /><br /> Un’applicazione creata con Xamarin Studio ha il solo difetto di essere un tantino grossa come dimensione visto il peso specifico del runtime Mono che si porta appresso. Per il resto non presenta problematiche particolari e nella stragrande maggioranza dei casi (per non dire sempre) non si riscontrano penalità di alcun tipo. Un’applicazione creata con PhoneGap (o simili) è strutturalmente soggetta al dazio della performance. Già la semplice navigazione da pagina a pagina dà una misura concreta di ciò. Si può navigare seguendo un click e lasciando il browser a caricare la pagina successiva magari dalla cache: niente animazione, ed è il modo più veloce, oppure con animazione JavaScript e il rischio di movimenti a singhiozzo su quasi tutti i device. Per dirla tutta, un’applicazione PhoneGap realistica è lenta e poco fluida se paragonata ad una nativa. Punto. Tuttavia, la minore velocità e fluidità non la rendono necessariamente inutilizzabile o inutile. <br /><br /> Cosa scegliere? <br /><br /> Il punto fondamentale dello sviluppo mobile non è tanto nell’abbattimento dei costi di N-1 piattaforme quanto nel taglio lineare dei costi di sviluppo per piattaforma. Il totale del costo di sviluppo per N piattaforme non sarà mai uguale al costo unitario più un quid: il resto è noia. La sostenibilità dello sviluppo mobile passa per strumenti intelligenti capaci di far scrivere la stessa app in una frazione del tempo per ciascuna piattaforma e nell’individuazione di forme di riuso di codice di business. In questo contesto trovo che il backend sia un canale importante—per molte app mobile la logica che serve può tranquillamente stare sul server e viaggiare solo online. Il grosso del mobile è presentation e presentation e UX devono essere massimizzati perché il risultato sia accattivante. In questo contesto l’applicabilità di PhoneGap si riduce. Io scelgo Xamarin.<img src="/dinoes/aggbug/101719.aspx" width="1" height="1" /> System.Web.HttpWriter