Monday, January 26, 2009

Birdlist Software


Loading Birdlist
I'm going to talk a bit about my second attempt (out of three) to make a bird list program. This post will be largely technical, but any comments are welcome on ideas how to improve it. I haven't been listing for long, so I'm sure there is information that would be useful for people to record that I am missing in my program, or features that I have overlooked.

I say second attempt of three in my opening sentence, and this is explained a little in my first post to this blog. Briefly, I have created three programs specifically to keep track of my various bird lists. The first was a web application that used mySQL to store the sighting information and PHP to present an interface to the user. I used this program on my Zaurus C1000 pocket computer and home computer, and have set it up for a couple other people as well.

My second program, the one I am going to be talking about now, stores data in XML files and uses GTK to present an interface to the user. I use this program solely on my Nokia N810 Internet Tablet, though it could be compiled for Linux and Windows desktops. This is my most mature application and it has gone through many changes and optimizations. I designed the XML structure to allow speedy data access, and have tried to design the interface to be as usable as possible. I sent a beta copy to an ornithologist in the States to try out, and got some positive comments but also quite a bit of usability issues. I have since made it easier for new users to pick up and start using.


Birdlist main screen
The third program again uses a database for storage, although this time the default database is sqlite. This is a simple, single file database that is simple to set up and maintain, ideal for my purposes. The interface is Qt4, which has the benefit of easily running on my tablet, linux desktops, and windows desktops. Unfortunately, Qt4 for my tablet isn't quite optimized for the form factor so I am waiting for some more improvements before changing over all my development efforts. This version is nearly as complete as the GTK version, but not as polished.

The goal of my bird listing programs is to allow the user to create multiple lists and maintain records of their bird sightings. For example, I have my life list, year lists for 2008 and 2009, and some trip lists. "Birdlist" presents the selected list to the user as a table with headings at the top of each column and sighting information next to each bird name. The user can filter the list to show only the birds he/she has seen (useful for reviewing sightings), or show all the birds available on the list.


Birdlist showing list selection
One of the current limitations is the species associated with the list. Right now when a user creates a list it is automatically populated with the species that have been recorded in North America. This limitation exists because that is all I use right now, but in the future this should be much more flexible. I have been thinking about how to implement this, and it is actually pretty tricky. Having a "master list" for all the species in the world and filtering the list by area would be one way to go about it, but then it is a matter of what is a reasonable area to consider? By continent? I think personally I would like to see State/Province lists, and even a little more fine - such as a Hamilton list.

Continent, Country, and State/Province lists are probably possible to include with the application, but more detail would be up to the user. I am considering an interface that would allow a user to select the closest existing level (for my Hamilton example this would be "Ontario") and filtering the list down by unchecking birds that he/she does not want to include. I will have to look further into the feasibility of this method as this is one of the features I would need to include before releasing the program.


Birdlist viewing photo
The data that is recorded depends on how the list was initially set up. When adding a new list the user has the option displaying photographs. If a user elected to display photographs an "Image" column, and a "Photo taken" column (displayed with a camera icon to save room) are displayed. If the user did not want photos shown, these columns do not display which saves room and reduces clutter. The standard data is "Bird Name," "Date Seen, "Location," and "Notes." "Bird Name" is stored within the list and selected by the user when entering data. "Date Seen" is the date of the sighting and can either be entered as text or selected from a pop-up calendar. "Location" is the location of the sighting, which is entered by the user or selected from a list of previously entered locations. "Notes" is a free text field that the user can record the conditions of the sighting, or any other information.

The user does not enter sighting data into the table itself (which is read-only), but rather through dialogs designed to make entering data as easy as possible. Inserting a sighting, for example, allows the user to start typing into the "Bird Name" entry and will show a list of matches. This list of matches is filtered to be only birds that do not have a sighting recorded already, and can match anywhere in the bird name - not just the start of the name. This makes searching for "duck" more useful, as it always appears at the end of the bird name.


Birdlist insert dialog
Modifying and deleting sightings use similar dialogs, but allow the user to select the bird they want to modify/delete from a list of bird sightings that have already been entered. All dialogs (insert, modify, and delete) require a correct bird to be selected and valid date to be entered before continuing, which keeps the data stored in the list valid at all times.

There are a number of ways to reduce the effort of recording a sighting. If a user is keeping a life list and a year list and sees a new life bird, it follows that the bird must also be a new bird for the year. The user enters the sighting details into either of the appropriate lists, then clicks and holds on the new sighting in the table. This brings up a menu with "Modify" and "Delete" entries (which are useful to quickly modify or delete a specific entry) and also a "Copy" menu that will allow the user to copy the sighting to one of his/her other lists. No duplicate data entry required.


Birdlist insert dialog with bird selection
Another planned feature that will reduce effort is import and export of lists. Import will allow a user to import sighting data into a new list, while export would export a list (or portions of a list) into a different format. There are a number of challenges to implementing import, but first and foremost is the format of the incoming list. Even if the incoming list has the same number of fields, and the fields generally map to one another one-to-one, the problem is identifying which bird a record goes with. Bird name is not a flawless indicator, since birds can have more than one name (ie. White-winged Scoter and Velvet Scoter) and this leaves a problem. I think the best solution would be to use bird name, but when an entry comes up that cannot be matched allow the user to manually select the correct bird.

Exporting lists into different formats would be useful for backup purposes (although the application backs up by default on the N810) or for displaying in HTML on the internet. Allowing the user to select a subset of a list (all the birds that have been seen but not photographed, all the birds that have been photographed but do not have an image, birds seen in a given month, birds seen in a given year, etc) would be interesting for statistical analysis or just curiosity.


Birdlist preferences
If the user clicks on a sighting to select that row, and then clicks on the image portion or the row a dialog will pop up to show a larger image. Zooming and rotation are not currently implemented, but they are on the road map. The entire photo handling/selection portion of the application is due for an overhaul.

If the user has the sighting selected and click on any text portion a dialog will pop up containing identification information. This is like a brief field guide, with juvenile description, differences between sexes, primary identification and alternate form identification, and similar species. This can be very useful in the field, but it is only available for the more common North American species. Currently the data comes from the Patuxent Wildlife Research Center, but I have not determined whether it is appropriate to be distributed with the program. I will include a web lookup in future versions.


Birdlist statistics
The application has a number of options that can be changed to suit different preferences. Having the application start in fullscreen mode, or only showing birds that have been seen will save a few clicks and a bit of time on each startup. The font option affects the entire interface and can be small enough to show quite a bit of information at a glance yet large enough to read easily. Obviously there is no one setting that is just right for everyone, which is why this is changeable. Column sizing with a stylus on a small screen can be quite challenging, so having an option to select widths where the columns wrap their text is hopefully simpler and only has to be done once.

The program generates a few statistics that I find useful from time to time. Using the total number of birds in the list, the number of bird sightings in the list, and the number of sightings that have been photographed (if the list displays photos) produces three raw numbers and three percentages that can be gratifying to see (15% or North American birds sighted).


Birdlist main view showing non-seen birds
The application now has a "First Time Run Wizard" that takes the user through the steps of setting up a first list and changing the program preferences before starting up for the first time. Changing the program to allow the use of different species lists (mentioned above) is the last hurdle preventing me from releasing this version to the public. This version may never see public release, since the number birders that own an N800 or N810 internet tablet is probably quite limited. The Qt4 version would run on many more platforms, increasing the number of people who would be interested in the program. While there is a bit of limbo waiting to see whether Qt4 will run sufficiently well on the tablet, I am quite happy using this current version. If anyone happens to be reading this blog (unlikely) and owns one of the aforementioned devices (very unlikely) and would like to try this software (extremely unlikely) send me an email and I will send you a copy.

If anyone reading this blog has an idea they think would improve this program and future version (much more likely) please email me or leave a comment.

No comments:

Post a Comment