Since I have been in school for many years, most of the work that I have accomplished is related to classes that I have taken at UIC. I have academic experience in the following areas: database design, information retrieval, software engineering, compiler design, neural networks, computer vision, natural language processing, computer graphics, information/scientific visualization, visual programming, K-12 educational technologies, user interface design, human-computer interaction, distributed computing, and artificial intelligence. Below is a collection of programming projects, reports, and documentation that I have created over the years.
Please note that this page is still in the progress of being built, so not all links work at this time.
If code is included for projects, related supporting files may not be available (such as important data files). The reason most of these projects were listed was because they are more of a demonstration of my programming abilities and not for the purpose of distributing projects.
You can jump to specific sections by clicking the names here: master's project, distributed computing, information / scientific visualization, computer graphics, human-computer interaction, user interface design.
"Panels, Tools, and Views"
Excerpt from "Panels, Tools, and Views: A Framework for Visual Programming":
Ordinary people, the non-programmers of the world, feel swept up by the pace and complexity of technology. The underlying reason for this is that people feel controlled by technology instead of controlling the technology themselves. Computers should empower, yet, too often, they intimidate. It is a very odd phenomenon that people blame themselves when the technology on computers does not meet their expectations. There are also people who would like to do additional things with their computers, but do not want to invest the time and effort to do these things. This not only applies to individuals but also to people who are at an institution facing these same issues. People do embrace technology, but as with anything else, it is evaluated for its positives and negatives. Because computer technology provides such a number of positives over negatives, people will continue to want more powerful and feature-filled technology.
The basic problem is the human-computer interface. Products that sell well tend to be easy to use. Who wants to buy a hard-to-use automobile or a difficult-to-maintain lawn mower? There are some computer applications described earlier that have created good human-computer interfaces- word processors, spreadsheets, video games, etc. End-user programming is a challenge, though. When people think of programming a computer, they probably think of typing in series of cryptic commands and dealing with strange codes, and it does not have to remain this way. Abstractions should exist that provide the user enough ability to program for a particular domain, which do already exist to some degree. It is a matter of finding a metaphor and visual interface that will inspire people to want to make an effort to learn.
To learn more about this work, you can download the following items:
- Code: "Panels, Tools, and Views" (ZIP file with Java 1.2.2 files); assembly simulator program not included for copyright reasons
- Help Manual: "Panels, Tools, and Views" (Microsoft PowerPoint)
- Paper: "Panels, Tools, and Views: A Framework for Visual Programming" (PDF); includes manual for using the system
Many different theoretical topics were covered in this class. At the end of the term, students were asked to write a term paper that reviewed current research of a topic as well as a presentation of a new idea that extended current research. The topic I chose to write about was grid computing. I wrote a paper about the background of Globus and proposed an idea for a grid service that could query and organize other grid services.
- Paper: "Grid Computing" (NOT AVAILABLE YET)
Information / Scientific Visualization
This class involved both presenting research in the area of information and scientific visualization in addition to writing programs using a toolkit called VTK (Visualization ToolKit). Since VTK is a toolkit and not a language, there are a variety of languages that one can use for calling VTK functions. These languages include C++, Java, and Python (I used Python).
Two interesting projects involved working with the Visible Woman dataset using different rendering techniques in VTK and displaying weather data for Illinois using different information visualization styles. The final project was a documentation project that would explain how to learn how to use VTK and organize and write code for the Visible Woman visualization class project.
- Project 1 Readme: Grand Canyon Visualization Using VTK (HTML)
- Project 1 Code: Grand Canyon Visualization Using VTK (Python file)
- Project 2 Readme: Visible Woman Visualization using VTK (HTML)
- Project 2 Code: Visible Woman Visualization using VTK (Python file)
- Project 3 Readme: Illinois Weather Data Visualization using VTK (HTML)
- Project 3 Code: Illinois Weather Data Visualization using VTK (Python file)
- Presentation: “Probabilistic Surfaces: Point Based Primitives to Show Surface Uncertainty”; authors: Gevorg Grigoryan and Penny Rheingans
- Final: "Isosurface Generation using VTK"
The main idea of this class was to learn how to use OpenGL and learn the basic principles of how computer graphics are generated. There were projects that involved using OpenGL to do some sort of scientific visualization of data. Code was written in C/C++ and an executable is available for Windows (makefiles are not available but projects are not too complex to figure out how the build occurred). One project involved using POV-Ray (a cross-platform, three-dimensional ray tracing engine) to create a model of the solar system. Items can be downloaded below:
- Project 1: 2-D visualization of earthquake data in Japan (ZIP file, C/C++ code)
- Project 2: 3-D visualization of earthquake data in Japan (ZIP file, C/C++ code)
- Project 4: Ray tracing of solar system (ZIP, JPEG files, POV Ray text file)
Human - Computer Interaction
This class, along with user interface design, was one of the most eye-opening classes I have taken. The creation of interfaces that are intuitive to use and allow users to accomplish the tasks that they want to do can be quite difficult. However, by adherring to good design principles and receiving feedback from the target group of users during the design, a "human" interface is possible.
Most of the work done in this class was based on presentation of papers. In addition to the presentations, there was one term project that was to be done. I became very interested in technology accessibility and had an idea for an augmented reality display that would help deaf people know where a sound was coming from and indicate the pitch and loudness of the sound. Since I would be unable to implement this type of system in less than a semester, my professor told me to simulate the system in YG (a scripting language for CAVE programming). With a lot of help from other students (from CAVE programming to design of glyphs and models), I was able to present a very good interactive world.
In this world there are speakers scattered throughout the world. Because the user is deaf s/he will require visual cues to indicate where certain sounds originated. I had 8 sounds which each had a certain "loudness" to it. Eight digits appeared to the user with a cone below it. As the user navigated in the world, each individual cone would point to the location of the speaker and become smaller when the user was nearer to the sound source and larger when the user was farther from the sound source. Above the speaker, a "box" would appear indicating the number of the speaker, and this box would fade in or out at a rate proportional to the "loudness" of the sound indicated by the number (higher number = louder sound, lower number = softer sound).
To learn more about this work and other topics presented in the class, you can download the following items:
- Presentation 2: "Aurora: A Conceptual Model for Web-content Adaptation to Support the Universal Accessibility of Web-based Services by Anita W. Huang, Neel Sundaresan" (Microsoft PowerPoint)
- Presentation 3: "An Intelligent Tutoring System for Deaf Learners of Written English by Lisa N. Michaud, Kathleen F. McCoy, Christopher A. Pennington" (Microsoft PowerPoint)
- Presentation 4: "Mapping an Auditory Space onto a Graphical User Interface by Michael J. Evans" (Microsoft PowerPoint)
- Midterm Presentation: "AudioSense: A Simulation" (Microsoft PowerPoint)
User Interface Design
Most of this class involved learning what not to do and what is good to do. The ideas originate from graphic design and product design. Some of the ideas in class extended to how information is presented in addition to creating a clean design for the user of a program. Years later, different books were suggested to me that helped me learn more which were Tufte's books on information visualization, Norman's "The Design of Everyday Things", and Wurman's "Information Anxiety 2".
Most of the work in this class was group-based, but one project was individual. The purpose of the project was to provide an application that provided a user interface to teachers for creating a plant layout in a virtual reality garden for grade school children. The map and the plant types were fixed, but the layout could be anything the user wanted. The layouts had to be saved and loaded from disk.