Domenico Cirasino

Carovigno (BR)

/me@shurizzle.dev/domenico-cirasino/shurizzle

Istruzione

Diploma di maturità

2004-2010

I.T.I.S. Enrico Pantanelli sez. Informatica, Ostuni.

Autodidatta

2006-Oggi

Il mio percorso è initiziato seguendo i primi tutorial sulla programmazione dal famoso html.it. In seguito ho cominciato a leggere libri, tra quelli che più mi hanno formato ci sono Structure and Interpretation of Computer Programs e The C Programming Language.

Ho seguito molti corsi del sito Coursera e attraverso la rete ho trovato sempre più informazioni tramite libri e documentazioni tecniche. Tra i vari siti web che mi sono stati più utili ci sono Github e Hacker News, da lì ho studiato il codice e trovato novità a me fino a quel momento sconosciute. In seguito ho contribuito quanto possibile a progetti FOSS.

Esperienze lavorative

Developer

2015-2015

Presso RGI Group per Application Management di Gruppo Cattolica, Verona (VR).

Ho coperto il ruolo di programmatore. È stata la mia prima vera esperienza lavorativa, qui ho imparato la pazienza, soprattutto nell'essere un fornitore, in più il metodo e la disciplina nel lavoro oltre che a lavorare con un team notevolmente grande. Ho lavorato su un software basato su framework proprietari usando come linguaggi JavaScript e Java 5, come DBMS ho imparato ad usare Oracle, che fino a quel momento non avevo ancora avuto la possibilità di studiare. Per la gestione del codice usavamo SVN e un bug tracker per la sincronizzazione interna del lavoro.

CTO

2015-2019

Presso Interaktive Srl. Ho coperto principalmente le mansioni di System Admin, Software Engineer e Analyst, Sviluppatore. Moncalieri (TO).

In questa esperienza lavorativa ho imparato a prendere delle decisioni intelligenti sulla base delle variabili in gioco e a gestire un piccolo team, quindi ad avere delle responsabilità maggiori. Ho dovuto imbastire da zero un reparto che non era ancora esistente cercando di mediare tra l'aspetto funzionale e quello tecnico, tra la passione e la ragione. Ho studiato e applicato il metodo SCRUM aiutandomi con una kanban virtuale, la famosa piattaforma Trello. Come sistema di gestione del codice e diversionamento ho utilizzato GIT che avevo già interiorizzato in precedenza nei miei progetti personali. In team abbiamo sviluppato più microservizi facenti parte di un unico grande ecosistema centralizzato in un core project. I linguaggi che ho scelto di utilizzare sono stati Java 8, PHP 7.3, JavaScript, HTML e CSS. Ho lavorato a plugin per la piattaforma WordPress per l'interazione col core service. I vari framework utilizzati sono stati Laravel e Lumen, principalmente per la parte di amministrazione della piattaforma e microservizi secondari. Per alcune web app ho utilizzato il framework React.js in quanto più adeguato al ruolo che doveva ricoprire. Il core service constava di due parti principali, la parte del web service in Vert.x, un framework basato su Java 8, e la parte batch, con un framework proprietario, per ragioni di flessibilità. Come DBMS principale ho utilizzato PostgreSQL e ho utilizzato estensivamente il linguaggio PLPGSQL. Avendo assunto alcuni junior ho utilizzato la tecnica del pair programming per insegnare e cercare di capire dove sarebbero pottuti esserci degli intoppi. Per i server abbiamo scelto una soluzione in cloud unmanaged per via di un'estrema flessibilità.

CTO

2020-2023

Presso Slymetrix Srl. Ho coperto le mansioni di DevOps, Cloud Native Software Engineer e Analyst, Sviluppatore. Roma (RM).

In questa esperienza lavorativa ho scoperto il mondo delle startup, quindi la flessibilità che un software deve avere e l'importanza di una solida progettazione oltre che a lavorare pienamente in cloud. Abbiamo creato un nuovo prodotto sul mercato italiano che si occupa di tracciare spese e ricavi degli ecommerce mettendoli in relazione tra multipli canali per suggerire all'utente la via migliore da intraprendere su una progettazione annuale del budget. Qui, insieme al team, abbiamo sperimentato la pressione di vivere in una startup ma al momento stesso divertirsi lavorando per noi, per un progetto comune. Le tecnologie utilizzate sono tutte basate su Google Cloud Platform, una piattaforma di cloud computing. Il progetto consta di 3 parti principali tecnicamente slegate tra di loro che offrono l'intera esperienza utente: vetrina, academy e analytics, ma il business è concentrato sulla parte di analytics. Qui ho imparato ad utilizzare pienamente tecnologie come Google Cloud Functions, delle funzioni in cloud che vengono eseguite a seguito di eventi, scritte in nodejs. Il cruscotto è scritto in PHP 7.3 col framework Laravel e si occupa di prendere i dati da un DB PostgreSQL (Google Cloud SQL) e visualizzarli all'utente sotto forma di tabelle e grafici oltre che a rendere possibile all'utente la personalizzazione dei dati e della loro visualizzazione. Come metodo di persistenza utilizziamo principalmente PostgreSQL ma abbiamo sperimentato in passato anche una visualizzazione dei dati tramite Google Data Studio sviluppando un Google Data Source basato su Google BigQuery oltre Memcache per gestire sessioni e cache. Questo cruscotto attualmente funziona su Google Cloud Run, un layer di astrazione di Kubernetes che gestisce autonomamente il carico. Gli eventi viaggiano un un Pub/Sub e attivano le varie funzioni in background quando sono lanciati. La persistence dei file statici è gestita attraverso Google Cloud Storage, insieme ai file statici che permettono all'applicativo di funzionare. Il tutto dietro a Google Cloud Load Balancing che ci permette di instradare le richieste verso i giusti endpoint. Grazie a tutto lo studio e alla scelta di queste tecnologie siamo riusciti ad avere un uptime del 100% che nel caso specifico era essenziale. Siamo inoltre riusciti a integrarci direttamente con Google Tag Manager attraverso lo sviluppo di un template definito da noi. Un'altra skill che ho sviluppato in questo progetto è la produzione di metriche e l'analisi di esse, essenziale oltre che per il monitoraggio del corretto funzionamento del software anche all'ammortizzazione dei costi.

tl;dr

Cosa mi piace utilizzare

  • Rust Perfomante come C, astratto come pochi.

    Permette una programmazione safe con delle altissime prestazioni e un livello di astrazione all'altezza di un linguaggio moderno. Interessante in microservizi che necessitano di alte prestazioni e affidabilità.

  • neovim Editor

    Estrema personalizzazione e flessibilità, ottime prestazioni e minimo consumo di risorse. Ottimi movimenti da tastiera essendo un editor modale.

  • Arch Linux Sistema Operativo

    Tutti i software che scrivo vanno a finire su un server Linux, perché non utilizzarlo anche sul desktop? Offre la massima personalizzazione e flessibilità, ideale per sviluppare software.

  • Docker Container and deployment system

    Ormai standard de facto nello sviluppo di applicativi cloud native e non. Utilizzo Docker Desktop quando mi trovo su MacOS e Windows così posso portarmi dietro tutto l'ambiente. Ormai indispensabile per me in accoppiata con docker-compose, che ora integra. Perfetto per creare degli ambienti di sviluppo che partono e si configurano con uno schiocco di dita.

  • PostgreSQL DBMS

    Dal mio punto di vista il miglior database relazionale al momento. Mi permette di scegliere con una granularità quasi atomica qualsiasi cosa nel database, dalla generazione di tipi custom agli indici. Mi è sempre stato utile nei software di analisi. Grazie al suo linguaggio PLPGSQL è capace di fare qualsiasi cosa con una rapidità estrema.

Cosa ho utilizzato

  • Editor Intellij Idea (android-studio), XCode, Atom, Visual Studio, Eclipse
  • Linguaggi Erlang, Elixir, Perl, C (89, 99, 11), C++, Assembly (8086), C#, Haskell, Scheme, Prolog, sh (bash, zsh), Python, F#

Cosa so utilizzare

  • Google Cloud Platform Piattaforma di Cloud Computing

    Functions, SQL, Run, Memstore, BigQuery, Compute Engine, Storage, Pub/Sub, Build, Cloud Balancing, StackDriver

  • Google Tag Manager Manager di tag

    Oltre all'utilizzo del tool in sè ho sviluppato anche un template per l'integrazione automatica di Slymetrix Analytics.

  • PHP (5, 7, 8)

    Utilizzato principalmente in accoppiata con Lumen/Laravel

  • Java (4-21)

    J2ME, J2EE, Spring e Vert.x.

  • Go

    Perfetto per creare microservizi performanti in GCP.

  • Node.js/Typescript

    Principalmente sotto forma di Typescript. Utilizzato per frontend con React.js e Webpack e Vite come bundler. Lato server con express.js e next.js e con Google Cloud Functions.

  • Ruby

    Utilizzo giornaliero per automatizzare i task. In passato l'ho utilizzato con Rails e Sinatra.

  • Lua/Fennel

    Utilizzato principalmente per le personalizzazioni del software come in neovim.

  • HTML5/CSS3

    Con framework come Bootstrap e Tailwind, ma spesso barebone visto l'uso di uikit che implementano già la maggior parte della grafica.

  • vscode

    Editor pronto all'uso, ideale per il pair programming.

  • DBMS

    Oracle, MySQL, MariaDB, Google BigQuery, MongoDB

  • Key/Value store

    Redis, Memcache, RocksDB.

  • Sistemi operativi

    Linux (Debian, Ubuntu, Arch, Gentoo/Funtoo), Windows (con WSL2), MacOS