Training missions, version 2
The OpenHatch training missions are a very popular way to learn the skills it takes to contribute to open source software. In the years that have passed since the first version was deployed, we've learned a lot; and this summer, you can work on that!
The current framework is limited by the fact that one must write new Python code for each training mission, and that forking the training missions is complicated. There is a new open source online learning framework called oppia that we could plug in. It would give us all the following advantages:
- The training missions could be seen, and edited as text, right on the web.
- Training missions can be forked by individual open source projects who want to customize the missions for their own purposes. This will allow communities to create (for example) a git training mission that suits their precise workflow, based on a high-quality starting point.
Your work this summer would be primarily in the code. In particular:
- Database engines: Oppia is written for Google App Engine. You would work with one of its main authors as well as a mentor within OpenHatch to make it able to run on non-App Engine data stores. (Probably, the best way is for Oppia to provide support for pluggable storage classes.) You would need to make it compatible with Django models, so it can run on the OpenHatch deployment.
- You would need to port the existing training missions to this framework. This would require careful consideration; but the result would likely be less code!
- If there is time, you could build up to 3 new training missions with this new framework. IRC, Mercurial, and joining-a-mailing-list seem like the most important three.
To get started, try one of the existing missions to get a sense of what they are like, and get on #openhatch and say you are interested!
Modernize the OpenHatch Django codebase
Right now, the OpenHatch codebase can be described as a tangled mess of the best Django practices we could pick up in 2009. Do you want to learn about refactoring by trying it with a real codebase?
We do have high test coverage. That will help you dramatically if you want to take on this task! That is, the test coverage is what will keep you sane.
If you're excited about code quality, over the summer, here is kind of thing we'd like to see:
Discussing code style guidelines with us, coming to a consensus, and then documenting them. After we adopt and document them, we can look for tools that would help automatically find violations (like pep8.py or a specially-configured pychecker), and then you would work to keep the codebase working while making a sequence of small changes that fix these issues.
Make a diagram of our circular imports, and then propose a plan to decrease how circular they are. (You can use tools like http://chadaustin.me/2009/05/visualizing-python-import-dependencies/ to visualize the import dependencies.) Then, in small patches, move (or remove) code to simplify the import chain.
In the second half of the summer, we recommend reading through the custom code we have, and consider if a Django reusable app can replace it. I expect that in a large number of the cases, you can find external code to replace most of the OpenHatch app. (-:
The portfolio editing interface is an example of code that can be replaced by an external library (for example, something using Backbone.js on the JS side, and Tastypie on the Python side) and then much of our code can be thrown away.
Additionally, if you are excited about Django's new class-based views, you could consider porting the OpenHatch views to be class-based.
Volunteer opportunity finder, version 2
This summer, you could take the current volunteer opportunity finder interface (at https://openhatch.org/search/) and make it more focused on projects rather than tasks.
This work would probably end up touching much of the web app. To make it really shine, I can imagine the following project plan:
- Review mockups and suggestions within the community, such as the recent conversations on the OH-Devel list.
- Adjust the interface at /search/ to be oriented around projects (i.e., open source communities) first.
- In doing the adjustment above, you might discover you need the web app to collect more information about open source projects. You would then need to change the project editing interface accordingly.
- You could conclude that we should automatically discover more information from external resources; we can discuss how to bring that information efficiently into the web app. (We have some experience with this and have become somewhat more dogmatic over the years, which will serve you well as you will save time by never making the architecture mistakes we did in the past!)
Data-driven mentorship app
This idea is awaiting further description. Read the wiki page source to see the thinking-aloud.