Play - A summer of code project
This summer of code project proposes to extend Elements, a python wrapper around a 2D physics engine called box2d. After extending elements & writing extensive documentation for use with the XO laptop, I will use it to create a physics educational tool called "Play!" - for Physical science Learning And Discovery. "Play!" will provide an intuitive interface for kids to learn elementary physics concepts like Gravity, Projectile motion, Angular motion, and more.
 Detailed Description
This project consists of three main parts:
- Extend the elements API
- Document the element API
- Write "Play!"
 1. Extend the elements API
The first thing that will be done in this summer of code project will be the extension of the Elements API to larger subset of the desired functionality.
Currently, elements supports only part of what is possible with the Box2D engine, and I propose to change this.
Secondly, I will add support for joints to the elements API. I will implement Revolute, prismatic, distance, pulley, gear and mouse joints. This will make it possible to create simple transmission systems, hinging systems, pulleys, rotation, and much more. Thus, this is a crucial feature for a Elements to support. After implementing these features, developers for the XO laptop will have a simple to use, accurate & extensive physics API available, and it will be trivial to support physics and their activities & games.
Note: This part of the project is in progress & will have to be re-evaluated at the commencement of the summer of code.
 2. Document the elements API
Documentation is crucial for any Open Source project. To effectively be able to use the Elements API, I propose to write extensive documentation to cover all aspects of the elements API. This will lower the so-called "activation energy" of using the Elements API, and will make it even simpler to use physics simulation in XO activities. It will also increase developers interest in the API, which ultimately will lead to a more stable, well supported, more accurate & more extensive physics simulator, at the benefit of the OLPC community. In addition, I will also write several examples specifically geared towards the XO laptop to illustrate the proper use of the Elements API in developers activities and games.
 3. Write "Play!"
The last (&largest) part of the summer will be devoted to writing an educational physics tool I have dubbed "Play!" for "Physical science Learning And discoverY." This tool will use the power of elements to provide an intuitive physics learning activity for young children. It will include the following features:
- Use the features of elements in an intuitive manner, using simple pictorial demonstration of actions .
- Learn physical concepts like Gravity, Torque, Project motion, angular, etc. Through a very realistic interaction with the objects present in a given scene.
- Provide simple ways to create a wide variety of objects and then interact with them by means of moving, scaling, throwing, linking, and other simple motions.
- The user can create objects and watch the scene “come to life” through the interaction with other objects in the scene.
- Use the XO networking capabilities to share user created scenarios
"Play!" will follow a few guiding principles in it's development.
Firstly, it has to be simple to use. It is important for "Play" to be intuitive to remove any barriers normally present in physics education. By making "Play!" as accessible as possible, nobody will be excluded from reaping the benefits of science education. As was mentioned above, I propose to do this by using pictorial demonstrations of it's features as much as possible. For one thing, this flattens the learning curve of such a tool (which, ideally, should be non-existent), using pictorial demonstrations it is simple to know at a glance how an action affects the environment. In addition, it removes the language barrier. Experience in other open source projects tells me that there is a significant time lag between the project's availability in english and in other languages. Although I deem it impossible to completely get rid of any text, I will try and limit the use of it as much as possible.
Secondly, due to the limited hardware of the XO laptop, and the resource requirements inherent to any accurate physics simulation, I will also make sure to maximize the performance of "Play!" Without a fluid simulation, the tool won't be nearly as entertaining to use, so this should have priority. I will have to carefully consider the tradeoff between accuracy & performance, among many other factors.
Considering implementing the whole of this project will probably be too involved for the summer of code, I will focus on getting the fundamentals in place. In the following paragraphs I will describe what I envision to do in detail.
Main menu: I will implement a main menu which the user sees upon starting the activity. There will be several options. A user can choose to "play" current lessons, create new lessons, browse for lessons, or share lessons.
I propose to focus mostly on the lesson creator & lesson sharing. If this functionality is put into place, it becomes a trivial exercise to create a set of basic lessons to include with "play!" The proposed functionality of this lessons create will include the following features:
- Importing drawings from "Draw" a drawing activity for the XO.
- Drawing support for drawing polygons, rectangles, triangles, circles, chains, pulleys, and other objects that elements supports (or will support).
- Event driven activities. For example, popping up text at specific points in the simulation.
- Load & Save support
- Preview support. Try out the lessons before it's done.
More to come.
Make sure to check the mockups in the pdf document above.
 Benefits to the community
Probably the largest benefit of this summer of code project is the extension I propose to do on the physics simulator. The python language is a primary development language on the OLPC platform, so having a full-featured physics API accessible through python will be of great benefit to the community, specifically with regards to games. The documentation that I will write will make the adoption of Elements easier, which will serve as a catalyst to the previous point. The “Play!” activity will provide a science-learning tool the users of the XO laptop. As science is a very important part of the education of a child, this tool will be of great benefit to those trying to teach science (specifically physics).
 Timeline & Deliverables
I have separated the project into 3 parts. This will allow easy evaluation of project progress, and will allow the mentor to catch problems early if progress is not proceeding as planned.
NOTE: Due to the rapid progress being made, this timeline will need to be revised at the commencement of the Summer of Code.
 About Me