This page is from the Fall 2013 course.
It may be replaced with an updated version later this semester. [Permalink to this version]

Final Projects

Non-Rust Projects

uvasear.ch
Nishant Shukla, Jasdev Singh

People search at the University of Virginia is cumbersome, so we built a chrome extension with typeahead to make the process of looking up computing IDs easier. This extension will help you go from computing ID to name and vice versa.
Source code: https://github.com/BinRoot/graphUVA

Norvigtorious
Norvigtorious Alex Fabian, Daniel Nizri, Renee Seaman, Casey Silver
Norvigtorious is an Android benchmarking application specifically designed to complete benchmarks that will be useful to Android developers. When the application is run, the benchmark test, the time it took to execute, the phone's model, and the phone's manufacturer are stored in a database. The data is then compiled and analyzed on the Norvigtorious website so users can compare the average times of different models of Android devices for each benchmark. The chosen benchmarks were picked according to what we believe are most relevant to Android developers, and also inspired by Peter Norvig's "Teach Yourself Programming in Ten Years".
Source Code
App Download

The Droids that You are Looking for

Ryan Bates, Matthew Jenny, Zachary Brown
We went online and found the open source code for the Android kernel (a slightly modified Linux kernel) for the Samsung Galaxy SII. Combining it with the Cyanogenmod OS source code, we set up VM as a working environment with which we can modify the scheduler of the Android/Linux kernel itself. We put this modified scheduler on a physical Android, where it runs with noticeable differences. Specifically, we adjusted the dynamic priorities of running processes, which are normally not accessible to software developers. We were able to observe these differences by using the ps -p command in the Android terminal emulator. Additionally, we compiled several builds that caused errors in the OS — overheating and general lack of booting capability. These taught us as much as, if not more than, the successful builds. I found the overheating after I made a change that starved a few root processes to be particularly interesting.

Open Piazza

Evan Boyle, Josh Lisko, Evan Teague
How many times have you ever wanted to send a link to a post on piazza.com and not been able to because the recipient doesn't have login credentials? It makes sense that whatever content a user creates, by adding a post, should be open for public consumption. For instance, StackOverflow.com makes it easy for someone to post a question and then have other users answer it. The same goes for piazza. However, piazza cannot be viewed by someone who does not have a registered account. Our project allows professors to register their class with a piazza demo account. They could then add the ability for the site to login and scrap certain posts that he wants his students to be able to view, without them having to login.
Source code: https://github.com/joshlisko/openpiazza

Linux Memory Management

Harriet Cao, Kevin Edelmann
Analysis of how the Linux kernel allocates memory.

Realtime Audiophile

Clarisse Abalos, Zachary Seid

We have created a WordPress site for audiophiles to understand the different aspects of perfecting audio playback. We present information on how computers handle audio mixing and streaming and the different processes that occur. We give a comparison of how different Operating Systems and media players have approached the challenges of playing back audio. In our website we cover discuss different frameworks and drivers, processors and other hardware, formats and codecs, and talk about how audiophiles desire perfect playback down to the bit. We let users leave comments on the articles so that they can add to the discussion and add to the wealth of information.

Understanding Bits of Debian

Nick Skelsey

As a final project for my operating systems course I tried to get a Debian package updated in the official package archive. The package was a bundling of the apache projects full-text search engine solr. I ended up failing miserably at this stated goal, but I learned a couple things in the process and want to make it easier for someone to understand what I now know to be a simple, but time-consuming process.

Rust Projects

Iron Kernel
Kevin Broderick, Alex Lamana, Zeming Lin, John Stevans, Wil Thomason
IronKernel is an ARM kernel written in Mozilla's Rust programming language. The goal of the project at this time is for a kernel with basic memory management and a simple file system with support for directories and textfiles — the user will be able to create and write into files, as well as echo a file's contents. Eventually, the goal is to have a fully-featured kernel according to the James Molloy tutorials, with multitasking and booting into a terminal that can execute/run arbitrary programs.

Dead Code Elimination
Kiet Tran
Modifications to Rust compiler to provide warnings about dead code. (These changes were accepted into the standard Rust compiler.)
Rust Raytracer
Jonathan Goss, Kelvin Green, Nathaniel Hart, Kevin McVey
Rust-Raytracer is a complete 3D renderer written in Rust! This program simulates the movement of light in a user-provided scene in order to produce "realistic" images with great mathematic accuracy. Some key features include:
  • Concurrency: Lightweight tasks are spawned for each ray, taking advantage of the safety and power of Rust
  • Accuracy: Phong and Lambertian shading schemes are used to make scene objects react realistically to light
  • Customization: Users can create their own scenes by modifying load.ray
  • Universal Output: PPM file output is lightweight and multi-platform, Rust-Raytracer renders directly to render.ppm
Using rust-raytracer is a snap: simply download geometry.rs and load.ray, compile geometry.rs, and run!

Rust Tutorial
Robert Michaels
Rust has many useful utilities, especially with safe memory management and concurrency. The official documentation is sparse and unintuitive, however. The purpose of this wiki is to streamline the learning process and dealing with various caveats of using this powerful language. An emphasis will be placed on simple, intuitive tutorials, so a reader will have less frustration, and expedite getting more use out of Rust.
tRustees: True Random Number Generation
Alex Mulchandani, Jeremy King, Liam Kostan, Samuel Ogbe
Module for Rust 0.8 to provide true random number generation through 4 publicly callable funcitons. The first two functions return fixed-bit and variable-bit random numbers by relying on entropy collected through the OS (through data gathered from user I/O timings, interrupt timings, and other sources). The second two functions return fixed-bit and variable-bit random numbers generated from entropy gathered directly from the processor (using the quantum effects of silicon onboard the chip). While the OS RNG's tend to be much slower than standard pseudo-random number generators, the hardware RNG's were much faster. This helps to make the case that pseudo-random number generators are becoming irrelevant and should not be used when hardware random number generation is available, as is the case on most modern processors.
Regular Expression Library
Corey Ames, Jimin Jin, Ferris Tseng, Devin Yee
A regular expression library implemented natively in Rust, that is inspired by a series of articles by Russ Cox. The library aims to cover a subset of the ones available for PCRE, and provides an interface and suite of functions similar to the one available in the Python regular expression library.
KrayDawg: Parallel Minimum Spanning Tree for Image Processing
Ben Terner, Katy Williamson
A parallel implementation of a Minimum Spanning Tree algorithm in the Rust programming language. Conceptually, the implemented algorithm is a combination of the much-studied Prim and Boruvka algorithms. The program makes use of X parallel threads in order to construct an accurate MST from a graph. In each thread, from a starting node, the program will repeatedly visit each of the node’s neighbors, choose the lightest weight edge, and contract that node into a tree. The program completes when all nodes have been visited and the X threads (X trees in a forest) contract into a single tree. We applied this procedure to graphs consisting of pixels in a rectangular image. By producing an MST of image data, it's possible to easily sort and manipulate the pixels of the edges in the spanning tree for interesting image processing applications. If many heavy-weight edges are highlighted, the edges between areas of different colors can be detected. If the bounded sections in an image are easily detectable, automating object detection or facial detection can be achieved.
Multiplayer World
Braden Wright, Yuan Zhou, Yuchen Zou
A text-based adventure game in which player can explore a two dimensional world and interact with the different objects available in the world. The world will dynamically update itself in multiple ways. For example, after every fixed interval of time, new objects will be randomly generated in different parts of the world, depending on the player's previous interactions with the world.
Rust Everywhere
Yicheng Liang, Tong Niu
Interactive Rust tutorial
Load-Balancing Server
Jake Kenneally, Matt Lapuz, Marshall Main, Jireh Miaw, Andy Yang
Modified zhtta server to support load-balancing across multiple instances.
Iron (III) Oxide
Shiv Sinha, Christina Giampalmo
Hangman Game (in Rust and JavaScript)
Real-Time Audio
Victor Shepardson

Real time audio in rust. The goal was to use the existing rust-portaudio project to write audio processing software in rust that can operate as part of the wider real-time audio software ecosystem.

Getting Started with SDL-2.0 and Rust
Cameron Nye
This project is a tutorial for using the SDL-2.0 multimedia library with Rust.
Back-Door Analysis
Chris McFarland
I am investigating the possibilities of inserting a backdoor into the Rust compiler.