Curriculum Vitae di Luca D'Amato

Esperienza Lavorativa🔗


Consulente -- Blue Reply Financial Services (07/11/2022 - presente)🔗

Mi occupo di sviluppo backend (Python, Java, Spring Boot, JavaServer Faces) e frontend (HTML, CSS, Javascript), di effettuare i rilasci delle applicazioni, gestione delle repository con git e del Sistema di Controllo di Versione (VCS).

Sviluppatore Web -- Comunickare (08/2016 - 10/2022)🔗

Mi sono occupato della progettazione, costruzione e amministrazione dei siti gestiti da Comunickare: Comunickare, Chazen, Epeira, SalentoLibri. Ho sviluppato una web-app per l'esplorazione del catalogo di Chazen.

Educazione🔗


Laurea Magistrale in Informatica🔗

Università degli Studi di Torino, Torino, Italia (ott 2019 - ott 2022)

Classe: LM-18 Classe delle lauree magistrali in Informatica

Voto: 105/110

Ho approfondito varie tematiche rispetto all'intelligenza artificiale in generale, come: sistemi ad agenti, apprendimento automatico (machine learning), reti neurali (neural networks), ricerche nello spazio degli stati con euristica, sistemi esperti, architetture cognitive, problemi di soddisfacimento di vincoli, e tecnologie del linguaggio naturale (natural language processing). Questo genere di formazione è stata accompagnata da tematiche che vanno a rinforzare la conoscenza acquisita nel corso della laurea triennale, con temi riguardanti le architetture e le tecniche avanzate nello sviluppo del software e la programmazione per dispositivi mobili, ma senza tralasciare aspetti collaterali altrettanto importanti: come l'etica e la privacy, le metodologie didattiche per l'insegnamento dell'informatica, la psicologia dello sviluppo e dell'educazione e l'economia delle imprese net-based. Inoltre ho deciso di seguire materie che aggiungono una base teorica sotto a vari argomenti legati all'informatica, come la logica.

Tesi🔗

Titolo: "Sistemi Software Collaborativi: Una Revisione"

Relatrice: Prof. ssa Giovanna Petrone

Abstract: Negli ultimi anni, i sistemi software collaborativi hanno acquisito un’importanza vitale. Diventando di fatto gli strumenti necessari per un’ampia varietà di contesti, scopi e compiti, soprattutto dopo la pandemia. Questi strumenti hanno completamente rivoluzionato le modalità con cui vengono comunemente svolti vari compiti, spesso mostrando una maggiore efficienza rispetto ai metodi tradizionali. Tale efficienza si è fatta sentire soprattutto negli ambienti e contesti in cui questo genere di strumenti e metodi faticavano ancora ad essere adottati. A ragion di tale importanza, l’obiettivo di questa tesi l’esplorazione dei sistemi software collaborativi attualmente disponibili e la loro analisi critica rispetto ai relativi limiti e punti di forza. Verrà suggerita inoltre, una visione ideale e ad alto livello delle caratteristiche che uno strumento del genere dovrebbe possedere.

Progetti Sviluppati🔗

  • Tesi
    Ho sviluppato un prototipo di un sistema collaborativo che integra i calendari di Google con le issue di GitLab.

  • Vinr [frontend/backend]
    L'obiettivo di questo progetto era di sperimentare tecnologie che si usano in applicazioni su larga scala. È il prototipo di una rete sociale. Il frontend sfrutta Vue.js. Il backend è organizzato a microservizi e basato su Java Spring:

    • Interaction Manager
      Si occupa di gestire le interazioni tra gli utenti (ho implementato follow, likes e commenti)
    • Notification Manager
      Si occupa di inoltrare le notifiche ai relativi destinatari
    • User Manager
      Si occupa di gestire le informazioni sugli account utente
    • Eureka
      Service Registration & Discovery
    • API Gateway
  • Intelligenza Artificiale e Laboratorio Il progetto è diviso in 3 parti:\

    • prolog-asp
      Questo progetto è stato diviso ulteriormente in due parti:\
      • Problemi di Ricerca nello Spazio degli Stati, con Euristica
        In questa parte di progetto mi sono focalizzato sull'implementazione di un solver del gioco del 15 utilizzando Prolog: un linguaggio di programmazione logica. Ho implementato IDA\* come algoritmo di ricerca nello spazio degli stati, facendo in modo che la scelta del prossimo tassello da muovere ricadesse sempre su quello che minimizzava la distanza dall'obiettivo. Ho implementato due euristiche: La distanza di Hamming e la distanza di Manhattan, scoprendo che quest'ultima, fornisce i risultati migliori quando combinata con la mia strategia di selezione del prossimo tassello.
      • Problemi di Soddisfacimento di Vincoli
        In questa parte di progetto mi sono focalizzato sull'implementazione di un problema di soddisfacimento di vincoli per la schedulazione automatica degli incontri di un ipotetico torneo sportivo. Questo genere di problemi vengono definiti sulla base dei vincoli da rispettare e le variabili da tenere in considerazione, lasciando allo strumento (clingo), il compito di trovare un'istanziazione di tali variabili, in grado di soddisfare i vincoli specificati.
    • Sistemi Esperti
      In questa parte di progetto ho implementato un sistema esperto sfruttando CLIPS. L'idea è che questo software debba fare da supporto ad un agente immobiliare. dopo aver inserito nel software le preferenze dell'utente, il software deve cercare un alloggio che si avvicini il più possibile a tali preferenze. Questo viene fatto senza cercare un match esatto tra le preferenze dell'utente e gli alloggi disponibili, bensì utilizzando degli intervalli di confidenza, uno strumento simile a delle probabilità, ma più semplici (ed economiche) da gestire.
    • Architetture Cognitive
      In questa parte di progetto ho sperimentato l'utilizzo dell'architettura cognitiva SOAR, per effettuare sperimentazioni con il reinforcement learning. L'idea di questo problema è di avere l'agente intrappolato in una stanza con una finestra come unica via di uscita e qualche strumento a sua disposizione (un ciottolo, un rametto, due tronchi e un elastico). Il problema viene definito attraverso una specifica del dominio: quali oggetti sono presenti nella stanza e le operazioni che l'agente ha a disposizione su tali oggetti, complete di relativi valori di punizione e ricompensa. Interagendo nell'ambiente, l'agente, scoprirà che il modo più conveniente (dati gli incentivi) per uscire dalla stanza è di creare una fionda, da sfruttare per rompere la finestra, e usare i tronchi per arrampicarsi ed evadere.
  • Tecnologie del Linguaggio Naturale Il progetto è diviso in tre parti:\

    • Prima Parte
      Questa parte di progetto consiste nell'implementazione di un parser CKY, e il suo utilizzo per la parsificazione delle frasi in Dothraki (lingua utilizzata nella saga di Game of Thrones) e di una grammatica presente negli esercizi del libro "Speech and Language Processing" di Dan Jurafsky e James H. Martin.
    • Seconda Parte
      Questa parte è una raccolta di esercizi, che coinvolgono i seguenti argomenti:
      • Word Similarity e Sense Disambiguation
        In questo esercizio ho implementato delle misure di similarità (Wu-Palmer, Leacock-Chodorow e Path Similarity) tra elementi lessicali che sfruttano il lowest common subsumer tra due termini, dopodiché ho calcolato gli indici di correlazione Pearson e Spearman rispetto ad un valore di correlazione target. Nella seconda parte dell'esercizio, viene fatta Word Sense Disambiguation sfruttando l'algoritmo di Lesk
      • Integrazione di Risorse e Word Sense Disambiguation
        In questo esercizio ho integrato le risorse WordNet e FrameNet. Per ogni frame, ho assegnato un synset wordnet al nome del frame, ai suoi frame elements e alle sue lexical units. Dopodiché ho valutato la bontà del sistema rispetto ad un'annotazione manuale delle stesse risorse
      • Automatic Summarization
        In questo esercizio ho implementato un algoritmo estrattivo che restituisca in output il riassunto da un testo, sfruttando i vettori dalla risorsa NASARI. ho quindi valutata la performance rispetto ad un Summarizer LSA usando la misura di valutazione ROUGE.
      • Word Sense Identification e Agreement
        Ho valutato la similarità tra 50 coppie di termini. Dopodiché ho usato NASARI e BabelNet per individuare automaticamente il senso di tali coppie di parole basandomi sull'assunzione che ciascuna parola faccia da contesto di disambiguazione per l'altra. Dunque ho calcolato l'agreement tra le mie annotazioni e quelle dell'algoritmo sfruttando il metodo della Kappa di Cohen.
    • Terza Parte
      Anche questa parte è una raccolta di esercizi, che coinvolgono i seguenti argomenti:
      • Word Sense Induction
        In questo esercizio 31 individui hanno dato delle definizioni per quattro parole: 'courage', 'paper', 'apprehension', 'sharpener'. Dopodiché ho implementato una misura di similarità e l'ho valutata su tali definizioni.
      • Teoria delle Valenze di Patrick Hanks
        In questo esercizio ho scelto un verbo transitivo, ho recuperato da un corpus più di un migliaio di istanze in cui viene usato, ho effettuato parsing e disambiguazione, quindi ho usato i supersensi di WordNet sugli argomenti di tale verbo, e ho quindi aggregato i risultati, calcolato le frequenze e i cluster semantici.
      • Content-to-Form (Principio Genus-Differentia)
        Usando i dati del primo esercizio (Word Sense Induction), per ognuno dei concetti, ho recuperato le definizioni di WordNet e ho sfruttato il principio "Genus" (facendo quindi leva sugli iponimi e iperonimi dei termini) per direzionare la ricerca verso il termine corretto.
      • Text Segmentation
        L'idea di questo esercizio è quella di implementare un semplice algoritmo per fare text segmentation (individuare i cambi di tematiche all'interno di un testo/discorso). Ho quindi implementato Text Tiling seguendo il paper originale.
      • Topic Modeling
        In questo esercizio, ho sfruttato Gensim per estrarre i topics dato un corpus attraverso la Latent Dirichlet Allocation, per poi visualizzare i risultati ottenuti.
  • Machine Learning
    Questo progetto contiene una raccolta di esercizi svolti durante il corso di apprendimento automatico. Gli esercizi riguardano i seguenti argomenti:

    • Alberi di Decisione
      Ho usato un modello ad albero per fare classificazione supervisionata sul dataset iris.
    • Support Vector Machines
      Implementazione di una Support Vector Machine da zero
    • Clustering
      Utilizzo di sklearn (python) per confrontare K-Nearest Neighbors e gli alberi di decisione, e sperimentazione con vari algoritmi di clustering: K-Means, DBScan, K-Nearest Neighbors
    • Naïve Bayes
      Classificazione supervisionata del sentiment di vari tweet
    • Ensemble Learning
      Implementazione di Adaboost
  • Neural Networks
    Questo progetto contiene una raccolta di esercizi svolti durante il corso di reti neurali e deep learning, le tecnologie utilizzate sono state per lo più tensorflow e keras.

    • AutoEncoders (Denoising)
      Utilizzo di una rete Denoising AutoEncoder per migliorare la qualità grafica di alcune immagini in bianco e nero.
    • Generative Adversarial Networks
      Utilizzo delle GANs per la generazione di immagini
    • Convolutional Neural Networks
      Utilizzo di una rete convoluzionale per la classificazione del dataset MNIST (cifre scritte a mano).
    • Self-Organizing Maps
      Implementazione da zero di una Self-Organizing Map per la classificazione del dataset "Digits" di sklearn.

Laurea in Informatica🔗

Università degli Studi di Torino, Torino, Italia (ott 2016 - ott 2019)

Classe: L-31 Classe delle lauree in Scienze e tecnologie informatiche

Voto: 89/110

Ho acquisito una formazione più solida dell'informatica, rispetto a quanto trattato alle scuole superiori. Ho quindi revisionato materie già affrontate, come: database relazionali e la programmazione, ma con l'aggiunta delle basi teoriche proprie dell'informatica, come l'algebra relazionale, gli algoritmi, le strutture dati, i linguaggi formali e la logica. Grazie ai corsi di architetture degli elaboratori, sistemi operativi e reti di elaboratori ho avuto modo di comprendere ad un livello più basso e profondo i computer. Ho voluto espandere i miei orizzonti rispetto alla programmazione decidendo di seguire il corso di linguaggi e paradigmi di programmazione, in cui abbiamo affrontato la programmazione funzionale: un tema che ho molto apprezzato, e il corso di sistemi intelligenti in vista della specializzazione nel corso di laurea magistrale.

Tesi🔗

Titolo: "Valutazione di Recensioni: Fattori in Gioco e Predizione di Qualità"

Relatrice: Prof. ssa Liliana Ardissono

Corelatrice: Dott. ssa Noemi Mauro

Abstract: La nascita delle recensioni è legata al contributo che possono dare a nuove persone per fare delle scelte. Non tutte le recensioni sono uguali, alcune nascono con secondi fini, tant’è che nei vari store online sono spesso usate come strumento di potere da parte dei clienti. Alcune recensioni sono troppo sintetiche e altre troppo prolisse, ipso facto la necessità di attribuire loro un valore di utilità. Una possibilità del genere, consente di ottenere le recensioni più rappresentative per un prodotto, in grado di guidare la scelta di altri consumatori, oppure per istruire un sistema di raccomandazioni. La tesi discute quali fattori influenzano la qualità o utilità di una recensione e in che misura, fornendo dunque un modo di predire l’utilità di recensioni per cui tale valore non è ancora definito.

Progetti Sviluppati🔗

  • Tesi
    In questo progetto, ho sviluppato un sistema automatico di analisi delle recensioni da parte degli utenti di Yelp.

  • Mails
    In questo progetto ho sviluppato un simulatore di un client e-mail, sfruttando i concetti avanzati di Java presentati nel corso "Programmazione 3": Tipi generici, Threads, Tasks, Threadpools, Grafica (swing/javafx), pattern Observable/Observer, Interfacce e Polimorfismo.

  • Bookings [Server+Frontend/Android Client]
    In questo progetto ho usato i concetti del corso di "Interazione Uomo-Macchina e Tecnologie Web" per sviluppare un sistema di gestione di prenotazioni. Il client android è scritto in Java mentre il client web usa angularjs e bootstrap. Il server è implementato attraverso una Servlet.

  • Sistemi Operativi
    L'idea di questo progetto è stata di replicare le modalità di funzionamento di una società di individui. È un prototipo scritto in C, che coinvolge l'uso dei seguenti concetti:

    • Processi
    • Inter-Process Communications
    • Gestione dei Segnali
    • Files
    • Pipes
  • Linguaggi Formali e Traduttori
    Questo progetto è consistito nell'implementazione di un traduttore in java bytecode, di un linguaggio inventato, simile a basic.

Perito Tecnico Informatico🔗

Istituto di Istruzione Superiore "A. Meucci", Casarano, Lecce, Italia (set 2011 - lug 2016)

Voto: 80/100

Il mio percorso formativo in informatica è cominciato qui. Ho usato il linguaggio C per imparare le basi della programmazione imperativa, ho cominciato ad usare HTML, CSS e Javascript. Nel frattempo nella materia "sistemi e reti" ho usato assembly e cominciato a configurare le reti. Dal terzo anno in poi ho usato Java, con grafica, threads, operazioni sui file e sockets.

Approfondimenti Personali🔗


Lingue🔗

  • Italiano (madrelingua)
  • Inglese (C1/C2, non certificato)

Le mie attività online sono quasi esclusivamente in inglese. Riesco a comprendere quasi qualsiasi contenuto, anche tecnico, scritto o parlato senza grossi problemi e a tradurlo in italiano, quasi istantaneamente. Non ho alcuna difficoltà nella produzione scritta o orale.

Interessi🔗

Mi interessa l'informatica in generale. Ma ultimamente gli argomenti che seguo con più interesse sono (senza un particolare ordine): l'interoperabilità, il progetto SOLID, i sistemi distribuiti, la privacy, la programmazione funzionale, e i linguaggi LISP.

Seguo con molto interesse un po' tutti gli argomenti scientifici. Oltre all'informatica, mi piace tenermi informato e approfondire tematiche riguardanti: le neuroscienze, la psicologia, la biologia (in particolare, la genetica).

Nel tempo libero mi piace creare illustrazioni digitali, suonare il violino o leggere libri, sempre prediligendo argomenti scientifici, ma spaziando anche su argomenti di natura meno razionale e più filosofica, come Alan Watts, per citarne uno.

Tecnologie🔗

Di seguito fornisco una personale classifica delle tecnologie che conosco, con la relativa stima personale della mia preparazione in esse, da 1 a 10.

Sistemi Operativi🔗

  • Android: 10
    Note: Mi interesso di modding sin dal primo smartphone che ho avuto. Conosco discretamente il funzionamento di molte parti di android che la maggior parte degli utenti ignora. Ho compilato l'AOSP più volte, in alcune occasioni aggiungendo piccole funzionalità per adattarlo a casi d'uso molto specifici.
  • Linux: 9
    Note: Utilizzo sistemi Linux sui miei desktop e laptop da quando avevo 16 anni. Ho provato la maggior parte delle distribuzioni almeno una volta: Alpine, Debian, Ubuntu (e derivate), Fedora, openSUSE, NixOS, Arch (e derivate), Void, Gentoo. Attualmente utilizzo Gentoo sul mio desktop e configuro personalmente il kernel aiutandomi con le apposite wiki e sperimentando autonomamente di tanto in tanto. Mi occupo personalmente dell'amministrazione di un NAS personale con GNU/Linux sopra.
  • MacOS: 9
    Note: Nella mia infanzia e adolescenza ho usato molto macOS in casa ed essendo un sistema Unix-like mi risulta semplice da maneggiare. Lo uso ben volentieri.
  • Windows: 8
    Note: Nella mia vita ho usato Windows abbastanza spesso, sin dalle elementari. È il sistema operativo che preferisco di meno, non tanto per una questione ideologica, quanto per la scomodità nell'utilizzo pratico, da sviluppatore. Continuo ad usarlo ogni tanto sul mio desktop ma solamente se non c'è alternativa con nessun altro sistema operativo.
  • Unix: 7
    Note: Ho fatto qualche esperimento con alcune derivate di BSD, in particolare FreeBSD, ma non ho approfondito troppo.

Linguaggi di Programmazione🔗

  • Java: 9
  • Python: 9
    Note: Ho cominciato ad usare python in terzo superiore, studiandolo autonomamente. Da allora, l'ho trovato molto utile per implementare velocemente un'idea, oppure per agevolare la normale amministrazione dei miei sistemi, nel caso in cui gli script shell non siano adeguati per il compito.
  • CSS: 9
  • Javascript: 9
  • PHP: 9
    Note: L'ho usato spesso. Ho scritto un tema per WordPress e l'ho usato durante l'esperienza lavorativa in Comunickare.
  • Shell: 8
    Note: Usando sistemi Unix-like e amministrando un mio NAS, mi capita molto spesso di dover scrivere alcuni script per facilitare la normale amministrazione. Se non è strettamente necessario fare diversamente, tento di rimanere sempre all'interno dello standard POSIX. Utilizzo zsh.
  • SQL: 8
  • Kotlin: 7
    Note: L'ho usato per qualche progetto personale, lo conosco ad un livello piuttosto basilare.
  • C: 6\
  • Haskell: 5
    Note: È un linguaggio che sto imparando ad utilizzare Note: L'ho usato sporadicamente nella mia vita, la prima volta alle superiori, per imparare le basi della programmazione, la seconda volta in triennale per il progetto di sistemi operativi. Non avrei problemi ad utilizzarlo nuovamente, ma avrei bisogno di ripassarlo.
  • Clojure: 5
    Note: Ho solo costruito qualche esempio giocattolo.
  • LISP: 3
    Note: È un linguaggio che sto imparando ad utilizzare
  • Rust: 3
    Note: È un linguaggio che sto imparando ad utilizzare

Frameworks e altro🔗

Ho usato Vue.js e Bulma (CSS) in progetti universitari e personali. Java Spring, AngularJS solo in un progetto universitario.

Uso giornalmente docker per l'amministrazione del software sul mio NAS. Uso git per strutturare i miei progetti.

Progetti Separati🔗

Un "bot" sulla piattaforma di messaggistica istantanea Telegram, per visualizzare l'orario delle lezioni di UniTo. È scritto in python e usa una tecnica di scraping per recuperare i dati direttamente dal sito.

Originariamente nato come una scusa per imparare ad usare Kotlin. Era un categorizzatore di notifiche (quando la stessa funzionalità ancora non era disponibile nativamente in android). Permetteva di categorizzare le notifiche in arrivo sul proprio dispositivo per ignorare quelle inutili e mandare in risalto quelle più rilevanti. Il tutto usando le API Android per la ricezione delle notifiche e un semplice sistema di filtraggio del testo basato su keywords.

TgThemer-py🔗

La versione scritta in python di un sistema di generazione automatica di uno schema di colori per Telegram. In quel periodo creare un tema per telegram era possibile, ma molto difficile a causa del numero di colori che un utente doveva andare a modificare per ottenere un tema consistente. Questo sistema, dati solo due colori (uno principale e uno di evidenziazione), genera automaticamente un tema che può essere importato nella versione android di Telegram. Tecnicamente, questo sistema modifica le possibili variabili dei colori di telegram attraverso un calcolo delle sfumature dei colori che l'utente fornisce come input. Una demo scritta in PHP, può essere trovata qui.

Esky🔗

Quando ho cominciato a curare il mio blog, i vari temi di wordpress avevano solo degli schemi di colori fissi. In molti temi, non era possibile modificare i colori, in modo che il tema rimanesse consistente. Questo è un tema per Wordpress, che supporta una colorizzazione dinamica (basata sulla configurazione specificata dall'utente) su tutto il sito in modo simile a TgThemer-py.

Un'applicazione in Flutter per tenere traccia degli eventi in accordo al modello ABC tipicamente usato nella Terapia Cognitivo-Comportamentale. È stata la mia scusa per provare ad utilizzare Flutter.

Altro🔗

  • AGESCI (Boy Scouts) -- 2010-2016

Ho partecipato ai Boy-Scouts per tutta la mia infanzia e prima adolescenza. Ci sono state diverse occasioni di volontariato: abbiamo prestato assistenza negli ospizi per anziani e negli ospedali psichiatrici locali, ma anche durante le uscite, presso privati. Quello che mi è rimasto da questa esperienza è il valore del "Lasciare il mondo un po' meglio di come lo si è trovato", è un valore così importante per me che l'ho successivamente integrato nel mio essere. Io credo nel miglioramento perpetuo. Di me stesso prima, e dell'ambiente che mi circonda dopo.

Avatar di @lucadmt
Luca D'Amato (@lucadmt) luca@damato.me

Un generalista e il suo angolo di internet


Vorresti dare le tue opinioni rispetto questo post? Scrivilo online e inserisci il link della risposta qui per mandarmi una Webmention