blob: 0adfcbe78300c0bfd83093a5a07f856a12de9c4e [file] [log] [blame]
#summary Ideas List for GSoC 2010
#labels Importance-Deprecated,Contents-Complete
= Introduction =
_While Melange will apply as an organization, there is no guarantee that we will be accepted as an organization for GSoC 2010. You're invited to drop by at #melange IRC to discuss. Help us make it happen._
== [PossibleMentors Possible Mentors] ==
These are, in order, the most likely or best mentors for this project idea.
== Skills ==
* All developers will need to have experience in, or be willing to learn Python.
* Prior experience with Django or an equivalent framework would be a distinct plus.
* Knowledge of JavaScript (AJAX), and a feeling for web design is big plus as well.
== Difficulty==
'Easy', 'Moderate' or 'Hard'. Hard is not necessarily better! We are risk averse!
== Early Spinoffs ==
We want code that we can actually use, not code that shows great promise. At the half way stage, you MUST have something complete that we can actually use as a 'spin off' of the work. In discussing projects we will try to help you find ways to have spinoffs along the way.
----
----
= Idea Details =
----
= New Document Editor =
=== Description ===
We're looking for a better way to handle documents, document revisions and document editing in Melange. To do that we need to switch the text editor from TinyMCE to something better usable and safer when it comes to HTML. Documents are used throughout Melange to show and edit, for example, the very Home Page, organizations home pages and, most important, project proposals.
==== Characteristics we're looking for =====
* Safe handling of HTML tags, or switch completely to Markdown syntax
* Be able to add custom tags
* Code highlighting (should be able to recognize automatically the language to highlight)
* Support for anchors
* Show images linked from the Net and/or uploaded to the system using BLOB API.
* Be able to accept attachments (perhaps with checking over MIME part to accept only certain types of files)
* Be able to add links
* Control over appareance (left, right, center, bold, italic, color, etc)
* Autosaving during editing
* Be able to show diffs between editing (but it should be possible to turn it off for certain pages)
* Document access control
We did an internal study about the switching and we're thinking the safer way to go is not to use HTML for editing at all (but we welcome new exciting proposals!), so probably a solution could be to use an already made Markdown editor. To do that we need a markdown parser and a markdown WYSIWYG (or at least a WYSIWYM) editor. On the backend side, we need to store different revisions of each document. The simplest way to do that is to store a new document each time it's edited and to show the differences on the frontend side using libraries like Google-Diff-Match-Patch. The hardest way is to have a proper revision control system completely written in Python. One challenge of this part of the project may be the showing of proper differences of the very Markdown tags.
==== Useful Links ====
* [http://markitup.jaysalvat.com/home/ markItUp!]
* [http://attacklab.net/showdown/ Showdown]
* [http://www.ivan.fomichev.name/2008/04/javascript-creole-10-wiki-markup-parser.html Creole Parser]
* [http://code.google.com/p/google-diff-match-patch/ Google-diff-match-patch]
* [http://alexgorbatchev.com/wiki/SyntaxHighlighter SyntaxHighlighter]
* [http://softwaremaniacs.org/soft/highlight/en/ Highlight.js]
=== Skills ===
* JavaScript (and jQuery)
* HTML
* DHTML
* Ajax
* CSS
* Python
=== Difficulty ===
Moderate
=== Mentors ===
* Mario Ferraro (Merio on #melange)
----
=Testing, Code Guru, Code Quality Assurance=
===Description===
Melange is sorely lacking tests, and it's hurting our development speed significantly. What we need is a extensive set of unit tests for our logic and views, as well as functional tests to make sure that all views work as expected. This will require learning the codebase first, so as to know what something should do. Test-based exploring would be most suitable (learning how the codebase by writing tests that confirm that things work a certain way). We want test coverage such that it is possible to refactor a core function without doing any manual testing, and still be fairly certain that everything works as expected. On top of that, we want to be able to start doing TDD, which is a lot easier if there are a lot of tests already. All developers will be asked to include tests with their changes as soon as we start doing TDD, so once the momentum picks up things should get easier.
A lower priority, that can be pursued once we have decent test coverage, is to make sure that all pylint errors are fixed, and that all warnings are fixed or suppressed as appropriate. This way we can require that each commit introduces no new pylint errors, which will ensure some level of code quality.
===Skills===
* Python
* Django
* Testing
===Difficulty===
Moderate, but requires a lot of effort
===Mentors ===
* Sverre Rabbelier (SRabbelier on #Melange)
----
=Social Features=
===Description===
Google Summer of Code is not only about coding, but it is also an annual event which gathers together thousands of people who belong to hundreds of communities or just start their adventure with open source.
We have received a number of requests for adding social features to Melange. Some users would like to update their work progress for public view, while others want to share their interests and activities. Maybe someone is giving a speech at a conference nearby and you are invited to drop in. There is also a large number of more or less official meetings which are often organized on students own initiative.
Currently we use our dedicated mailing lists for these purposes, but we definitely want something better.
The project ideas consist of a few parts which are rather independent, but in some parts they may interfere with each other.
==== Google Calendar API integration ====
As mentioned above, there is a lot of events and important dates. This part is mostly about integrating Google Calendar API into Melange, so that we are able to manage them.
I recon there should be a few different calendars:
* one global calendar to emphasize program official dates and events (i.e. current timeline entries)
* editable by: program host
* visible to: everyone
* one global calendar to show social events like unofficial student meetings, interesting open source conferences, etc.
* editable by: program host, but all users may request putting a new event there
* visible to: everyone
* one private calendar for each accepted organization
* editable by: organization admin
* visible to: mentors and students who work for the organization
==== User personal page ====
Each user should be able to create her own personal page and customize its content within given permissions. The main requirements are that users can:
* edit description using also HTML tags
* add a personal photo (it should be quite easy to store it now thanks to the new Blobstore API)
* maybe embed some custom gadgets; anyway we need to ensure that any code that is pasted by users is safe to prevent for example XSS vulnerabilities.
* display all roles for all previous programs; the user should be able to either show or hide this information; this way it is more official so that users cannot take pride in fictional achievements
Besides the fact that the user has influence on how the page looks like, its general layout should be pleasing to the eye and readable.
==== Finding nearby students by geomodel ====
Is not it frustrating when you live in Europe and receive invitation to a conference which takes place in Australia? There is no doubt it is a marvelous country, but the chances that you will go are slim, aren't they? Thanks to geomodel project it is possible to filter the results the based on a given location. The project itself is still in its infancy, so working with it may require adding some changes. There may be not enough time to implement all interesting queries during the Google Summer of Code coding period, but adopting the source code to be useable for Melange would be a nice feature.
Of course this is only an initial draft. Other ideas on adding different social features are appreciated, thus the final range of the project may vary.
==== Friends list (LinkedIn, Facebook) ====
TBD
==== Useful Links ====
* [http://www.google.com/calendar/ Google Calendar]
* [http://code.google.com/apis/calendar/ Google Calendar API]
* [http://code.google.com/appengine/docs/python/blobstore/ Blobstore API]
* [http://code.google.com/p/geomodel/ Geomodel]
===Skills===
* Python
* JavaScript
* HTML
* CSS
===Difficulty===
Moderate/Hard (depending on the final goals)
===Mentors ===
* Daniel Hans (dhans on #melange)
----
= Usability improvements =
=== Description ===
Melange has done its good work for Summer of Code 2009, but we're looking for usability enhancements to improve user experience throughout the workflow. It's no secret that the current architecture and, consequently, the current user interface has its rough edges. We've made some steps to improve user experience, for example, shrinking the sidebar (which, for developers and administrators, is very long) and, recently, beginning to integrate [http://www.trirand.com/blog/ jQGrid] to address [http://code.google.com/p/soc/issues/detail?id=201 Issue 201]. But much work still has to be done.
In an ideal world we should be able, for example, to use Ajax and DHTML more extensively for many tasks: to do this, however, something in the Python/Django architecture has to be changed.
Here some ideas to improve the user experience, but they're not "what we want", but "what we think we want": we very welcome fresh ideas from wannabe students. The most important thing to have in mind is that every improvement should follow the current minimalistic (Googley) style.
Prototypes and/or mockups are most welcome in proposals about this project.
* *Sidebar*: The current sidebar shows, for example, the same links for each Organization in the system, which is unnecessary. To improve this, for example, we should either have a single page with the list of all organizations and the links that lead to the proper pages to deal with them or a superduper DHTML/Ajaxy sidebar that appear from a side of the page with a control panel (for example with a tab "Organizations", an autocomplete combobox to select an organization and the tasks that can be done over that organization). Another option is a sliding sidebar (iPod style), something that, clicking on a higher level link, slides to show only the second level and so on.
* *Developer/owner control panel*: The control panel mentioned in the sidebar topic could be also a totally different page, which should address specific needs of each role. An iGoogle style control panel could be very welcome. Much code for iGoogle style interfaces has already been written during last year SoC project (from Mario Ferraro and Daniel Hans), [http://bitbucket.org/dhans/statistic-module-for-melange/ Statistics Module for Melange], which is not yet integrated in the main branch.
* *Workflow/notifications*: in this moment the workflow is not very clear, for example, for a student. We would want to show current/next steps in the user's homepage and a more beautiful way to show notifications (e.g. when a mentor publish a new comment on project proposals), maybe integrated with the control panel mentioned before. Think about yourself: what you would like to know during the lifecycle of your project proposal? What has not been immediately clear when you first dealt with Melange?
* *Client side/ajaxy form validation*: Even with tooltips shown for every field in Melange (they also need some refinement though), sometimes users put wrong stuff in form fields, and is common habit to alert the user in a friendly way without any page reloading (which takes time). So we would like to integrate some client side validation (e.g. over regular expressions), but there could be also the need to have some ajaxy roundtrip for particular checkings (e.g. link_id already existent). Some clever way to avoid most of the duplication that will come between JavaScript and Python cleaners/checkers is a plus.
* *Autosaving of forms/documents*: This is something that could be catched by another project (see "New Document Editor"), but if no proposal is accepted we still would like to have it for better user experience. Sometimes it happened that users take much time to fill in forms and/or documents (either because they were thinking or left the computer because of any reason): obviously sessions have their timeouts, so when they were going to save their editings... a message complaining about not having logged in appeared to the user and an issue complaining about lost modifications appeared in our bug tracker :). So we need a way to autosave temporary informations in our models to avoid this kind of problem.
* *Form design*: if you try to use Melange's survey module, you will find it working and functional but still with some rough edges on usability. We would like to find (and code!) a way to improve owner's user experience when it comes to create survey forms.
==== Useful Links ====
* Sidebar
* [http://www.barandis.com/dev/jquery/ddmenu/index.html BDC Drilldown Menu]
* [http://www.filamentgroup.com/lab/jquery_ipod_style_and_flyout_menus/ iPod Drilldown]
* [http://www.lanrentuku.com/down/js/daohang-541/ jGlide Menu]
* [http://www.flash-free.org/wp-content/files/e24tabmenu/index2.html TabMenu]
* Validation
* [http://docs.jquery.com/Plugins/Validation jQuery Validation Plugin]
* [http://plugins.jquery.com/project/validate jQuery Validate Plugin]
* User interface
* [http://www.gmail.com GMail]
=== Skills ===
* JavaScript (and jQuery)
* HTML
* DHTML
* Ajax
* CSS
* Python
=== Difficulty ===
Moderate/Hard
=== Mentors ===
* Mario Ferraro (Merio on #melange)
----
=New Data Seeder=
=== Description ===
Everytime it comes to developer tools, most of developers are lazy or just overwhelemed by bug fixing and/or new exciting improvements that those tools are postponed forever. We make no exception! :) Although these tasks are normally not so exciting like bringing new end-user features, they are necessary for the whole application ecosystem, and to help developing ... new end-user features! Melange has two little cool modules (seed_db and seed_many) to seed the datastore, but they're quite outdated and doesn't respond to all our needs. Developing a fresh new and flexible module to seed the datastore to easen our work is going to be exciting as developing new end-user features. We would like an Ajaxy frontend and a strong bulletproof backend which communicates asynchronously with the frontend to make test cases easier to setup, which is easy to extend and mantain.
<DanielPleaseConfirmYourAvailability>
Be aware that some code about a new data seeder has already been written by the awesome Daniel Hans, so you might want to talk also with him to have some hints on writing your application.
</DanielPleaseConfirmYourAvailability>
==== Characteristics of the module ====
* *Data seeder*: The data seeder should be a Python module which takes input from the frontend, does its duties and respond back to the frontend asynchronously (just to confirm that the Task has been activated). All seeded data should be distinguishable from user entered data. It should use Task Queue API for data seeding. Because it will be necessary to test and setup test cases also for statistics module, it could be quite complicated:
* * Statistical distributions of data *: Having all students coming from USA and 1 year old is not the best thing when it comes to testing. Then we should need, for any model, a way to define a statistical distribution that the seeded data has to follow. Students ages, e.g., need to probably follow a normal distribution, not to forget that that distribution should be parametric: Summer of Code has no students under 18, but other events might accept different students age ranges. An exciting feature (although not required) would be to analyze past data of the same event in the datastore to gather probability densities. Same thing for students degree, country, other models details, etc.
* * Easy to mantain *: Although standard melange models are not likely to change heavily in the future, no one knows... so we need to have a way to make the data seeder easy to mantain and extend. Maybe a clever use of Python reflection/introspection and (maybe?) some use of GAE metadata would make the module highly flexible.
* * Dependency *: There's no way to create mentors if there are no organization seeded before. So, the seeder should be smart enough to tell the user that it should seed organizations first, or should give an option to automatically seed those organizations before seeding mentors. Also for this task, clever use of Python reflection and GAE metadata could give enough flexibility.
* * Easy setup for test cases *: So, we would like to test the organization home page. But then a document for this organization must be created and associated with the organization home page. This is some kind of dependency, but it's not closely related to datastore, but to an abstract concept. Here it comes the flexibility for the seeder to accept some kind of configuration (probably guided by a JSON object that comes from the frontend) associated to test cases.
* * Timeline *: Same thing for the timeline. If we want to test midterm surveys, we need to have the datastore seeded with everything that is necessary to go back and forth in the timeline.
* * Options *: It should be possible to define some options for the seeder (e.g. number of entities to seed, number of org admins who are also mentors (fixed number or random)).
* * GHOP/GSOC *: data should be seeded for multiple GSoC style programs instances, and also for GHOP style program instances (which are not seeded at all currently).
* *Ajaxy frontend*: Because of Task Queue API lack of a "reverse" communication, there is no possibility to respond back to the client when a task has finished: standard GET and POST requests are to be done. Still, there is no need to have a page reloading when doing this, as also standard GET and POST requests can be sent asynchronously. About the frontend we would like some ideas from students, depending on the backend architecture they propose. Furthermore, the Ajaxy frontend can be very simple: Ajaxy in this project doesn't mean extreme DOM manipulation, just asynchronous communication. We strongly prefer an awesome data seeder than a fancy frontend, as the frontend can be improved lately if the backend is well developed.
=== Skills ===
* Python
* Some Django, Javascript, Ajax, HTML/CSS skills, although not strictly required, are a plus
* Strong background in Statistic is a plus too
=== Useful Links ===
* [http://code.google.com/appengine/docs/python/taskqueue/overview.html Task Queue API]
=== Difficulty ===
Moderate/Hard
=== Mentors ===
* Mario Ferraro (Merio on #melange)
----
=Extending GHOP=
===Description===
*Notification system for GHOP: (This may make use of feeds module)*
# At the moment GHOP Tasks have a single subscribe button, subscribing to it sends the notifications as mails. Every change to the task will trigger a notification. However user must be able to customize through some kind of dashboard or something, what kind of updates he wants.
# Also he must be able to configure it as Feeds(RSS, Atom or whatever) or mails or on-site(socghop.appspot.com) notifications
# Also the notification system now works only when some event is triggered, like the state of task is changed. But we need a notification system in place for reminders too. For example if a task is claimed by a student, it should reminders to both mentors and students about the remaining time so that they spring into action.
*Statistics and visualization for GHOP: (May make use of the work Merio and Daniel have done during last GSoC)*
# Each student should have access to data of his own work:
# Number of tasks requested
# Number of tasks claimed
# Number of tasks that I did not complete and subsequently reopened
# Number of tasks that I completed
# (Many more)
# Similarly stats can be prepared per organization
# And for the entire programme
# Also per task
# For instance, number of times a task was reopened
Visualizations like Pie chart etc can be plugged with these stats
There are many other possibilities. We will update them as and when we can think of them. Also if the potential student can do the work of going through our app and come up with ideas of what else can be extended, he will have an upper hand on others ;-)
*Submitting/Uploading the work*
* At the moment one can say on a GHOP Task that he has completed the task and put a link to it in the URL to your work field and give more info about the work as a text in the info field. But it is required for students to be able to submit their work which may contain diffs of the code, translations, wikis among other things or the full files of the work they have done. Few tasks may also require audio/video files, like the tasks which require making spoken tutorials, for instance. The way we accept the work submissions, store it and retrieve it must be redesigned. We may want to use the Blobstore property, which was added to Google Appengine recently, to achieve this.
*Automated Winner selection*
* Melange should be able to automatically select winners and runners up from the data we have. The winners and runners up should be selectable organization wise and overall for a programme. The number of winners and runners up are already configurable through the programme configuration page. Melange should pick the winners based on this.
*Extending GHOP Test suite*
* GHOP almost doesn't have any tests except a couple of unit tests written for GHOPTask view. It is required to have an extensive and exhaustive test suite for GHOP module like it is required for GSoC module. The tests must include Unit and Functional tests.
===Skills===
Skills are more or less same as mentioned at the top.
=== Useful Links ===
* [http://code.google.com/p/soc/wiki/GHOPTODO GHOP TODO page]
* [http://code.google.com/p/soc/wiki/GHOP GHOP Requirements Document]
* [http://code.google.com/p/soc/wiki/GHOPImplementationDesign Implementation and Design document]
* [http://code.google.com/p/soc/wiki/LifeOfaGhopTask]
===Difficulty===
Moderate
===Mentors ===
Madhusudan (madrazr on #melange)
----
= Other ideas =
* Write a Wiki module, that adds Wiki functionality to Melange
* integrate OpenSocial into Melange
* add functional tests using twill
* Profiling and Caching developer tools
* extend functionality of our buildbot (post commit hooks, pylint integration, application deployment to testing App Engine instance)
* add features that will enable to organize GSoC/GHOP Meetings (creating new events, managing participants, integration with Google Calendar API),
* Melange API allowing any external page to list current status of tasks and tasks list, participating projects etc.
* generating pdfs, docs of student applications
* integrating export functionality of tables, proposals with Google Docs (use Google Docs API)
* upload of student presentations (storage, viewer)
* work on selected issues from Melange Issue Tracker
* Non US students should be able to upload their Tax forms via their Student dashboard page (no more faxing or sending via email)
* Melange should enable admins/host to easily autogenerate CPT letter or letter of acceptance if one is needed/requested by student. This would generate pdf file ready to print based on the data from student profile (including program logo).
* User (Roles) profiles (mentor/admin/student/organization admin/) with profile photo, functionality to share profile information with other GSoCers ) - privacy settings for your profile
* dates that are setup in GHOP and GSoC Melange configuration page can be later automatically put into faq and terms of program in specific places
* Melange survey module should have autosave forms functionality (just like in gmail)\
* Dashboard for mentor, org admin, host, student, developer with nice information/status box, updates, stats depending on the Role
* Google Calendar API support for events planning
* Adding other GSoCers as friends to your profile,
* Sharing profile data with other social network users
* Messaging module allowing to send messages to other users (emails) (Way to improve communication between GSoCers, GHOPers)
* Requesting profile data access
* Better geo location features
* Nice upload of profile photo with crop functionality via JS library.
= Some Rough Notes =
* Did we mention that we have an active IRC channel, #melange?
* Some words for you, to inspire more ideas: *[http://code.google.com/p/soc/wiki/TestingGuidelines Automated Testing]*, *World Domination* (ask), *Access Control Module*, *Profiling*, *Log Analysis*, *[http://code.google.com/p/soc/issues/list?can=2&q=&sort=-id Issue Tracker]*, *[http://code.google.com/p/soc/wiki/AccessControl Security]*, *Optimization(s)*, *Mentor Summit*, *Wiki*.