Monthly Archives: September 2009

I’ll take one dozen, please.

Well folks, Donut is here! (Donut is the codename for the Android 1.6 SDK)

I’m excited, and you should be too! Not only does Donut add support for multiple screen resolutions (something I’d been raising eyebrows over ever since I saw the Motorola Sholes specs leaked), but it also supports CDMA as well as GSM! The Donut release comes just in time for the Android hardware releases across all major US phone carriers.

The quick search bar is looking pretty slick as well; developers can now expose certain pieces of data as searchables. The text-to-speech / translation software cocktail looks to be really sweet for communicating with someone in a pinch while travelling. I knew it was only a matter of time before google strapped an auto-translator to our heads… this looks to be a step in that direction.

Check out the video for a more detailed version of the above summary!

Disk installation (aka hardware engineer, sysadmin day success)

Picked up a drive from DiscounTechnologies which is based here in Hillcrest. The hard part was figuring out the order of commands to work with LVM – the linux volume manager. Its pretty simple once you read the docs. We have heaps of space on pipe1 (for now) and soon we’ll upgrade pipe2, too. Full instructions behind the read more..



Continue reading


Piecing Together Subsystems

Over the past few days I’ve been attempting to apply my proof-of-concept to the MM Subsystems mode. There are currently a few roadblocks that mostly involve performing programmatic Android Layout. In general, my layouts are created with xml before any java code runs on the phone. (This is technically a lie, as the java-based Android OS interprets my xml for me; suffice it to say, it runs before any of my java code does).

This doesn’t work for subsystems because we require the ability to size the bars at runtime. What we basically want is to say:

find the biggest number in the results of the subsystems cgi query;
foreach ( bar in the graph )
bar.width = (this bar's number / biggest bar's number) * screen width

We can query the size of the screen, which is nice (and was a concern given the imminent release of phones of varying resolution). We can get the result names / numbers to write into the bars (which is easy because it is the same CGI queries I’ve been doing). We can draw text on top of a bar (which is what I thought would be the hard part).

As stupid as it sounds, what is stopping me currently is that I can’t figure out how to simultaneously size a bar at run-time and put it where I want it on the screen. I know how to do one or the other, but not both at once. That is essentially where I’m at with things for the moment, but I hope to deliver a triumphant tutorial on programmatic android layouts sometime in the near-ish future!

Edit (6:50PM 9/19/09): Aforementioned triumphant tutorial is incoming in the next workday or two. Proof of concept is looking pretty good, but not quite good enough to warrant a post of its own yet – stay tuned!

Edit (4:40 PM 9/20/09): Proof of concept is looking good enough; I’ll tone down the color scheme for the real version, but it gets the idea across.. Check behind the Read More!


Continue reading


MM’s Subsystems Views

Coming soon to Mobile Metagenomics is full support for the Subsystems views that the web-based RTMg cgi provides. Rob and I had a meeting on Thursday to discuss some ideas for how we’d like to present the data. The coolest idea (in my opinion) that came out of our discussion was creating a graph of the subsystems. We will create percentages based on the most represented subsystem (which will take up 100% of the screen width/height depending on phone orientation). To make things even more slick, we think it would be nice to overlay text data onto the graph bars. This saves screen real-estate and presents information in a cleaner, easier to view manner. These are incredibly important principles to consider when working with handheld devices like cell phones.

I spent some quality time with Google searches for the past two days, and I’ve come up with what looks like a solid proof-of-concept. Take a peek behind the Read More and all will be revealed!

Continue reading

Joomla tips (1)

I don’t know what Joomla!® stands for; but the word “Joomla جملة” in Arabic means “sentence or clause”! It also means “lump or wholesale,” in another context. Regardless of its etymology, Joomla! is the content management system (CMS) used for this labsite (at least until now) and for the PhAnToMe website as well.

Needless to say, we (hmm.. at least I and someone else) are learning Joomla! by the golden method: trial and error. Being a good CMS, Joomla! is modular and felxible, with almost no usable defaults. And, while the Joomla! features always seem obvious and straightforward once we discover them, I thought to write some of them down because I WILL forget them when I need them again.

  1. Admin is no longer a top-rank position. You need to be a Super Admin to do things from the back-end. You can’t change the configuration unless you’re a Super Admin. For example, to make the links look pretty (i.e., instead of
  2. Golden rule: Almost everything in Joomla needs to be set as a ‘Section’ (sometimes a Category is crucial too) and then as a ‘menu item’ to be visible even if it’s ‘published.’ Many features won’t appear until a Module is activated for them. For example, you may have a very well set–and published–Main Menu, but it won’t actually appear on the site until you activate the Main Menu module, and tell it where to put the menu (and this is largely dependent on your template–some templates will not show your menu if you choose to put it at the ‘top’).
  3. There is a Web Links option in the Components menu of the administrator page. No need to re-invent the wheel. When you get this one activated, you can create a menu item that belongs to ‘Web Link Category List Layout,’ and this one will show the web links.

To be continued

BioJava using SEED Web Services

For a few days I’ve been testing the waters of the SEED Web Services methods and trying to get a feel for the different ways they could be implemented, and at the same time was doing the same for BioJava. After aquiring enough knowledge of sequences, pegs, and other things I was finally able to get them to use each other’s methods to display and store information for anyone to use. Here is a really simple example where the Web Services obtains a genome ID, “83333.1”, and a region on the chromosome, “NC_000913_1303788_1304792”, and then returns a sequence. Then, BioJava uses its createDNA() method to convert the sequence into an object it can manipulate. The code then prints out different properties held by the sequence. Click the Read More for the code.



Continue reading

Extending Callable & Käppler’s Task

I recently reached a sticking point with the Task interface I had hoped would solve MM’s background task problem. Käppler assumed that users would only need to start a task and pick up results upon completion. His code is very well done and flawlessly executes this behavior. Unfortunately, the very nature of MM is such that the aforementioned behavior is insufficient.

Enter QueryableCallable (and a few choice extra snippets added to Käppler’s Task and TaskInterface)! Now we are able to call a task and post results back to our UI at critical stages of execution. Sample code behind the read more.


Continue reading

MM Demo Video

Armed with the latest edition of iMovie, and with a bit of help from Rob, I have created a new Mobile Metagenomics Demo! This movie includes a demonstration of the File Browse, Save File, and Load File features. Also new to this release are some comments explaining what that app is doing. Regrettably, due to limitations with the Emulator, we are not able to show the “Share” feature. In the future we may take video of an actual phone running MM, as well as a few other things (hint hint).

Do I have any volunteers for the role of hand model?

.m4v version

.mov version

.wmv version