August 3, 2015
Worse Than Food, Better Than Nothing
contributor: Keith Porcaro
The digital world is proliferating unevenly over the physical one, but unconnected doesn’t have to mean isolated. Seemingly “old” technologies are being used as connective tissue between under-connected people and the digital world, and in ever more creative ways. For more than a decade, tools like FrontlineSMS* have used text messages to deliver government services, prevent drug counterfeiting, alert people of imminent disasters, register voters, run a mobile payment system, and much more. The commonality between this seemingly random collection of services is that they are each flows of information. Finding new and interesting ways to use old technologies, then, is about uncovering where information flows are impeded, and using those technologies to overcome obstacles to the free flow of information.
In poorly connected communities, complex data may have to be transmitted by hand, stored on a flash drive and given to a motorcycle courier.
In that vein, I’ve put together a small project called Mush. Mush is how to send digital files over SMS – text messages – and is designed for remote environments that need to communicate with a central hub or with each other. In the last year or so talking to people working in far-flung rural areas, I was struck by the difficulties faced in getting digital files from A to B. We take for granted the ability to send complex files over internet-connected networks. But in poorly connected communities, complex data may have to be transmitted by hand, stored on a flash drive and given to a motorcycle courier, for instance.
But, many rural communities have access to a cell signal. That means there’s access to digital information. Mush provides an alternative way to send files by breaking them up into text strings and transmitting them over SMS. It’s designed to live on a GSM USB modem that’s plugged into a computer (or anything that can run Python). It’s time-consuming, only good for small or compressible files, and not practical if there’s any other alternative, but it works. Just like with food, Mush isn’t ideal, but it’s better than nothing.
It’s time-consuming, only good for small or compressible files, and not practical if there’s any alternative, but it works. Just like with food, Mush isn’t ideal, but it’s better than nothing.
Mush is written in Python because there’s a fairly mature module for interacting with a GSM modem (pygsm), but here, the language doesn’t quite matter. Mush could be refactored for Java, to run on an Android phone, or to whatever language your web server is running on. What does matter is the protocol, which is a simple way to express files in strings of text, and then transmit them over SMS, the lowest common digital protocol. Using this same protocol, one could add encryption, improve the compression, and so on.
Mush turns a file into a Base64 (or ASCII85) string, breaks it into 120 character chunks, puts them in order, and, along with a first message detailing the file name and other metadata, sends each chunk over SMS, where it can be reassembled on the other end, whether at another computer or via an internet connected service. So, a modem running Mush could live on a computer that’s used to send and receive files from a virtual phone number connected to a Dropbox folder. Or it could power a remote hub, where people in rural areas could plug in flash drives that could be filled with weather reports, news, or other information that is too complex to be communicated over available data channels. Or Mush could simply be used as a sort of slow mesh network, passing files between areas untouched by Internet.
The point of all this is that digitizing information enables it to be infinitely transformable and replicable, no matter when or where the initial digitization takes place. Access to this information, no matter the form, can transform people’s lives. For the parts of the world where the full web can’t yet reach, SMS can help deliver that information, whether it’s an automated message, or something more complex like a file. Mush isn’t breaking any philosophical ground, but hopefully it’s another useful tool for getting digital information and files to more places.
The initial script and documentation for Mush is available here. If you’re interested in developing it further, or implementing it, we’d be happy to help. Drop us a line at firstname.lastname@example.org.
*(Disclosure: the organization I work for, SIMLab, spun off FrontlineSMS at the end of last year, and we’re currently using it in active projects in Kenya and India)