Projects


< < > >


Based-Connect

Based-Connect is a program used to control Bose headphones. It is written for Linux in C using the BlueZ library.

This program was created based on the official Bose Connect app using Wireshark. I reverse-engineered the protocol they used to communicate with headphones using Wireshark in order to get this program working. In addition, I also decompiled the updater binaries in order to find the URL of the update servers.

Ultimately, Bose liked my work enough that I was recruited and I did my Summer 2018 co-op there.

Check out the source code for the project here!



Lavid-Du

I have a friend named David who says a lot of dumb things. What if we could replace him with a bot and automate the dumb things that he says?

Lavid-Du is a Slackbot written in Python 3 which can be added to a Slack workspace. It listens to the channels that it's added to and adds any messages to a Markov chain model of a person. If someone requests an imitation, Lavid will use the model to generate a random phrase and send it to the channel. Perfect for those slow days at work.

The source code can be found here!



Cryptocurrency Market Making

Cryptocurrency Market Making is an algorithm trading project. It trades cryptocurrencies on Poloniex. Since its inception, it's given returns of 8.8%/month, on average.

It was written in Python 3 and was robustly backtested in order to maximise the chances of success. In fact, we reimplemented Poloniex's APIs locally in order to accurately test the algorithm. It is currently running on a secure Raspberry Pi server, of which I am the sysadmin.

Unfortunately, due to the nature of this project, the source code is not available.



Java-Webchat

Java-Webchat was a lightweight RMI-based chat interface designed to be small and portable. It allowed multiple clients to chat with each other through a central server.

Since Java-Webchat incorporated a database of users, precautions had to be taken in order to secure user data. As such, user data was encrypted using a one-way hash (SHA-256) which was salted. At the time of creation for this project, this was the industry standard. In addition to this, JavaFX was used as the GUI library as it produced a very clean and modern design.

Find the source for this project here!



Breadboard Computer

This Breadboard Computer was built as a learning experience. The core of the project is an 8-bit microprocessor, the 6502. This project required both software and hardware skills in order to complete.

For the software component of this project, the game of Pong was recreated as a tribute to the early pioneers of video games, which was influenced heavily by the 6502. The initial structure of the game was written up in C in order to provide an initial starting point. After that, it was hand-compiled down to 6502-assembly. After, the assembled hex image was loaded using an EEPROM programmer.

The hardware of the project consisted of various integrated circuit chips connected together with wires. The ROM is provided by an 8 KB EEPROM chip with the write-pin disabled. The RAM is provided by a dedicated 32 KB RAM chip. Finally, the display was a simple 128×64 LCD screen driven using a Versatile Interface Adaptor.

Since all of the addresses were determined using by the wiring from the CPU, the assembled code is specific to this project and thus won't be compatible with any other architecture. The model written in C can be found here.



LAByrinth

LAByrinth was a digital implementation of the popular tabletop game of similar name. It was centred around an Arduino clone, the TI C Series Launchpad, and the Orbit Boosterpack which was a module provided to extend the capabilities of the microcontroller.

For the Orbit Boosterpack, the only documentation which was provided was some sample code. As a result, an abstraction layer had to be carefully created on top of the hardware in order to make developing the game logic simpler. While most components (switches, buttons, analog-to-digital converter) involved only parallel communication, one challenge was working with the accelerometer which only used I2C serial communication.

This project can be found on online here!