Wednesday, June 27, 2012

Screenshots from Serval Nightly Builds

Hi all,

Here are a few screenshots from the nightly builds of what will likely become Serval Mesh 0.90 in a couple of months time:
The main display when running the mesh.  The number at the bottom is your mesh telephone number.  If you provide a display name, it also shows there. 


This is where you setup your mesh telephone number and provide your name, to make it easier for people to find you on the mesh.

The "Contacts" button on the main display gives you the choice of showing who is currently on the mesh, or showing who is in your Android contacts.  The Android contacts can now have mesh contact details, to make it easy to call or text via the mesh from the Android contacts.

Showing the current contact list gives you the details of any phones on the mesh, as well as their  secure identifier (SID).  You can call, text, or add them to your Android contact list.  Names are displayed instead of numbers when available.  The "Broadcast/Everyone" option lets you send text messages to everyone on the mesh, as a simple kind of group chat or micro-blogging service.  This will be refined into an off-grid Twitter-like system in a future release.




Serval Project Quarterly Update 2012Q2

The last quarter has been quite an exciting one from our perspective, although much of the excitement has not been externally visible.  So here are some of the highlights that you may or may not already be aware of.

Version 0.08 Released

The most notable visible progress has been the release today (27 June 2012) of version 0.08 of Serval Mesh to the Android Market / Google Play.  This is primarily a bug-fix and minor-enhancement release while we finish drawing together a whole pile of work that has been going on behind-the-scenes that will show up in the next version, version 0.90.  The jump in version numbers should give you a clue as to how significant we think the next version will be, so lets have a look at the contrast and what is being planned.

Preparations for Version 0.90 - Switching From Architecting To Integration

Version 0.08 is a direct descendent of the initial proof-of-concept that launched the Serval Project back in mid-2010.  The bulk of the work in this past quarter has been preparing the reengineered "production" functionality of Serval.  In the last week or so we have reached the point where the bulk of effort is now going into integration of the various components, shaking out the bugs and finding the outstanding tasks that need to be done to make it all work seamlessly together.  This is a very encouraging and exciting stage for the team as we see the hard work over the past year or so come together to make something that we think will be compellingly useful for many people.

To get an idea of the scope of work that has been undertaken, let us summarise a number of the properties of version 0.08 (the most recent proof-of-concept derived release), and then compare this with the reengineered work.  First, version 0.08:

  • It requires root permissions to operate, because it needs ad-hoc WiFi to provide end-to-end network paths for the mesh routing protocols. 
  • It relies on BATMAN or OLSRd for mesh routing over ad-hoc WiFi. 
  • It has no encryption or authentication of calls.
  • It includes a complete installation of Asterisk to do the PBX/VoIP call routing. 
  • It includes an entire SIP client that talks to the Asterisk installation.  
  • It can only operate on IP networks. 
  • It has only a prototype of the Rhizome store-and-forward mesh file sharing service. 
  • It relies on 3rd-party applications to send or receive MeshMS (SMS) messages over the mesh.
  • It has a rather awkward user interface.
  • It has no APIs for interaction with other applications.

In contrast, Version 0.90 will include a pile of reimplemented and new functionality that will make for a  totally transformed product and experience:

  • It will not require root permissions, removing the single greatest barrier to adoption.
  • It will include its' own mesh routing engine that can operate over access-point and client mode WiFi, and deliver MeshMS and files even under highly partitioned network conditions.
  • It will offer robust end-to-end encryption of voice, MeshMS and, later, of files over the mesh. A later version will also include simple and effective protection against man-in-the-middle attacks.
  • It will include its own VoIP over Mesh protocol (VoMP), that is light weight and avoids the need to include Asterisk and a SIP client.  This has allowed us to shave 60% off the application size (about 2MB instead of 5MB), and increase responsiveness and speed significantly, even while adding in end-to-end encryption.
  • It will be able to use non-IP transports, e.g., packet radio, carrier pigeons carrying memory sticks and almost any other digital data carrier to synchronise data between meshes.
  • It will include the new low-latency and auto-prioritising reimplementation of the Rhizome store-and-forward data distribution service.
  • It includes it's own MeshMS client, removing the need for external SMS handling applications: one APK provides all services.
  • It will include a completely redesigned and reimplemented user-interface.
  • It will include APIs to allow interaction with the mesh, and use of mesh services by other applications.
All of these features are nearing completion and being integrated ready for release as version 0.90 sometime in the coming quarter.  Significant and intense progress has been made, and the various features are now beginning to come together, and the work is increasingly focussing on integration and whole-of-system behaviour, rather than on completing the individual components.

Together, they constitute a useful product, one that we will be able to demonstrate to various potential partners and even paying customers who are looking for custom mesh services, making Serval well and away the clear leader in mesh telephony.

Continued Interaction With New Zealand Red Cross

Following our participation as observers at KiwiEx 2012, we have continued to nurture and develop our relationship with the New Zealand Red Cross IT&Telecommunications Emergency Response Unit (IT&T ERU).  As a result we are addressing the specific requirements and refinements that they have identified as being necessary to make Serval useful for themselves and the broader humanitarian and emergency response sector.

Presentation to UN Working Group on Emergency Telecommunications (UN WGET)

During the past quarter our existing relationship with New Zealand Red Cross gave us the opportunity to present not only to NZ Red Cross, but also to IT representatives from the Internatational Federation of the Red Cross/Crescent (IFRC), Internation Committee of the Red Cross/Crescent (ICRC), the World Health Organisation (UN WHO), UNHCR and several other major international humanitarian and emergency response organisations.

This was a tremendously positive day, with considerable interest expressed in what we are doing, and how it might be able to help meet various needs among those organisations. As a result of that meeting we are anticipating further engagement with those organisations and WGET as a whole, and are preparing to submit a proposal to them relating to field data collection.

On-Going Work With OTI/Commotion Project

The other major activity during the quarter has been continuing the work on integrating Serval with the Open Technology Initiative's Commotion project.  This will allow OpenBTS-based portable GSM cellular networks to interoperate with Serval mesh telephones in a seamless manner.  The first tangible result of this will be the use of Serval's Distributed Numbering Architecture (Serval DNA) to allow meshed OpenBTS units to route calls amongst themselves.  This should be functional within the next few weeks.

Tuesday, June 26, 2012

Serval Mesh/BatPhone 0.08 Release



A release of the 0.08 version of Serval Mesh is going up on the Android Market as we speak (if you still see 0.07 on the market, please be patient -- it can take a few hours for Google to update the available version).

Selected features and bug fixes include:

  • Rhizome store and forward transport.
    • Share files, share videos, and send text messages to people who aren’t directly reachable at the moment. This should be considered an early preview, there’s plenty of work still to go. (text messaging currently requires WebSMS / SMSDroid to use as the front end).


  • Improved peer list
    • Now with name resolution from your Android contacts, real-time display of network reach-ability information, and quick link to open WebSMS (if installed) for text message entry.


  • Smaller APK file size
    • APK file now 4.8MB, down from 5.8MB for 0.07.
  • Improved Handset Support
    • Added Galaxy Tab.

  • Bug Fixes
    • Reduced prompting for root access, better detection of failures.
    • Keep a foreground service running to prevent our process being accidentally killed.
    • Fixed control of hotspot/access-point mode on Android 4.0+ (ICS).
More information is available at the Bug Tracker and GitHub.

Version 0.08 is very likely to be the last release before we switch to the overlay mesh code, which brings in very strong security, will have a totally revamped user interface, will not require any external applications for sending and receiving mesh SMS messages, and will mean that we will not longer need root access on a phone for it to join a mesh.  

More on that when the next version is ready for release.

Holodecks For Aged Care Facilities?

It is the little things, the things that don't matter, that are really the big things, and the things that matter.  


This is doubly true if you are unable to live in your own home any longer, and are dependent on supported care of some sort.  


Old Woman Feeding Birds
(Image by soylentgreen23 
http://flickr.com/photos/94032388@N00/491093601)


While often necessary, such care risks removing all the things that really matter in life. I still remember when my own grandmother was old and frail, and had to move into supported care.  For 83 years she was used to a life outdoors, with the fresh air and sunshine.  What she wanted most was to be able to open a window and let the sunshine in, or potter outside in the garden, or smuggle more cheese cubes to the stray cats that used to visit the nursing home.


But she basically had to live in a very comfortable hotel room, but which she found very oppressive given her life experience.  Apart from being part of the underground railroad for the feline dairy supply, I still remember that the last "good day" that she had was when we busted her out for a day and took her blackberry picking in the hills, something that was a regular part of her independent life. It wasn't "medically sensible" and it wasn't "necessary", but gee whiz, it really mattered to her, and that's what matters.


Since then I have been thinking on and off about how to break down the feeling of being trapped and encased in an institution, so that we can rehumanise and reconnect older people's lives with the world around them.


I have been talking with some people in health care about making some sort of holodeck for residential care facilities to help improve their resident's quality of life.  


It seems that the technology is there to make something fairly affordable, that would allow some interactivity, and sufficient suspension of disbelief that it might be worth exploring.

The initial model I am thinking of is one of having some cameras at a nice location, most likely a sea-side spot somewhere.  These record video and audio in several directions so that a view of the scene can be projected into a "holodeck" that provides an immersive sense of being there.  We might even use fans to generate wind with matched speed and direction as is actually occurring at the location. I am sure the Eurovision Clearance Store must have plenty.

Rather than a loop that fails to suspend disbelief, having a real live feed makes the experience much richer, and also allows for more interesting interactivity.  


First, we can pipe video and sound both directions, so that someone approaching the camera site would see an old person in a room listening to the waves, who might notice them as they approach, and then they could have a chat if they wished.  


Second, the natural cadence of the scene with less interesting bits and more interesting bits adds the variety that makes life worthwhile.  Showing once-in-a-century shots like blue whales swallowing sharks, and the same amazing purple sunset are counterproductive, because they are overstimulating.  It is the subtleness and realness that matter, and that make the connection believable.

A fun interactivity booster would be to add a seagull food launching device, that fired (nutritionally balanced) seagull food whenever the person threw a (possibly synthetic) chip at the wall, so that they could experience the interactive pleasure of feeding seagulls and watching them wheel and crane overhead, and catch the specially
formulated seagull food mid-flight, and generally enjoy a sense of escape from their institution.


Finding a way to synthesise sea-side smell would also add tremendously, because smell is such an evoker of memories.  Indeed, the smell centre of our brains is the most directly wired sense, and can cause such strong and immediate reactions.

Obviously these holodecks could be setup in all sorts of places, and with a variety of location appropriate interactivity diverse, e.g., feeding ducks by a pond, or a sitting on a "digital park bench" to feed pigeons and talk to people who sit next to them in the real world.  They could be moved around, as well.


Ultimately, they may provide a key part of the quality of life of people in residential care, as well as to help stop them being a population who are hidden inside institutional walls, invisible to a society who would otherwise be willing to say hello, and help them maintain some connection with outside society.

It seems to me that a prototype of this could be created fairly easily and without excessive cost, and that there are probably all the skills in a typical geek/maker community necessary to make it happen.  


I don't have funds for the project now, or the time to do it all myself, but if we made a prototype, I think we might be in a good position to secure funds, whether from governments, arts councils or various other sources to make more and/or better ones to help more people.

Anyone interested in seeing how much fun and how rewarding this could be, or know anyone who might be?

Wednesday, June 6, 2012

No Such Thing As Free Lunch, Unless You Are A Social Entrepreneur

Social entrepreneurship has many definitions.  My working definition is:

"A Social Entrepreneur is someone who wants to make a positive change in the world, and realises that they still need to pay for lunch while doing so."

This differs from the capitalist who sees the enterprise as a means to buy lunch, and the philanthropist who is lucky enough to have the means to buy lunch without having to earn any more money.

So why all the talk about lunches?  

There is a saying that to "cut someone else's lunch" means to take something out from under them, usually work, e.g., to purposely under-bid on work to take it away from someone else who has a fair entitlement to it.  Here's an example that I found in a few minutes of internet trawling to give you an idea of how it is used. (It can also mean to try to hit onto someone else's partner, but that's another story.  Here in Australia both meanings apply).

So if you cut their lunch for them, you are doing them some kind of disservice, by taking something that was theirs to do or to enjoy or generally derive benefit from.  

This is particularly true for the capitalist for whom buying the lunch is what it is all about: if they cannot derive financial or status benefit from cutting their own lunch, then they have lost something very tangible. Anger or grief may then naturally follow.

But for the philanthropist and social entrepreneur things are different.  It is the improving of the human condition that is their desire.  

For them, it is a gift for someone to cut their lunch, it really is a free lunch, and then some.

Consider for a moment if some upstart discovered a 100% effective and affordable vaccine for malaria.  This would be cutting Bill and Melinda Gate's lunch, since that is one of the great things that they are working on through their foundation.  

But I have little doubt when I say that if that were to occur the Gates' would be jubilant with celebration, because someone has gone to the effort of cutting their lunch, so now they can move on to the next thing

So it is for all social entrepreneurs if they think the matter through: to be out competed in improving the human condition is to receive the gift of days that were otherwise required to work on that venture: they can now move onto the next thing, and celebrate that what they set out to achieve has been accomplished.

The Universal Bug Tracker For Society


I have a problem. I have too many ideas for things that should be made or fixed to make the world a better place.

 Let me explain a little. I run the Serval Project, making mobile telecommunications available in many situations where it is not currently possible. In leading that project I have discovered that there are some serious problems with WiFi for supporting ad-hoc network that it would be great to have fixed.

Then I also discovered that it would be really great to make mobile phones with a built-in Arduino or similar micro-controller and accessible hardware port so that people can innovate with mobile hardware just like they do with mobile software. This could be used to make all sorts of things, from powerful yet cheap environmental monitoring systems, to supporting long-range mobile mesh networks, to creating really low-cost medical monitoring devices (for example, a pulse-oximetry machine is really just four LEDs plus some signal processing that a phone could easily provide).

This is already too much for me to do right now.  But I have other ideas queued up, and that I come up with over time.

For example, since being inspired by Prof. David Powers during my undergraduate degree, I have been convinced that we need to make laws machine-readable. This makes a lot of sense, since the whole idea of legal language is to be clear and precise. In the past legalese was the best we had to express the logic part of laws, but now we have computer languages and compilers that are so precise that it is almost annoying, but more importantly, can help us to visualise and transform legal logic into other equivalent forms that allows the intent and effect of the laws to be checked before being proclaimed.

With some careful construction, we could make a LawCompiler 1.0 that lets us do this kind of thing. Much would be possible with just a combination of definitions and logic blocks. For example, to work out if someone could legally work in Australia, we might have a logic block like:
FUNCTION CanLegallyWorkInAustralia BEGIN
 IF IsAustralianCitizen OR IsNewZealandCitizen OR HoldsValidWorkVisa THEN
  RETURN true
 ELSE
  RETURN false
 END IF
END FUNCTION
Then all that needs to be done is to recurse back through the referenced terms in the logic block and define them also. The ideal would be that terms are defined as logic blocks themselves, but at some point there is probably a need to define some in legal terms, so you simply have a definition, e.g., we might cheat in the above and define IsNewZealandCitizen like:
DEFINITION IsNewZealandCitizen IN ENGLISH IS
 “A person shall be considered a citizen of New Zealand if  they are not a citizen of Australia, and if they currently hold citizenship in the nation of New Zealand.”
END DEFINITION
But eventually we could do things like:
IMPORT IsNewZealandCitizen FROM  NewZealand.CitizenshipAct.1992;
This would allow a flexible, bottom-up approach to harmonising laws between jurisdictions where it makes sense (some distinction between dynamic versus static binding of definitions would be necessary). For example, states or counties could reference common dog-ownership regulations, or countries in the European Union could harmonise laws by referencing definitions created by the EU, and such harmonisations could be made progressively.

The compilable laws would be no less readable than ones in legalese by the average person on the street, and would have the advantage of being subject to precise interpretation, irrespective of the human languages involved, thus aiding translation and consistency in jurisdictions where laws have versions in multiple languages. To aid interpretation, or to help find bugs in laws, such logical definitions of laws can be transformed, e.g., into a truth table, that allows for checking that the law does not create any strange corner cases, which is a very common problem in laws of any significant complexity. For our legality of working test above, the truth table would resolve to something like:

CanLegallyWorkInAustralia
IsAustralianCitizen
IsNewZealandCitizen
HoldsValidWorkVisa
TRUE
TRUE
N/A
N/A
TRUE
N/A
TRUE
N/A
TRUE
N/A
N/A
TRUE
FALSE
FALSE
FALSE
FALSE

By definition each of the lines in the truth table are mutually exclusive, and so it becomes fairly easy to work out what will happen in any given situation. Of course for realistic laws, there may be dozens of input factors, and so the truth-table may grow very large, but that can always be avoided by creating intermediate definitions for common cases. This also helps promote the cleaning up of the logic in laws instead of perpetually tacking bits on the end that make the entire thing incomprehensible. Income tax laws are a good example of this. By being able to compare truth-tables before and after a patch, it becomes possible to know with complete certainty, that the patch to the law (or cleanup of the law) has not changed the meaning of the law in any unexpected way.

Anyway, I digress greatly, but that is perhaps the point. I need a place to capture all these ideas, so that they can be vetted, prioritised and actioned, either by myself or someone else. Similarly, it would be great to capture everyone else's ideas, and basically assemble a Universal Bug Tracker For Society (UBT4S)

This would make it easier for me to sleep at night, knowing that the ideas are captured. It would also allow me to be much more effective by being able to more easily focus on exactly one bug at a time, and to record any progress or thoughts relating to others. But again, I suspect that the impact will actually be much greater from other people entering the feature requests and bugs of society that they think of or notice.

The UBT4S also makes it easy for people who are not plagued by new ideas to join in the effort, but who want to make a positive impact in the world: They can simply go to the UBT4S, browse the bugs and feature requests, maybe vote some up or down, add some notes, or, hopefully, assign one to themselves and do some work on it.

The underlying philosophy that makes the UBT4S make sense is the realisation that if you are a social entrepreneur having someone else cut your lunch by doing something you had planned to gives you a free lunch in the form of releasing you to pursue other innovations. I'll write a blog post on this competition-is-a-gift aspect of social entrepreneurship soon.

But right now, this is what I am going to do: I am going to register ubt4s.org and setup a bug tracker there, that will be open to anyone to register and contribute to. I will pre-load it with some bugs and feature requests for society that I have in mind (including those above).

I will also lay out some rules for the UBT4S. These rules will be subject to the UBT4S itself, and so if you don't like them, then please submit an issue that describes the problem and how they can be improved.

This is a very important point, because I don't want the UBT4S to be a whinge board about all that is wrong with society. I also don't want it to be a place where people say that country X needs party Y in power. The political domain is already quite saturated, and not a fun place to operate for the most part. 

The UBT4S, on the other hand, is a place where tools and personal-action is the approach. Think of it as a meta-project around various various existing and yet-to-exist open-software, open-hardware and life-hacking projects that has “universal peace and happiness” as its' goal (which I have purposely not defined), and then identifies tools that can be used to edge closer to that.

I immediately recognise that this approach has limitations, but then so does Newtonian Physics, but that doesn't stop us using non-relativistic rulers to measure how tall our kids are, and nor should the fact that the UBT4S has natural limitations prevent us from achieving as much universal peace and happiness as we can using that tool.

So now I throw the challenge out to you: visit UBT4S.org, add bugs, issues and feature requests.  Comment on existing issues, and maybe start Wiki pages to begin marshalling resources for them. If you are part of a project that is providing a solution (or part of a solution) to an issue, then make a note of that in the tracker. That way people who want to help in that particular area can find the right projects to join, donate to or otherwise help.

I look forward to seeing you at the UBT4S.

(Also if anyone has a better idea than using Google Code, I'm all ears.  Add it as an issue to the UBT4S, and we can work on fixing it.)