Zheng Hao Tan

Projects

Hologram Open Source Projects

Hologram Go Library

The Hologram Go REST API library allows you to use our public REST API to interact with your cellular device. Most of the REST APIs that you see on the dashboard are publicly available too. Here is a library/wrapper that I wrote during our company Hack Day so you can integrate this into your Go application more easily. The examples can be found here.

Technologies Used: Go

Hologram C++ Library

The Hologram C++ REST API library allows you to use our public REST API to interact with your cellular device. Most of the REST APIs that you see on the dashboard are publicly available too. Here is a library/wrapper that I wrote during our company Hack Day so you can integrate this into your C++ application more easily.

Technologies Used: C++, Json11 (Dropbox's open-sourced library), Boost Asio, GitHub, Travis CI

Hologram Rust Library

The Hologram Rust REST API library allows you to use our public REST API to interact with your cellular device. Most of the REST APIs that you see on the dashboard are publicly available too. Here is a library/wrapper that I wrote during our company Hack Day so you can integrate this into your Rust application more easily.

Technologies Used: Rust, Cargo, GitHub, Travis CI

Hologram Python SDK

Hologram’s Python SDK is an easy-to-use interface for communicating with the Hologram cloud, other cloud services, and SMS destinations. It’s designed to be run on small Linux devices such as Raspberry Pi, which are connected to the internet using a USB Cellular Modem.

Technologies Used: Python, PyPI, Pytest, WiFi, Cellular, TCP/IP, PPP, Travis CI

Embedded Projects

OmniView - Facial Recognition Glasses

OmniView is a facial recognition glasses that identifies people via a camera and display their name on an OLED display. My roles in the project so far includes helping two other teammates with our schematic and board layout and writing the OLED display drivers. I also worked with them in getting the networking interface up and running, as well as laying out the blueprint for how we are going to abstract them all these into tasks and scheduling them with freeRTOS. I helped to implement these via periodic tasks or be controlled via GPIO/timer interrupts.

Technologies Used: C++, C, TI UniFlash, TI Code Composer Studio, GitHub

Indoor Positioning System

Our project is an indoor location system that aims to determine an unknown position inside a building, where GPS reception is poor, based on known positions. This project will consist of several beacons and a listener. The beacon will periodically transmit a fast RF signal, with a slower ultrasonic pulse. We will then estimate the distance between the beacon and the listener based on the time difference of arrival (TDOA). Based on the distances between a listener and at least three beacons, we can use triangulation to calculate the listener position.

Technologies Used: C, GitHub

Work Queue Simulation

A loadable Linux kernel module that initializes a work queue every 500ms

Technologies Used: C, Linux kernel

Timer Interrupts on TI CC3200

A simple demonstration on how to use timer interrupts with freeRTOS on the TI SimpleLink CC3200 Launchpad.

Technologies Used: C, TI Code Composer Studio, TI UniFlash

GPIO Interrupts on TI CC3200

A simple demonstration on how to use GPIO interrupts with freeRTOS on the TI SimpleLink CC3200 Launchpad.

Technologies Used: C, TI Code Composer Studio, TI UniFlash

Getting Started With Pebble

Pebble watchface demo

Technologies Used: C, Pebble SDK

Blink-ATmega328p

A simple LED blinking project thehat uses the AVR toolchain without the Arduino IDE

Technologies Used: C, AVR toolchain

Blink-msp430-gcc

A simple blinking application that demonstrates the use of the MSP430-gcc toolchain

Technologies Used: C, MSPGCC

Robotics Projects

Simultaneous Localization and Mapping (SLAM) with MAEbot

We implemented a simultaneous mapping and localization algorithm that allows MAEbot, a mobile robot equipped with a RPLIDAR 360 degree laser scanner, to explore a static environment.

We also implemented a path planning algorithm (A* search) that allows the MAEbot to decide how to explore the frontiers of the unexplored environment. A further optimization that we made was to remove all waypoints that could be reached without crossing obstacles except for the last waypoint that could be reached. We did this iteratively until we looked at all points on our original path.

Technologies Used: C/C++, Vx Library, LCM with bot-lcm-tunnel

Computer Human Interaction via Intelligent Chess Robot

Alexander Berman, Justin Kaput and I implemented a chess engine that does some image processing for a chessboard, abstract it to a board state, and then uses its chess AI to play its chess pieces via the robotic arm.

There are 3 main parts for this project, which are: 1. Arm Kinematics 2. Image Processing 3. Chess Engine

A more detailed description for how we accomplished this is provided in the project link above.

Technologies Used: C/C++, Vx Library, LCM with bot-lcm-tunnel

Mobile Projects

Check

Meet Tommy Fang! aka the guy who did most of the beautiful work.

Technologies Used: Swift, Objective-C, Parse

Web Projects

Honeypot

This was a project that we all worked on in the Google 24 Hours of Good hackathon held in Google's Ann Arbor office, MI, USA. We were runner ups in the competition.

Technologies Used: HTML, CSS, JavaScript, AngularJS, Grunt, Bootstrap, Google Maps API, Google Places API, Google Drive

Scripting Projects

EmailBot

This is a Python script written to automatically handle my emails. Some of the programs are filtered into certain folders/trash automatically.

Technologies Used: Python 3, Pip

SMSBot

A SMS bot that I use to send myself an SMS when something awry happens to my remote servers.

Technologies Used: Python 3, Pip, Travis CI

MagicSnippets

A magical place where all my crappy, throwaway scripts live.

Technologies Used: PHP, Bash scripts, Travis CI, shellcheck

DatPortal

A bash script that syncs your local files/folders to your remote server.

Technologies Used: Bash scripts

Other Projects

Software Development Settings/Preferences

These are my sublime, vim, tmux, bash, zsh and various other settings. I just want them to be short and simple. I can clone/pull it from any other machine that don't already have my settings in them.

Technologies Used: dotfiles, Travis CI, Docker