From: Wufoo<no-r...@wufoo.com>
Date: February 12, 2010 11:48:59 EST
To: tech...@crisiscommons.org
Subject: Tech Aid Request [#13]
Reply-To: twils...@gmail.com
Name (Point of Contact) * Tom Wilson Email Address * twils...@gmail.com Website http://www.nerdpod.org Propose a Project Name for Your Request * Incident VisualizationProject Website/Wiki http://code.google.com/p/hermosa/ Project Description * RSS Feed Aggregator
Requirements
Availability - in the cloud: GAE and cloud visualization tools
Flexible Input - RSS feeds with arbitrary structures
Flexible Output - feed out to another application or visualization display
Purpose Driven - persistent beans designed to fit purpose, not inputs
Components
The Incident Bean
The principal data structure depends specifically on the purpose of the system. This example is centered around the incident. An incident has a time, location, title, description.
The primary key of incidents is the incident URI. This is a URL that a browser can use to open the incident in the source feed.
Input Adaptor
There can be one or more feed adaptors to serve the purpose of data input. A feed adaptor description includes a name, URL, and a set of mappings between the RSS feed elements and the incident bean. It is the feed adaptor’s responsibility to pull in feed elements and create incident beans. Each adaptor has a method which takes a feed element and returns a populated incident bean.
Example: UshahidiInputAdaptor, SoComInputAdaptor, RedCrossInputAdaptor
Output Adaptor
The output adaptor takes a list of incidents and updates an external system, for example Google Spreadsheets or Fusion Tables. The output adaptor has a method to persist an incident bean, and also methods to determine if it is a new entry, an update, or a duplicate, and add, update, or skip accordingly.
Example: FusionTableOutputAdaptor, SpreadsheetOutputAdaptor,
Storage Adaptor
The storage adaptor takes a list of incident beans and updates the internal (BigTable) data store. The storage adaptor also provides a query capability so that various sets of incidents can be retrieved (for example by date or category).
Automation
Each input adaptor and output adaptor has a servlet invoker. The servlet can be invoked by the GAE timer function at regular intervals.
Example: Ushahidi to Fusion Table
This example reads from the Ushahidi Haiti RSS feed and outputs to a Fusion Table.
The UshahidiReadFeedServlet is invoked on a timed basis, which calls the getFeed method of the UshahidiInputAdaptor. This creates a collection of IncidentBean. The servlet then calls BigTableStorageAdaptor to persist the incidents (adding or updating as necessary). Independently, the FusionTableUpdateServlet is invoked on a timer, getting a list of the latest incidents and adding it to the appropriate table(s).

Tools:
Eclipse 3.5
Java JDK 1.6u18
App Engine SDK 1.3.0
GWT SDK 2.0.0
JDOM
ROME
GData
Project Home:
http://code.google.com/p/hermosa/
Code Repository:
http://code.google.com/p/hermosa/source/browse/#svn/trunk/DisasterFeedAccessed Via (e.g., desktop, web, SMS, mobile application) Web, others can be developedPreferred Technologies Google App EngineIntegration Requirements (existing hardware/software infrastructure) Currently RSS feed inputs, others can be programmedVolunteer 1 Java Google App Engine DeveloperVolunteer 2 Semantic Search DesignerVolunteer 3 Visualization ProgrammerAdditional Volunteers
If you need any more volunteers, list them here. Project scope and plan is still in development. This is an early stage with a prototype, application design, and proof of concept.