Posts Tagged

Sviluppo

Come organizzare un repository GIT

Oggi vi voglio parlare su come organizzare un repository git per i vostri progetti, spiegandovi la mia metodologia. I miei progetti sono quasi esclusivamente applicazioni mobile, ma questa struttura si può estendere a qualsiasi tipo di applicativo.

Il mio metodo

Flusso riassuntivo della struttura di un mio repository GIT.

Master

Questo è il branch principale di produzione. Ne esiste solo un per progetto. In questo branch i commit rappresentano le versioni dell’applicativo pubblicate in produzione. In aggiunta aggiungo anche un tag che identifica la versione, per una rilettura comoda e rapida.
Se sono presenti delle anomalie nelle versioni in produzione che hanno bisogno di essere corrette nel più breve tempo possibile, creo un branch dal commit del master come “Hotfix”.

Release

Quando decido di portare tutti gli avanzamenti del develop in produzione, creo un branch denominato “release_x.y.z” (dove x.y.z è la prossima versione dell’applicativo). Qui vengono eseguite delle modifiche leggere che riguardano l’aggiornamento della versione. Di solito è il cambio della versione e del build number. Una volta pronti per andare in produzione, unisco questo ramo sia nel “master”(taggando il numero di versione) che nel “develop”, in modo tale da avere un punto sincronizzato trai i rami.

Develop

Questo è il ramo dello sviluppo, il campo di battaglia! Ne esiste solo di uno per progetto. Da qui vengono creati i rami per le nuove funzionalità e sviluppi. Io tendo, quando possibile, a creare un branch per ogni funzionalità che voglio implementare (partendo da develop). Ci possono essere dei commit che non prevedono la creazione di un ramo, ma sono modifiche molto lievi, quali pulizia del codice, aggiunta di qualche commento e similari.

Feature

Una volta pianificato e progettato lo sviluppo di una nuova funzionalità, creo un ramo, partendo da develop con il nome “feature_IDENTIFICATIVO-FEATURE”, dove IDENTIFICATIVO-FEATURE è, per l’appunto, l’identificativo della funzionalità. In caso di applicazione progettate e coordinate su JIRA, per esempio, è l’identificativo della storia relativa allo sviluppo (vi consiglio di integrare GIT sul progetto JIRA, la quale permette la creazione, direttamente dalla dashboard, del branch relativo alla storia stessa).

Hotfix

Questi rami vengono creati quando qualcosa va irrimediabilmente storto. Se sono presenti dei bug in produzione sfuggiti ai test, al quale bisogna porre rimedio subito (interrompendo qualsiasi sviluppo in corso), occorre creare un ramo “hotfix_IDENTIFICATIVO-HOTFIX” (come in develop, identificativo della storia in caso di JIRA od un altro che sia leggibile al volo). Essendo una “toppa” da mettere all’applicazione in produzione, bisogna implementare solo gli sviluppi necessari alla risoluzione, senza incorporare niente del ramo develop che potrebbe essere ancora in sviluppo od in test. Questo ramo, quindi, verrà creato dal master ed, una volta terminato e pubblicato, esso sarà unito sia al ramo master che a quello di develop. Questo è l’unico caso che creo un ramo partendo dalla produzione.

I vantaggi di organizzare un repository git

So cosa state pensando, organizzare un repository git visti i tempi stretti di uno sviluppo tutta questa procedura può occupare un po’ troppo tempo inutilmente.
Per esperienza personale, anche se ad una prima occhiata può sembrare tale, sono in disaccordo. Sia che si lavoro come persona singola che si lavori all’interno di un team, capiteranno SEMPRE situazioni in cui siamo costretti a saltare tra una funzionalità ed un altra, risolvere problemi imprevisti o ricompilare versioni vecchie o di test.
Nel caso non si pianifichi una logica strutturata di GIT, arriverete ad un punto in cui vi potrebbe essere problematico e/o rischioso passare da un commit ad un altro. Strutturando i rami in questo modo io ho la sicurezza di poter cambiare lo stato del codice senza nessun effetto collaterale ed ho una lettura chiara e precisa dell’andamento evolutivo del progetto.

Spero che la mia esperienza su come organizzare un repository git vi sia stata utile!
E voi, come strutturate il vostro repository?

Alla prossima e buon coding!

Android O : le prime novità per gli sviluppatori!

Da pochi giorni è stata resa disponibile la prima Developer Preview del nuovo Sistema Operativo Android “O” 8.Il nome ufficiale non è ancora reso pubblico, quale nuovo dolce il team di google sceglierà?
Andiamo ad analizzare insieme le prime novità per gli sviluppatori:

Android O: Novità

Limiti Background

Sono stati aggiunti ulteriori limiti automatici su cosa le applicazioni possono fare in background, al fine di ottimizzare la durata della batteria del dispositivo.Le aree toccante sono le seguenti:
  • Broadcast impliciti.
  • Servizi in background.
  • Aggiornamenti della posizione.
Per maggiori dettaglio, vi riporto il link della documentazione ufficiale riguardante i “Limiti dell’esecuzione in background” e “limiti sulla geolocalizzazione in background”.

Canali di Notifica

Android O introduce i canali di notifica , nuove categorie definite all’interno della applicazione per i contenuti delle notifiche.Questa funzionalità permette agli sviluppatori di avere maggior controllo sulle notifiche aggregandole per categorie e modificando il proprio comportamento a livello di gruppo.Fino ad ora lo sviluppatore doveva cambiare il comportamento delle notifiche singolarmente.

Canale Notifiche Android O
Canale Notifiche Android O.

API Riempimento automatico

Android O aggiunge delle API pubbliche per il riempimento automatico dei valori immessi dall’utente (credenziali, informazioni, password…).L’utente infatti potrà scegliere un applicazione “Riempimento automatico” default per il sistema operativo.Gli sviluppatori che vogliono creare un applicazione di riempimento automatico avranno a disposizione queste API per poter sfruttare queste nuove feature.

Nuove funzionalità PIP

 La modalità Picture in Picture di Android permette all’utente di poter continuare a guardare video mentre stanno rispondendo a un messaggio o mentre eseguono altre azioni.
Le applicazioni possono cambiare visualizzazione (dallo stato resume o pause dell’ activity) in modalità PIP quando il sistema operativo lo permette.Potranno così visualizzare le proprie schermate in modalità diversa se la PIP è attivata.

Font resources

Finalmente i fonti sono pienamente supportati all’interno dei xml resources.
Le applicazioni possono ora usare e definire font e famiglie di font negli xml layout. 

Icone Adattive

è possibile creare delle icone adattive le quali verranno visualizzate dal sistema in diverse forme.Il sistema provvederà inoltre ad animarle e potranno essere usate nel launcher, nelle shortcuts, dialog e nella schermata di impostazioni.

Icone Adattive Android O.
Icone Adattive Android O.

Colori Wide-gamut per le applicazioni

Da Android O gli sviluppatori possono sfruttare i nuovi dispositivi che supportano i colori Wide-gamut.
Per poter visualizzare immagini in wide-gamut, le applicazioni dovranno abilitare tale funzionalità all’interno del manifest(per singola activity) e caricare una bitmap con un profilo di colori incorporato(AdobeRGB,Pro Photo RGB…).

Connettività

Android O porta miglioramenti dal punto di vista della connettività.
Il Sistema operativo ora supporta i bluetooth codec LDAC, mentre dal punto di vista del WiFI è stato aggiunto il Wi-Fi Aware, conosciuto precedentemente come NAN (Neighbor Awareness Networking) :
Le applicazioni installate nei dispositivi che hanno le caratteristiche hardware adatte potranno comunicare attraverso Wi-Fi senza la presenza di un accesso ad internet.

Navigazione con tastiera

Ritorna in vita la navigazione con tastiera, per poter supportare anche i SO Chrome OS che potranno installare le applicazioni del PlayStore.

AAudio API

Nuove API per le applicazioni che hanno l’esigenza di lavoro sull’audio in maniera più approfondita e a basso livello. AAudio permette infatti alle applicazioni di di leggere e scrivere data attraverso gli stream.

Miglioramenti WebView

è stata introdotta una nuova modalità opzionale che abilita la multiprocessassione all’interno delle webview, processando il contenuto web in un processo isolato.
In Android O è abilitata di default e sono state aggiunte delle API che permettono di gestire gli errori e i crash.

Java 8 API e ottimizzazioni runtime

Supporto per le API della nuova versione java e ottimizzato il processo di Android Runtime, con miglioramenti raddoppiati in alcuni benchmark.
è possibile scaricare l’immagine di Android O tramite questo link, tenendo presente che questa versione è pensata per un uso di testing e non per un uso quotidiano normale.
Raccomando di approfondire i cambiamenti dell’esecuzione in background delle app che potrebbe impattare in maniera pesante sulle vostre app se non analizzato in tempo.
Buon Coding!
Alla prossima!
Daniele.

Il nostro fallimentare successo

In questo articolo voglio raccontarvi del nostro progetto, “Tower Breaker”, di come è stato sviluppato e pubblicato e di come il nostro fallimentare successo (e il fallimento dei progetti precedenti) sia stata una grande risorsa per la nostra crescita professionale .

Primi Progetti

Tutto è iniziato con l’obiettivo e il desiderio di creare un videogioco per dispositivi mobile. L’esperienza nel settore era minima, ma lo spirito e le intenzioni erano al massimo.

Creai un gruppo di 3 persone (me compreso) e iniziammo a buttare giù delle idee.

White Room

Scheda "White Room": Il militare
Scheda “White Room”: Il militare

White room era un progetto di un videogioco che su carta era molto interessante. Una ditta segreta , “Chimera Industries”, conduce degli esperimenti su esseri umani volontari. Al termine degli esperimenti la cavia sarebbe stata pagata molto profumatamente.L’esperimento di questo gioco era il seguente : Resistere in una stanza completamente bianca, senza nessun oggetto all’interno, per 40 giorni.

L’obiettivo del giocatore era resistere in questa stanza senza che il proprio personaggio impazzisca.

Cominciammo a buttare giù le basi del gameplay, le prime bozze e la struttura dell’applicazione.

Lavoravo come game designer, programmatore e coordinatore, insieme ad un illustratrice, graphic designer un sound designer.

Inviti progetto "White Room"
Inviti progetto “White Room”

Partimmo velocemente, troppo velocemente. Creammo un sacco di immagini da far vedere al pubblico, andammo ad una fiera di sviluppo videogiochi indie vestiti da dottori con camice della “Chimera Industries” (un camice da medico con stampato il logo della Chimera Industries) e distribuimmo delle lettere con all’interno l’invito a participare come cavia agli esperimenti della Chimera Industries.

Purtroppo però, causa enormi errori di progettazione e la nostra inesperienza nel settore , il progetto venne abbandonato.

Tristi e depressi, cominciammo ad analizzare cosa era successo e quali erano stati i nostri errori.

 

Errori

Scheda White Room: Il Punk.
Scheda White Room: Il Punk.

Questo fu un errore enorme. Iniziammo a progettare il gioco, le meccaniche, la struttura, gli assets, il sound in maniera veloce e grossolana.Partimmo con gli sviluppi senza aver finito il GDD (Game design document), ogni giorno ci svegliavamo con un idea nuova stravolgendo alcune basi stilate qualche giorno prima.Senza volerlo il progetto, nato piccolo, era diventato troppo grande e al di fuori della nostra portata.

Il colpo finale però arrivò più tardi. Creammo un prototipo (decisamente troppo tardi) e scoprimmo una cosa che non dovrebbe mai succedere ad uno stadio così avanzato del progetto : Il videogioco non era divertente. Il gameplay ,nato in un modo e con il corso del tempo era diventato un abominio.Creare una struttura divertente avrebbe richiesto una partenza da zero .Abbandonammo il progetto tristi e delusi.

Riassumendo, una brutta progettazione e l’inizio dello sviluppo prima di aver organizzato e dato un anima al gioco ci ha portato a creare un cosiddetto “Mostro di Frankenstein”,un ammasso di asset e codice che non aveva alcun senso.

GoToHeaven

Icona "Go to Heaven"
Icona “Go to Heaven”

Elaborammo gli errori fatti col progetto precedente e iniziammo a lavorare al progetto successivo cercando di non fare gli stessi errori. Progettammo un platform 2D mobile, con protagonista un piccolo diavoletto arrabbiato che voleva uscire dagli inferi ed arrivare fino alle porte del paradiso con l’obiettivo finale di far casino.

La progettazione andò molto meglio, iniziammo a produrre il prototipo solo dopo aver buttato giù tutto il documento di progettazione. Creammo un prototipo molto velocemente.

Anche qui ci accorgemmo di una cosa : il gameplay non era divertente.

Il progetto fu abbandonato, stimammo un gioco formato da tantissime meccaniche buttate in questo pentolone senza avere un senso valido.L’errore principale fu l‘inesperienza di game design.

Cominciammo a studiare, ad informarci meglio sulle teorie di game design, tentando di creare qualcosa di divertente adatto ad uno sviluppo per un team con poca esperienza nel settore. Ci voleva un progetto semplice, piccolo, senza troppe pretese, un progetto che ci aiutasse a partire e a creare un team valido ed efficiente.

Il sound designer nel frattempo se ne andò e rimanemmo solo in due.

Il nostro fallimentare successo: Tower Breaker

icona Tower Breaker.
Icona Tower Breaker.

Iniziammo a lavorare ad un piccolo progetto : Cercammo delle meccaniche già usate in giochi precedenti e semplici da realizzare. Avevamo bisogno di autostima e dovevamo finire un progetto per farci ridare la sicurezza che in tutti questi mesi avevamo perso.

Progettammo “Tower Breaker”,un piccolo gioco con poche meccaniche, semplice e di facile realizzazione. Il gameplay consiste nell’accoppiare mattoncini dello stesso colore. In basso ci sono 4 torri che l’utente può spostare lateralmente.Dall’alto cadono dei mattoncini colorati e fanno a finire sulle torri. Gameplay già visto e rivisto in molti giochi.

La progettazione fu discreta : avevamo le idee ben chiare di cosa e come il gioco doveva essere prodotto.Finimmo la progettazione e partimmo con gli sviluppi : Avevamo una lista di cose da fare con le relative scadenze molto precisa.Ci buttammo giù a sviluppare/creare a testa bassa senza nessun problema.

Questa buona organizzazione del progetto ci rese possibile lavorare allo sviluppo senza nessun problema.Ognuno aveva le idee chiare di cosa doveva fare e, soprattutto, il progetto non subì cambiamenti durante il corso della creazione.

In 20 giorni abbiamo creato il gioco e, presi dall’entusiasmo lo pubblicammo subito nell’AppStore e PlayStore.

Il gioco ha fatto pochissimi download ed è finito molto presto nel limbo degli store mobile.Non facemmo nessuna campagna pubblicitaria e questo segnò la morte di questo progetto.

Conclusioni

il nostro fallimentare successo

Nonostante questo eravamo carichi, motivati, felici e soddisfatti per questo fallimento.
In effetti è stato tutto tranne che un fallimento.Riuscimmo a progettare, creare e pubblicare il nostro primo progetto.

Il completamento di Tower Breaker e il fallimento dei progetti precedenti ci ha conferito delle esperienze enormi in tutti gli ambienti del settore.
I progetti futuri, infatti, sono stati organizzati, progettati e realizzati in maniera professionale e commettendo sempre meno errori.

Nell’ambito dello sviluppo videogiochi molti manuali citano questo concetto:

“I primi progetti che creerete saranno brutti e non divertenti, quindi muovetevi a crearli!”

Io adoro Tower Breaker, per me è stato un nostro fallimentare successo che ha arricchito tantissimo le mie esperienze come project manager, game designer, programmatore e come persona.

Di seguito il link per lo store Android, nel caso vogliate darci un occhio!

Voglio concludere citandovi una frase di Samuel Beckett che io tengo come promemoria per qualsiasi obiettivo e nella vita quotidiana :

“Ho provato, ho fallito. Non discutere. Fallisci ancora. Fallisci meglio” 
– Samuel Beckett

Alla prossima!
Buon Codice a tutti!
Daniele.

Aggiornamento Android Studio 2.3

è stata rilasciata la nuova versione di Android Studio con nuove funzionalità molto utili, insieme a miglioramenti di velocità e stabilità.

Potete aggiornare il vostro Ambiente direttamente da Android Studio (OSX : Android Studio —> Check for updates ,Windows/Linux : Help —> Check For Updates) oppure scaricare la nuova versione dalla pagina ufficiale.

 Android Studio 2.3

Build

Miglioramenti Instant Run e cambiamenti UI

Il pulsante “Run App” ora riavvia sempre l’applicazione per applicare tutti i cambiamenti del codice che richiedono un riavvio.Il nuovo pulsante “Apply changes” applicherà le modifiche senza riavviare l’ applicazione.Inoltre, è stata ottimizzata la velocità di inizializzazione delle Instant run.

Build Cache

Questa nuova funzionalità è molto interessante! Disabilitata per default, permette ad Android Studio di tenere in memoria le build precedenti, rendendo le future compilazioni più veloci.Stanchi di minuti e minuti di compilazione? Io si, proverò sicuramente questa ottimizzazione!.

 Design

Supporto nel Constrain Layout per concatenazione e ratio

Con questa versione possiamo considerare il Constrain Layout stabile.è possibile concatenare più view insieme bidirezionalmente per formare un group con un unica dimensione.Più difficile spiegarlo che applicarlo!Molto comodo quando abbiamo bisogno di piazzare due o più view insieme ma vogliamo fargli occupare tutto lo spazio vuoto.
Constrain Layout ora supporta il ridimensionamento mantenendo la ratio dell’elemento ridimensionato!

Layout Editor Palette

è stato aggiornato l’editor delle palette nella schermata di modifica layout.è possibile ora cercare, ordinare e filtrare tutti i widget per il proprio layout, ma non solo!Verrà visualizzata anche una piccola anteprima del widget selezionato.Una aggiunta di certo non fondamentale, ma molto carina!

Attributi Layout Preferiti

Questa nuova funzionalità potrebbe spingermi ad usare molto di più l’editor visuale dei layout invece che dell’editing xml.Per ogni widget è possibile salvare degli attributi come favoriti e compariranno in una lista più “minimale” della colonna Properties.Fino ad ora ogni volta nell’editor visuale dovevi scorrerti tutte le proprietà del widget, ciò faceva perdere più tempo dell’aggiunta della stessa proprietà via xml.

Supporto Format WebP

Il formato WebP è un formato di compressione sviluppato da Google con l’obiettivo di ottimizzare il caricamento di file a discapito della qualità.Android studio ora permette di generare dagli asset .png del progetto il relativo WebP, permettendo così al vostro apk di essere più leggero.Viene fornito inoltre una finestra che vi darà una anteprima del WebP generato in cui è possibile vedere direttamente le differenze rispetto al png originale.Molto comodo per capire se non ci sono conseguenze strane nella conversione.Sono curioso di vedere i cambiamenti di dimensione dei miei apk!

Aggiornamento Wizard delle Material Icon

Lo wizard delle Material Icon è stato aggiornato, ora è possibile ricercare e filtrare le icone in maniera più veloce.Inoltre sono state aggiunte le varie categorie delle iconset.
  • Develop
    • Lint Baseline
I vari warning lint possono ora essere targati come “basilari” per il progetto selezionato.In questo modo, verrano visualizzati come warning solamente quelli nuovi.Questo può essere molto utile se nel progetto vi sono dei warning per compatibilità legacy, ma il vostro desiderio è di focalizzarsi solamente su nuovi warning.
  • Assistente AppLinks
Questo nuovo assistente è molto utile:PErmette di creare nuovi intent filters per i propri URLs,impostare l’associazione al proprio sito attraverso un relativo file e testare il supporto di questi URLs.
è possibile accedere a questo assistente tramite Tools —> AppLink Assistant.
  • Aggiornamento Templates
Tutti i temprate Android che usavano RelativeLayout ora sono stati sostituiti con ConstraintLayout.
  • Aggiornamento Piattaforma IntelliJ
Sono stati inclusi gli aggiornamenti di IntelliJ 2016.2 . Qui potete trovare le relative funzionalità/miglioramenti della piattaforma.

 Test

Copia/Incolla Emulatore Android – Sistema Operativo

è ora possibile fare copia/incolla dall’emulatore android al sistema operativo del pc e viceversa, utility che, a mio parere, ritengo comodissima, facendo risparmiare in alcuni casi molto tempo.Questa funzionalità è disponibile per le immagini degli emulatori x86 Google API con livello API 19 (Android 4.4 Kitkat) e superiore .

Android Emulator command Line Tools

Da android SDK tools 25.3 è stato spostato “emulator” dall’SDK Tools in una cartella emulator separata.è stato deprecato il comando “android avd” per far stazione al nuovo comando “avdmanager
Per Informazioni aggiuntive e più dettagliate,fate riferimento qui .
Alla prossima!