Jowles



Jowles is a web app that presents a Mobile Phone UI in a web browser and forwards HTTP requests to a server-side daemon that understands how to control the GSM module. A Jowles demo can be found at this site at http://hbmobile.org/jowles/. The idea behind Jowles came from discussions on the OpenMoko and Homebrew Mobile Phone Club Lists. There are three primary components to Jowles: The Client, The PHP Testing/Mocking Interface, and the On-Device Application. Described in detail below, these components work together to provide a mobile phone "experience."


 * Jowles Object Model : A good way to model web apps is as an object graph (a collection of objects connected by references to each other) whose state changes through well-defined interfaces. The Jowles Object Model is simply a list of objects and interfaces to these objects and a description of their behaviors.


 * Object to XML Mapping : In the early days of OO, if you wanted to change the state of a remote object, you created a message that represented the state change, serialized it, sent it to the remote object graph which de-serialized it and applied it. These days we do the same thing, but we use XML as the carrier of state changes. In other words, the Jowles Server listens for XMLHttpRequest's from the client app, parses them and then responds with XML. The object mapping describes how the XML DTDs relate to the objects.


 * HTML / Javascript Client : Ideally, on a mobile device, you would have a UI that talks directly to the object graph, and we wouldn't have to worry about all this HTTP and XML stuff. But, we're a little crazy on this project and we figured we would add HTTP and XML to the mix. The HTML Client is intended to be used in a browser, most likely a browser off the device. Think about it... a mobile phone that can be controlled remotely via a web interface. That's new. What may be useful about this model is if we combine it with (S)SIP/(S)RTP to route voice information from the phone to a remote SIP client. So if you left your mobile phone at work, you could login from your browser at home, have the phone dial through the GSM modem on one side, "dial" a SIP client on your home machine on the other and then simply act as a bridge.


 * SVG / ECMAScript Client : SVG is a really cool effort to merge 2D technologies (like PostScript) with XML. It's getting support from the various browser projects (FireFox, Safari/WebKit, Opera, etc.) so it's a natural half-way point between a pure HTML interface and a pure graphical interface.


 * PHP Test Server : PHP is an obscene language, especially when compared with Ruby or Python. But you can find it everywhere. PHP 5 finally has an object model that's not completely bad, and there seems to be a number of people out there who know how to hack PHP scripts. So the Test Server is a PHP app that pretends it's controlling a GSM module, but really isn't. We use it for testing and describing new features. If you're the type of person who wants to add new features to a phone, maybe adding it to the PHP Test Server is a good first step.


 * Jowles Daemon : GumStixes are currently shipped (by default) with the Boa web server. It's small and fast and about the only thing it knows how to do in terms of web apps is pass off requests to cgi scripts. So for "production" devices, we're thinking about a simple cgi script that forwards XML service requests to the Jowles Daemon (that actually knows how to control the phone.)