This is a showcase of some projects I have worked on through my Master's degree, various interviews, and personal affinity. Unfortunately, I cannot post any work related code, so most of the downloadable code will be school work. Please note that these are my works, designed and generated by me. I request that anyone searching for answers to homework assignments not copy my work, but be inspired by it to create your own solutions.
Most of the downloads here contain a README file to explain how to build the code as well as interact with the program.
Interactive Computer Graphics
Textured Bezier Curve
This was an assignment to perform texture mapping on a Bezier curve. However, this project includes parts of previous assignments. Control points for the curve can be manipulated (moved on the x, y, and z axes), causing curve distortions; the lighting can be changed to either flat or Phong shading; the camera can be rotated and translated; and the perspective can be changed to orthogonal or perspective.
This project uses C++, modern OpenGL (3.3+), and GLSL version 1.20, though the shader code should only require minimal updates to work with GLSL 4.4. GLSL 1.20 was used mainly due to the restrictions of the shading language interpretation within a virtual machine. This project was built using Kubuntu 12.04, and subsequently, runs under Linux only.
Rabbit Noise Texture Mapping
This project required the use of multiple light sources (which can be turned on/off), noise, and texture mapping. The model has one light turned on at program execution while a second light is turned off. This second light is not fixed, and can be moved around the model. The user can change the lighting to Phong or Gouraud shading, causing the Phong shading to perform texel texture mapping (looking like marble), and Gouraud shading rendering the model green (no texture mapping). The intent of this project was to generate textures based on noise.
The project uses C++, modern OpenGL (3.3+), and GLSL version 1.20. Minimal updates could bring the fragment and vertex shaders to version 4.40. This project was built using Kubuntu 12.04, and subsequently, runs under Linux only.
Rabbit Cel Shading
This was my extra credit research project where I took an SMF model, duplicated it twice, performed cel (toon) shading on the model using four (4) intensity levels, and implemented a way to mark models as selected using the mouse. The user can select and unselect a model by just left-clicking on them. Subsequently, once the user makes the selection, the model color will change from either red, green, or blue, to dark gray.
The project uses C++, modern OpenGL(3.3+), and GLSL version 1.20. This project was updated to a newer version of GLSL (4.40), but is not included in the project tarball. I have included version 1.20 so it can be compiled and executed using a virtual machine. This project was built using Kubuntu 13.04, and subsequently, runs under Linux only.
Operating Systems
Virtual Memory Manager
This assignment required us to build a mock virtual memory manager containing a Translation Look-aside Buffer (TLB) and logic to handle paging. Its intent was to show how the computer might take memory from the backing store, load it into physical memory, then perform swapping if no more frames remain on phisical memory.
The project was generated in C++ with two custom doubly-linked lists: one for the frame stack, and the other for the translation look-aside buffer. The data structure is a queue which replaces least frequently used frames automatically. This project was built using Kubuntu 13.04 and is easily run under Linux. The project could be compiled on other OSes though.
Introduction to Artificial Intelligence
Solving 8-puzzles
The first assignment dealt with performing depth-first search, bread-first search, and depth-limited search for solutions to a predefined 8-puzzle. With a given 8-puzzle, the only acceptable solution was to have row one contain "1 2 3", row two contain "4 5 6", and the final row to contain "7 8 X", where X is empty.
The project was generated in lisp and execution instructions are provided within the README file of the tarball. This project was executed using clisp on Kubuntu 13.04.
Sudoku
This particular project contains code for finding a solution to 4x4 sudoku for either horizontal/vertical/diagonal arrangements. The user can also attempt a 9x9 solution. Solutions are generated by traversing a tree structure and performing a match for the desired outcome.
The sudoku project required the use of prolog as the programming environment. Execution instructions are included in the tarball through the README file.
Shakey the Robot
This project utilizes graph planning and lisp to determine pathways for Shakey the robot to move between rooms and manipulate objects. The goal for Shakey can be defined through the shakey.pddl file. Shakey can move a box, climb up and down the box, move to different rooms, and turn lights on and off. Note that this graphplan takes a long time to execute.
This project requires the sg graphplan module, which is included in the tarball. An instruction for execution is included within the README file in the tarball.
Advanced Artificial Intelligence
Fox, Chicken, and Seed Plan Generator
This project contains code to get a chicken, fox, and seed from one shore to another shore. This classical problem uses a farmer, boat, chicken, seed, and fox as objects. The program generates two plans with the given constraints.
The chicken, fox, and seed project required the use of ASP (Answer Set Programming) as the programming environment. Execution instructions are included in the tarball through the README file.
File System Simulation
This project contains code to move files from one directory to another. The restrictions are that files can be owned by a process and cannot be moved if owned. Two types of moves can occur: single file moves, and multiple file moves by specifying a recursive move on a directory. Directories cannot be moved and remain stationary. If a file is owned by a process, it can be killed to release the resource for movement.
The file system simulation project required the use of ASP (Answer Set Programming) as the programming environment. Execution instructions are included in the tarball through the README file.
Miscellaneous
Matricel
This was a coding project to generate a Qt application allowing a user to input only floating point values into a matrix. This program utilizes Qt 5.x and was created in a CentOS 7.x Linux OS. Instructions for compilation are included in the TGZ file.
This project allows the user to input floating point values into cells while changing the cells color to yellow, indicating the contents have changed. The user can also save the modified matrix to a CSV file as well as load a CSV file to populate the matrix. Also included is the ability to resize the matrix to a few preset options, as well as allowing the user to customize the size.
Mulithreaded TCP Server
This is a partially finished multithreaded TCP server. Inbound connections from clients are handled through a thread pool, where fifty connections can be made. Whenever a client makes a connection attempt, the server searches for an available thread to execute reads and writes from. If there are no available threads, then the server enters into an endless loop, waiting for a thread to become free. Ideally, a message would be sent back to the client, indicating that the connection was refused. However, this was not implemented.
Clients that disconnect cause the server thread to become idle and made available from within the thread pool.
Note that no frames are placed around data needing transmitted. Ideally, a message header and footer would be included at the beginning, and ending, respectively, of the data. The header would include a frame number, message identifier, and data length to follow. A footer would include a CRC-16 key to check for message errors.
This project was created on Fedora 19 but will work with any Linux operating system, provided that the pthreads library is installed.