10 May, 2010

Hello World!

So, I will be keeping track of my thoughts and developments on my GSoC project here. I am working on porting the OLSR (Optimal Link-State Routing Protocol) Daemon to the Android Operating System and designing a generic GUI that can be easily customized as a front-end to OLSR on a variety of platforms. I am working for the Freifunk project, which acts as a sort of umbrella organization for ad-hoc wireless mesh networking enthusiasts around Europe and elsewhere. My mentor is Mitar, from the wlan-ljubljana project in Slovenia. More information on OLSR, Freifunk, wlan-lj and other community projects can be found by checking out the links on this page. These ambitious projects aim to open up internet access to everyone, which is a goal that I am very interested in working towards.

I am currently in the process of working out the overall design and scope of the project with my mentor. The actual coding doesn't begin until 28 May (a little over two weeks from now), so what I am doing right now is learning as much as I can about OLSR, Android's networking stack, the different wireless cards that are supported by the Android (modified Linux) Kernel, and GUI design using the Android SDK.

This is a lot to digest, but Google gives us two months between announcing accepted projects and the "start your engines - begin coding!" point, so there is time to think about this in great detail before we begin coding.

I'm going to leave the technical aspects about actually porting OLSR into Android and getting it to play nice with the plethora of wireless cards in these devices for another post at a later time. I want to focus on how we are thinking of designing the GUI here.

Mitar suggested that I take a look at the way Transmission has designed the GUI for their BitTorrent client as a model for what we should do. I have been using Transmission as my BitTorrent client of choice for years, but never read much of their documentation. Having seen it now, I am wowed at how smart their approach to building a GUI is. Transmission is a lean, mean, torrrent-tracking machine that has a very wide user base across many different platforms and has been included recently as the default BT client in Ubuntu ("Linux for the masses"). The minimalistic design, both under the hood and in the powerful GUI, makes Transmission blazingly fast and easy to use for everybody (from noobs who just want to download an album from TPB to power users running their own torrent trackers).

From the "About Transmission" page on their website:

"Transmission has been built from the ground up to be a lightweight, yet powerful BitTorrent client. Its simple, intuitive interface is designed to integrate tightly with whatever computing environment you choose to use. Transmission strikes a balance between providing useful functionality without feature bloat. Furthermore, it is free for anyone to use or modify."

You can run transmission:

  • Through the command-line, on a remote server.
  • Through a web-interface, in the same way you can configure your wireless router (for instance).
  • Natively in Mac OS X, using the Growl interface.
  • Natively in Linux, using GTK+ or Qt as interface.
  • On an embedded device, on a server, or remotely through the internet.
So, we want to be like Transmission in the sense that we need a base system of libraries with native GUI modules built on top of the same underlying libraries.

There are a few problems we face in porting OLSR to Android, since there are complications with having a GUI viewer on top of a daemon running with root permissions in Android.

Our solution is to have the OLSR daemon running as a root process (since it needs to), build on a new GUI module to OLSR. Then, have an IPC (Inter-process communicator) sending along data from OLSR to the non-privileged GUI process which links to the platform-specific GUI that gives a visual interface to the OLSR daemon.

I have several things to get a better grasp of before really diving into the project:

  • Compile some C code and write a program in Java that links to it.
  • Study the Android SDK and NDK.
  • Continue looking at the code for OLSR, look at existing graphic interfaces to network daemons. (It would be interesting, perhaps, to look the Zenmap, a graphical nmap).
  • Set up a wireless router using the Freifunk firmware and learn how it works.
  • Set up tickets and milestones to go on the project trac.
  • Work out a general technical outline for how to do this project.
I will be taking my last exams this Wednesday and then moving out of my apartment (going back to Houston) a couple of days later. I should have another post ready this weekend, about Android's networking stack and the OLSR protocol (i.e. what we are dealing with).

Before the 28th, I will be writing a post (to post on the wlan-ljubljana trac, as well as on this blog) giving a non-technical overview about what this project is really all about, and describe what we are doing in general. 

There will probably be a couple of other posts on here over the next two weeks, corresponding to the successful completion of the tasks I list above.

Until then, I'm studying for exams and packing up. 

-Charles