As a technology enthusiast, an Electrical and Computer Engineering graduate from the Georgia Institute of Technology, a part time Teaching Assistant in the Computer Science department, a researcher in the High Performance Vision Modeling with Embedded Systems lab, and an emerging entrepreneur from the Duke Engineering Business program, I tend to keep myself pretty busy. However, I have also taken up some interesting enterprises in my spare time. Here I have amassed the products (or partial products) of all of my relevant projects over the past couple of years that I was capable of digging up.

Embedded Systems
(Microcontrollers, FPGAs, etc.)

Smart Projector

Identifying two on-screen markers
Status:
Completed

This project uses blob detection algorithms in video streams from cameras mounted on small embedded systems platforms to detect and record the movements of white board markers.

Previous examples of this concept have not been able to run efficiently enough to adequately track the movements of the markers in real time. The end goal is to create a next generation smart board, without the necessity of a board (a smart projector, if you will). The camera-projector combination will not only be able to track the user’s movements and display them on a screen, but it will also have the potential to share the edited video stream over an internet connection, bringing on a new age for video conferencing.

Eventually, gestures and other advanced features can be built in to the technology to make for a more thorough and involved user interface that will be useful for a large variety of applications.

Home Area Control

Home Area Control
Status:
Completed

This system provides a means of remotely-controlling appliances within a household, while collecting information on power usage and presenting that data in a way that the home owner can easily visualize and interact with.

Not the most creative of names, but this product provides greater flexibility for homeowners to control their devices and achieve the goals of optimizing energy consumption, while reducing costs related to unnecessary dissipation. This system enables on/off control over specific devices such as lights, TVs, and other appliances, in addition to the ability to manage the interaction of device-specific rates of power consumption.

The latter capability builds toward the goal of enabling self-sufficient "Microgrid" communities to operate independently from the rest of the power grid, as part of a next generation strategy of decentralized energy management.

More details housed at the main project website.

Collaborators:

David Green, Erik Cates, Daniel Han, David Gallmeier, and Unmesh Deolekar

Dynamic RFID Emulator

Dynamic RFID Emulator
Status:
Completed

A dynamic radio frequency identification tag that allows the user to store several RFID tags and selectively choose one of the stored tag ID numbers to use as desired, via transmission through several RF bands, encoding methods, and encryption protocols.

The hardware components consist of an antenna to receive and transmit the data, an FPGA to modulate the selected frequency, a microcontroller to handle the protocols and on-command FPGA reprogramming, and a smart device for user interaction.

The DRFID tag is a NFC device that has the potential to replace plastic cards from people's wallets by designing it to interact with existing RFID readers. This will not only help the user by requiring to carry fewer items, but it will also increase the information's security.

Collaborators:

Daniel Han

Bubble Level

Bubble Level
Status:
Completed

A PIC microcontroller project that used an inclinometer and SPI transfer protocols to determine just how level the device was.

This was one of my first introductions to embedded systems programming. The microcontroller processed the input from the inclinometer and produced a graphical display to represent how un-level the device was. The control logic was optimized to require as little current (power draw) as possible.

Collaborators:

Daniel Han

Assorted Computational Systems
(PCBs, VLSI Design, Robotics, etc.)

Automated Temperature Regulation System

Status:
Completed

A temperature regulation system my roommate and I built for our deep freezer.

My roommate and I had the need for addition refrigerator space, and since we has a spare deep freezer lying around we decided to convert that instead of going out and buying something new. Now we could have simply gone online and bought a temperature regulator, but we decided it would be more fun to try and build one on our own.

The original design used a PIC microcontroller and a digital thermometer to set and track the temperature of the freezer, maintaining it in a refridgerator-like range. However, since the system kept failing at inoppertune times we determined we were overcomplicating things, and decided to go with an analog solution.

The analog circuit consists of a thermocouple to measure and maintain temperature, in conjunction with low pass filter to remove any noise, as well as a high-RC peak hold circuit to resist rapid changes that might fry the freezer's motor. Unfortunately this solution is not as user-friendly, and requires the system to be calibrated with a potentiometer, but it has been running continuously without any issues ever since.

Collaborators:

Daniel Han

Processor Design

Processor Design
Status:
Completed

A class project where I had to build a basic processor from start to finish.

Starting with a basic inverter gate, and culminating in a 16 bit additive processor, this was no trivial task. Many an all nighter was pulled in lab to get this project completed on time, but I certainly learned a lot.

You can see a comprehensive list of all my VLSI work here.

AmigoBot Room Detection

Status:
Completed

using assembly and VHDL

Collaborators:

Zachariah Day and Sewoom Hong

Database Work

GetOne Rewards

GetOne Rewards
Status:
Completed / Ongoing...

This start-up company was created to offer store owners an organized digital solution to the outdated customer loyalty card programs. By managing all of the records online, not only is it more secure, but it is also infinitely more effective in attaining useful data of the customer's purchasing habits.

As lead developer on the project, one of my many responsibilities is to construct and maintain the internal database, as well as develop any scripts that the website, along with various external devices, use to communicate with the servers.

See more at our company's website: www.getone.at

Collaborators:

Website designs by Robert Taylor.

iPhone Apps designed by Noah Witherspoon.

The DVD Movie Database

DVD Database
Status:
Completed

An online database originally designed to track the whereabouts of the DVDs in my home neighborhood.

I was asked to solve the problem of neighbors borrowing movies from one another and forgetting to return them. This system created a way for people to "rent" movies from specific homes, while allowing the owner to maintain knowledge of the movie's location. A rating system was later implemented, as well as various additional features.

Started in 2006 and picked back up here and there when I find the time, it has been an ongoing project. The first versions were java-applet based with a custom database that I built from the ground up. I plan on migrating it over to SQL and making it strictly web based the next chance I get.

See the full functionality on the documentation pages I created for it.

Data Security

Data Eclipse

Data Eclipse
Status:
Completed

An early dive into visual cryptography, this program embeds the contents of any file into the pixel data of an image in an attempt to conceal the information.

Because only the lower order bits of the pixel data are modified, the original image appears to be virtually unchanged. Also, as an added security measure, I not only encrypt the data before I embed it, but I also embed the encrypted data in a randomly pre-determined order. Therefore, if someone wanted to find whatever information has been hidden, they would have to find the picture it was hidden in, determine exactly how to extract it, and then decode the highly complex encryption algorithm before they could attain anything useful.

Cryptographic Hashing

Cryptographic Hashing
Status:
Completed

A command line program, completed for a class, that investigates the collision resistance, reversibility resistance, and diffusion properties of constructed hash algorithms.

All personally coded from scratch, the first few algorithms are fairly basic in design while the later examples reach SHA-like levels of complexity.

This program won the award for best implementation.

You can see the hash outputs with some supplied sample data here.

Games

MineSweeper

MineSweeper
Status:
Completed

A classic MineSweeper game built in java, with full feature gameplay and active scorekeeping.

Started in fall of 2008, the game was essentially a clone of the Window’s version just to see if I could accomplish the task. About a year later, I got around to updating the game by adding customized images and more advanced gameplay options. One such feature was the interjection of a sequence of code that removed the possibility of losing on the first click.

Download and play the full game here.

PongIt

PongIt
Status:
Completed

A 4-player twist to the traditional pong game.

Written in early 2006, this was my first introduction to mulithreaded programming.

You can play with any number of human players [1-4], and the computers will fill up any additional spots.

Download and play the full game here.

Collaborators:

Matt Danna

Smartphone Development

GetOne Android

GetOne Android
Status:
Completed / Ongoing...

The Android app that accompanies the GetOne Rewards project above. From this mobile application users can check their balances, see what participating locations are nearby, check their personalized messages and coupons, and much more.

Read more on the Android Market

.

Miscellaneous

CUDA Genome Assembler

Gnome Assembler
Status:
In Progress

Current genome assembler technologies are limited, both in speed and in quality. They are single threaded, and do not provide the optimal answer because they use heuristics to compare reads. By using CUDA, we can speed up the process of using the Smith-Waterman algorithm, which allows for both more accurate answers and faster speeds.

Collaborators:

Project lead: Robert Taylor

Malloc Autograder

My_Malloc
Status:
Completed

A command line utility written in C and used to grade students' submissions of their final project in class I teach (Computer Organization and Programming at Georgia Tech).

The students in my class have to code their own version of the malloc commands (the malloc, realloc, free, and memcpy methods in particular) as their final project. We provide them with the algorithm for manually managing memory internally, and they are asked to code it.

This program checks their submission for accuracy by performing unit tests an various parts of their code and strategically catching and handling any errors that may be generated by a faulty implementation. Unfortunately I cannot provide you with the exact implementation because the autograder is still used in the class to this day.

Collaborators:

Some fine tuning made by Joshua Cramer.

Diamond Search

Diamond Search
Status:
Completed

An algorithm used to find the least path through a diamond grid.

This program, written in MIPS assembly, was my first real encounter with efficiency coding. Written for a class, it was judged on a weighted combination of static code length, dynamic iterations, and all forms of memory usage. The final product ended up exceeding the professor's implementation.