Professionisti: Fuga da Apple

Tempi duri per gli utenti Apple.

Utenti Apple intesi come utenti di computer e non gadgettomani all’inseguimento del nuovo telefono o tablet, i device perfetti e ormai pensati per poter correre dietro a Mario o catturare qualche mostriciattolo nel giardino di casa. Cose importanti insomma.

Non è un segreto che Apple abbia unificato le divisioni iOS e MacOS (OS X) e non è nemmeno un segreto che le risorse dedicate allo sviluppo dei sistemi operativi desktop siano sempre meno.

Lo stesso dicasi per gli sforzi profusi alla piattaforma Mac in generale. Sempre meno desktop, portatili sempre meno innovativi, hardware sempre più blindato, saldato, datato e con prezzi che ormai sono difficilmente giustificabili.

Fino a 3/4 anni fa il gap di 500/800€ con un corrispettivo Windows era giustificabile, quasi esclusivamente per colpa del sistema operativo. La piattaforma di Redmond era veramente in uno stato terribile, sempre più avvitata in una spirale di bug, difetti, interfacce inutilizzabili (windows 8 docet) e poca voglia di innovare.

Il retaggio di Ballmer insomma.

Leaders, leaders, leaders

Poi tutto è cambiato. Apple ha perso il suo leader e Microsoft ha cacciato il suo. Per alcuni aspetti si può dire che se li siano scambiati perché Cook ha tutta la mentalità da “ragioniere” di stampo Ballmer mentre Nadella spinge in là la visione del “cosa possiamo innovare” e “cosa si può rifare o semplificare”.

Apple ha logicamente concentrato tutti i suoi sforzi nella piattaforma che più genera guadagni, iOS. A Redmond invece hanno preso una grossa capocciata contro il muro con Windows Phone e ci si concentra di nuovo nei computer.

I risultati sono evidenti. Il nome OS X è morto ed è ritornato MacOS, ma ormai è sempre più statico nelle idee e sempre più un accessorio, un appendice, verrebbe da pensare quasi “disgraziatamente”, necessario al funzionamento degli iDevice.

Microsoft invece sta provando a ridefinire i computer che, così come li conosciamo, non cambiano sostanzialmente forma ed utilizzo da 30 anni. Il successo dei sistemi Surface ne è la prova.

Hardware

Il capitolo più doloroso per Apple. Ogni presentazione dei nuovi Macbook (Pro o meno) ed iMac è stata una delusione negli ultimi 4 anni.

Nessuna menzione invece per MacPro o Mac Mini, pare che quei computer siano destinati alla scomparsa. Tanto scarso è l’interesse che ormai non se ne fa menzione in nessuna comunicazione ufficiale Apple per il futuro.

Delusione anche perché i sistemi sono completamente saldati, non aggiornabili e, ancora peggio, sempre più datati. Processori indietro di una generazione (quando non due o più), oltretutto a prezzi da boutique di lusso che ormai sono sempre meno giustificabili.

Alcune piattaforme invece retrocedono a livello tecnico, penso al Mac Mini che non si può più avere con un i7 quad core e come conseguenza nel mercato dell’usato un Mini del 2012 si può pagare più caro di uno con un anno di età.

Idem per il MacPro. Può capitare di pagare più caro un MacPro 2010 di un modello 2013 con meno anni alle spalle. Si paga l’espandibilità che, nella versione cilindro, è un retaggio del passato. Tutto si può (e si deve) collegare con dongles, cavi, adattatori ed alimentatori.

La spirale è talmente in declino che i nuovi MacBook Pro non hanno nemmeno ottenuto il bollino di approvazione di Consumer Reports per via del consumo eccessivo della batteria.

Apple ha risolto il problema brillantemente disabilitando l’indicatore di durata stimata della batteria allegando che non è un dato preciso.

Successivamente hanno rilasciato una patch per Safari che dovrebbe risolvere il problema. Fatto sta che l’indicatore per la batteria non è tornato.

Eppure quella funzionalità era lì dai tempi dei primi iBook e pare che sia sempre stata “attendibile”. 😉

Anche la connettività ne ha fatto le spese. Apple vuole convincerci, a tutti i costi, che levare porte di connessione sia un giusto sacrificio in nome di qualche grammo in meno e qualche mm levato.

Nulla di più sbagliato. Questa è una pubblicità Apple dell’epoca Mac Vs Pc:

Questa invece è la vita di oggi con dongles, adattatori, caricatori, alimentatori, convertori, moltiplicatori, hubatori. Tutti in vendita per soli 39,99€. Cosa sono 39,99€ quando si può collegare una Micro SD:

C’è poi la mancanza di idee. Tutto è statico. Uno sguardo non attento non riesce a trovare molte differenze tra un MacBook Pro del 2010 ed uno del 2016.

La barra led è un ridicolo tentativo di far passare un’idea ergonomicamente sbagliata come l’ultimo ritrovato dell’interazione uomo-macchina.

E funzionano pure male, pare. In rete si trova più di un video che evidenzia problemi alle GPU dei modelli top di gamma. Si risolverà, come al solito, tirando al ribasso il clock e le prestazioni delle GPU.

Software

Altro brutto capitolo. MacOS è sempre più arenato nelle idee, sempre più esoso di risorse tanto che gli SSD opzionali sono ormai un (costoso) obbligo.

Sempre più risorse vengono dedicate alla creazione automatica di album fotografici, riconoscimento facciale, bottoni per condividere a qualche social network e via di questo passo.

Sempre più programmi vengono “semplificati” (o meglio, castrati nelle sue funzioni) per “armonizzarle” con l’esperienza su iOS. Basta vedere quanto accaduto alla suite iWork.

Altri software invece sono del tutto scomparsi, penso ad esempio ad Aperture. Per la serie, piuttosto che dedicare sviluppatori ad Aperture preferisco mandarli a disegnare Emoji e lasciare il mercato ad Adobe.

Idem per Safari. Mi trovo ad aggiungere sempre più eccezioni al codice Javascript solo per Safari. Sembra quasi che sia diventato il nuovo Internet Explorer.

Prezzo

Fino al 2014 la differenza di prezzo tra un sistema Windows e Mac, a pari specifiche, girava intorno al 50-60% del prezzo del sistema Windows.

Quindi i 1000€ di un HP all-in-one con Windows 7 (che da usare era un incubo) diventavano 1600€ di un iMac. Per i portatili la differenza era leggermente superiore.

Ora invece a Cupertino hanno perso ogni vergogna.

Workstation da tavolo come le ultime HP Z2 Mini costano circa un terzo di un MacPro.

Lo stesso iMac che quattro anni fa costava 1600€ ora ne costa circa 2800€. A parità di specifica.

La differenza con un sistema windows è oggi di oltre il 200% del prezzo e se prima si poteva giustificare con il software oggi invece non è più possibile.

Se invece il sistema desktop ce lo si costruisce da soli la differenza è francamente assurda, nell’ordine del 300%.

Windows 10 è (finalmente) un sistema valido e con idee innovative. MacOS è rimasto al palo e le uniche novità appartengono alla sfera dell’interazione con gli iDevice.

Manutenzione, aggiornabilità e costo a lungo termine

Apple declassa i suoi prodotti a “vintage” dopo 5 anni. Vintage significa che Apple non fornirà più assistenza, hardware o software che sia.

Un conto veloce:

3000€ per un iMac i7, 16Gb Ram, 256 SSD. Dopo 5 anni non ho più assistenza e vorrei forse cambiarlo anche per stare al passo. Supponiamo quindi di venderlo a 1500€. Rimangono 1500€ per 5 anni, 300€ all’anno di “noleggio” insomma.

Dopo 7 anni invece diventano “obsolete”, il che significa che nè Apple, nè i suoi Service Providers avranno parti di ricambio, a meno che non sia rimasta in magazzino da qualche parte ed in questi casi i prezzi sono astronomici.

Un affare per i professionali che non possono permettersi di stare fermi a lungo in caso di malfunzionamento.

Sempre che il pezzo sia sostituibile inoltre. La Ram è saldata. I dischi anche e ormai non si tratta nemmeno di schede M2 ma di chip sparsi e saldati. Stesse considerazioni per la GPU. Nemmeno le batterie ormai sono “user changeable”.

C’è poi da aggiungere al conto il costo degli adattatori comprati nel corso degli anni che ormai sono del tutto inutili. Io ho adattatori FireWire -> USB, Thunderbolt -> DVI, Thunderbolt -> LAN e per fortuna non sono entrato nella spirale USBC.

Tutta roba che finisce inesorabilmente nella spazzatura. Un favore all’ecologia.

Siete ancora convinti che, nel 2017, un mac sia ancora un valido acquisto?

La resa dei conti

L’utenza professionale è quella che ha “sdoganato” la piattaforma Mac nelle aziende.

Grazie a quella gli sviluppatori hanno visto la massa critica che giustifica lo sviluppo di software dedicati alla piattaforma Mac.

Sempre grazie a quella le aziende hanno iniziato ad integrare i sistemi Apple nelle infrastrutture.

Apple, nella sua superbia e altezzosità, sembra aver dimenticato questo e volta le spalle a chi l’ha portata dove sta oggi.

Mi torna in mente uno degli ultimi concerti dei Sex Pistols. Hanno suonato solo “No Fun” e Johnny Rotten ha chiuso con “Ever get the feeling you’ve been cheated?”

Da Mac a Windows, guida alla migrazione (o ritorno)

In questo articolo non entrerò nel merito del perché sono tornato a windows dopo quasi dieci anni di mac. I (tanti) perché li riserverò per un articolo successivo.

Mi limiterò a descrivere i passaggi da eseguire dando per scontato che si sia già in possesso di un sistema windows funzionante, sia esso auto assemblato che acquistato.

Per i device iOS disconosco come si sincronizzano su Windows dato che sono già passato ad Android mesi fa e non ho mai usato iOS con Windows.

Disclaimer

Gli attuali prezzi delle licenze Office concedono poche scuse, quindi buona parte del processo di ritorno è mirato al supporto di Office, OneNote e OneDrive.

Dove possibile proporrò anche alternative free. Continue reading Da Mac a Windows, guida alla migrazione (o ritorno)

Filtrare pubblicità con linux e un raspberry, bricolage per nerds

Sempre più tracciati, osservati e, alcune volte, anche perseguiti.

Se ci capita di cercare un prodotto su Amazon, ebay o chi per esso quante volte notiamo l’annuncio dello stesso prodotto quasi ovunque? Andiamo sul sito di un giornale, anche straniero ed eccolo lì, l’annuncio dello spazzolino elettrico che cercavo. Mi perseguiterà almeno per un mese.

Oppure vado su un giornale qualsiasi ed ecco gli annunci di incontri, compra casa, acquista auto e via dicendo.

Usando un computer ci si può difendere con adblock (anche se di recente hanno aperto un “servizio”, a pagamento naturalmente, per consenstire alcune pubblicità), ghostery, ublock origin e altri.

Molto peggio con i telefoni, tablet o smart tv dove (che casualità!) non si possono installare i plugin summenzionati se non con limitatissime funzionalità.

Naturalmente nessun governo ha ancora deciso di legiferare in materia quindi tocca fare da sè.

Sfruttando un’idea che esiste da tempo e ispirato da progetti interessanti ho deciso di mettere il cappellino da nerd e dedicarmi al bricolage digitale per risolvere, o quanto meno ridurre, il fastidio.

L’idea è in giro da tempo, si tratta di scaricare una lista di domini conosciuti per l’advertising e filtrarli a livello DNS, ridirezionando la richiesta ad un server locale che restituirà un’immagine GIF trasparente di 1 pixel.

Armato quindi di un raspberry (ma si può usare un qualsiasi PC con linux) mi sono dedicato a scrivere i passi necessari e relativo software per monitorare le statistiche, trovate tutto su un mio repo in github con le dovute istruzioni.

Fatto tutto si ottengono risultati davvero buoni. Interessante notare come in un giorno soltanto ci siano circa 2000 richieste DNS che vanno ad advertisers. Navigando in due persone.

total_ads_day

Ora però la domanda sorge spontanea.

Com’è possibile che, da solo ed in pochi giorni e con un device da 76€ (spedizione inclusa), riesca a filtrare quasi 2000 richieste di advertisers al giorno mentre il mio modem/router da quasi 200€ non può farlo?

Non mi piace pensare ai complotti e non giro per casa con un cappello d’alluminio ma non riesco a non ricordare che “pensare male è peccato, ma spesso ci si azzecca”.

advertising_gone

Apple, listen your customers, not your marketers

Now the dust is off, we can speak more calmly.

Last week we’ve watched, for one hour and a half, the presentation of a touch bar on a laptop.

And this touch bar was all you had to show after three years from the last product iteration. A touch bar.

I do not want a touch bar that distracts me from my work on the screen. My macbook is a mobile device and when it is not moving it stays on my desk with an external monitor and keyboard. I rarely look at it and more than often it is closed, in clamshell mode.

And it is safe while standing on my desk, the magsafe connector will prevent it from flying away if a distracted person jumps on the power cable. And I can connect peripherals to it.

Now I would need adapters even for a usb flash drive. You are ridding and polluting the planet with adapters. I cannot see anything “green” on this coercion to buy adapters and get rid of the old (and now unusable) ones. You are lying to your customers with your environmental stating.

I was really looking forward to replace my macbook. But what you presented does not enhance my actual one in any significant way other than a not very significant reduction in weight and volume.

Most mac-centric keynotes led me to change my actual product for the new iteration. Actually, this was not a mac-centric event. Besides the new touch bar there was no other new product. And there is always an excuse to talk about phones and watches.

Desktops and monitors appear to be forgotten, as their customers.

Customers have been asking for the past year and a half for other features and upgrades like new processors, new GPUs, more ram.

But no, you guys decided that all our needs were rubbish and listened only to your internal product and marketing department. It is perfectly reflected on the actual product line which is basically the same base product pantographed in different sizes, much like Nokia in the 90s.

Most producers can fit a quad core i7 and a discrete GPU in a 13″ laptop, ultrabook or whatever buzzword they are named now. The current 13″ macbook pro can’t have that hardware and probably that is just a marketing decision, not a technological limit.

This is actually the saddest part. Not listening to your customers. We were the guys that started using macs in our offices even when faced with strong opposition by most IT departments. We made software houses develop software for the platform because we created a market with critical mass.

“Ever get the feeling you’ve been cheated?” (Johnny Rotten)

Odio. Gli. Stickers.

L’altro giorno sono uscito a comprare una piccola tv. Una di quelle che va a finire nell’angolo in cucina o in camera da letto. Niente di gigante ma una “piccola” (per i giorni nostri) 28″.

Tra i vari modelli alla fine opto per una Samsung. Porto a casa, monto tutto e funziona com’è lecito aspettarsi. Successivamente arriva il momento di levare i classici discutibili adesivi che elencano tutto l’elenco di sigle e funzioni che ha il prodotto. Insomma quegli adesivi ridicoli che troviamo anche nei portatili che indicano il processore, scheda video, insomma scempi del genere:

Roba da far vomitare una capra.

Idem per questa TV, mi accingevo alla solita operazione di rimozione ma, per mia sorpresa, ora non sono più rimovibili dato che appaiono stampati direttamente sulla plastica.

samsung_tv

A quanto pare quei grandissimi geni dell’estetica coreani ritengono che sia corretto far sapere, a chiunque passi dalla mia cucina, che questo TV è Wall Mountable, ha il PIP (disabilitata su questo modello), il MOVIE Connect Share Movie (qualsiasi cosa sia) e, udite udite, persino il FOOTBALL MODE!

Yeeeeaaahh, una vera killer feature. Sopratutto per uno come me che gira canale quando in TV si parla di calcio.

Forse l’ho capita male io ed è Samsung che, molto amorevolmente, vuole ricordarmi sempre le funzioni di questo meraviglioso televisore da meno di 200€ così che io possa vivere una vera incredibile esperienza ogni volta che lo accendo.

Veramente un attentato al buongusto.

Da iOS a Android

A molti utenti iPhone capita prima o poi. L’iPhone si rompe (o addirittura non è più supportato) e quando si va in un negozio a comprarne uno nuovo si strabuzzano gli occhi guardando i prezzi dei terminali, specie confrontandoli con le offerte Android. Altre volte invece si tratta solo del gusto di cambiare “tanto per farlo”.

Il processo decisionale si complica se si è utenti mac e si vuole continuare a mantenere tutto sincronizzato per bene come avviene sfruttando i servizi iCloud e quindi i contatti, bookmark, foto, musica, reminder, note, keychain (per chi si fida 🙂 ) e via dicendo.

Leggendo siti vari l’operazione viene dipinta come “una passeggiata” ma la realtà non è proprio così, purtroppo tocca invocare parecchi santi prima di avere qualcosa di similare.

Prima di iniziare mettiamo le mani avanti: il risultato non sarà MAI come avere i servizi iCloud per foto, note e reminder e la sincronizzazione iTunes di musica, libri e foto. Per alcune cose (specie foto e musica) ci si deve accontentare.

Continue reading Da iOS a Android

Come sbarazzarsi del noioso “Allow Incoming Connections” su OS X

Non tutte le applicazioni che uso sono firmate (nel senso che non tutte provengono dallo store al sidro). Il problema è che suddette applicazioni generano il noioso avvertimento per confermare il permesso di aprire connessioni di rete.

Il problema è che se l’applicazione in questione non è firmata OS X chiederè sempre l’autorizzazione. Zelante.

Fortunatamente si può ovviare “falsificando” la firma localmente:

sudo codesign --force --sign - /path/to/application.app

Importante rimuovere la “/” alla fine del percorso dell’applicazione.

libGDX, un framework di sviluppo giochi in Java

LibgdxChi non è mai stato tentato di sviluppare un gioco? Purtroppo, specie in ambito Java, ci si scontra con quella che è la dura realtà di questa piattaforma, ovvero la difficoltà nel mettere in piedi qualcosa che, sfruttando le librerie grafiche di base, sia veloce e bello da vedere.

Grazie a libGDX questo problema si risolve dandoci il supporto a librerie di input, audio, video (OpenGL compresa), un engine fisico con dei wrapper per la conosciuta Box2D e, dulcis in fundo, persino la possibilità di sviluppare in ambito multipiattaforma su Windows, Linux, Mac, Android, iOS e WebGL.

Continue reading libGDX, un framework di sviluppo giochi in Java

Continuous Integration con Code Coverage e Code Quality, gratis. Troppo bello per essere vero.

travis_codecov_codacySpesso capita di vedere, ancora oggi, lo sviluppo del software affidato a sistemi di versioning (per così dire) del tutto improvvisati come una cartella di rete dove sono depositati una serie di eseguibili con nomi nel rango di:

  • application.jar, 2014/05/01 12:00
  • application_FIX.jar, 2014/05/02 12:30
  • application_FIX_NON_TOCCARE.jar, 2014/05/02 12:31
  • application_FIX_PRODUZIONE_PORCA_PUTT.jar, 2014/05/03 03:31

Da questo si evince anche che la prassi di testing, in questo caso, è:

Fai il deploy in produzione e vedi che succede

Analizziamo un attimo ciò che sembra essere successo in questo caso.

application.jar è stata ultimata e nemmeno mezz’ora dopo abbiamo già un nuovo deploy per un qualche bug, nemmeno un minuto dopo ecco una nuova versione FIX_NON_TOCCARE, evidentemente il fix ha introdotto una regressione, prontamente sistemata. Successivamente alle tre e passa del mattino capita il classico “fix in produzione”. Alzi la mano chi non si è mai trovato in scenari simili. A me personalmente è capitato diverse volte in passato.

Cosa è successo qui? Andiamo per ordine:

  • il primo fix è sintomo di un qualche corner case non individuato in precedenza o anche semplicemente una svista.
  • il fix FIX_NON_TOCCARE è sintomo di mancanza di test (JUnit ad esempio) perchè il fix precedente ha semplicemente rotto i contratti o la business logic.
  • per ultimo, il FIX_PRODUZIONE_PORCA_PUTT capita spesso a causa di test d’integrazione deboli, se non del tutto assenti, con i componenti che poi interagiscono in produzione.

Come possiamo ovviare, o almeno mitigare, tutti i rischi di questo ciclo?

  • Versioning prima di tutto usando SVN, Git, CVS o chi per esso.
  • test unitari e comportamentali durante lo sviluppo, in ambito Java possono essere JUnit e JBehave ad esempio.
  • Continuous Integration, con questi sistemi (ad. es. Jenkins) siamo sicuri che il codice introdotto ad ogni merge non “rompa” la build.
  • Test Coverage per assicurarci che i test coprano correttamente il codice.
  • Code Quality, spesso una semplice analisi statica del codebase è sufficiente per inviduare bug, bad practices o peggio, come ad esempio risorse non rilasciate o flussi di controllo che portano a stati instabili.

Versioning

Non mi addentrerò in modo particolare su questo tema, in rete è disponibile una vasta pletora di articoli, tra i miei preferiti riporto questo. In breve si tratta di usare le rame di feature per le nuove funzionalità. Quando queste vengono ultimate si esegue un merge verso “develop” (preferibilmente con pull request e code review) per poi finalmente far confluire tutti i cambi di develop a “master” e poter così procedere ad una release di una nuova versione.

Testing

Inizialmente scrivere i test unitari può sembrare una sciocchezza. Perchè scrivere un test di un POJO che ad esempio non può accettare un parametro con valore null? È ovvio che non arriverà mai null e nel resto dei componenti farò in modo che non accada mai.

Tutto vero, fino a quando non succede. A volte può succedere perchè non si sono individuati tutti i corner case in fase di stesura del test, altre volte può succedere perchè cambiano le condizioni al contorno quali, ad esempio, il cambio dell’ora legale in un server remoto.

Un altro grosso vantaggio dei test è quando si riprende in mano una codebase per estenderla a distanza di settimane se non mesi. Dopo tutto quel tempo è difficile introdurre cambi e spesso si finisce per rompere funzionalità già esistenti, introducendo quello che in gergo di ingegneria del software si chiama “regressione”.

Un valido punto di partenza per TDD (Test Driven Development) e BDD (Behavioural Driven Development) è lo stub di wikipedia.

Per quanto riguarda il test coverage, in ambito Java, abbiamo vari plugin maven, uno su tutti è Jacoco. Spesso anche gli IDE consentono di valutare la copertura del codice.

Continuous Integration

Il modello di sviluppo con Git, dove ciascun sviluppatore lavora nella propria rama, fa in modo che si possa parallelizare il più possibile lo sviluppo. Successivamente i cambi verranno integrati (attraverso il merge) in una singola branch (develop). Qui viene in aiuto il Continuous Integration (CI).

Il grosso vantaggio del CI è quello che ci evita portarci in locale i cambi delle altre branch in locale per eseguire una build (ad. es. con maven), se invece portiamo tutti i cambi in una singola branch il CI si occuperà di eseguire tutti i test (ed i cambi della codebase) che le varie branch si portano dietro. Nel caso i test siano tutti ok (green in gergo) si può anche procedere successivamente a migrare la rama master con develop e rilasciare una nuova versione (release) con tutti i cambi.

Normalmente per avere un CI è necessario avere in loco una istanza di Jenkins o simili. Oggi però abbiamo anche servizi sulla nuvola e persino free per codice open source quali ad esempio Travis CI. Per una carrellata di altri servizi si può partire da GitHub.

L’utilizzo di Travis è veramente semplice. Si tratta di loggarsi con la propria utenza GitHub ed aggiungere i repo che si vogliono includere nel ciclo di continuous integration. Per questo è sufficiente copiare un file di nome .travis.yml:

sudo: false
language: java
jdk:
  - oraclejdk8

A questo punto basta un commit e push del proprio branch per vedere i risultati nelle console di travis. L’esempio sopra informa travis semplicemente che il linguaggio è java e che va usato l’Oracle JDK.

Tests run: 25, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.5.201505241946:report (report) @ life-game ---
[INFO] Analyzed bundle 'life-game' with 18 classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.086 s
[INFO] Finished at: 2015-12-27T19:38:51+00:00
[INFO] Final Memory: 19M/344M
[INFO] ------------------------------------------------------------------------

Travis offre molte opzioni di configurazione per l’esecuzione dei test, possiamo avere ad esempio un’istanza mysql, un virtual framebuffer per le applicazioni con GUI e persino firefox se si vogliono svolgere frontend test con selenium. La documentazione è ricchissima e vi invito a leggerla. RTFM, sempre. 🙂

Code Coverage

Come detto prima ci sono molti tool che consentono di valutare la copertura dei test, sia in fase di build che dentro il proprio IDE. Alcuni tool però ci consentono di andare un po’ oltre e producono analisi e suggerimenti su dove intervenire.

Uno di questi strumenti, del tutto gratuito per software open source, è Codecov. Come per Travis CI l’installazione è triviale. Si tratta di collegarsi con il proprio profilo di GitHub e associare i vari repo e successivamente potremo avere i report sul code coverage dopo ogni commit o durante una pull request verso master o develop. Qui vediamo alcune schermate:

codecovcodecov_suggPer far si che il codice sia analizzato basta aggiungere qualche riga al nostro .travis.yml:

sudo: false
language: java

jdk:
  - oraclejdk8

before_script:
  - pip install --user codecov

after_success:
  - codecov

Una feature molto pratica è che codecov-io inserisce un commento in fase di pull request indicando i cambi nel code coverage per la PR. Qui vediamo un merge particolarmente riuscito 🙂

codecov_commentQuesti due tool, di per se, sono già un validissimo complemento per evitare lo scenario iniziale ma ci resta ancora un’arma.

Code Quality e Code Review

Tutti commettiamo errori mentre programmiamo, nessuno escluso. In questo molti compilatori ci aiutano con analisi statiche del codice direttamente dall’IDE o con strumenti esterni come FindBugs o il sempre verde SonarQube.

Ma oltre a commettere errori a volte siamo anche distratti e ci dimentichiamo di eseguire un check. Altre volte il tempo non ci permette di analizzare il codice e altre volte ancora gli errori arrivano a develop perché non si fanno le code review per mille ragioni, spesso per motivi di tempo, è sempre difficile concordare con il management uno slot di tempo dove chiudere quattro developer in una stanza per una code review. I developer vedono un’ora, un manager vede 4 ore/uomo “sprecate”.

In ogni caso, per chi non vuole limitarsi alla semplice analisi statica del codice dall’IDE (che comunque spesso trascura molti errori ovvi) ci sono strumenti che ci consentono di scrutinare il nostro codebase in maniera automatica ed asincrona. Per il momento mi sto affidando a Codacy.

Ancora una volta la configurazione è abbastanza triviale, si tratta di loggarsi con il proprio profilo di GitHub e iniziare ad associare i repo che si vogliono analizzare.codacyPer ogni repo possiamo configurare parametri quali tipi di issue da ignorare, altre da abilitare, cartelle da trascurare (ad esempio non vogliamo “inquinare” i nostri risultati con i problemi di altre librerie quali bootstrap, jquery, etc).

Anche qui possiamo vedere tutta una serie di statistiche per ogni commit, quali file sorgente presentano problemi e persino ottenere un “voto” (come a scuola) 🙂 per ciascun repo fino all’atomicità di un voto per commit.

codacy_commitConclusioni

Abbiamo visto una veloce carrellata di strumenti che consentono di migliorare notevolmente il processo e la qualità del codice, tutto con strumenti gratuiti e online, senza quindi dover installare server o software (oltre a git!) sulla propria macchina.

Naturalmente gli strumenti di cui sopra si possono usare con molti altri linguaggi e per alcuni di essi ci sono alternative più valide, come scritto prima un ottimo punto di partenza è la pagina di integrazioni su GitHub.

Buon coding!

Spark, un interessante java micro framework

Ultimamente sto lavorando parecchio con API REST e per una prototipazione rapida sono comodi alcuni micro framework Java, uno dei più interessanti a mio parere è Spark (da non confondersi con Apache Spark, forse la scelta del nome non è delle più felici).

La documentazione non è delle più esaurienti e gli esempi disponibili non sono molti ma per un programmatore più o meno navigato il suo utilizzo è semplice.

Se vi siete stufati di Spring e usare JEE a volte è come usare una BFG9000 per aprire noci date uno sguardo a Spark, ha i suoi pregi.