Title: Project Ideas
Date: 2013-11-03
Author: David Evans

This page collects some ideas for possible projects.  You should view
this only as a starting point to get you thinking about interesting
things you might do.  As discussed in [Class
16](|filename|../classes/class16/class16.md), there are no requirements
for the project, other than it should satisfy well at least two of these
desired properties: 

> Do something that is **fun** (for you to do, and others to see), **relevant**
(to the class), **technically interesting** (to you and me), and **useful** (at
least to you, hopefully to many). You probably can’t maximize all of
these! It is okay to sacrifice one or two of them to increase others. A
good project should be strong on at least 2 of these, which is much
better than being mediocre of all four.

Although these suggestions focus on Rust-related projects, it it not
required to use Rust, although it will be easier to make a case for your
project being _relevant_ if it does (but merely using Rust is not enough
to argue that your project is _relevant_).
 
# Lists of Ideas

[Wanted Libraries for Rust](https://github.com/mozilla/rust/wiki/Note-wanted-libraries)

[Rust Issues List](https://github.com/mozilla/rust/issues?labels=A-an-interesting-project)

[Rust Computer Graphics and Game Development](https://github.com/mozilla/rust/wiki/Computer-Graphics-and-Game-Development)

# Ideas from Class

**Trusting Trust** (from [Class
  13](|filename|../classes/class13/class13.md)) - consider how easy it
  would be to insert a backdoor into the Rust compiler or runtime
  system, and to exploit that to compromise an otherwise-secure system.

**Background Gashing** (from [PS3](|filename|./ps3/ps3.md)) - A more
ambitious way to incorporate shell commands would support running the
shell commands in the background, and send the results without them back
to the client but with a hook to incorporate those results in the page
later. Then, when the shell command responds, the results would be sent
to the client and incorporated into the client-side DOM later. This
would make it easy to build sites the provide clients with quick partial
responses (to expensive requests) which would encourage them to wait for
the rest of the response rather than leaving for a competitor's
site. This requires some familiarity with client-side web programming,
but it seems like a feature that a zhtta server should support.

**App Server** (from [PS3](|filename|./ps3/ps3.md)) Many web frameworks exists that make it easy to build
  web services that instead of just serving static files will run
  application code in response to requests to provide dynamic behavior.
  A simple example is [web.py](http://webpy.org/) (this was originally
  developed by [Aaron Swartz](http://en.wikipedia.org/wiki/Aaron_Swartz)
  to run [reddit](http://reddit.com)).  A simple web app framework built
  in Rust would have many advantages including safety, high performance,
  and easy concurrency over existing web app frameworks.

**Open Piazza** (from [PS3](|filename|./ps3/ps3.md)) - I believe one
  team is planning to work on this already.

# Memory Management

**Garbage Collection** - study how automatic memory management is done
  in Rust and develop techniques to improve it.

# GPU

[GPU Programming in Rust](http://www.cs.indiana.edu/~eholk/papers/hips2013.pdf)


