Ideas

There are more projects to be explored than there is time available. Any and all of these ideas may serve as starting points for project ideas of your own. Any of these projects can serve as starting points for an independent study, summer research project, or Senior Comp.

Connecting Scratch

Scratch is a visual programming environment for children and novice programmers alike. We need to extend it to talk to the Arduino.

Providing novice programmers the opportunity to do interesting things in the real world is challenging. We'd like to explore the possibility of connecting Scratch to the Arduino, so we might introduce creative computing to non-programmers through a combination of visual programming and real data from the world around them.

Mining Novice Compilation Behavior

We have begun exploring the connections between the behavior of novice programmers and their affective (emotional) state. Early work indicates that we can detect frustration entirely from student interactions with the compiler.

We would like to explore our data more deeply—with modern machine learning and mining techniques, we know there is more to be found in our data. Advances in this area will help us better understand both how students go about learning to program as well as how we might better teach an effective introduction to computing.

Tock and Filet-O-Fish

The only good compiler is a correct compiler. Can we combine Filet-O-Fish and Tock to write a provably correct occam-pi compiler?

This involves diving into Haskell, the Filet-O-Fish DSL, and ToCK, our experimental compiler for occam-π. Great if you're into formal methods and languages. Not for the faint of heart.

Profiling Parallelism

We'd like to know what happens when our programs execute. How can we profile concurrent programs running on small machines like the Arduino?

While some work has been started in this area, the challenge is including profiling support without exploding out of the memory constraints (for RAM or storage) of real-world devices.  This might tie in nicely with research regarding the minimization of energy consumption in sensing applications.  

Standardizing LWP Testing

There are no standard benchmarks for lightweight concurrency. What are typical workloads, and how do we stress and evaluate these runtimes?

This involves studying parallel code in a number of languages and projects (large and small), identifying common patterns, distilling those patterns to code, and implementing those patterns in multiple languages. Erlang, Go, and occam-π are all likely starting points for comparison.

Generic Concurrency in Java

The Java CSP library takes advantage of neither the new concurrency primitives in the language nor generics. Both are valuable additions.            

This project extends nicely into the challenge of providing some basic checks for safety in the parallel programs written—either at compile-time or at run-time. This takes the initial problem (learning and understanding CSP as implemented in the JCSP library and updating it) and challenges you to use ANTLR or similar tools to parse and analyze the programs written using JCSP. (Or by using other techniques at runtime.) 

Printing in Parallel

The RepRap open-source printer has a confusing OS. Lets demonstrate the utility of parallelism by rewriting their runtime in occam-pi.

This project builds on work started by Maja Sweeny '09 in building and testing the RepRap, and will potentially add great value to the open-source printing community. It will also provide an excellent real-world evaluation of the utility of the Transterpreter as a runtime for embedded systems.

Sensing with the Arduino

Environmental sensing is often carried out with costly embedded platforms. Can we use of the Arduino in a real-world sensing experiment?

This project involves digging into computing and environmental science. Our specific sensing project will be developed in conjunction with faculty and students in Environmental Science (or, perhaps you are an ES student interested in Computing!). 

Our ultimate goal is to develop a library of tools and best practices for the use of the Arduino (and its related kin) as low-cost, reliable sensing platforms for environmental research.

Simplifying Parallelism

Programming is hard. Can we develop linguistic tools for programming the Arduino that make it easier for beginners to do complex things?

This project involves language design, the authoring of a simple compiler, and a commitment to drive your process forward through interactions with users. In this regard, our task is not a traditional problem in languages, because the usability of our language by novice Arduino users is our first concern.

Parallel LEGO NXT

The LEGO Mindstorms NXT is a popular reconfigurable robotics platform. We need someone to  port occam-pi to this robotics platform.         

During the summer of 2009 the occam-π group ported the Transterpreter parallel virtual machine to the Arduino open-source platform. We'd love to see the LEGO NXT supported as well. This implies an ARM port of our toolchain (very doable). We have all the tools, but we need a student who wants to dig into hardware and a bit of C and occam-π programming. 

Creative Commons License This work is licensed under a Creative Commons License.