thoughts, ideas, code and other things...

Thursday, April 01, 2010

GSoC 2010 - PyKata - Proposal

Taking PyKata to another Level

developing a useful supplement to Python in education

Contact Information

  • Name - Abhishek Mishra
  • Email Address -
  • Phone Number - +91-9535009187
  • IRC nickname - ideamonk (
  • Twitter -
  • Skype username - ideamonk
  • Webpage/Blog -
  • College/University - Amrita School of Engineering, Bangalore
  • Major - B.Tech in Computer Science

Project Details

  • Project Description - Help develop PyKata - the website for Python practice ( 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 -
Vision -
Code - , 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. 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.

  1. Porting to Web2Py

    After 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.
  2. Porting Python 3

    Right 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 (, 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.
    Instead of waiting for App Engine to shift to Python 3, I would create a Python 3 compatible branch of PyKata in parallel. Once App Engine shifts to Python 3, PyKata too would get updated in no time. This would also help us give web2py developers useful feedbacks on porting to Python 3.
  3. UI/UX improvements

    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 -

    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

    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.

    Some examples -

  4. User Profiles

    PyKata 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 -

    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.
  5. Live execution results

    Currently 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 -
  6. Content Management

    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.

  7. Batch upload problems/ solution-uploads

    A contributor of problems/tutorials might have many contents already written in say, a python script itself. Copy pasting from them and uploading one by one might not be a great user experience. I would simplify this task by allowing flash/javascript based bulk uploads (to select multiple files). A server-side validation and processing would be provided to such uploads which would process them according to rules specified on PyKata Project Wiki -
    Good news is that I've already written an experimental bulk uploader for PyKata ( ), extending that to above mentioned feature should be easy :)
  8. Export/Import of Data

    This 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.
  9. * Course planning feature

    It 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.
  10. * PyLint / Pyflakes integration

    Though 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.
  11. * 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)

  12. * Making PyKata more Social

    Though 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"
  13. Documentation

    Though 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.

Personal Availability

  • 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)

  1. 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.

  2. 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

  3. 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 - 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.

Why me?

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!



Labels: , , ,


Post a Comment

Subscribe to Post Comments [Atom]

<< Home