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.
I occasionally work on side projects in my spare time, mostly for my own enjoyment, personal use or just to learn a new technology. However, I do not have fully functional services to showcase except for old ones, which I do not really like any more. It’s common knowledge that developers often abhor the code they wrote in the past. It’s like nothing is never good enough. Besides, technology evolves so quickly those projects use outdated libraries already. So, despite having about 75 repositories in my bitbucket account, I can only showcase very few of them (all the others are private).
Discoverable documentation (2019, TypeScript, express, React)
This is a project I started long ago with the intent to make documentation written inside a repository more discoverable and up-to-date. The platform would run in a SaaS wrapper and notify developers when changes should be made to improve documentation on merge. What follows is a summary of the design document I wrote before starting. Currently, most of the basics are implemented but I lost commitment while writing the frontend.
Foffi random chat (2017, 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.
Chibi Test (2017, 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…
A quest for Knowledge (2015, HTML5+JS5)
pick.me (2015, 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.
Heldroid (2015, Java)
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.
JessBot (2013, Jess)
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.