Title: Final Projects
Date: 2013-12-26
Author: David Evans

<div class="twocolumn">

<div class="right">
<p align="center">
<font size="+1"><b>Non-Rust Projects</b></font>
</p>

<a href="http://uvasear.ch"><b>uvasear.ch</b></a>
<div class="indented">
Nishant Shukla, Jasdev Singh
<p class="comment">
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.
<br>
<b>Source code:</b> <a href="https://github.com/BinRoot/graphUVA"><em>https://github.com/BinRoot/graphUVA</em></a>
</p>
</div>

<a href="http://plato.cs.virginia.edu/~res6tq/norvigtorious/benchmarkStats/home"><b>Norvigtorious</b></a>
<div class="indented">

<img src="https://lh6.ggpht.com/Pj4WiKRP0UClrCbr-6wYdxCzGZZHuEgMBww5SbocDYNnGuL2B_HyJa6QRnrjwWMnm_Q=w300-rw"
alt="Norvigtorious" align="right" width="80">
Alex&nbsp;Fabian, Daniel&nbsp;Nizri, Renee&nbsp;Seaman, Casey&nbsp;Silver
<div class="comment">
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 <a href="http://norvig.com/21-days.html">"Teach Yourself
Programming in Ten Years"</a>.<br>
<a href="https://github.com/dsn5ft/Norvigtorious-App"><b>Source Code</b></a><br>
<a href="https://play.google.com/store/apps/details?id=com.os.project.norvigtorious"><b>App Download</b></a>
</div>
</div>

<p align="center">
<a href="http://www.rust-class.org/static/classes/class27/Pictures/IMG_0021-1.jpg"><img src="http://www.rust-class.org/static/classes/class27/Pictures/IMG_0021-1.jpg" width=360 align=center border=0></a>
</p>

<a href="https://github.com/rjb3vp/android_kernel_samsung_smdk4412"><b>The Droids that You are Looking for</b></a>
<div class="indented">
Ryan Bates, Matthew Jenny, Zachary Brown
<div class="comment">
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 <tt>ps -p</tt> command in the Android terminal emulator.  Additionally, we compiled several builds that caused errors in the OS
&mdash; 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.
</div>
</div>

<p align="center">
<a href="http://www.rust-class.org/static/classes/class27/Pictures/IMG_0022-1.jpg"><img src="http://www.rust-class.org/static/classes/class27/Pictures/IMG_0022-1.jpg" width=360 align=center border=0></a>
</p>

<a href="http://openpiazzacs4414.appspot.com"><b>Open Piazza</b></a>
<div class="indented">
Evan Boyle, Josh Lisko, Evan Teague
<div class="comment">
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.
<br>
<b>Source code:</b> <a href="https://github.com/joshlisko/openpiazza"><em>https://github.com/joshlisko/openpiazza</em></a>
</div>
</div>

<p align="center">
<a href="http://www.rust-class.org/static/classes/class27/Pictures/IMG_0029-1.jpg"><img src="http://www.rust-class.org/static/classes/class27/Pictures/IMG_0029-1.jpg" width=360 align=center border=0></a>
</p>

[**Linux Memory Management**](http://plato.cs.virginia.edu/~hxc7af/os/)
<div class="indented">
Harriet Cao, Kevin Edelmann
<div class="comment">
Analysis of how the Linux kernel allocates memory.
</div>
</div>

[**Realtime Audiophile**](http://realtimeaudiophile.wordpress.com/)
<div class="indented">
Clarisse Abalos, Zachary Seid
<p class="comment">
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.
</p>
</div>


[**Understanding Bits of Debian**](http://nskelsey.com/)
<div class="indented">
Nick Skelsey
<p class="comment">
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 <b>solr</b>. 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.
</p>
</div>
</div>

<div class="left">

<p align="center"><font size="+1"><b>Rust Projects</b></font></p>

<a href="https://github.com/wbthomason/ironkernel"><b>Iron Kernel</b></a>
<div class="indented">
Kevin&nbsp;Broderick, Alex&nbsp;Lamana, Zeming&nbsp;Lin, John&nbsp;Stevans, Wil&nbsp;Thomason	
<div class="comment">
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 &mdash; 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 <a href="http://jamesmolloy.co.uk/tutorial_html/">James Molloy
tutorials</a>, with multitasking
and booting into a terminal that can execute/run arbitrary
programs. 
</div>
</div>

<p align="center">
<img src="https://github-camo.global.ssl.fastly.net/6809be90e4383bef336fab9182a7c6324c940c8a/687474703a2f2f692e696d6775722e636f6d2f396e4538316e592e706e67" width=360>
</p>

<A href="https://github.com/mozilla/rust/pull/10477"><b>Dead Code Elimination</b></a>
<div class="indented">
Kiet Tran
<div class="comment">
Modifications to Rust compiler to provide warnings about dead code.
(These changes were accepted into the standard Rust compiler.)
</div>
</div>


<a href="https://github.com/iamkevinmcvey/rust-raytracer"><b>Rust Raytracer</b></a>
<div class="indented">
Jonathan Goss, Kelvin Green, Nathaniel Hart, Kevin McVey
<div class="comment">
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:
<ul>
<li>Concurrency: Lightweight tasks are spawned for each ray, taking advantage of the safety and power of Rust
<li>Accuracy: Phong and Lambertian shading schemes are used to make scene objects react realistically to light
<li>Customization: Users can create their own scenes by modifying load.ray
<li> Universal Output: PPM file output is lightweight and multi-platform, Rust-Raytracer renders directly to render.ppm
</ul>
Using rust-raytracer is a snap: simply download geometry.rs and
load.ray, compile geometry.rs, and run!
</div>
</div>

<p align="center">
<a href="http://www.rust-class.org/static/classes/class27/Pictures/IMG_0026-1.jpg"><img src="http://www.rust-class.org/static/classes/class27/Pictures/IMG_0026-1.jpg" width=360 align=center border=0></a>
</p>

<a href="https://github.com/rtm9zc/rust-tutorial/wiki"><b>Rust Tutorial</b></a>
<div class="indented">
Robert Michaels
<div class="comment">
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.
</div>
</div>


<a href="https://github.com/wbkostan/cs4414-ps4"><b>tRustees: True Random Number Generation</b></a>
<div class="indented">
Alex Mulchandani, Jeremy King, Liam Kostan, Samuel Ogbe
<div class="comment">
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.
</div>
</div>

<a href="https://github.com/ferristseng/regex-rust/tree/master"><b>Regular Expression Library</b></a>
<div class="indented">
Corey Ames, Jimin Jin, Ferris Tseng, Devin Yee
<div class="comment">
A regular expression library implemented natively in Rust, that is
inspired by <a href="http://swtch.com/~rsc/regexp/">a series of articles
by Russ Cox</a>.  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.
</div>
</div>

<a href="https://github.com/bt3ze/cs4414-mst/releases/tag/v1.0"><b>KrayDawg: Parallel Minimum Spanning Tree for Image Processing</b></a>
<div class="indented">
Ben Terner, Katy Williamson
<div class="comment">
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 <em>X</em> 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
<em>X</em> threads (<em>X</em> 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.  
</div>
</div>
	
<a href="https://github.com/zhouyuan878/CS4414Project"><b>Multiplayer World</b></a>
<div class="indented">
Braden Wright, Yuan Zhou, Yuchen Zou
<div class="comment">
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.  
</div>
</div>

<A href="https://github.com/yl9jv/Rust-Everywhere"><b>Rust Everywhere</b></a>
<div class="indented">
Yicheng Liang, Tong Niu
<div class="comment">
Interactive Rust tutorial
</div>
</div>

<a href="https://github.com/aqyblitz/cs4414-ps4/releases/tag/v1.0"><b>Load-Balancing Server</b></a>
<div class="indented">
Jake Kenneally, Matt Lapuz, Marshall Main, Jireh&nbsp;Miaw, Andy&nbsp;Yang
<div class="comment">
Modified zhtta server to support load-balancing across multiple instances.
</div>
</div>

<a href="https://github.com/sds3cd/finalProject"><b>Iron (III) Oxide</b></a>
<div class="indented">
Shiv Sinha, Christina Giampalmo
<div class="comment">
Hangman Game (in Rust and JavaScript)
</div>
</div>

<a href="https://github.com/victor-shepardson/rust-audio-experiments"><b>Real-Time Audio</b></a>
<div class="indented">
Victor Shepardson	
<p class="comment">
Real time audio in rust. The goal was to use the existing <a
href="https://github.com/JeremyLetang/rust-portaudio">rust-portaudio</a>
project to write audio processing software in rust that can operate as
part of the wider real-time audio software ecosystem.
</p>
</div>


<a href="https://github.com/Camcameron/samplecodeProject"><b>Getting Started with SDL-2.0 and Rust</b></a>
<div class="indented">
Cameron Nye
<div class="comment">
This project is a tutorial for using the SDL-2.0 multimedia library with Rust.
</div>
</div>

<b>Back-Door Analysis</b>
<div class="indented">
Chris McFarland
<div class="comment">
I am investigating the possibilities of inserting a backdoor into the Rust compiler. 
<!--So far, I have achieved two things: (1) A compiler modification that specifically targets the zhtta.rs source code when compiling, allowing for a web user to go to any directory (and access any file) in the disk depending on the user-level zhtta is executed if a secret key is detected in the URL.  (2) A compiler modification to how vectors are copied. If a program is compiled with a secret key in the argument, then vector copies are not checked for bounds. I have shown that if we have vectors immutable a, mutable b, and immutable c, with len(a) > len(b), if we copy a to b, it will overflow to c. This violates a critical assumption of c being immutable and can be used for possible buffer overflow attacks.-->
</div>
</div>

</div>

</div>
