Hobby Operating System for Raspberry Pi

C, ARM Assembly; Individual Work; Spring 2017

CS Senior project @ NYUSH.

The purpose of this project is to do bare-metal programming that simulates basic OS functionalities of on a Raspberry Pi 2 Model B. It is meant to explain what a general purpose OS typically does, familiarize myself with what is happening under the hood of a running OS, and help me gain hands-on experience of developing an OS that could run on a piece of real hardware.

Currently, it:
1. Boots on Raspberry Pi 2 board
2. has three ‘processes’ running, each controlled by an incrementing counter and taking turns outputs a character which represents the content of that ‘process’
3. Uses a UART LCD screen for displaying the output information.

Near term future plan: transplanting JOS to Raspberry Pi.

The full report is here.
The complete source code is here.

Nature of Code

Javascript; Individual work; Spring 2017

“How can we capture the unpredictable evolutionary and emergent properties of nature in software? How can understanding the mathematical principles behind our physical world help us to create digital worlds?”
– Daniel Shiffman

This project uses p5.js to do a set of visualization and simulation on real physical environments. Topics including gravity, resistance, oscillation, spring, autonomous agents, and flocking system. It contains 11 demos I created along with taking the course. Complete list of demos could be found here.

Some of my personal favorite are:
- A firework. Right click mouse to lighting a firework. Press Space to make the firework explode. Press “b” to make the firework blinking.
- A gravity game. Press ↑←↓→ to control blue ball direction. Press Space key to pause. Press "w" key to add wind. You’ll die touching red triangles, and get bounced back touching white circles.
- A fancy wave. Press ↑←↓→ to control the wave movement. Press Space to break the wave into particles, and press again to put them back together. Press "r", "g", "b" to change the color.
- Another game. Click onto end points of "N Y U S H", and drag them to form different shape. Click onto any of the flying torch, stop and drag them. Mouse hover onto a torch, and press "d" to make it move again.

The complete source code is here.

Messenger

Java, JavaScript; Co-worker: Jack B. Du; A weekend in Spring 2017

Web-based messenger just for fun.

Build:
   mvn clean compile
   mvn clean package
Run:
   java -jar target/web-chat-1.0.jar --server.port={PORT_NUM}
After server starts, clients could open a browser and start chatting at address: {SERVER_IP_ADDR}:{PORT_NUM}

Fun facts:
1. You don't need a password to use this messenger, sign up if you are a new user, or just sign in with your unique user name
2. Click on 'Users' to obtain a list of user. Click on multiple users, and start a group chat
3. Click on 'Chats' to obtain a list of chat. Click to join a group chat, or return to any of your previously joined group chats
4. You could see chat history of a group when you first join, but you loose chat history when you leave that active chat page, for example, by clicking on another group

Architecture:
  Back-end: Java Spring + Maven
  Front-end: Vanilla JavaScript

The source code is here.

Local Notes

Python; Co-worker: Daniel Basner, Talha Javed, Patrick Yuen; Fall 2015

We want to make it easier for travellers to know about their destination, and solve the problem of not having accurate and up-to-date travel information.

Basic functions:
1. All users can search for a city and view all post about that city.
2. Registered users can post information only about the city where they send that post.
3. Registered users can delete their own posts.

Basic Architecture:
1. Web Framework: Django + Bootstrap
2. Cache: Memcached on an Amazon EC2 instance.
3. Database: 4 MySQL databases running on 4 Amazon EC2 instances.

The source code is here.

Android App Automation Test

Programming - Python, Ruby; Co-worker: Chao Li; Summer 2015

UI and API level Android automation test for "KAKA", an Android app for truck drivers to report their current location and status of the goods that they are delivering.

It uses an open source framework "Appium". Most of my works are done in Python, while I extract a set of Ruby functions from Chao Li's Ruby code, which aims at the automation test for our Web Application, and call them from Python.

Connect an Android smartphone with API level higher than 18 and run the test, it will eventually generate a test result as below.

The source code is here.
Note: I do not enclude the .apk file owing to company privacy issue.