TSW @ phpDay 2015

Il 16 e 17 Maggio 2015 a Verona è andato in scena il phpDay, la conferenza più importante in Italia per gli sviluppatori PHP, TSW ha partecipato alla due giorni con i suoi sviluppatori migliori: Michele Montagner (che è il modesto autore dell’articolo) e Lorenzo Faresin.

Strutturata su due percorsi paralleli la conferenza ha visto la partecipazione di svariate personalità del mondo PHP.

Keynote introduttivo

Il keynote introduttivo è stato affidato al rabbino Yitzchok Willroth (@coderabbi) che impostando il discorso su alcune massime dal Talmud ha evidenziato come sia fondamentale per la crescita di uno sviluppatore coltivare una relazione con un mèntore, un concetto che è stato ripetuto da molti dei relatori quasi come un mantra.

Molti principi espressi da @coderabbi possono sembrare scontati, è proprio per questo che vale la pena ricordarne alcuni:

  • Quando si è alla ricerca di qualcuno che ti possa fornire nuove idee e nuove prospettive è necessario prendere l’iniziativa, fare domande e non essere timidi perché “I timidi non imparano”.

  • La relazione mèntore-allievo non deve essere per forza esclusiva o formale, spesso può portare a collaborazioni lavorative mutuamente vantaggiose.“Coltiva per te stesso un mèntore, conquista per te stesso un collega”.

  • Il peer-coding è fondamentale, porta immediatamente alla luce le differenze nei modi di ragionare e di agire fra le persone nella soluzione dei problemi, questa tecnica va a braccetto con il code-reviewing.

  • La community degli sviluppatori è fondamentale, non deve essere una cosa di cui avere paura ma deve servire ad ampliare la conoscenza collettiva. “Chi è saggio? Chi impara da tutti”.

 

Il keynote ha caricato tutti, dai relatori al pubblico che spesso era composto anche dai relatori stessi, subito dopo sono cominciati gli speech.

PHP7

Particolare interesse ha suscitato l’intervento di Davey Shafik (@dshafik) di EngineYard sulle novità di PHP7. L’ultima versione del linguaggio di casa Zend presenta alcuni cambiamenti incompatibili con le precedenti versioni: sono state rimosse alcune librerie “storiche” come ereg_ e mysql_ ed alcuni costrutti quantomeno bizzarri.

Questa versione ha portato anche parecchie novità:

  • Un importante aumento di velocità nell’interpretazione del codice, che secondo Zend dovrebbe essere superiore ad HHVM di Facebook

  • (function(){ echo "Ora è possibile dereferenziare qualsiasi espressione, quindi questo è codice PHP valido! <3"; })();

  • Introdotta la famiglia di eccezioni derivanti da BaseException, per cui ora i Fatal Error possono essere gestiti senza passare per l’anti-patternerror_handler().

  • Sono stati aggiunti anche lo spaceship operator <=> per comparare due scalari dello stesso tipo ed il “null coalescing operator”, entrambi servono a risparmiare allo sviluppatore la scrittura di molti operatori ternari.

  • Particolarmente apprezzati sono stati il supporto completo per i caratteri Unicode ed il type hinting per gli scalari.

 

Behavior Driven Development Testing

Michelle Sanver (@michellesanver) ha mostrato i rudimenti del Behavior Driven Development Testing, nello specifico una serie di strumenti che permette di testare il comportamento di una web application generica in un browser. Sono stati menzionati strumenti come Behat+Gherkin, Mink e PhantomJS, strumenti che opportunamente integrati permettono di simulare programmaticamente contesti di utilizzo ed utenti dell’applicazione e di interagire con la medesima all’interno di un browser. Il BDD Testing implica che ad una certa azione dell’utente corrisponda una certa reazione dell’applicazione quindi lo scopo principale di questa tecnica non è tanto testare tutte le unità possibili di codice quanto verificare che tutti i comportamenti attesi dell’applicazione siano corretti.

Questo tipo di test è importante in ambito UX perché può fornire documentazione che descrive in linguaggio comprensibile tutte le interazioni che si possono verificare tra utente ed applicazione e conseguentemente verificarne il senso logico anche senza usarla in prima persona.

Oltre agli strumenti sopra citati è stata data visibilità anche a PHPVCR e Selenium, che è uno strumento complementare a PhantomJS.

Sylium

Paweł Jędrzejewski (@pjedrzejewski) ha illustrato un framework modulare per lo sviluppo di E-Commerce chiamato Sylium, che permette di integrare “on-demand” solo i servizi di cui si necessita, tutti i vari moduli (carrello, checkout flow, sistema di pagamento) sono disaccoppiati in modo da poter essere integrati solo quando richiesti.

Containerize your PHP

Successivamente è stato il turno dell’intervento Containerize your PHP di Marek Jelen (@marek_jelen), che ha promosso la metodologia di sviluppo DevOps su OpenShift v3, un sistema PaaS sviluppato da RedHat, una delle aziende storiche del mondo Linux/Unix. PaaS è l’acronimo di Platform-as-a-Service, questo tipo di sistema si pone tra l’hosting condiviso tradizionale e la macchina virtuale completa a disposizione del cliente.

Come TSW abbiamo avuto l’opportunità di testare la validità del servizio ed è la direzione che preso con alcuni progetti e che diventerà sempre più utilizzata in futuro.

Continuous Integration

Il secondo giorno è cominciato all’insegna della Continuous Integration con l’intervento di Beth Tucker Long (@e3betht) che ha elencato i principi per avviare il processo anche in progetti piccoli (solo a parole però!). La carrellata di principi e strumenti necessari per iniziare il processo evidenzia come questi siano già disponibili agli sviluppatori, si tratta solo di conoscerli ed integrarli insieme per poterli sfruttare al meglio. L’elenco ha riguardato

  • Standard (PSR-1 e PSR-2 oppure standard adottati da grossi progetti come Zend, WordPress e Symfony) e strumenti di verifica della qualità del codice (SensioLabs CS, PHP_CodeSniffer, PHP Mess Detector, Codacy,codeclimate.com)

  • Strumenti per effettuare test automatizzati dell’applicazione (PHPUnit, SimpleTest, Atoum).

  • Strumenti che permettono di effettuare la preparazione ed il deploy del progetto in ambiente di produzione (Phing, Maven per PHP, PHP UnderControl,Jenkins, Travis CI, SonarQube).

  • Ad integrazione a questi strumenti anche quelli che permettono di generare la documentazione del progetto automaticamente a partire dal codice sorgente (à la javadoc!)

 

HHVM + Hack!

Davey Shafik ha tenuto quindi il suo secondo intervento, facendo una veloce panoramica sull’astro nascente del mondo PHP: HHVM. Questo prodotto, sviluppato dall’esperienza di Facebook permette di eseguire il codice ad una velocità che ora può essere affiancata (e solo sulla carta come ci tiene a sottolineare il relatore!) da PHP7. HHVM è stato rilasciato in coppia con Hack, un linguaggio derivato del PHP che permette di effettuare un’analisi del codice prima dell’interpretazione della pagina e quindi di ottimizzare fin da subito l’esecuzione del suddetto.

ORM: Best Practices

Successivamente Marco Pivetta (@ocramius) ha illustrato alcuni principi della progettazione di un ORM, fornendo spunti interessanti sul modo di costruire i Modelli, di come non bisognerebbe abusarne e definirne solo i comportamenti. Ha quindi presentato alcuni errori comuni che tutti commettiamo di tanto in tanto quando progettiamo l’interazione tra le entità e tra le entità ed il database, fra cui spiccano:

  • Non usare gli id AUTO_INCREMENT come primary key ma usare degli UUID

  • Non usare il soft delete, il soft delete dovrebbe coincidere al massimo con uno stato differente.

  • Se le entità del proprio ORM non hanno comportamenti allora è meglio rinunciare all’ORM.

 

Closing Keynote

L’intervento finale è stato tenuto da Jordi Boggiano, nientepopodimenoché l’autore di Composer, ha spiegato come sia importante mantenere la calma e non farsi prendere troppo da un progetto per non rischiare l’esaurimento nervoso.

La community di un progetto OpenSource è un’arma potentissima ma a doppio taglio, è importante saperne cogliere i lati positivi e difendersi dai comportamenti negativi prima di esserne psicologicamente travolti.

Polo Debriefing

Durante il viaggio di ritorno ci siamo trovati a riflettere come quasi tutti gli interventi a cui abbiamo partecipato avessero come denominatore comune Composer, Symfony2 e Twitter Bootstrap. Gli esempi, gli strumenti usati erano scritti in gran parte su componenti del framework PHP ed inoltre l’unico esempio per la scrittura di documenti HTML su Hack è stato un helper di Bootstrap, tutti strumenti che abbiamo adottato in azienda da tempo, insieme al PaaS OpenShift.

Siamo tornati a casa col sorriso, sapendo di essere -in tutti i sensi- sulla strada giusta.

21 maggio 2015 Michele Montagner