Algorithms and OOD (CSC 207 2013F) : Assignments

Assignment 6: A Simple Ushahidi Android App

This assignment is currently in draft form.

Due: 10:30 p.m., Tuesday, 8 October 2013

Summary: In this assignment, you will build an Android Application that presents data from an Ushaidi server. (You will also do a simple exercise in writing loop invariants.)

Purposes: To give you more experience using the Ushahidi API. To give you more experience building Android Apps. To allow you to play a bit. (To give you some more experience with loop invariants.)

Collaboration: I encourage you to work in groups of size two or four. You may discuss this assignment with anyone, provided you credit such discussions when you submit the assignment.

Wrapper (Prologue): Individually read through this assignment and make sure that you understand what is required. Then use the form available at to indicate (a) how long you think this assignment will take and (b) what you think will be the most challenging aspect of this assignment.

Wrapper (Epilogue): When you are done with the assignment, fill out the form available at to indicate (a) how long the assignment took, (b) what the most challenging part of the assignment was, and (c) something important you learned from doing the assignment. If you find that the assignment took much less or much more time than you expected, also include (d) a note as to what might have led to that difference.

Submitting: Please put all of your work in a GitHub repository named csc207-hw6. Email me the address of that repository. Please title your email “CSC207 2013F Assignment 6 (Your Names)”.

Warning: So that this assignment is a learning experience for everyone, we may spend class time publicly critiquing your work.

Loop Invariants

Do the Dutch National Flag problem from (You'll probably need to get through Friday's class first.)


a. Create a new Android project for this assignment. You can name the project whatever you like, provided it's not in bad taste.

b. Make a copy simple-ushahidi-api.jar, the JAR file for the simple Ushahidi API, available at A JAR is a Java Archive, a standard way to group compiled Java code for use in other projects.

c. The Ushahidi API relies on JSON. (You can look it up.) Make a copy of the JAR file for JSON, available at

d. Import those JARs into your project.


Write an Android app that allows the user to see information about the incidents on an Ushahidi installation. (You do not need to graph them; your goal is simply to present the data about the incidents.)

To start, make your app read in the URL of an Ushahidi installation (or let the user select from a few options) and print out, say, the first five incidents.

Then add features. You might, for example,

  • Provide some basic statistics about the installation (e.g., total number of incidents, incidents within the past week, average number of incidents per week (perhaps as a bar chart)).
  • Allow the user to search for all incidents meeting some criterion, such as text that appears with the description or title.
  • Provide a multi-level display of the information, such as a short list of the incident numbers and titles with the option to click on an incident to get the more detailed information.
  • Make a “word cloud” for the terms that appear in the definitions.

Do not feel constrained by this list. You can do anything that you think would be useful for someone interested in quickly scanning Ushahidi data.

Do not feel you have to go overboard with features. This assignment is primarily a chance for you to play with Android and to think about features that might be useful to someone using Android. If all you want to do is show five incidents, that's fine and will certainly earn you a check (provided your code is reasonable).


The Simple Ushahidi API was originally written by Daniel Torres. The overall design of the current API is due to Samuel A. Rebelsky, but much of the underlying code draws upon Mr. Torres' work.

Anything I know about Android I learned from Lea.

Copyright (c) 2013 Samuel A. Rebelsky.

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.