Tuesday, June 26, 2012

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.)

Saturday, May 19, 2012

Someone Has Made My Shoe Phone Idea For Tracking Alzheimer's Sufferers A Reality


Some time ago, I made the world's first working and wearable shoe phone, and then suggested how such technology might be used to support remote medical monitoring, falls detection and wanderer detection, e.g., for Alheimer's suffers.  I even wound up on TV a few times, e.g.:


Another TV appearance is here, but for some reason the blog refuses to link directly to the video.

Anyway, a company has now made part of this vision a reality, by making a GPS-tracking shoe with a GSM modem inside.  Not quite a shoe phone, but it will help to track wandering people who might otherwise have to live in supported care.

Wednesday, May 16, 2012

Communications During Bushfires/Wild Fires

Today I had a look through a report into the 2009 Black Saturday Bushfires here in Australia.

Bushfires (as we call wild fires in Australia) are not uncommon.  What was uncommon about Black Saturday was the intensity of the fires.  For example, the Black Saturday fires triggered the creation of pyrocumulus clouds, which are most commonly seen over volcanic eruptions, as well as firestorms, which are nasty things that basically turn a bushfire front into a large blast-furnace, melting and burning most things in their path, and sucking oxygen into the front so that they create a positive feed-back loop that results in temperatures above 1,000 degrees centigrade, and emit so much radiant heat that they ignite flammable objects before the front even arrives, and accelerating the advance of the front.
Pyrocumulus Cloud Over Black Saturday Bushfires

Sadly a large number of lives were lost during the Black Saturday fires, and this has appropriately led to a series of enquiries and studies into what went wrong, and what preparedness measures were in place.

My work is in resilient communications networks, and so I took particular interest in the section on pages 24-25 of the report that considered the various communications strategies that people used, or assumed would be used to facilitate communication of an impending bushfire.

What is clear from the data is that telephony (land-line or mobile) was a significant source of information, with 43% of people using that medium, much more than the internet, and exceeded only by radio and environmental cues.

This is important, because radio and environmental cues are the most available sources of information: radio has extremely good range and coverage, even during a bushfire, and the environment speaks for itself.  Thus it seems that people used those services that they considered to be reliably available, and thus improving the resilience of mobile telephony would be of value to these communities.

There is some further indication that this is the case, in that a few communities had neighbourhood "phone trees" that they used to ensure that their entire local community were aware of any impending danger.  This use case is particularly suitable for mesh telephony, because the distances are relatively short, and an automatic store-and-forward system such as Serval Rhizome could be used to automatically deliver the information to the entire community in one action, and without depending on any infrastructure that is required to keep the phone network running, which was itself a problem during the Black Saturday fires.

While we don't have a complete solution that could be used by these communities, it does give us confidence that we are heading in the right direction, and so it inspires us to persevere in our efforts.

Tuesday, April 17, 2012

Making Security Simple

One of the major features we are working on for the Serval Project right now is security.  We want secure phone calls, secure MeshMS/SMS and secure data transfer. But the reality is that we have been working on security from the outset, because we know that it is a vital component of any modern communications system, particularly if we are to preserve people's privacy.

One of the very early design decisions was to use public keys are the mechanism for identifying phone users at the network level (at the human levels, it is all phone numbers, so that it remains easy to use).

By using public keys as the network identifier, we get some very nice properties.  By carefully choosing the cryptographic algorithm we are gain the ability to perform a Diffie-Hellman shared secret agreement process.  This makes it possible for any two parties to encrypt their mutual communications, without them having to first establish contact. This provides the same major security benefits (confidentiality, authenticity of communications) of insanely complex systems such as IPsec, but without the pain.

We have now reached the point where we can perform secure communications over the Serval Overlay Mesh, which is our implementation of this concept, using 256-bit Curve25519 public keys as network addresses, and with a defaults-secure Mesh Datagram Protocol.  This is based on the NaCl crypto library, and uses CryptoBox authenticated-encryption for unicast traffic, and CryptoSign verified signing for publicly readable broadcast traffic.

Curve25519 makes this feasible, due to the relatively short key length.  In contrast, using RSA we would need 3,072 bit keys for similar security (~128 bits of security).  Three addresses are required in each packet: source, destination and next-hop.  Using RSA 3,072 bit keys this would be 1,152 bytes -- just for addresses.  Even using insecure RSA 1,024 bit keys the addresses would require 384 bytes. With Curve25519 we need just 768 bits (96 bytes) for addresses. We further improve on this through address abbreviation, where we only send the full addresses occasionally, and use a unique prefix the remainder of the time.  This allows us to reduce the address overhead by 75% or more, thus resulting in a lower address overhead than IPv6, but while gaining the attractive security properties that we have been talking about.

An important distinction between our MDP security layer and IPsec is that that we do not need any key exchange, as the keys are implicitly communicated since the network address is the key.  This is a luxury that IPsec could not make use of, because IPsec was required to be able to be retro-fit into existing IP networks with already-allocated addresses, and geographically allocated addresses.  MDP's your-key-is-your-network-address only makes sense because geographically allocated addresses are not necessary (or even really possible) on a mobile adhoc mesh network.  Also, IPsec relies on third-party authorities to manage key exchange and related functions, and so is not suitable for use in an infrastructure-deprived setting.  MDP's security is not client-server, but rather truly peer-to-peer.

The current state of the MDP security system is that it is operational, but requires some further refinement that we are undertaking, in particular to settle the API.  Nonetheless, it is already surprisingly easy to use MDP to enable secure communications.

So let's see how this all ties together by taking a look at the MDP ping test program that we have written.  You can find the source code here as part of the Serval/DNA source on github. The vast majority of this example is in fact to perform the ping function and to report on errors (a common situation for network programming), the actual MDP networking primitives are no more complex than UDP.  So let's take a look.

First, we need to bind to an MDP socket.  MDP uses 32-bit port numbers and 256-bit network addresses. A given node might have more than one network address.  As MDP is implemented as an overlay network, we must talk to the local MDP server on the node to perform all operations.  This is done over a unix-domain socket.  This has the advantage that it can be poll()'d, select()'d or whatever you prefer, just like a normal socket.  So let's start by opening the connection to the MDP server and asking for the list of network addresses:

We start by creating an overlay_mdp_frame structure and populating it with our request.  Here we are asking for any local addresses (SIDs), by making the requested range of SIDs start at the beginning (-1), and include up to a couple of billion entries.  Of course the reply has to fit in a single packet, so the server may respond with only a partial list, which will be indicated by it setting last_sid to the index of the last SID returned, and frame_sid_count to the number of entries returned.

We then send the MDP request by calling overlay_mdp_send, with the mdp frame, any flags, in this case MDP_AWAITREPLY that tells the MDP library that we want to send this request, and then wait for a reply from the server, followed by the timeout for that reply (in milliseconds).  So the call in the above example will allow the server up to five seconds to come back with the list of local addresses. The return value of overlay_mdp_send is the the number of MDP frames sent, either for for success or zero for failure.

The remainder of the above code checks to make sure that no error has been returned, and that what the server replied with was in fact a list of addresses, as indicated by the packet type being MDP_ADDRLIST.

Once we have the address list, we can then use one of the local addresses to bind our listener to:
We start by choosing a port, in this case a random port number in the range 0x8000 - 0xffff.  The port numbers are natively 32-bit, however, so you could use much larger port numbers.  Port numbers 0xf0000000 - 0xffffffff are reserved.

Moving on to the network address part, we could just set our bind source address to all zeroes like on an IPv4 network, and listen on all local addresses, as illustrated in the disabled line of code, in which case we would not have needed to get the list of local addresses.  Similarly, if we already knew the address we wanted to listen on, then we can simply provide it in the bind sid field.  But it is helpful to illustrate here how to find and bind to a specific local address.

We know that the previous call to overlay_mdp_send has returned a list of addresses, and we know that a Serval overlay mesh node always has at least one local address, so we will assume in this example that the server response contains at least one address.  We then copy this address from the list of SIDs into the bind source address field.  We have to do this before we setup the rest of the bind request, because we are reusing the same overlay_mdp_frame structure, and mdp.addrlist and mdp.bind are part of a union that share storage space.  All that then remains is to provide the port number, and call overlay_mdp_send to request that the server make the binding.  If no error has occurred, the binding has been created, and can be used.

For this ping-over-MDP application we use a sequence number to help filter any old packets that might arrive, and keep track of packet arrival statistics (this is a fairly simplistic implementation of a ping-like service, and lacks a number of important features, but it serves to illustrate the use of MDP sockets just fine).  We then determine the SID we want to ping.  If the string "broadcast" is supplied, we fill the SID with all ones (0xff bytes) to indicate broadcast, and set a flag to remind us that we are broadcasting, just as it does on IPv4 and ethernet.  Else, we store the hexadecimal representation of the address using the stowSid convenience function.  The next step is to actually send ping packets:
This code warns the user that if they are broadcasting that the ping packets will not be encrypted (not that there is anything too private in these packets, but it is nice to inform the user).  We then enter a loop of endlessly sending ping packets.  These data packets are identified by giving them a packet type of MDP_TX.  If they are being broadcast, then the packets must also be marked as not requiring encryption using the MDP_NOCRYPT flag.  As the MDP_NOSIGN flag is not specified, the packet will still be signed, allowing the recipient to reject the packet if it has been tampered with, and to be assured that the packet did in fact originate from the claimed address.

We could have done this the other way around, and have the programmer mark when a packet should be encrypted, but that would cause errors of omission to result in security breaches, instead of resulting in accidental employment of full security, which is a much better failure mode.  This passive safety is supported by MDP server checks that will return an error if an impossible combination is employed, e.g., a broadcast packet with encryption.

The remainder of the above code simply packs the source and destination addresses and payload (the server rejects any packets with a source address/port combination that has not been bound to), and sends it by the now familiar overlay_mdp_send function.  The next step is to watch for any incoming "pongs":

This loop waits until one second has passed, and displays any ping-replies (pongs) that arrive.  It uses the overlay_mdp_client_poll function as a convenience over providing the mdp client socket directly to poll or select (although that could be done).  If packets are waiting, it uses overlay_mdp_recv to receive them, and if the received MDP message is indeed a packet (indicated by the MDP_RX type), then the packet is displayed.  The packet type and flags field also tells the receiver whether the arriving packets were signed and/or encrypted.  Signed or auth-crypted packets that have been tampered with are detected and dropped, and so the client never sees them.  To improve passive security for applications that only want to receive authenticated data we may add an option to the MDP bind request to specify that any unsigned packets be dropped and never presented to the client.

Below is an example of MDP ping in action, showing that the packets received via the MDP loop-back from the local address (FE83...) are signed but not encrypted (since encryption is not required), and that packets received from a remote host (2447...) were both signed and encrypted:


Notice that nowhere in this program is there any mention of keys (apart from their implicit handling as network addresses), and no key-exchange must be handled, or third-party authority consulted.  Instead, special effort is required to reduce the security of the communications, e.g., for sending broadcast messages.

The security is just baked in from the ground up, defaults to on, and can be used anywhere, anytime, as it should be.

Monday, April 16, 2012

Sharpening Serval's Mission

We have been doing a bit of reflecting lately about what it is that we are trying to accomplish with the Serval Project, not because we wonder what we are trying to do or why we are trying to do it.  Rather, we have been thinking about what order to do things in, so that we can get something usable into people's hands as soon as possible.


To answer this question we went back to our motto of "communications anywhere, anytime", and did some thinking there.  We came to realise that we can probably refine that, and that by doing so, we will probably come to understand what are the important things that need to happen first, and what are the (in many cases equally important) things that we will work on once we have the initial objectives under control.


So here is our current thinking, and we invite any and all to give us feedback on this, and potentially change the line up.  What follows is our working position in the absence of any feedback.


We think that Serval's mission can be expressed more clearly as:

mobile communications for those in need


This more or less says what we have been saying all along, but it moves the focus from the technology to the people using the technology.  At the end of the day, we are only making the technology in the hope that it can help people.


So we then turned to think about what the "minimum viable product" is for Serval, and we settled on a short-list of the four things that really matter right now.  These are the things that we are focussing our resources on, and not until those are under control will we move on to our longer list of things that we have on the drawing board (some of which I will describe later).


The four things that matter now are:

  • ease of use - the Serval software must be easy and intuitive to use, otherwise no one will use it, irrespective of how great and innovative the technology might be. 
  • resilient phone calls, messaging and file distribution - these are the core functions of the Serval software, i.e., what it let's you do.
  • strong, simple, security - security in mobile communications is so often an after thought, or severely compromised.  For example, the security of 2G and 3G mobile telephone systems has been thoroughly broken for years.  And when security is introduced into systems it has a bad habit of making life harder rather than easier.  Consider the complexity and interoperability issues suffered by IPSec as an example, indeed so complex that it's security benefits go largely un-used.
  • no infrastructure needed - this is what is needed to make sure that we can most effectively help those in need, as it is the failure or absence of infrastructure (or affordable access to infrastructure) that is a recurring characteristic of those we are trying to help.  Besides, there are already plenty of infrastructure-bound communications systems.

We are tracking well on these points, and expect to have positive news on the progress of several of these points over the next month or so.


Once we have these under control, we have a long list of features that we will immediately turn to, use-cases and improvements, some of which we are working on now in a limited capacity, and that we are planning support for from the outset. In no particular order, this list includes:



  • broad device support - For now we are happy to support a limited range of handsets, but we know that eventually we need to support as wide a range as possible, including non-Android phones.
  • Traffic prioritisation/QoS - Right now our focus is on making the core functionality as solid as possible.  We have plans in place for some innovative QoS functions that we will implement as resources allow.
  • optimising battery life - The mesh can already run for a full business day on a cheap Android phone, but we want more. We want to get to at least 48 hours of continuous operation on a single charge, and ideally much more.
  • massive scalability - Our protocols are designed with massive scalability in mind, but there are aspects of this that we simply don't have the time or resources to implement right now.  We figure that it is more important to get it working at the "village scale", and once that is right and larger networks start to emerge, it will be quite natural for us to complete our plans for scalability.
  • privacy and plausible deniability - For some people they take their privacy seriously, sometimes because their lives depend on it, or because the lives of the people they are in contact with depend on it.  Eventually our software should make sure that it can be configured to not betray any such information.  This is a considerable technical challenge, and one that it is not even certain that it is possible to achieve.
  • journalistic applications - This is intrinsically linked to the previous point, as one of the main issues for journalists is keeping their sources confidential.
  • complex “crisis mode” of operation - By this we mean some complex modes of operation where a network of phones automatically detects that a crisis is underway using various network heuristics (such as loss of cellular service, correlated vibrations or loud noise over a wide area, and to take some hithero undefined appropriate action.
  • group coordination - We have plans to introduce a variety of work-group/team features, that will allow ease of communications and coordination amongst small teams of people.  These are based on the core features that we are working on now, and so will be natural for us to complete once the dependent features are complete.
  • global mapping system and services - We already have an effective prototype of our mapping application that we demonstrated recently, and that we will continue work on as we are able.  This is a feature that has us quite excited, because it allows for a wide variety of coordinated and crowd-sourced activities through allowing users to create and share points of interest on the map, and to even automatically share the map tiles over the mesh, creating something like Google Maps that works without the internet.
  • environmental monitoring applications - We already have some projects in mind here that will make use of the mapping system to make it easy to collect, share and visualise environmental data in the field, and so hopefully help people assess and protect the natural and built environment.
  • -medical applications - We are quite excited about the possibility of making a cheap medical device platform that uses a sub-$100 Android phone as it's basis, combined with an open hardware port that allows the connection of an increasing number of off-the-shelf and custom medical attachments, such as pulse-oximetry, prick-less anemia testing, blood pressure, foetal heart-rate monitor and even imaging ultra-sound.  Support for additional functions and probes would be added to the platform overtime (with software updates over the mesh where required), as the interface would be open and flexible, doing to the medical device field what the smart-phone did to the software field. Extreme low-cost, field-upgradability, combined with resilient mesh communications to allow remote monitoring and collection of data and communication of alerts in infrastructure-deprived medical settings, we expect this concept to be highly disruptive to much of the medical devices space.



So that's what we are thinking about right now.  But we invite your input to help us shape this as best we can, and also to help us achieve these goals if you want to be part of the action or to help us resource this work.