Published on

  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • The problems faced by both the victims of and responders to disasters are numerous. Beyond the trauma, this involves having to coordinate, manage and track things. In countries at risk of being affected by large scale sudden onset disasters, these problems can be massive and overwhelming.
  • Technology can address many of the data management challenges and requirements by providing solutions that are scalable, efficient, automatic and by providing live data and situational awareness to both emergency managers and the community.
  • The core functionality of Sahana developed for use in Sri Lanka endures to this day. Sahana provides a single database for recording who is doing what where – identifying what the needs are – where people are located – and where assistance is needed. The core capabilities of Sahana include an organization registry, for relief agencies to record their contact information and where they are working. This module also records what services these organizations are providing. Another piece of core functionality is a missing persons and a disaster victims registry for tracking both the missing and the found, those registered at shelters and those needing assistance in family reunification.
  • Longer-term
  • Clear structure helps maintainability
  • Easy to Install on a Laptop In-built Scheduler Database Abstraction Layer: Supports Multiple Databases for easy access to legacy data
  • Note the use of string substitution to define the tablename More effort at 1 st but makes subsequent resources much faster to copy/paste
  • Maintainability is key: the software is usually customised locally so it needs to be clearly understood by others
  • If a string is used multiple times then define as a constant as terminology can be different in different contexts
  • Contrasts with a Waterfall method where formal specifications have code written & unit tested & then released to users in big chunks
  • Website including the Wiki
  • HFOSS and RAD

    1. 1. Humanitarian-FOSS and Rapid Application Development 4 July 2010, Academia Sinica Michael Howden and Fran Boon [email_address] [email_address]
    2. 2. Overview <ul><li>Background of HFOSS </li></ul><ul><li>HFOSS vs. FOSS </li></ul><ul><li>Developing HFOSS </li></ul><ul><li>Rapid Application Development </li></ul><ul><li>Getting Involved </li></ul>
    3. 3. The Historic Trigger: 12/26/04 Indian Ocean Tsunami <ul><li>At least 226,000 dead </li></ul><ul><li>Up to 5 million people lost homes, or access to food and water </li></ul><ul><li>1 million people left without a means to make a living </li></ul><ul><li>At least $7.5 billion in the cost of damages </li></ul>
    4. 4. Problem: Aftermath of Disasters <ul><li>The trauma caused by waiting to be found or find the next of kin </li></ul><ul><li>Coordinating all aid groups and helping them to operate effectively as one </li></ul><ul><li>Managing the multitude of requests from the affected region and matching them effectively to the pledges of assistance </li></ul><ul><li>Tracking the location of all temporary shelters, camps, etc. </li></ul>
    5. 5. How Can Technology Help? <ul><li>Scalable management of information </li></ul><ul><ul><li>No stacks of forms and files to manage </li></ul></ul><ul><li>Efficient distribution of information </li></ul><ul><ul><li>Accessibility of information on demand </li></ul></ul><ul><li>Automatic collation and calculation </li></ul><ul><ul><li>No delay for assessments and calculations </li></ul></ul><ul><li>Live situational awareness </li></ul><ul><ul><li>Reports are updated live as data is entered </li></ul></ul>
    6. 6. Sahana is Born <ul><li>Organisation Registry </li></ul><ul><li>Missing / Affected Persons Registry </li></ul><ul><li>Request Management </li></ul><ul><li>Mapping </li></ul>
    7. 7. NPOs / Government
    8. 8. Projects Related to HFOSS
    9. 9. Humanitarian FOSS vs. FOSS <ul><li>Goal: To Add to the Social Good </li></ul><ul><li>Programmers != Users </li></ul><ul><li>Diverse Community </li></ul><ul><ul><li>Programmers </li></ul></ul><ul><ul><li>Designers & Producers </li></ul></ul><ul><ul><li>Disaster Responders </li></ul></ul><ul><ul><li>Social Workers </li></ul></ul><ul><ul><li>You! </li></ul></ul>
    10. 10. Challenges <ul><li>Uncertain and changing conditions. </li></ul><ul><li>Communication Gap: </li></ul><ul><ul><li>NPOs/Government  IT Providers </li></ul></ul><ul><li>Limited time and resources </li></ul><ul><li>Technology is Easy </li></ul><ul><ul><li>Getting people to use it is hard! </li></ul></ul>
    11. 11. Participatory Programming <ul><li>Engaging with Users </li></ul><ul><li>Bottom Up vs. Top down </li></ul><ul><li>Agile vs. Waterfall </li></ul>
    12. 12. Software Development Cycle
    14. 14. Emergency <ul><li>We have to build a system by lunchtime! </li></ul>
    15. 15. Incident Reporting System <ul><li>Data : </li></ul><ul><li>Location </li></ul><ul><li>Date </li></ul><ul><li>Reporter </li></ul><ul><li>Details </li></ul><ul><li>Screens : </li></ul><ul><li>Report Incident </li></ul><ul><li>View Incidents </li></ul><ul><li>Update Incident </li></ul>
    16. 16. Model-View-Controller <ul><li>Models </li></ul><ul><ul><li>Define Tables in the Database </li></ul></ul><ul><li>Controllers </li></ul><ul><ul><li>Workflow, Logic </li></ul></ul><ul><li>Views </li></ul><ul><ul><li>HTML / JavaScript Templates </li></ul></ul>
    17. 17. Model: Define Table <ul><li>models/irs.py </li></ul><ul><li>table = db.define_table(&quot;irs_incident&quot;, </li></ul><ul><li>location_id, </li></ul><ul><li>Field(&quot;date&quot;, &quot;date&quot;), </li></ul><ul><li>person_id, </li></ul><ul><li>comments </li></ul><ul><li>) </li></ul>
    18. 18. Controller: CRUD Forms <ul><li>controllers/irs.py </li></ul><ul><li>def incident(): </li></ul><ul><li>return shn_ rest _controller(&quot;irs&quot;, &quot;incident&quot;) </li></ul>
    19. 19. <ul><li> </li></ul>
    20. 20. Rapid Application Development <ul><li>Scripting Language: Python </li></ul><ul><li>Library support including GIS, GSM </li></ul><ul><li>Interactive Shell to explore </li></ul>
    21. 21. Rapid Application Development <ul><li>Framework: Web2Py </li></ul><ul><li>MVC – easier to maintain </li></ul><ul><li>Automatic Database Migration </li></ul><ul><li>Sensible Defaults </li></ul><ul><ul><li>No need to specify Routes to Controllers </li></ul></ul><ul><ul><li>Field Types provide server-side & client-side validation & client-side rendering </li></ul></ul><ul><li>In-built Translation interface </li></ul>
    22. 22. Rapid Application Development <ul><li>Sahana Eden Resource Controller </li></ul><ul><li>CRUD Forms with default Views </li></ul><ul><li>Web Services </li></ul><ul><ul><li>REST </li></ul></ul><ul><ul><li>JSON </li></ul></ul><ul><ul><li>XML </li></ul></ul>
    23. 23. Rapid Application Development <ul><li>Sahana Eden </li></ul><ul><li>Mapping </li></ul><ul><ul><li>OpenStreetMap </li></ul></ul><ul><ul><li>Google, Yahoo, Bing </li></ul></ul><ul><ul><li>GIS: WMS, WFS </li></ul></ul><ul><li>Messaging </li></ul><ul><ul><li>SMS </li></ul></ul><ul><ul><li>Email </li></ul></ul><ul><ul><li>Twitter </li></ul></ul>
    24. 24. Coding Style: Substitution <ul><li>controllers/irs.py </li></ul><ul><li>module = request.controller </li></ul><ul><li>def incident(): </li></ul><ul><li>resource = request.function </li></ul><ul><li>tablename = &quot;%s_%s&quot; % (module, resource) </li></ul><ul><li>table = db[tablename] </li></ul><ul><li>return shn_rest_controller(module, resource) </li></ul>
    25. 25. Coding Style: Maintainability <ul><li>controllers/irs.py </li></ul><ul><li>def incident(): </li></ul><ul><li>&quot;Using a docstring helps other coders&quot; </li></ul><ul><li># Lots of other comments are also useful </li></ul>
    26. 26. Coding Style: Constants <ul><li>MY_LABEL = “My Label” </li></ul><ul><li>… </li></ul><ul><li>… MY_LABEL … </li></ul><ul><li>………… MY_LABEL ……… </li></ul>
    27. 27. Community Development Process <ul><li>Blue Prints </li></ul><ul><ul><li>Functional Specs: User Stories </li></ul></ul><ul><ul><li>Drafted on Wiki </li></ul></ul><ul><ul><li>Discussed on Chat & Mailing List </li></ul></ul>
    28. 28. Community Development Process <ul><li>Agile Development </li></ul><ul><ul><li>Functional increments released quickly to users for early feedback </li></ul></ul><ul><ul><li>Copes better with rapidly-changing requirements </li></ul></ul><ul><li>Simulations </li></ul><ul><ul><li>Usability Testing </li></ul></ul><ul><li>Issue Tracker </li></ul><ul><ul><li>Logging & Prioritising </li></ul></ul>
    29. 29. Rapid Application Development <ul><li>Building new functionality is fast & easy </li></ul><ul><ul><li>Critical for HFOSS </li></ul></ul><ul><li>Python, Web2Py </li></ul><ul><li>Sahana Resource Controller </li></ul><ul><li>Coding Style </li></ul><ul><li>Community Development Process </li></ul><ul><ul><li>Agile </li></ul></ul>
    30. 30. Interested? <ul><li>Join the Global Community: </li></ul><ul><li>http://eden.sahanafoundation.org </li></ul><ul><li>Mailing List </li></ul><ul><li>IRC Chat </li></ul>