Ideas
From BCCD 3.0
Ideas Page Summary
This page serves to house long-term project ideas that may not be suitable for Trac tickets. Generally speaking these are things which users have requested, or would be "nice to have", or "we've wanted to do this, but haven't had time." The Ideas and project descriptions are organized by how hard they're likely to be.
Due to the nature of the BCCD's primary purpose as a parallel programming and cluster computing platform, most projects are likely to require skills in one or more of the following areas:
- Parallel programming generally
- Distributed memory computing with MPI or similar technologies
- Shared memory computing with OpenMP or similar technologies
- GPGPU computing with CUDA or similar technologies
- Familiarity with a scientific discipline such as physics, biology, environmental science, etc.
Don't worry, if you don't know one or more of the above there are still many things you can do to contribute to the BCCD project as you learn more about parallel programming and cluster computing.
The programming languages predominately used in the BCCD are currently:
- Perl
- Bash
- C/C++
Some projects could be better suited in a different language; we're not bound to the above languages. If you want to tackle something using, say, Ruby or some other language, we'd be happy to see it.
If a project has different requirements, they will be listed below as part of the project description.
Information about how to get started as a BCCD developer can be found here.
A note about our use of the word "Application"
A few of the project/idea descriptions below use the term "application." In the case of the BCCD, an "application" is a piece of software used to demonstrate concepts in the context of computational science, parallel programming and/or cluster computing. For example applications are programs like GalaxSee (used to show speed-up and communication intensity of an N-Body code), or Conway's Game of Life (used to show behavior of cellular automata in parallel environments). On the BCCD, they are used as tools to teach and discuss specific topics and ideas in computational science, parallel programming, and/or cluster computing.
Easier Projects
While possibly not "easy," per se, these projects are best suited to someone who is either not familiar with the BCCD or only beginning their parallel programming life.
- Global configurator - A script to harvest commonly used information from the environment, i.e. MPD port, headnode name, pkbcast port number, etc. For the full list see ticket 500 in Trac.
- Collection of usage information. Both the quantity of the information we ask users for and the transport mechanism could be improved.
- End user documentation. While we have end user documentation it needs to be re-organized and improved. This project is not a good choice for students working as part of GSoC.
Moderate Projects
The projects in this list fall, naturally, between those above in Easier Projects and those below in Harder Projects. Depending on how the developer or student decides to tackle it, they could quickly turn harder or easier. Therefore, the difficulty rating for projects in this category should be taken with a grain of salt.
Custom ISO Generation/Download Utility
To satisfy user requests, we've had to add quite a few software packages (e.g., MPICH2, OpenMPI, the CUDA SDK, the JDK). As a consequence, the size of the ISOs has grown to unreasonable sizes (larger than a standard CD) and we've had to start cutting back on pre-packaged software.
This project involves creating the infrastructure (both user-facing and backend) for allowing a user to download an ISO with custom sets of software. Alternately, if a user doesn't know what they want (or doesn't care), provide an ISO with the bare-minimum required software. Ideally, this should be implemented using apt or a similar package management system to avoid reinventing "the wheel."
This project does not require specific parallel programming knowledge, but will require familiarity with:
- The BCCD's ISO generation infrastructure.
- A package management platform (preferably apt since the BCCD is Debian-based).
- Bash, Perl, or another scripting language.
- Web programming and UI design.
Better Demo Applications
One of the primary uses of the BCCD is in LittleFe. The BCCD developers and LittleFe project coordinators spend a lot of time showing off LittleFe at conferences, workshops, and similar venues. The current demonstration application(s) are a little outdated and not very flashy. Similar to "More Applications" item below, this project is to design an application that is interactive, showy, and utilizes distributed computing techniques. There are many directions that this project could go in, including some kind of interactive (possibly multiplayer, possibly touchscreen-based) game designed to teach certain topics in CS, parallel programming, or science.
Experience in designing clean, high-quality user interfaces and smooth graphics is a plus for this project.
Harder Projects
These projects potentially require deeper knowledge of parallel programming, operating systems, or the BCCD itself. As a result, they either require strong technical/scientific/programming skills up front or have a steeper learning curve than projects above.
Upgrades
The BCCD is upgraded frequently enough that users who are running a liberated system need to have an easy way to upgrade from one version to the next. There are numerous possible ways to go about this project, but in all cases there are some points to be aware of:
- Users will have data and source in their home directory that needs to be preserved. In most cases, simply reinstalling will be unacceptable.
- Often users will create additional users. Therefore, any upgrade procedure should attempt to preserve these users as well as the default bccd user.
- More advanced users may have customized parts of the base system (be it installing additional software or taking manual control of the network). An upgrade procedure should make a best effort to preserve these customizations.
Updates, like in most operating systems, have the potential to get very complicated, involving the kernel, kernel modules, package dependencies, etc. so there are a large number of edge cases to consider in this project.
More Applications
The BCCD ships with a few "applications" designed to explore various parallel programming paradigms and scientific domains. BCCD development recently has been focused on the system rather than example scientific applications. This project involves either updating the existing applications to use modern visualization technologies, or adding more applications that come from a variety of scientific domains and/or exhibit behavior from various parallel computing styles (e.g., as in those outlined in the Berkeley Dwarfs).
Prior experience in parallel programming is required for this project.