Ionut Andrei Oanca

Hi, I'm a Computer Science & Engineering (CSE) student at Politecnico di Milano.

Résumé Get a copy of my curriculum vitae.

@OancaAndrei View my GitHub profile.

About me

I like to tinker with things, tear them apart and see how they work, be it software or hardware.

Below you'll find several open-source projects to which I've contributed to some extent. You'll also find some of my biggest, yet personal, projects on which I've worked during the years.


Open source

Jellyfin

Jellyfin is a neat and free media library system.

I've contributed to this project by implementing SyncPlay, a feature that lets multiple people watch the same content synced on different devices scattered around the world.

SyncPlay got announced as the headline feature in their 10.6.0 release, woah. Also, I got a shout-out in this podcast by name (at around 7:21).

C#, JavaScript, WebSockets

SkipIntro

SkipIntro is a plugin for Jellyfin which lets you skip the intros or repeated content of TV shows.

This is done by analyzing the audio of all episodes and finding similar sound cues (chroma-based features).

C++, OpenCL, C#, Vue.js, Python

  • Matching content for the first four episodes of Rick and Morty.

  • Matching content for the first seven episodes of Rick and Morty.

  • Matching content for the first four episodes of Spongebob Squarepants.

  • Matching content for the first four episodes of Bojack Horseman.

OPAL

OPAL is an administration layer for Policy Engines such as Open Policy Agent (OPA), and AWS' Cedar Agent.

OPAL uses fetchers to initialize and update its internal data. I've implemented the MongoDB OPAL Fetcher which allows retrieving data from a MongoDB database.

Python, MongoDB

Goldberg Steam Emulator

Goldberg Steam Emulator emulates Steam online features on a LAN.

I've helped by writing some Linux specific callbacks that the library was missing. This required some reverse-engineering in order to understand what the different callbacks needed to do.

C++, IDA

blender2ogre

blender2ogre is a Blender exporter for the OGRE 3D engine.

Minor contribution to add support for OgreMeshTool (basically OGRE released a new exporter so I've integrated it into the add-on).

Python, Blender


Personal projects

Zero

Side project made for fun (both in making and using it) that involved using different technologies.

Zero is a multiplayer shedding-type card game, aimed mainly to be played from mobile devices.

  • The core can easily be adapted for new game rules.
  • The back-end has been written with scalability in mind and relies on job queues to accomplish this. Hosted on Heroku.
  • The front-end, which is statically hosted on GitHub Pages (thus removing workload from the back-end), combines Vue.js, Bootstrap and vector images to obtain a PWA that properly scales to fit the screen size without losing visual quality.
  • Proper DNS configuration to merge the back-end with the front-end.

Node.js, Vue.js, lots of SVGs, Heroku, Redis, PostgreSQL, RabbitMQ, Progressive Web App

GuitarSmith

This was my attempt at creating an open-source version of the game ˝Rocksmith 2014˝.

GuitarSmith is a desktop game that teaches the player how to play its guitar with gradual levels of difficulties. Even though it's still in an alpha stage, the key features are present and working, just in a rough way.

Key points of the project are:

  • uses the original game's songs, that is, it reads the propietary psarc format;
  • first attempt at writing a game engine (render loop, audio loop, game loop, threads);
  • some basic GLSL shaders placed on objects modeled in Blender;
  • should be cross-platform, further testing needed;
  • GitHub Pages deployment with CI/CD builds on Travis-CI.

C++, CMake, OGRE 3D, PortAudio, Essentia

clockface.json

A code-editor-inspired watch face for the Zepp OS platform.

clockface.json is a watch face I initially developed for my Amazfit GTS 4 Mini, which is a device with limited APIs and functionalities. With a custom editor and parametric design, it allows for a wide range of customization.

  • Easy customization with live preview in the editor.
  • Custom font support with offline rasterization. Native support for fonts is missing in Zepp OS 1.0.
  • Custom PNG and Targa images generator. Using color-palette-based images, the watch face can be customized with a wide range of colors, while reusing the same images.
  • On-device customization with a settings page.
  • GitHub CI/CD pipeline for automatic deployment to the Amazfit store.
  • Has +19k downloads on the official Amazfit store.

TypeScript, Vue.js, PNG, Targa, GitHub Actions, Zepp OS SDK

FMDN Accessory implementation

A custom Find My Device Network Accessory implementation on Newt, targeting the Nordic's nRF51 series, nRF52 series and Espressif Systems' ESP32.

Following Google's FMDN specification, the implementation allows for a device to be paired with Fast Pair and registered on the Find My Device network.

  • Fast Pair BLE packet broadcasting.
  • GATT server for the device's information, like characteristics and services.
  • Authentication with Anti-Spoofing keys and encrypted messages with exchanged keys.
  • Android successfully registers the device through the Fast Pair process.
  • Find My app will block devices mid-procedure when Model ID is in development mode.
  • Next step is to extract the private key of a commercial device and test the implementation.

C++, Bluetooth Low Energy, FMDN, Android

Tunnel Runner

A 3D First-Person Endless Runner game for the Zepp OS platform.

Tunnel Runner is my submission for the Zepp OS 2024 Global Online Hackaton.

  • Custom 3D engine with simple collision detection.
  • Uses the Canvas API added in Zepp OS 3.0.
  • All draws are either lines or image planes, aiming for a retro look with the benefit of being lightweight.

JavaScript, Targa, GitHub Actions, Zepp OS SDK

Custom module for Zepp OS

A custom native module for the Zepp OS Simulator firmware that is used to demonstrate the ability to load and run custom code on the simulator.

By injecting a custom code section and then patching the existing firmware, the module can be loaded and run on the simulator.

  • ELF injection is done using lief.
  • Patching is done manually with Ghidra by taking over the native WebSocket handler used by the simulator.
  • Custom module is able to call new functions and interact with the firmware, accessing unexposed methods too if needed.
  • Objective is to inject realtime data into the simulator from host-system sensors, like Bluetooth dongles.

ARMv8, Ghidra, Assembly, C++, WebSocket


Favorites

Editor

Visual Studio Code, vim

Operating System

Linux (mainly Ubuntu), MacOS

Terminal

zsh