Luca D'Amato's Curriculum Vitae
Work Experience🔗
Consultant -- Blue Reply Financial Services (07/11/2022 - present)🔗
I do backend development (Python, Java, Spring Boot, JavaServer Faces) and frontend development (HTML, CSS, Javascript), software releases, git repository management and Version Control System (VCS) management.
Web Developer -- Comunickare (08/2016 - 10/2022)🔗
I designed, built and administered some websites managed by Comunickare: Comunickare, Chazen, Epeira, SalentoLibri. I developed a web-app that lets users explore the Chazen online catalog.
Education🔗
Master's Degree in Computer Science🔗
University of Turin, Turin, Italy (oct 2019 - oct 2022)
Degree: LM-18 Laurea Magistrale in Informatica
Grade: 105/110
I deepened my overall understanding on artificial intelligence exploring the following themes: intelligent agents, machine learning, neural networks, state space search with heuristics, expert systems, cognitive architectures, constraint satisfaction problems, natural language processing. This kinds of education has been aided by themes that strengthened the knowledge I acquired in my bachelor's degree, with subjects involving advanced techniques and architectures in software development and mobile devices programming, without leaving behind collateral, but important aspects, like ethics and privacy, didactic methodologies for computer science teaching, developmental and educational psychology and net-based economy. Moreover, I decided to study subjects like logic that add a theoretical basis under various computer science aspects.
Thesis🔗
Title: "Collaborative Software Systems: A Review"
Supervisor: Prof. Giovanna Petrone
Abstract: In recent years, collaborative software systems have acquired vital importance. They effectively become the tools needed for a wide variety of contexts, purposes and tasks, especially after the pandemic. These tools have completely revolutionized the way various tasks are commonly performed, often showing greater efficiency over traditional methods. This efficiency was felt above all, in the environments and contexts in which this kind of tools and methods were still struggling to be adopted. For this reason, the objective of this thesis is the exploration of currently available collaborative software systems and their critical analysis with respect to their relative limitations and strengths. In addition, an ideal and high-level view of the features that such an instrument should possess, will be suggested.
Projects Developed during the degree program🔗
-
Thesis
I developed a prototype of a collaborative software system that integrates Google calendars with GitLab issues. -
Vinr [frontend/backend]
This project’s main goal was to experiment technologies currently used in complex software applications. This is the prototype of a Social Network. The frontend uses Vue.js. The backend is organized in microservices and based on Java Spring Framework. Each microservice is fully containerized and they’re integrated by using the provideddocker-compose.ymlfile. The developed microservices are:- Interaction Manager
It manages any type of user interaction in the social network (I implemented follows, likes and comments) - Notification Manager
It manages the sending of notifications to the relative user. - User Manager
It manages any kind of user information: Profile pictures, names, biographies, etc. - Eureka
Service Registration & Discovery - API Gateway
- Interaction Manager
-
Artificial Intelligence & Laboratory
This project is split in three parts:- prolog-asp
This section of the project has been split again, in two parts:- State Space Search using “Informed” algorithms (with heuristics)
In this project part I focused on implementing a solver for the 15-puzzle game using Logic Programming (Prolog). I Implemented the IDA* search algorithm. My variant of IDA* selects as the next tile to be moved, the tile that minimizes the f-value (heuristic's estimate plus the cost of the moves up until the current state). I implemented two version of the heuristic functions: Hamming's distance and Manhattan's distance. I discovered that the latter brings the best results when combined with my selection mechanism for the next tile. - Constraint Satisfaction Problems
In this part of the project I focused on the implementation of a Constraint Satisfaction Problem, to automatically schedule the matches in a fictitious sport tournament, using Potassco’s ASP solver “clingo”. This kinds of problems are defined with some constraints that must be respected and the values to keep in consideration, the solver’s goal is to find the istances of the variables such that every constraint gets satisfied.
- State Space Search using “Informed” algorithms (with heuristics)
- Expert Systems
In this section I implemented an expert system using CLIPS. The idea is that this software should support a real estate agent, which would input the user’s preferences and the software will search the best matching accomodation with respect to such preferences. This isn’t made by using a blind match between user preferences and accomodations, but by using confidence intervals: a tool similar to probabilities but easier and cheaper to compute. - Cognitive Architectures
In this section I experimented with the SOAR cognitive architecture to implement a reinforcement learning puzzle. In this puzzle, we suppose that the SOAR agent is trapped in a room with an armored window as the only way out. The agent has some tools at its disposal: a pebble, a sprig, two trunks and a rubber band. The code specifies the domain, these tools and their properties, and the actions that the agent can apply on them, with their relative punishment/reward values. By interacting with the environment, the agent will discover that the best way to get out is by crafting a slingshot first, to break the window, then craft a simple ladder to climb its way out.
- prolog-asp
-
Natural Language Processing
This project has been split in three sections:- First Part
This project section consists in the implementation of a CKY parser and its use to parse some sentences in “Dothraki” (a fictional language in the Game of Thrones Saga) and a sample grammar found in the exercises of the book Speech and Language Processing by Dan Jurafsky & James H. Martin - Second Part
This part is a collection of exercises involving the following topics:\- Word Similarity e Sense Disambiguation
In this exercise I implemented some similarity measures between lexical elements (Wu-Palmer, Leacock-Chodorow and Path Similarity) that make use of the lowest common subsumer between two terms. I then calculated the Spearman and Pearson correlation indexes against a target correlation value. In the second part of the exercise I used Lesk's Algorithm in the Word-Sense Disambiguation task. - Lexical Resources Integratino & Word Sense Disambiguation
In this exercise I integrated WordNet and FrameNet. For each frame I had to assign a WordNet synset to the Frame Name, Frame Elements and Lexical Units. Then I evaluated the results against a manual annotation on the same resources. - Automatic Summarization
In this exercise I implemented an extractive algorithm to return the summary of a text, using vectors from NASARI. I then evaluated the performance against an LSA Summarizer using the ROUGE metric. - Word Sense Identification & Agreement
I manually evaluated the similarity between two pairs of terms. I then used NASARI and BabelNet to automatically identify the sense of these word pairs, assuming that each word acted like a disambiguation context for its counterpart. I then calculated the agreement between these annotations using Cohen's Kappa method.
- Word Similarity e Sense Disambiguation
- Third Part
Even this part is a collection of exercises involving the following topics:- Word Sense Induction
In this exercise 31 people gave the definitions for these words: ’courage’, ’paper’, ’apprehension’, ’sharpener’. Then I implemented a similarity measure and used it to evaluate the similarity between definitions. - Patrick Hanks’s Valence Theory
In this exercise I chose a transitive verb, fetched from a bigger corpus more than a thousand instances where it is used, I parsed and disambiguated them, then used the supersenses of WordNet on the topics of such verb, then clustered the results and calculated frequencies and semantic clusters. - Content-to-Form (Genus-Differentia Principle)
By using the data from the first exercise (Word Sense Induction), for each of the concepts I fetched the definitions from WordNet and I used the “Genus” principle (thereby exploiting hyponyms and hypernyms of the terms) to guide the search towards the correct term. - Text Segmentation
This exercise's idea is to implement a simple algorithm for the text segmentation task (track down the thematic changes in a text/discourse). I then implemented Text Tiling, following the original paper. - Topic Modeling
In this exercise, I used Gensim to extract topics using Latent Dirichlet Allocation on a corpus, and then visualized the results.
- Word Sense Induction
- First Part
-
Machine Learning
This project contains a collection of exercises developed during the machine learning course. The exercises involve this topics:\- Tree Models
I used a tree model to do supervised classification on the iris dataset. - Support Vector Machines
Implementation from scratch. - Clustering
I used sklearn to compare K-Nearest-Neighbors and decision trees, then I experimented with various clustering algorithms: K-Means, DBScan, K-Nearest-Neighbors. - Naïve Bayes
Supervised classification of the sentiment of some tweets. - Ensemble Learning
Adaboost implementation.
- Tree Models
-
Neural Networks This project contains a collection of exercises developed during the neural networks & deep learning course, the technologies I used were mostly tensorflow & keras.
- AutoEncoders (Denoising)
I used a Denoising Autoencoder network to enhance the graphic quality of some black-and-white pictures. - Generative Adversarial Networks
I used GANs to generate novel images. - Convolutional Neural Networks
I used a convolutional neural network to classify the MNIST dataset. - Self-Organizing Maps
Self-Organizing Maps implementation from scratch to classify sklearn's "Digits" dataset.
- AutoEncoders (Denoising)
Bachelor's Degree in Computer Science🔗
University of Turin, Turin, Italy (oct 2016 - oct 2019)
Degree: L-31 Laurea Triennale in Informatica
Grade: 89/110
I acquired a sturdier education on computer science, with respect to what I learned in high school. I revised subjects I already had known about, like: Relational DBs and programming, but with the addition of the proper theoretical basis of computer science, like relational algebra, algorithms, data structures, formal languages and logic. Thanks to the computer architectures, operating systems and computer networks courses, I had the chance to comprehend computers at a deeper level. I wanted to expand my horizons in programming by attending the programming and languages paradigms course, that explored Functional Programming: a subject I was deeply fascinated about, and the intelligent systems course, since I chose to pursue artificial intelligence as my specialization.
Thesis🔗
Title: "Review Evaluation: Factors at Play and Quality Prediction"
Supervisor: Prof. ssa Liliana Ardissono
Co-supervisor: Dott. ssa Noemi Mauro
Abstract: The inception of reviews is directly connected to the value they can offer to new people to make decisions. Not all reviews are created equal, some are written with ulterior motives in the agenda, in fact customers in various online stores often use them as a mean of power. Some reviews are way too simple, other ones are too prolix, ipso facto the necessity to assign them some sort of utility value. This possibility allows to obtain the most representative reviews of a product, able to guide the choice of other customers, or to instruct a recommender system. The thesis discusses which factors influence the quality or usefulness of a review and in which order of magnitude, offering a way to predict value in reviews which such value is unknown.
Projects developed during the degree program🔗
-
Thesis
In this project, I developed a NLP system to analyze Yelp's user reviews and infer the importance of each factor in a review. -
Mails
In this project I developed an email client simulator, by using advanced Java concepts from the advanced programming course: generics, threads, tasks, threadpools, graphics (javafx/swing), observable/observer pattern, interfaces and polymorphism. -
Bookings [Server+Frontend/Android Client]
In this project I used HCI & Web Technologies's course concepts to develop a reservation manager software.
The android client is built with Java, while the web client uses angularjs and bootstrap. The server is implemented through a Java Servlet. -
Operating Systems The idea of this project was to replicate the workings of a society of individuals. It's a protoype written in C, that involves the usage of the following concepts:\
- Processes
- Inter-Process Communications
- Signal management
- Files
- Pipes
-
Formal Languages & Translators
This project is an implementation of a translator from a made-up programming language similar to BASIC, to java bytecode.
IT Expert🔗
"A. Meucci High School Institute", Casarano, Lecce, Italy (sep 2011 - jul 2016)
Grade: 80/100
My education in computer science started here. I used C language to learn the basics of imperative programming, I started using HTML, CSS and Javascript. Meanwhile in the networks and systems course I used assembly and started configuring networks on an emulator. From the third year on, I used Java with graphics, threads, files and sockets operations.
Personal Insights🔗
Languages🔗
- Italian (native language)
- English (C1/C2, not certified) My online activity is almost exclusively in english. I can understand almost any kind of material, even technical, spoken or written without major hurdles, and almost instantaneously translating it in italian. I don't have any difficulties in oral or written production.
Interests🔗
I'm interested in computer science, in general. Lately my favourite argumets are (in no particular order): Interoperability, the SOLID project, Distributed Systems, Privacy, Functional Programming & LISP languages.
I'm very interested in pretty much any scientific topic. Other than computer science, I like to keep myself informed and deepen my understanding of the following subjects: neuroscience, psychology, biology (especially genetics).
In my free time I like creating digital illustrations or reading books, always preferring scientific topics, but also ranging on less rational and more philosophical topics, like the writings of Alan Watts
Technologies🔗
I will proceed to provide a personal list of technologies I know about, with a personal estimation of my preparation in each of them, from 1 to 10.
Operating Systems🔗
- Android: 9
Notes: I've been interested in android modding since my first smartphone. I have a discrete knowledge of lots of android internals that the vast majority of users ignores. I compiled the AOSP many times, in some instances I even built some functionality to satisfy very specific use-cases. - Linux: 9
Notes: I use Linux on my desktops and laptops since I was 16. I used the vast majority of distributions at least one time: Alpine, Debian, Ubuntu (and derivatives), Fedora, openSUSE, NixOS, Arch (and derivatives), Void, Gentoo. As of now I use NixOS on my devices. I personally administer a personal NAS with GNU/Linux on it. - MacOS: 8
Notes: During my childhood, and adolescence I used macOS a lot in my household, and since it's a Unix-like system it's easy for me to use. I'd very gladly use it if presented with the opportunity. - Windows: 7
Notes: In my life I used Windows often, since elementary schools. It's my least favourite operating system, not really from an ideological standpoing, but because I find it very uncomfortable to use in my daily life. I still use it sometimes on my desktop but only if there's no other way around it. - Unix: 6
Notes: I did experiment with some BSD derivatives, especially FreeBSD, I know it has its own quirks but I didn't delve too deep.
Programming Languages🔗
- Java: 8
- Python: 8
Notes: I started using python in the third year of high school, studying it by myself. Since then I found it very useful to quickly implement an idea or to ease the administration of my OSs, whenever shell scripts just won't cut it. - CSS: 8
- Javascript: 7
- PHP: 7
Notes: I used it often. I wrote a WordPress theme and I used it in my work experience with Comunickare. - Shell: 8
Notes: Since I use Unix-like systems and I administer my personal NAS, very often I must write some scripts to ease-out the administrative tasks. If it isn't strictly necessary I try to stick with POSIX sh. I use bash as my interactive shell. - SQL: 7
- Kotlin: 6
Notes: I used it for some personal projects, I know it at a pretty basic level. - C: 5
Notes: I used it sporadically in my life, the first time in high school, to learn the basics of programming, the second time while in my bachelor's degree for the operating systems course. I wouldn't have issues to use it again, but I'd need to review it beforehand. - Haskell: 5
Notes: I'm learning it. - Clojure: 4
Wrote some toy projects with it, but nothing important - LISP: 3
Notes: I'm learning it. - Rust: 3
Notes: I'm learning it.
Frameworks & other🔗
I used Vue.js and Bulma (CSS) In university and personal projects. Java Spring and AngularJS only for university projects.
I use docker everyday for the administration of my NAS. I use git to organize my projects.
Other Projects🔗
UniToHelper🔗
A Telegram, to quickly access UniTo's timetables. It's written in python and uses Web Scraping to get the data from the site.
Hub🔗
In origin it was born as an excuse to learn Kotlin. It was a notification organizer (back when the same functionality wasn't natively supported on android). It allowed the categorization of the notifications on the device, to ignore the useless ones and highlight the relevant ones. All of this using android's APIS to receive notifications and a simple filtering system based on keywords.
TgThemer-py🔗
The python version of a Telegram colorscheme generator. Theme creation was possible at the time but to obtain a consistent theme, one would need to edit an enormous amount of variables, and the Telegram UI to do this wasn't really ergonomic. This system, given only two colors (a main one and one for the highlights) will generate a theme that can be imported in the android version of Telegram. Technically speaking, this systems edits the telegram variables by computing the shades from the colors the user gave as input.
Esky Theme🔗
When I started curating my own blog, the WordPress themes just had fixed color presets. In a lot of themes it wasn't possible to edit the colors in a way that kept the theming consistent. This is a WordPress theme that supports dynamic coloring based on the user's configuration in a very similar way to TgThemer-py.
CBT Companion🔗
A Flutter app to keep track of events in accordance with the ABC model, typically used in Cognitive-Behavioural Therapy. It was my excuse to play with Flutter.
Other🔗
- AGESCI (Boy Scouts) -- 2010-2016
I took part in the Boy-Scouts movement all of my childhood and first adolescence. There were different opportunities to do volunteering: we assisted the elderly in the hospices, and in the psychiatric hospitals, but even during in various excursions to private individuals. What I've gaind from this experience is the value of "Leaving the World a little better than you found it", it's so important to me, that I've integrated it in my being. I believe in perpetual improvement. Firstly of myself, and then of my environment.
Vorresti dare le tue opinioni rispetto questo post? Scrivilo online e inserisci il link della risposta qui per mandarmi una Webmention