Student Application Template
To fill this in, copy the source text. Please don't rename the template.
This is a suggestion for the kind of information we'll find useful from students in their submissions. Remember -- you're going to be committing to several months' work. The more information and planning you can provide up-front, the more we (and Google!) will have to go on when we're ranking your application. Do not forget adding your submission at SummerOfCode2015/StudentApplications
Name: Floris-Andrei Stoica-Marcu
Contact/Email/IRC nick: floris.sm@gmail.com (irc: ?FlowRiser)
Background:
My name is Floris and I am 20 years old. Currently studying at the Computer Science department of the Ovidius University, I have been passionate about coding since high school and ever since, I have tried my hand at many and various projects. I had been jumping between coding games, web applications, multi-platform applications and other things, but a couple of years ago I was charmed by the Open Source community and finally found my focus. That focus that I found with Open Source helped me develop my current set of skills.
Last year I was a Debian GSoC student under the guidance of Sune Vuorela (svuorela) and Aleix Pol (apol). Even though I had previous experiences coding and sending patches, they taught me and helped me take things to the next level. Things that I later applied to my research. These last 2 years I have been learning about GPUs and general computing on them using CUDA and ?OpenCl. My research culminated this year by using my knowledge to make an extremely fast algorithm for estimating parameters of non-linear differential systems. As fun as that sounds, I would really like to use my knowledge in Computer Vision and Natural Motion Interfaces.
I chose this project because it aligns with my current skill set and what I want to learn and get into. I enjoy working with low-level interfaces and I believe I can make an important contribution to Debian!
Project title: Input/Output model for multiple simultaneous users
Project details: This project aims to improve multiple input devices
Synopsis: I want to do a daemon-based system that, on one hand, converts input from non-traditional input devices (Kinect, PSMove, Wiimote) to normal mouse input events in screen coordinates (much like many drivers are doing at the moment) and, on the other hand, synthesizes that input to /dev/virtualDeviceName so that applications that want to use the full extent of the device can access the underlying layers in a simple and standard way (i.e. reading (x,y,z,pitch,roll,yaw) is way easier to implement than having to know the whole device specifications in order to know how to interpret the byte stream).
Benefits to Debian: Debian will benefit from the extra functionality with new input devices, that will hopefully make Debian and Debian-based distributions more attractive to programmers that want to use these kind of input devices in a standard and elegant way.
Deliverables: A working Debian package of the daemon-based system, documentation of this system and documentation of the way the implemented plugins(drivers) will work
Project schedule:
I expect to be putting about 7-8 hours per day, 5 days a week; consider the mentions from the next point.
1. Community Bonding Period (until 25th of May):
Talk to potential developers that might use this project to see how they expect to access the hardware. I want to find out how can I keep the familiar feel of the more established (official) APIs they used, but also keep it in a standardized format (if possible).
Get stuff out of the way for actual coding: making a base for the repo and package, prepare space for testing (in case I get to the Kinect goal), making sure my equipment is working and charging the batteries!
Discuss more potential ideas with Klee Dienes, my mentor.
2. Work Period 1 (Daemon synthesizing system in place, use PSMove example provided by Klee for testing):
May 25 - June 1 (Week 1): Begin coding the main async daemon system with the ability to add plugins that can act as child daemons (i.e. for each device a daemon). Make communications between them using DBus and implement DBus interfaces for client applications.
June 1 - June 15 (Week 2): Start testing the PSMove mini driver provided by Klee with the daemon system. Make any required adjustments to the system.
June 15- June 22 (Week 3): If everything is working as it should, begin implementing the Debian package, preparing for the plugins. Hopefully each 2 weeks will come with an updated package. Make sure the transform of the input from the PSMove to /dev/mouse4 is in order and that you can use it as a mouse by default, make sure the synthesizing to the /dev/PSMove (virtual device) is also working and in standard format (x,y,z,pitch,roll,yaw).
June 22- June 29 (Week 4): By now the daemons should be working with the small PSMove plugin. Submit code samples to the Midterm evaluation. Code some automated testing.
3. Work Period 3 (Support for Hydra (two 6-axis controllers, operating in unison), start implementing support for input/output devices):
June 29 - July 6 (Week 5): Implement support for Hydra using the code from the PSMove plugin. New package.
July 6 - July 13(Week 6): Implement support for Oculus Rift type of devices, that can act both as an input using their sensors and as an output (for display). This will require adding another layer for it on the plugin to handle the writing to the device frame-by-frame.
July 13 - July 20(Week 7): Test-out Oculus Rift support by coding up a quick example that uses the daemons to look inside a virtual room using the headset. Make sure everything works properly and can transmit each frame correctly with unnoticeable input/output lag.
July 20 - July 27(Week 8): Finish out the kinks in the Oculus Rift plugin (if any). Test multiple inputs at the same time, specifically Oculus/Hydra or Oculus/PSMove.
4. Work Period 4 (Finishing up):
- July 27 - August 3(Week 9): Implement app/device exclusivity (so that apps that can take control of the device until closing, or ignore other devices).
August 3 - August 10(Week 10): Document changes so far. New package. If everything so far is working as it should, start working on the optional goal of implementing a Kinect plugin using libFreenect.
August 10 - August 17(Week 11): Synthesize hand-tracking from the Kinect to mouse movements through a plugin for the daemon-based system. Write automated tests for it, by feeding a video stream of sample input and testing the synthesizing in different conditions.
August 17 - August 24(Week 12): Week reserved for preparing code samples, and any last minute changes!
Exams and other commitments: I have 4 exams spanning 2 weeks from June 21st to July 5th, I do not expect any challenges but I did plan ahead by making those two weeks with a little more room to breath.
Other summer plans: I plan to go caving on some weekends and enjoy the near-by beach!
Why Debian?: It is a wonderful project and community. I participated in last year's GSoC where the community welcomed me wonderfully and together with my mentors guided me through the whole process. I also loved my time at DebConf14 where I got to get involved and meet in person many of the members. I use it on a daily basis and I want to contribute and help it grow.
- Are you applying for other projects in SoC? No.
Other things worth mentioning:
I will be using C++ with DBus for the daemons. Libevdev will be used to map the input events to normal mouse events, arbitrary interpretation for each plugin (device) will be used for the synthesizing of output of the virtual device ( accessible, for example, on /dev/PSMove ). Talking to Klee made me realise the need for standardization and for it to "just work", so I will try to keep the output for the virtual device as formatted to a chosen standard as possible (i.e. in order x/y/z/pitch/roll/yaw).
Some of my other experiences/projects:
Video of my very own kde-greeter with integrated flash elements: http://youtu.be/lBFlNp13MQ0?t=29s
David Edmundson ported a theme and posted it on his blog: http://blog.davidedmundson.co.uk/blog/user_lightdm_themes
My first commit from one of my favorite projects (kde-lightdm-greeter): https://projects.kde.org/projects/playground/base/lightdm/repository/revisions/4cc938557ea6786fbae6c821c764fa92605f3096
Upstream commits from my last GSoC project: https://git.reviewboard.kde.org/users/florisandreis/
