Sviluppatore di software web, mobile e videogiochi

In breve mi occupo di programmazione, sviluppo software per aziende e professionisti, spaziando tra applicazioni mobile per iOS e Android, software gestionali e videogiochi. Oltre alla parte tecnica, cerco sempre di dare il mio contributo anche nella parte strategica di tutto il Funnel che coinvolge il prodotto.

Laurea e formazione

Laureato in Informatica presso l’Università degli Studi di Salerno nel lontano 2009, con una tesi su un sistema di votazione elettronico e una tesi su algoritmi su grafi, quest’ultima svolta in Islanda presso l’Università di Háskólinn í Reykjavík.

Frequento il GrowthProgram di Raffaele Gaito e la Digital Business School di Giulio Gaudiano.

Startup ed esperienza professionale

Nel corso degli anni ho fondato diverse aziende, partendo dallo sviluppo di applicazioni web (non siti internet, ovviamente ho fatto anche quelli, chi non è passato da li?!) che sfruttavano le “moderne” tecnologie dell’epoca come jQuery, HTML Canvas e CSS3 (si all’epoca anche jQuery era “moderno”).

Sono passato poi allo sviluppo di applicazioni per iPhone, prima in nativo con Objective-C e poi sfruttando diversi framework “multipiattaforma”, che usavano nella maggior parte dei casi Javascript, per andare facilmente anche su Android, senza grossi sbattimenti, ma alla fine gli sbattimenti c’erano sempre.

Mangatar e il mondo dei videogiochi

Un po’ per caso un po’ per passione, sono finito a sviluppare app e software sul web che assomigliavano sempre di più a videogiochi, è stato il periodo di Mangatar, con la quale ho avuto modo di fare esperienza come “Startupper”, una bellissima esperienza che mi ha dato una formazione straordinaria.

In quel periodo, grazie alla nostra presenza costante “nel giro delle startup”, abbiamo avuto l’occasione di collaborare con Microsoft per il porting di uno dei nostri giochi sui Windows Phone, questo ci ha dato la possibilità di approfondire Unity3D per lo sviluppo mobile di videogiochi, da allora è stato amore a prima vista.

Durante quel periodo ho avuto il piacere di approfondire anche tematiche parallele al puro sviluppo, tutte tematiche che in un modo o nell’altro erano coinvolte nella progettazione e nel design di videogame. Ho trovato particolarmente interessati argomenti come: la psicologia dietro il game design, l’analisi dei dati, sistemi di multiplayer, freemium business model, sistemi di backend as a service e user acquisition.

Da startupper a freelancer

Collaboro con aziende italiane nel settore dei videogiochi come DigitalTales, Spinvector, Just Funny Games.

Si può dire “da sempre” lavoro con Michele Criscuolo su tantissimi progetti, ci compensiamo su tanti aspetti ed insieme raggiungiamo una discreta potenza di fuoco.

Nel 2020 ho avuto il piacere di collaborare con il mitico Maestro Libero Iannuzzi per lo sviluppo di giochi musicali per bambini. Ho conosciuto Daniele Biancardi di Geniusuite, con il quale collaboriamo attivamente per lo sviluppo di diversi prodotti web e mobile per le scuole e ed in generale per il settore educational.

Linkedin è sicuramente il punto di riferimento per tutti i progetti e le collaborazione svolte in passato e dalle quali è possibile contattare le persone con le quali ho collaborato.

Sul mio sito web (se stai leggendo da mobile devi aprire il menu il alto a destra), ci sono alcuni dei progetti sui quali ho collaborato.

Vuoi contattarmi?

Per scrivermi puoi usare Linkedin, scrivendomi due righe nella richiesta, in modo da distinguerla da un BOT automatico. Oppure puoi usare questo link per fissare un appuntamento.

https://www.mrred.it/bookme

Laravel Nova l’admin Panel semplice e flessibile che ancora non conoscevi

Laravel Nova è uno strumento per sviluppare un pannello di amministrazione, basato sul Framework Laravel. Consente di creare un admin panel che offra le cosiddette funzionalità CRUD o BREAD (Browse, Read, Edit, Add, Delete) [decisamente preferisco usare BREAD invece che CRUD 😂 ].

Sono mesi alla ricerca di un buon pannello di amministrazione per applicazioni sviluppate in Laravel, ne esistono decine e decine, qui ad esempio c’è una lista di 13 Admin Panel Generators:

https://laravel-news.com/13-laravel-admin-panel-generators

Sarebbe da intraprendere una discussione dedicata su come scegliere un pannello di admin, in base alle proprie competenze di sviluppo, in base alla flessibilità che si vuole ottenere, ecc…

Ora però vorrei concentrarmi su Laravel Nova ed elencare una serie di funzionalità che ho trovato particolarmente interessanti e che hanno permesso di farlo spiccare sopra gli altri analizzati. (E’ una scelta molto personale, andrebbe calata sul progetto e sulla propria esperienza con Laravel)

Laravel Nova Dashboard

Questa è la documentazione, fatta molto bene e che contiene tutti i dettagli che vado ad elencare di seguito: https://nova.laravel.com/docs/

C’è anche questo piccolo corso che spiega tutte le funzionalità, se si vuole una panoramica generale prima di procedere all’acquisto: https://laracasts.com/series/laravel-nova-mastery

Sviluppato dai creatori di Laravel

Affidarsi ad un framework esterno per implementare la parte di amministrazione dei dati in una webapp, significa creare un vero e proprio matrimonio tra l’applicazione e la “libreria” utilizzata, quindi si condividerà tutto, funzionalità e bug. Se quest’ultimi non vengono corretti e la libreria viene abbandonata sono uccelli per diabetici.

Per questo motivo, il fatto che Laravel Nova sia sviluppata e supportata dagli stessi creatori di Laravel è sicuramente un punto a favore in più rispetto a tutti gli altri Admin Panel.

Non intacca la struttura esistente

Un’altra caratteristica, secondo me fondamentale, che rende molto flessibile Nova, è la sua completa indipendenza dall’attuale struttura dell’applicazione alla quale si vuole agganciare il pannello di amministrazione. Infatti Nova per funzionare non ti fa modificare i Model e i Controller già esistenti, ma ha una sua struttura di configurazione totalmente indipendente, che “si basa” sui model esistenti, ma all’atto pratico non si dovranno toccare i file esistenti, solo specificare quali risorse sono collegati a quali Model.

Questo consente di inserirlo anche a progetto concluso o in corso d’opera, rimuoverlo in qualsiasi momento, senza impattare minimamente sulla webapp.

https://nova.laravel.com/docs/3.0/resources/#defining-resources

Tantissime tipologie di campi (fields) supportati

Andrebbero riportati tutti, ma sono veramente tanti i campi supportati per la creazione dei form e delle tabelle per implementare tutte le funzionalità BREAD. Dai semplici campi di testo, avatar, immagini, file, badge, date e datetime, select, campi TEXT con Rich Text Editor e tantissimi altri.

Ricerca utente con avatar

Veramente mi ha stupito la quantità di campi già supportati e che quindi con due istruzioni si riescono a configurare.

https://nova.laravel.com/docs/3.0/resources/fields.html

In perfetta simbiosi con Laravel

Una delle pecche che ho riscontrato in altri Admin Panel, è la gestione delle relazioni, per capirci tutti gli HasOne, HasMany, BelongsTo, ecc, ecc… In Laravel Nova sono tutte supportate e tutte gestite in maniera automatica. Perfino il MorphTo, che potrebbe essere più ostico da gestire, viene gestito automaticamente e con delle chicche molto carine.

https://nova.laravel.com/docs/3.0/resources/relationships.html

Filtri, ricerche e azioni sulle tabelle

Altra caratteristica di spicco è la possibilità di personalizzare i filtri delle tabelle, creare delle viste personalizzate con query personalizzate, andando comunque a sfruttare tutte le funzionalità BREAD su quei dati e anche di aggiungere delle azioni sulle righe delle tabelle, sia in modalità singola riga o in modalità di selezione multipla.

https://nova.laravel.com/docs/3.0/search/global-search.html

Ricerca globale

Admin Panel flessibile e personalizzabile

Spesso, quando un framework rende le cose veramente facili, si rinuncia sempre ad un po’ della sua estensibilità e flessibilità. Quello che mi ha impressionato in Laravel Nova è proprio la possibilità di implementare facilmente funzionalità BREAD sui dati, ma allo stesso tempo estenderlo con Dashboard personalizzate, Campi (Fields) personalizzati, viste personalizzate di dati e di relazioni, addirittura si possono aggiungere intere pagine, chiamate Tools, dove ci si può inserire il proprio codice Javascript (usano VueJS) e CSS per sviluppare strumenti dedicati, disponibili sempre tramite il pannello di admin fornito da Laravel Nova.

https://nova.laravel.com/docs/3.0/customization/tools.html

Metriche personalizzate

Quanto costa Laravel Nova?

Per soli 99$ si porta a casa uno strumento (per singolo progetto), che ti permette di risparmiare ore e ore di sbattimenti su operazioni noiosissime. Poi il fatto che sia a pagamento e non gratuito ci garantisce un discreto supporto da parte degli sviluppatore e sicuramente una costante manutenzione.

Angular direttive strutturali e scope delle variabili del template

Ho sempre sottovalutato l’utilizzo di alcuni tag in Angular, come ad esempio <ng-container>, <ng-template> e le variabili template, quelle che si inizializzano all’interno dei file HTML con #nomeVariabile.

Per non parlare poi delle direttive strutturali, abituati ad usare i soliti *ngIf e *ngFor, a volte si tende a dimenticare tutte le altre che possono essere molto comode, soprattutto per mantenere il codice HTML pulito e ordinato.

Continua a leggere Angular direttive strutturali e scope delle variabili del template

20 Laravel Eloquent Tips e Tricks

Questi sono uno di quei post dove l’80% delle cose le conosci già però poi ci sono quel paio di cose che ti fanno di WAAAAAA A SAPERLO PRIMAAAA!

https://laravel-news.com/eloquent-tips-tricks

I WOW per me sono stati:

  • non sapevo che i Model avessero un metodo boot()
  • il find() accetta un array per fare ricerche multiple
  • whereX… fighissimo, si adatta agli attributi del Model
  • si può aggiungere un ordinamento globale di default, mi chiedo solo se fallisce quando quel campo non è presente
  • conoscevo l’esistenza dei chuck() ma non avevo mai usato il metodo eloquent
  • orWhere accetta un array per lavorare su parametri multipli