Kelvin Bui
Search the website
  Projects I've worked on  
Family Tree- A web 2.0 based personal genealogy tool.
   This is a website project I am working on to display my family tree. Although there are some software tools available, none of them match exactly what I'm trying to create. Traditional family tree software only displays one bloodline at a time and are useful for figuring out lineage, but not for finding out how you're connected to your second cousin once removed. does a very slick interface that solves this problem, and I am inspired by their efforts. What they don't have that I require is:
  • The ability to correctly create their title relative to yourself(Ex. Uncle Bob). In Vietnamese and other cultures, a persons title depends on age, relationship, and even which side of the family(mom or dad).
  • Security. Family information should be private, so I wanted to be able to keep the data safely on my own host.
  • Performance and Codability. Flash is slow and bother to muck around with, so my decision to go with AJAX and php made sense.
   This project is actually quite challenging due to the complexities of how to display everyone. Some people will need more horizontal space than others because of their children and grandchildren. To represent this, I created a tree-based data structure whos weight is the total number of descendents and stores a list of children. Different cases exist whether a person had a spouse or any children. It was a bit more complex than I had orignally imagined. Finally, I used the Yahoo YUI API to handle the dragging and dropping nature of the interface and perform the AJAXian elements.

Maxplan 2.0- A WiMax planning tool.

   This tool uses heuristic propagation models in addition to terrain and building information to predict signal strength from a base station antenna. I worked to develop for this project during my employment at Nextware Wireless. I was tasked with performing small program improvements as well as a large complex project. To develop features for this program, I had to familiarize myself with the WIN32 API to add GUI elements like menus and icons, as well as handle mouse control within windows. In addition to adding small features, I performed black and white box testing, debugged asynchronous callstacks, and assigned tasks to both myself and another developer. Development of this program greatly helped me familiarize with all the steps of software design.

   My most difficult project was to take a high resolution satellite photo, and extract elements from it such as: trees, roads, building to even further enchance the accuracy of Maxplan's predictions. Doing this was no simple task. At first, I coded an optimal Canny Edge detector as I had learned in my image processing class. This found edges fairly well, but combining edges to created an eclosed object had unreliable results. I then turned to image segmenatation techniques, which are not well covered and developed for use. Reading papers on k-means clustering and graph partitioning showed promising results. I researched further and was able to get some results. However, image shadows and angled pictures proved to be another roadblock in the search for accurate estimation. It still is a truy hard and complex problem, yet very interesting.

Digital Picture Frame- An implementation on an Intel XScale embedded system.
    In my graduate embedded systems class, we worked with a limited resource system. For this system, we cross-compiled a media player and used it to play video. Because of the limited resources, we worked in a small linux environment that caused many small problems. This architecture was designed to be low power to be in a portable system. Therefore, we had to program at the system level to dynamically control the cpu's clock speed to conserve power. To implement my program, I made use of the system's touch screen to control the application.

802.11 MAC CoProcessor- Embedded system hardware design
   The 802.11 MAC networking layer consists of building the frame, encrypting the data, and producing checksum values. Encrypting is the most computationally expensive part of the wireless networking stack as it requires many loops of bit-swapping and XORs. It would be very beneficial to carryout the encryption part in a specially designed hardware unit that would increase the performance tremendously.
   In this project we are given a software implementation that we must offload to a hardware unit. I modeled these steps in two different levels: One in SystemC, a subset of C that can model hardware at a design and architecture level. And two, in System Verilog at the implementation level. I then snynthesized it using Synopsys tools to meet chip area and timing requirements. These are all the steps needed to create a specialized peice of hardware that can accelerate computation. I am sure all vendors use a hardware solution.

9-bit CPU Design
    I have designed and constructed a 9-bit CPU from scratch with a functional ALU, register, and memory blocks from basic AND, OR, NOT operators. I also designed the control block that allows this CPU to execute three programs that calulate modulus, count the number of 1's, and searching. I used ModelSim to create and simulate the design, clock by clock.

Employee LogBook
   The employee logbook is a Java program that keeps tracks of employee passdown notes from one shift to another. It requires a username and password to post. It logs who writes what and when on a shared network database. The GUI was designed in Java Swing.
Download Resume (doc|pdf)