GSoC 2010 - PyKata - Proposal
Taking PyKata to another Level
developing a useful supplement to Python in education
- Name - Abhishek Mishra
- Email Address - email@example.com
- Phone Number - +91-9535009187
- IRC nickname - ideamonk (irc.freenode.net)
- Twitter - http://twitter.com/ideamonk
- Skype username - ideamonk
- Webpage/Blog - http://blog.ideamonk.in
- College/University - Amrita School of Engineering, Bangalore
- Major - B.Tech in Computer Science
- Project Description - Help develop PyKata - the website for Python practice (http://pykata.appspot.com/vision) We want this to be the prime site serving students, teachers, and professionals wanting to learn Python via self-study.
- Mentor - Andy Harrington and David MacQuigg
- Key Technologies - Python, AppEngine, Web2Py/Django
What is PyKata?
PyKata is a community-authored website with contributions from teachers and students in math and science, as well as technical professionals. It provides you a way to quickly write programs on the web, get immediate feedback on errors, and work through a set of exercises designed by the best math and science teachers all over the world. For teachers, who may not be programmers themselves, PyKata? offers a way to integrate simple programminmg into their lesson plans, without distracting from the subject being taught.
Website - http://pykata.appspot.com/
Vision - http://pykata.appspot.com/vision/
Code - http://code.google.com/p/pykata/ , currently based on webapp+django
PyKata uses similar doctest environment as seen in Crunchy.
What features are provided currently?
1. It lets you write, execute and automatically evaluate your code online.
2. Saves your work-in-progress.
3. Shows your overall progress as to problems solved.
4. Lets community contribute problems.
5. Static help
Why should PyKata be developed further under GSoC '10?
Python has been a liberating force for both programmers and for scientists and engineers who don't have time for traditional programming. It has a also added some fun and playfullness to programming.
I believe Python is the best when it comes to teaching programming at school and college levels. http://is.gd/aYO08 and personally while discussing python with some friends, I've noticed a fair amount of excitement they've shown towards Python.
PyKata has great potential of making these ideas popular and assisting in quick learning for say, college students who wish to do quick simulations, or say, new engineers on the team who do not wish to spend excessive amounts of time on learning to write programs.
What features am I planning to implement in PyKata?
I am very excited to see a Python+AppEngine task on PSF's Summer of Code Page. Here are some of the ideas that I've come up with after discussions on the PyWhip mailing list.
Porting to Web2PyAfter some experiments and discussions over choice of framework, it seems that web2py is a suitable framework for PyKata development. Django happens to have steep learning curve for new comers who would contribute to PyKata in future. To keep the friction in entry of new developers low, Web2Py seems like an appropriate framework for quick contribution and RAD development.
Though it is said that web2py follows some anti-patterns, but then "Practicality beats Purity" at times. Also deploying a web2py app on AppEngine is almost effortless.
Porting Python 3Right now, Google App Engine uses Python 2.5.2. But there are two interesting things related here -
- opposed to the propaganda on #python about not using Python 3 yet (http://python-commandments.org/python3.html), the Python community is more interested in porting existing packages to Python 3
- This discussion on web2py and Python 3 compatibility is a relief as the core developer believes that it won't take too much to port web2py to Python3.
PyKata could benefit from an improved design (more web2.0-ish). This would not only make it attractive but also help us present the progress data, user profiles, live statistics, tutorials, news, etc in a better way as it would encourage more social interaction upon growing. A rough mock-up - http://twitpic.com/1aux8n/full
I aim to create an addictive and interactive user experience. Using game style interaction to drive participation, possibly include points, badges, rewards a great example for that would be http://stackoverflow.com
Creating a flow - once a student gets a problem right, PyKata would show her which way to proceed from there.
If a student goes wrong repetitevely, PyKata could also show him/her possible tutorials related to it. http://twitpic.com/1auytp/full
Some examples - http://codingbat.com http://spoj.pl http://codegolf.com/
User ProfilesPyKata can provide each user his/her own personal profile to track progress. I also plan to add two levels of views to these profiles - a personal view, a public view. Someone whome the student designates as a teacher will have full access to the student's data. Currently the only way to track progress is to either look at ticks on 'All problems page' or to do the same on category pages. A mockup for this feature - http://twitpic.com/1av0x0/full
Another important detail that a user profile should expose, when a teacher views a student's profile would be the areas where one is weak at. This could be found out by monitoring number of times a student fails in a problem or a class of problems. While the public view would not show any such details.
Live execution resultsCurrently PyKata takes you to another page to show results of current code execution. Then the user hits back button to modify the code, or copy-pastes the traceback for reference and hits back to debug the code. This user experience could be simplified by placing a live result box on right side of the editor. As shown here - http://twitpic.com/1auytp/full
PyKata relies heavily on user submitted content. As for content submissions, all new submissions would get reviewed by PyKata editors and then moved to appropriate categories. If that doesn't happen, then a problem remains in 'new' category for the time it accumulates favourable votes.
As per current plan, only a PyKata contributor would be able to modify the problem/content they submitted. Another group of users - PyKata editors would have the rights to modify problems and content for the purpose of moderation.
When a user proposes improvements to a problem, the author of the problem would have the right to decide whether to accept it or not.
As per modifications to problems, the system would preserve previous version and show the history of the problem. This would be useful for Task 9 - Course planning feature.
Good news is that I've already written an experimental bulk uploader for PyKata ( http://code.google.com/p/pykata/source/detail?r=36 ), extending that to above mentioned feature should be easy :)
Export/Import of DataThis involves creating a way for people to run a local copy of PyKata on their infrastructure. As such it would be nice for them to be able to export and import problems/content from main PyKata website to their local copies.
Here the batch upload code can be easily reused as PyKata already specifies an upload format. This task would involve generating uploadable file in PyKata specified format. The user then can take it to any other instance of PyKata and merge the updates.
* Course planning featureIt is expected that PyKata once launched and contributed to, would become a large repository of Python learning problems. It could also include support for classes in Maths, Science and Engineering.
We could do something interesting here by allowing teachers to create lessons by handpicking existing problems and tutorials and making a definite learning track or a roadmap out of them. This would also reduce the efforts that go on a teachers behalf in creating tutorials.
A problem editor would mark an edit with "major change" for the purpose of maintaining a history of a problem. This is useful in maintaining consistency in already created learning traks prior to modification.
* PyLint / Pyflakes integrationThough not sure if it would be possible to run them over AppEngine, I would experiment with it and try to integrate it as well to PyKata. If this feature gets added, PyKata would be able to pinpoint indentation and other minor errors immediately. Crunchy's main developer Andre Roberge suggests that this could be done in a similar way as seen in Crunchy.
* Community Ratings
This involves creating a way for the community to rate contents - including users, problems, tutorials. This would help us gather good statistical data for further analysis. (this is a non priority task)
* Making PyKata more SocialThough not at all a priority task, and not even a tough thing to do. At a later finishing stage, it would be nice to have integration to social networks like Facebook, twitter, etc to gain more popularity. Though not at all a concern right now.
A good way to encourage participation, as suggested by Andrew, would be to expose different users. Different user types - learners, one-by-one contributors, experts, content contributors, admins, developers.
I believe a 'karma ranking' (as seen on Launchpad, Hacker News, Reddit, etc) or community rating approach to classify users would be great. This would encourage already contributing members to contribute more.
Problems can also be rated in this manner - "XX out of YYY people found this tutorial useful"
DocumentationThough not a separate task at all, documentation will be written in parallel with code development. This will be sufficient that a student not familiar with web development will be able to take over as maintainer of PyKata. One of our mentors, Dr. MacQuigg, is experienced in documentation of commercial software, and he will assist with this effort, so that our "lead developer" will not be slowed by documentation problems in future.
Future ideas - a canvas based whiteboard tool for teachers to create better tutorials,
Having mentioned everything that came to my mind for PyKata's improvement, I would like to point out that not every feature might be possible to be implemented within the time frame. Hence I've kept feature 9, 10, 11, 12 marked with a (*) as tentative or post-gsoc plans for PyKata if they don't fit in.
** Feature 9 would possible to implement once all other feaures get completed as it would require all other features to be functional.
- I have reviewed the major dates of GSoC
- Apart from my Institutes end-semester exams that fall from April 30th to May 13th, I have no other conflicts with the schedule.
- I would be available for the entire duration of GSoC 2010
Major Milestones (weekly plans)
Community Bonding Period ( April 26 - May 23 )
April 30th - May 13th - Low action due to exams
May 13th - May 23rd - Start studying existing codebase, old discussions for getting as familiar as possible with the project. Getting familiar with different aspects of web2py and AppEngine with possible experiments.
First Semester ( May 24th - July 11th )
May 24th - May 30th - Task1 - Porting existing codebase to web2py.
May 31st - June 6 - Task4 - User Profiles
June 7 - June 13th - Task5 - Live execution results (AJAX based)
June 14th - June 27th - Task6 - Content Management
June 28st - July 4th - Task 7 - Batch Uploads
July 5th - July 11th - Task3 - UI/UX Improvements (partial) and testing+review for mid term submission
Second Semester ( July 16th - August 16th )
July 16th - July25th - Task 8 - Export Import of data
July 26th - Aug 8th - Task9 - Course Planning feature
August 9 - August 16th - Task3 (completion), Code Review, documentation wherever necessary, testing.
* Each week is a 40 hour work week.
* Since my GSoC work would bring in a lot of changes to PyKata, I will continue as a committer and will support and evangelize PyKata.
Source Code Repository and Communication Plan
I would be working on SVN repository of PyKata on Google Code - http://code.google.com/p/pykata/source/browse/ and I already have a committor access there. Most probably I would push my changes to test branch which could be merged to trunk after a simple review/test.
I plant to communicate quickly as for any doubts and discussions coming in between the week. In the end of every week, I plan to submit a report to my mentor. As per my schedule, I'm mostly implementing 1 feature per week, with an exception of two weeks to Content Management feature and Course planning feature. So a weekly report would be well suited.
- I have been programming since my school days QuickBASIC, mostly writing games http://blog.ideamonk.in/search/label/QBASIC
- I do programming puzzles on SPOJ sometimes. Initially in C/C++ now in Python - http://www.spoj.pl/status/ideamonk/signedlist/
- I believe in giving back to the community and wrote SPOJ Rank Tracker addon for Firefox and SpojBackup tool in Python.
- During my first year at college I wrote a web based programming contest platform along with a friend - CodeFire (PHP/DevC++)
- Some Python related work I've done so far -
- PyPaste http://blog.ideamonk.in/2009/08/pypaste-pastebins-at-your-terminal.html
- I felt the need of a twitter panel applet for gnome and learnt some PyGTK to create it - http://blog.ideamonk.in/2009/11/introducing-gtweetbar-alpha.html
- Interested into making webapps, I also tried Google AppEngine and created a small app called Web2Hunter -
http://www.youtube.com/watch?v=XyURw35v2u8 (a short intro to it at PyCon India 09)
- I wanted to create photo-mosaics one day, I wrote pymos for it along with a friend who helped me modularize and package it - http://blog.ideamonk.in/2009/11/pymos-creating-mosaics-of-your-photos.html I used it to create a poster for FOSS.in 2009 http://foss.in/promote/posters , that really made me happy as I wrote something useful.
- I felt the need to receive sms alerts for new incoming mails as I do not own a gprs phone. I came up with an OAuth based solution - http://lenny.in which runs on AppEngine and uses twitter to send alerts.
- Another AppEngine project I did and am yet to add finishing touches is Poorman's datastore - http://github.com/ideamonk/poorman It lets one use multiple free appengine instances as a unified, distributed datastore.
- A fun project exploring WebSockets with mod_pywebsocket, pyAIML, CSS3, redis - http://ideamonk.in/bakabot/
- Some relevant OpenSource Experience -
- Participated in Sahanapy workout at FOSS.in http://trac.sahanapy.org/wiki/WorkOutFossIn2009 (ref: ideamonk) and contributed more to it https://launchpad.net/sahana/+topcontributors , which mostly involved font-end work, the current theme, nice error pages, etc.
- I am writing a PyQt based gui for apt-offline - an offline APT based package manager for debian based distros - as a hobby project http://github.com/ideamonk/apt-offline
- My github page - http://github.com/ideamonk
- My Blog - http://blog.ideamonk.in
- I started http://madetokill.com/ with friends to fetch us some work in holidays. I learnt a good deal of PHP, HTML, CSS, jQuery and a bit of Photoshop from this experience.
- Recently I also got committer access to PyKata, and have started exploring it more.
As you can clearly observe I've been doing odd small things here and there, Google Summer of Code and PyKata really brings me an opportunity where I can create, give support to, be responsible for something that a lot of people would use and be proud about it.
Python is bound to play a big role in education, rapid prototyping and what not. At PyCon India 09, I was really happy at the announcement of FOSSEE (Free Open source Software for Science and Engineering Education) group about introducing Python to engineering colleges in India. And now I'm delighted at the fact that I too might get a chance to contribute to Python Education in a big way!