GSOC 2010

Student Infos and Requirements

So you want to participate in GSoC2010 for PyMT? Great! Although we certainly value your interest, we have to stress a few requirements that are key to success. Please check the list below and make sure you qualify before you apply. If you are unsure about certain aspects, feel free to contact us (IRC or Mailing List) and we will work it out together. If you cannot repeatedly live up to these expectations, your project will likely be terminated. That means no T-Shirt! :-)

What's in it for you?

  • You will work alongside expert python programmers and greatly improve your coding skills
  • You will learn how to work with version control systems and get used to valuable workflows
  • You will get to know much about open source programming
  • You will improve your team work skills
  • You will contribute to a fascinating (well at least in our opinion :-) piece of software that everybody likes to use
  • You will improve your english writing skills.
  • You will work in a multi-national environment (French, US, UK, Indian, Canadian, German citizens aboard already!)
  • Fun!!!
  • $$$ (But you're doing it only for the aforementioned fun of it anyways, right?)

What we require:

  • Be honest
(Very important. Be honest about what you can do and what not. We will talk to you, and if you're not honest, we will find out. :-)
  • You have to code
(While we do not ask you to rewrite the Linux Kernel in Python, we do want you to get your hands dirty and produce code.)
  • Interest in the subject
(Although we think that we are a pretty fun group to work with and our project rocks, it wouldn't make sense to apply if you know that you'd be bored out of your mind.)
  • Active and constant participation
(Of course we will talk with you and discuss your project. However, it would be very beneficial if you have your own ideas.)
  • Communicate
We expect you to constantly communicate with us. Preferably IRC or mailing list. Talk to us and show up at meetings. This is very important.)
  • Basic Python knowledge
(We do not expect that you're an expert python coder, but GSoC is to short to teach *everything* from the ground up.)
  • Clean, readable code
(We all do quick n' dirty hacks. However, you should try to always write clean code. Check the PEP08. :-)
  • Documented, working code
(We use sphinx for documentation. A comment here and there helps as well.)
  • Basic knowledge about programming in general helps
(Again, no expert knowledge required. However, knowing what a class is counts as a plus in your application.)
  • Basic OpenGL knowledge helps
(Not a hard requirement, but definitely helpful if you know how to draw rectangles in OpenGL.)

What can you do prior to GSoC?

  • Get in touch with us
  • Subscribe to our mailing list, meet us in IRC
  • Come up with a cool idea or pick one from the list of ideas (obviously, the cooler your own idea the better)
  • Install PyMT on your system and run the examples
  • Play around with the code
  • Get familiar with git (See gitcasts.org for an excellent resource)
  • If you can, submit simple patches to get used to the workflow (and impress us along the way)

Project Ideas

User Interface Projects

More interactions/Widgets

Research and implement widgets based on more than 2 touches and hands. The question to answer is: What can we do in terms of interaction with additional information such as orientation? Implementing cool interactions as widgets or other PyMT features so that they are reusable or extensible is what we are looking for.

Examples:

  • Intuitive 3D interactions for moving objects like navigating a 3D space, rotating, sizing etc.
  • Intuitive interactions for selecting, arranging objects on a tabletop.
  • Implement intuitive multitouch menus that take into consideration challenges like display orientation, multiuser, touch input etc.)

Enhanced text Input We have keyboard and virtual keyboards. Other text entry methods could be fun to explore see e.g. http://www.swypeinc.com/

Enhanced input interactions Interactions that take into conideration more than just touch input. New technologies allow e.g. for hand tracking, to know hand orientation, etc. Develop widgets that take advantage of this new input data. (Example:Keyboard could be splitted in half: One half for each hand, and the respective half follows the hand it belongs to and rotates with it automatically.)

Core

Improve PyMT graphics utilities Improve the utility drawing functions in pymt. These functions are meant to wrap OpenGL calls so user s dont have to know OpenGL (e.g. drawCircle, drawLine, drawTexturedRectangle etc.). There is currently no functionality to draw curves (bezier or other) and the API in general could be made more usable. One could implement processing syntax/function (see e.g. pyprocessing) for nicer drawing API.

Gesture Framework Create new or enhance existing gesture framework. Specifically, specifying, recording, and recognizing multi finger gestures. Design and implement the gesture API to work nicely with other multi-touch programming paradigms or maybe even come up with new ones (research paper opportunity?!). Some challenges to think about: How are regular touch events reported while a gesture is being performed, how to check if a gesture is being performed/in progress (maybe state machine based).

More Input providers Implementing native input providers for specific input devices. We have already: TUIO, mouse, Windows 7 multitouch (WM_TOUCH), windows pen. Multi pointer X would be nice for Linux, maybe wiimote support nicely integrated to pymt. (One input provider probably isn't worth a whole summer project, but one could do a couple or expand on the idea otherwise)

Improve Video & Camera support PyMT's core is very modular, so we can use different backends and you can implement new providers for things liek video support, images, etc. We could really use e.g. a Quicktime Video provider or better webcam support cross platform (especially osx is kind of a pain right now with gstreamer)

Network serialization Be able to exchange widgets and their state between different PyMT processes (across the network). So you can e.g. throw a multi-touch ball at someone on a remote table. Some work on this has been done, and we could help at the very least with conceptually how to do this.

Extensions

Cross platform, no hassel PDF (or other widely used filetype) support We'd really like to be able to integrate e.g. PDF documents easily, the state of doing this is not very good in terms of cross platform support without having to install or compiel all kinds of stuff.

Webkit extension This actually kind of works and has been implemented. Would be nice if someone could take it and integrate it nicely into the core so that it just works (requires both C and python knowledge)

Standalone Applications

PyMT IDE Build a PyMT Integrated Development Environment or GUI builder using PyMT itself. We've played with this idea, and might be able to help significantly if we get a good start or exciting proposals. We also have had some fun ideas like live coding, being able to change the UI at any time by switching to IDE mode etc. Python is very flexible in terms of loading code at runtime etc. so many things would be possible

A game or really cool application idea Come up with a really fun game or useful application that uses multitouch input in new or interesting ways. Let your imagination run wild, and show the world what PyMT is capable off.

Other

Debuggin Tools Multi touch can be really hard to debug (mouse simulating multi touch helps, but only gets you so far). A good project would come up with useful debugging concept for debugging multitouch development and implement them so they can be used with pymt (e.g. pymt modules, or debugging support built into the core).

Calibration suite Implement semi-automatic calibration of multitouch displays. This is especially useful for DIY hardware. Think of the following calibration steps: DoubleTap speed calibration, Improved touch flow (e.g. see retaintouch module), find & ignore hotspots, Dejitter, implement coordinate transformations if the tracker isn't properly calibrated we can do it inside pymt.

Documentation or Example Apps Writing good documentation and example apps or tutorials is hard, but really helpful to new people checking out a library. A summer project would involve multiple smaller parts of writing example applications, documentation, and tutorials. Great way to learn about PyMT if no prior experience is present.