Projects and technologies
Here is a non-comprehensive list of some of the technologies, frameworks and libraries I used over the past years. Platforms I’ve developed for and worked on include Linux (Ubuntu, Mint, CentOS), Windows, Mac OS (El Capitan) and Android (2.3 - 6).
In my current day-to-day job, I work with Spring Boot, Pandas, Hibernate and sci-kit learn. In my former position at .Cleafy I used Java Spring, ElasticSearch, JUnit, JQuery, Slim, Twig, Bootstrap, React and node.js. Notice that I develop most of my personal projects using node.js with ECMAScript 2017.
I am used to work in agile environments, prioritizing tasks within a sprint while defining specific attainable sprint goals for the future. I am protificient with the Atlassian suite, as well as gitlab for handling and configuring continuous integration.
Scientific computation and AI
The usual suspects are of course sklearn and numpy. I worked with Weka, RapidMiner and MathLab. I also developed some projects using bayes reasoning platforms, neural networks, fuzzy reasoning, integer optimization and genetic algorithms. My favourite theoretical subjects are graph theory, design patterns, algorithms and data structures and complexity theory. Lately, I have been passionate about deep learning, which I am now studying independently: I used synaptic for small projects and tensorflow+Keras for bigger ones.
I have some experience working with Unity 5 and I briefly played around with the latest Unreal Engine 4. I was one of the few XNA enthusiast when it came out, and experimented with it considerably (e.g. developing a physics engine from scratch, a time engine and a music based arcade game).
I delved into the programming world when I was 14 years old, with Pascal and VB.NET being my first languages. I kept on writing programs for fun in my spare time until I started University. Then I slowed down considerably. During all these years, academy only provided me with the theoretical and conceptual tools; while I learnt all the practical knowledge by myself.
My most recent work experiences had me using a mix of Java 8, Python 3 and Flow/JSX, and of course the usual suspects HTML 5 and CSS 3. I devlop most of my personal projects in TypeScript or ECMAScript (big enthusiast of async/await and hoping for asynchronous generators soon!). Although I have not been using C# for quite a while, it remains my “serious” language of choice and I hope to use it a lot more frequently in the near future! Finally, I am a bit rusty on my C++ and SQL, but I used them in the past and it won’t take me much to get back in shape if necessary. I also used sass, less and jade in the past for generating style sheets.
As a side note, I want to point out my brief academic experiences with less used languages, which include Scheme, Haskell, Erlang, CoffeeScript, Datalog and Prolog. I also used LUA in order to code AddOns for the famous videogame World of Warcraft (back in my dark years); and Papyrus to create scripted mods for The Elder Scrolls videogame series.
Despite my reduced working experience, I wrote hundreds of programs and participated in many team projects, most of them before starting University, when I was a beginner in the field. I used to write a lot of code just for fun; so much indeed that despite being inactive for the past seven years, my account is still at the top of the ladder within the pierofoy.it programming community (I also was one of the administrators). Here I list a brief sample of my coding experience, mentioning only those projects with more substantial codebases.
This is my master thesis work. It’s a ransomware detector based on natural language processing. It is composed by two modules: filtering and detection. The former is based on an ensemble classifier, while the latter uses three specific heuristics. The whole project implements Smali code parsing, feature extraction and vector space search, while delegates other tasks such as unpacking, stemming and segmentation to third party libraries.
Foffi random chat (ECMAScript6, socket.io, mocha)
A simple omegle-like random chat for strangers, implemented as an exercise to experiment with ECMAScript6. It has no persistence, as conversations are volatile. It has an interest-based matching system that should match users in O(1) time in the best case.
A quest for Knowledge (HTML5+JS5)
Chibi Test (Unity, C#)
This is an exercise to teach myself Unity5, or more precisely to get back into Unity as I had already programmed for the platform already. It is a very simple 3D free-camera game with a single level. The goal of the level is to find a way to leave the island. It encompasses the most basic fundamentals of game programming, such as animators with state machines, gizmos, enemy scripting, physics manipulation, collision handling, level design, UI design, etc…
pick.me (Android native, node.js, SQL)
A geolocation/discovery based instant messaging service that I developed for my mobile app development class. The front-end is a native Android application written in plain java. Its interface is almost exclusively pure xml. The back-end is a node.js server based on socket.io. Some of the business logic is encoded directly in the database using triggers and stored procedures, coupled with indices to optimize query performances.
Qurux (PHP, node.js)
A dating website exhibiting dynamically ajax-accessed RESTful services exposed through the MVC Phalcon framework. Bootstrap-like graphics and real-time events based on WebSockets.
A general-purpose graph library with many notorious graph algorithm implementations.
For my Expert System class I developed a fuzzy engine in a dialect of scheme that controlled a robot to be used in noxious environments for measuring and reporting lethal concentrations of a chemical in the air. The fuzzy rules controlled its motion, prevented it from hitting obstacles, payed attention to fuel and battery levels, while looking for dangerous zones in the environment. Since a real robot was not available, I simulated everything (sensors and physical interactions) in Java by extending the Jess core.