ITDevCon 2017: slide e sorgenti su Clean Code e Information Radiator con Delphi
Si è conclusa da qualche giorno l’appuntamento annuale imperdibile per gli sviluppatori Delphi, ITDevCon 2017 – European Delphi Conference, la conferenza europea dedicata agli sviluppatori Delphi.
L’evento si è tenuto anche quest’anno nella sede di bitTime Software a Roma, tra le verdi colline che adornano la città di Frascati, con un tempo metereologico da fare invidia all’estate.
Dopo la parentesi primaverile della Spring Edition è tornata quindi la “sorella maggiore” della conferenza, con due giornate piene di interessanti speech, sia in italiano ma anche in inglese, per non far mancare nulla agli ospiti venuti da fuori Italia, che sono certo avranno gradito parecchio anche le prelibatezze servite nei coffee break e nel pranzo durante il giorno, raggiungendo il top con i piatti della tradizione locale serviti all’agriturismo per cena, inclusi i tipici Saltimbocca alla Romana (che Fabrizio Bitti, CEO di bitTime, ha prontamente tradotto per i non italiani in «Jump in Mouth at the Roman Way»). 😄
Anche questa edizione ha mantenuto lo spirito che la contraddistingue: contenuti tecnici di elevata qualità, a giudicare dai feedback positivi lasciati dai presenti al termine di ogni singolo speech, con una buona dose di humour che non guasta mai.
La caratteristica più apprezzabile di ITDevCon, a mio avviso (e dopo anni di partecipazione come speaker e come attendant posso dirlo) è che non ti lascia mai tornare a casa senza una buona dose di spunti e ispirazioni da cui trarre nuove idee e tecniche per il nostro lavoro. Questo è dovuto al fatto che tutti gli speaker cercano sempre di trasmettere le proprie esperienze, e non solo di raccontarle asetticamente, una tendenza che non sempre si trova negli eventi di questo tipo, a cui si aggiunge l’accoglienza esclusiva dei padroni di casa.
Slide e codice sorgente
Quest’anno ho partecipato come speaker (ormai è una tradizione) proponendo due talk.
Nel primo talk, intitolato ironicamente «Non Aprite Quella Unit!», ho presentato esempi di “codice orrorifico” tratti dalla mia esperienza di “code revision” presso clienti, sia per farsi quattro risate, sia per introdurre l’argomento principale della sessione, ossia la scrittura di “codice pulito” (Clean Code) e i benefici che porta nel team di sviluppo, in termini di chiarezza e manutenibilità del codice, partendo dalle regole più banali e intuibili fino ad arrivare agli accorgimenti più sconosciuti e difficili da attuare.
Nel secondo talk, intitolato «Crea un Information Radiator con Delphi», ho spiegato innanzitutto cosa si intende con questo strano termine: si tratta di un pannello che distribuisce informazioni alle persone nelle vicinanze, collocato e dimensionato affinché sia visibile con facilità. Ne avrete sicuramente visti in aeroporto, per mostrare le informazioni sul volo in partenza, oppure negli autogrill, per diffondere informazioni sul traffico e le ultime notizie. Si tratta di una nuova tendenza, che sta dilagando al punto tale che pure i team di sviluppo li stanno adottando per tenere sotto controllo l’andamento delle attività sui progetti aperti e gestiti con metodologie agili (es. Scrum). Per realizzare il nostro pannello, abbiamo scelto Raspberry Pi 3 come hardware e Delphi (con FireMonkey) per creare un’applicazione Android nativa e ultraveloce (rispetto alle soluzioni più comuni basate su pagine Web a rotazione e browser pesanti).
Potete scaricare i sorgenti dal mio repository su GitHub, assieme alle slide pubblicate nel mio profilo su SlideShare a questi indirizzi:
- Non Aprite Quella Unit! (ovvero scrivere Clean Code in Delphi)
- Creare un Information Radiator con Delphi
Conclusioni
In breve, se non avete mai partecipato o se mancate da qualche anno, non mi farei sfuggire la prossima edizione, magari la Spring se ci sarà. 😉
Sono io che ringrazio te per la velocissima risposta.
Qualche difficoltà in effetti ce l’ho. Il Raspberry (tranne il PW 0) non ha una usb slave e se fosse collegata ad un PC andrebbero in conflitto le due usb master (a meno che non mi sfugge qualcosa!). Tu come lo collegasti per realizzare il Radiotor con Delphi? In ogni caso, è possibile fare debugging da remoto come con un cellulare?
Grazie ancora.
In effetti, ora che me lo ricordi, non usavo la USB nemmeno io (mi sono confuso con un altro dispositivo).
Però nella mia risposta precedente c’è un link alla documentazione di Delphi per collegarsi al dispositivo tramite ADB.
Seguendo quei passaggi si riesce a far apparire il Raspberry nella lista dei device su cui fare deploy in Delphi e quindi a lanciare sia il debug che l’installazione dell’applicativo direttamente sul device.
Magari parti con un prototipo di applicazione semplice, senza fronzoli, giusto per testare il meccanismo, e poi aggiungi via via funzionalità prendendo il mio sorgente come esempio (senz’altro migliorabile). 😉
Ciao!
Non so come ringraziarti. Ho già sviluppato la mia prima app sotto Android con Delphi! Anche se fa solo “Hello” per me è un mondo che si apre.
Solo un dubbio mi rimane: oni volta che accendo il Raspberry occorre andare a ricercare il file ADB.exe e lanciarlo con i relativi parametri per poter riconoscere il dispositivo in rete sotto Delphi. E’ proprio così che si deve fare o ci sono delle scorciatoie dall’ambiente di Delphi?
p.s.- Ho compilato e lanciato il tuo IR e viene effettivamente compilato e caricato ma poi in fase di esecuzione mi da un errore dopo l’altro di codici non validi ecc. ma non ti disturbare oltre, era solo una curiosità e non lo devo certo mettere in funzione per forza!
Ciao.
Enrico
Ciao Enrico,
sono contento che tu sia riuscito a muovere altri passi nel fantastico mondo dello sviluppo Android con Delphi.
Condivido con te l’entusiasmo di riuscire, con relativamente pochissimo sforzo, a produrre qualcosa e a farne il deploy vedendola funzionare su una piattaforma completamente diversa da quella a cui sono stati da sempre abituati gli sviluppatori Delphi, ossia Windows.
Per rispondere alle tue domande, direi che la strada di lanciare ogni volta ADB è quella corretta, perché il programma mi risulta debba essere in esecuzione per potersi collegare al dispositivo in rete, e ADB è l’agente attraverso il quale ci si interfaccia ad esso.
Per velocizzare le operazioni, se non lo hai ancora fatto, puoi mettere il percorso del file ADB.exe nel PATH di Windows, così puoi lanciarlo senza doversi spostare all’interno della directory.
Per altri dispositivi come smartphone e tablet, il vantaggio di poter agire via USB è ovviamente un enorme vantaggio, soprattutto per la velocità del collegamento.
Devo comunque dire che in genere cerco di alleggerire questo passaggio strutturando l’applicazione in modo da separare la “business logic” dalla UI e utilizzando controlli e componenti dei quali sono abbastanza certo dell’aspetto che avranno, costruendo dei “mock” dove necessario: in questo modo, testando su Windows sono (abbastanza) confidente che il risultato sia affine e coerente anche sulle altre piattaforme, come Android e iOS. Le possibilità dipendono anche sensibilmente dal tipo di applicazione che si deve realizzare.
Buona programmazione!
Marco.
Ciao Marco, ti disturbo di nuovo. Ho fatto qualche piccolo esercizio su Delphi e l’ho ricompilato per Raspberry sotto Android. Funziona! Ma ora viene il problema vero…
Come posso controllare i pin di I/O del Raspberry in maniera efficiente e rapida, specialmente se voglio scrivere in Delphi e far girare sotto Android? Ovviamente sotto Windows non si dispongono degli I/O di Raspberry!
Questo di pilotare gli input/output è sempre un argomento misterioso quando si lavora con certe piattaforme ad alto livello. Ho notato che su qualunque documentazione Delphi ma anche di altri ambienti, parole come USB, HID e GPIO sono quasi messi al bando.
Per me che ho sempre sviluppato in C nascente per vari microcontrollori, il poter accedere direttamente ed in real-time agli I/O è fondamentale. Posso fare affidamento su Delphi, ed in che modo?
Grazie e rimango in curiosa attesa.
Enrico.
Ciao Enrico,
scusa se ti rispondo solo ora ma questo commento mi era sfuggito. 🙂
Onestamente mi trovi impreparato sul controllo dei pin di I/O del Raspberry, sia in generale che nello specifico con Delphi: il mio utilizzo del dispositivo è orientato all’uso come sostituto di un PC vero e proprio (sia nelle dimensioni che nella complessità) sfruttando però la possibilità di comunicare via WiFi e via Bluetooth, mentre la connettività a sensori e device analogici/digitali non l’ho ancora sperimentata.
Sto affrontando questo mondo con Arduino (vedi i post più recenti sul mio blog) ma sono ancora nella fase di “gioco” e scoperta.
Non ho molto tempo di approfondire al momento, ma scommetto che facendo ricerche mirate con Google si possono scoprire molte cose a riguardo, data l’ampia diffusione del Raspberry nel mondo IoT.
Se avrò delle novità a riguardo da comunicarti, interverrò di nuovo qui ben volentieri oppure scriverò un post più articolato per descrivere le mie esperienze, ma per il momento ho poco da trasmettere. 🙂
Un saluto!
Marco.
Ho scoperto solo ora questo interessante progetto e ho tentato qualche esperimento ma non riesco a trovare un Android funzionante sul mio Raspberry P3 B+, quale potrei utilizzare? Cosa occorre per mettere in comunicazione Delphi Berlin da windows 7 per programmare il Raspberry con Android? Sulla guida in linea si accenna ai cellulari ma con un mini pc come Raspberry come si fa?
Grazie e complimenti per il blog.
Enrico Miani
Ciao Enrico, grazie mille per il tuo feedback. 🙂
Esistono diverse distribuzioni del progetto AOSP (Android Open Source Project) che si possono reperire e installare sul Raspberry. Si possono trovare assieme a tutorial correlati facendo una ricerca mirata su Google. Se preferisci qualcosa di più strutturato e curato, che riceve periodicamente aggiornamenti, puoi usare emteria.OS: è disponibile una versione gratuita che effettua un riavvio periodico ma è completamente funzionante, distribuito con un software che prepara automaticamente tutto quello che serve per l’installazione.
Per fare il deploy di un’app sul dispositivo, la procedura da seguire è la stessa degli smartphone: si può collegare il Raspberry al PC via USB con i relativi driver, oppure fare il deploy via ADB nella rete locale, oppure ancora pubblicare il pacchetto compilato – il file .APK per intenderci – su qualche storage (es. Google Drive, Dropbox, ecc.) e scaricarlo dal Raspberry per procedere poi con l’installazione, così come avviene per qualsiasi altro software Android.
Prova a sperimentare un pochino facendo qualche ricerca e fammi sapere se ce l’hai fatta!
Un saluto!
~/|/|arco
Ciao Marco, dopo aver sospeso per diverso tempo lo sviluppo della mia applicazione su Raspberry, finalmente sono ripartito.
Sto sviluppando una valigetta particolare (in pratica un generatore di frequenze più svariate) in cui convivono un micro ARM PSoC 5 della Cypress e Raspberry. Il micro si occupa delle gestioni di basso livello, mentre il Raspberry implementa l’interfaccia utente con tutti i comandi per guidare il lavoro del Cypress. I comandi viaggiano tra i due a mezzo seriale TTL.
Una delle funzioni è un mixer a cui fanno capo ben 7 generatori di frequenze, che miscela i 7 segnali ognuno regolabile da un potenziometro slider su schermo touch.
E qui è il mio problema attuale.
Funziona tutto correttamente (sto usando Delphi 10.3.2 RIO e Android Emteria ultimo aggiornamento per Raspberry Pi3 B+) ma gli eventi generati dal touch vengono elaborati con lentezza, tanto che i potenziometri slider si impostano con notevole ritardo rispetto ai movimento del dito sullo schermo. La stessa cosa succede però anche con il mouse.
Inoltre, se metto su una form una trackbar ruotata di 180 gradi, su Windows funziona correttamente, mentre se lo mando su Android del Raspberry il controllo letteralmente scompare!
Secondo te il problema è su Android o nasce da qualche incompatibilità su Delphi? Bel dilemma, eh?
Ciao.
Enrico Miani.