[[TOC]] = Grace Hopper Celebration Codeathon for Humanity = The Codeathon at GHC2011 is intended to introduce participants to rapid development of FOSS applications in a collective coding setting. == Ready, set, go! == === Install the Eden development kit === Instructions for installing from the kit supplied at the event on flash drives are [wiki:InstallationGuidelines/VirtualMachineGHC here]. === Get an account on Launchpad === ''If you're in a hurry to get on with things, you can leave this til later, when you're ready to upload something to Launchpad.'' * Sign up for an account on [http://launchpad.net Launchpad] -- follow their account setup instructions. * You should make your own SSH keys (needed for uploading to Launchpad) -- see the [https://help.launchpad.net/YourAccount/CreatingAnSSHKeyPair instructions] on Launchpad. (For Windows users, PuTTY is recommended as it's much faster to install then Cygwin.) * Join the [https://launchpad.net/~ghc-2011-codeathon GHC Codeathon team]. Look for the "join the team" link. * When you have a branch ready to push to launchpad, you can do it without first creating the branch there. This example creates a branch called "work" that is associated with the Sahana Eden project on Launchpad. Say that your Launchpad username is "abcde":[[br]] {{{ cd /home/web2py/applications/eden bzr push lp:~abcde/sahana-eden/work }}} * When the time comes to do a "merge proposal" to get your changes into the team branch, you'll need to change the merge target to the [https://code.launchpad.net/~ghc-2011-codeathon/sahana-eden/team team branch]. === The IRC channel === We're going to take over the Eden IRC channel: #sahana-eden on freenode. If you don't already have an IRC client, the easiest way to connect is to use freenode's [https:webchat.freenode.net web chat client]. * To post a message, type in the text box, type Enter. * To get someone's attention, type their nick anywhere in your message. (Use sparingly -- this will ring bells / flash lights on their machine.) === It doesn't end at 3pm === The 3pm end of the event is artificial -- you can continue afterward. If you sign up on Launchpad and join the team, you can keep in touch with other team members via Launchpad. == Suggested Codeathon Projects == === [http://wiki.openstreetmap.org OpenStreetMap] integration === Leveraging the synergy of of OSM's participation... ==== Potlatch integration ==== There is already a basic integration of [http://wiki.openstreetmap.org/wiki/Potlatch_2 Potlatch] (web-based OSM editor) into Sahana Eden (currently, if the system is configured, we have an 'Edit in OpenStreetMap' button on the toolbar in the fullscreen map which opens the relevant area): * http://bazaar.launchpad.net/~flavour/sahana-eden/trunk/view/head:/deployment-templates/models/000_config.py#L284 * http://127.0.0.1:8000/eden/gis/map_viewing_client * http://127.0.0.1:8000/eden/gis/potlatch2/potlatch2.html {{{ controllers/gis.py potlatch2() views/gis/potlatch2.html }}} This could use: * ~~updating to current Potlatch2 code~~ * http://wiki.openstreetmap.org/wiki/Potlatch_2/Deploying_Potlatch_2#Getting_the_files * can we make an easy process for this? * ~~improving the way that the resources are loaded (currently nasty hack to redirect from active to static code, which is very slow, can avoid through a rewrite rule, but better if could just be straight to static)~~ * ~~moving the OSM OAuth config from the site-wide 000_config.py to a per-user gis_config setting, including appropriate online help to point users to the right place to get their OAuth details copied-in.~~ * configuring the presets for the Humanitarian context * http://wiki.openstreetmap.org/wiki/Potlatch_2/Developer_Documentation/Map_Features * there are some presets here: http://pierzen.dev.openstreetmap.org/hotpotlatch2/potlatch2.html * ~~the current zoom-in is crude, so a zoomed-out area should simply block the request & force the user to zoom-in to the area that they wish to work in before launching potlatch (like www.openstreetmap.org)~~ * great if we can have layers in Potlatch configured from the layers in the Map Service Catalogue ==== OSM Importer UI ==== * There are currently basic import & export stylesheets for .osm files: {{{static/formats/osm/*.xsl}}} * This currently has hard-coded mappings between OSM admin levels & Sahana admin levels * * http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative#10_admin_level_values_for_specific_countries * A custom controller should be written * provide a UI to the user to select their country from the dropdown which pre-populates the mapping fields for manual verification/adjustment * process the results of this to pass new variables back to the stylesheet: * http://pub.nursix.org/eden/s3xrc/vita.modules.s3xrc.s3rest.S3Resource-class.html#import_xml {{{ resource = s3xrc.resource("gis", "location") template = os.path.join(request.folder, resource.XSLT_PATH, "osm", "import.xsl") resource.import_xml("uploaded_filename.osm", template=template, mynewvar="xxx") }}} * The Stylesheet needs updating to act on these vars when found A nice further refinement would be to provide a UI to select a BBOX (usually by selecting a location from the hierarchy & using the bounds for that gis_location record) & optional resource-type filter to pull down the .osm file via [http://wiki.openstreetmap.org/wiki/XAPI XAPI] * Initially this could be manual text box entry of BBOX/filter * Then add dropdowns for the Location Hierarchy & filter (which prepopulate the real dropdowns for manual verification/amendment) * Then add an option for Map-based BBOX selection === Translations Admin Panel === ==== Use Cases ==== * Admin wants to update /languages on their running instance with current version from Pootle * Admin wants to be able to do offline translation of main language file(s) (either using native web2py UI or using a PO-based tool like Virtaal) * Admin wants to be able to translate additional custom strings in this instance (either using native web2py UI or using a PO-based tool like Virtaal) ==== Tasks ==== * Add a page to {{{controllers/admin.py}}} to handle Translations. * Update the InstallationGuidelines with any new optional requirements (such as translate toolkit). * Gracefully give nice error messages if the translate toolkit isn't installed. * Update UserGuidelinesLocalisation ==== Export PO file ==== * Dropdown to select which language * Button to call [http://translate.sourceforge.net/wiki/toolkit/py2web2po web2py2po] to convert the .py file to a standard PO file for the user to download ==== Import PO file ==== * Upload Widget which calls [http://translate.sourceforge.net/wiki/toolkit/py2web2po po2web2py] onaccept to convert a .po file to a Web2Py .py file stored in the languages folder * Use the same filename prefix or prompt? * Do a merge ==== Update Pootle ==== Provide a set of admin scripts (bzr post-commit hook?) to update Pootle with any changed strings as a Merge. === CAP: Common Alerting Protocol === ''This is the least well defined project, and may be more investigation than coding.'' * Receive CAP messages from an external CAP source. * Provide a form for originating CAP messages. * Send CAP messages to subscribers, retrying on failure. * Write a Facebook app to receive CAP messages and post them on one's wall. See more [wiki:GHC2011ProjectCAP here]. === SAARAA: Situational Awareness and Rapid Assessment Application ''Caution: Getting set up to do Android development is a Whole Separate Thing from the Eden development environment setup. Consider doing the Eden side, and faking the messages from the Android client with (e.g.) curl or RestClient.'' This was started as an Android app at !RHoK !#3 that allows the user to report on a dangerous situation by filling out a form and uploading an image. That version uploaded data to a very simple Heroku back end. http://www.rhok.org/problems/saaraa-situational-awareness-and-rapid-assessment-application As a follow-on to that project, allow the app to send to an Eden back end. * Add an appropriate model to hold the uploaded situation report. * Allow users who have an Eden account to give their username and password. (Current version has no accounts.) * Handle receiving uploaded messages from users who don't include a username and password -- provide a code they can use to log in later. * Display the messages by category and time. * Allow commenting on the messages (e.g. adding updates about handling the messages). * Allow sending a message back to the user.