a new project: Building a picture of philanthropy in Detroit

Matt Hampel and I have been pursuing this idea for a while… this summer we’re ready to turn it in to a bigger project. Maybe donate some money!

Help us build the Detroit Grants and Loans Database — a picture of philanthropy in Detroit. We’re keeping track of grants and loans given to organizations in the city of Detroit, focusing on non-profits and civic projects that receive money from foundations, and need your help to get to the next level.

There’s a lot of talk about the reach and impact of nonprofits and foundations in Detroit. We find ourselves curious about how much money comes into the city and how it is used. We see many amazing non-profit organizations doing great work and want to show how they put resources to good use.

For all of the good work that organizations are doing in Detroit, much of it happens sight unseen. It’s difficult for nonprofits, residents, and scholars to see the bigger picture of the funding system they inhabit. Some funders do a great job of listing their grants online, but many don’t. Some non-profit organizations post annual reports online, but the digital divide can make this task difficult and expensive.

We’ve built a spreadsheet that lists close to 300 grants made in Detroit in the last year or so. It’s been a valuable resource, but it’s time to take the next step.

This summer, we’d like to expand this data and make it easy for everyone to access. As technologists in Detroit, we will build an awesome website to showcase grants and funders. But to get a comprehensive dataset, we need someone dedicated to getting the information. That’s why we’re sponsoring an internship this summer.

We need to raise $2,500: a respectful internship stipend is $1,500 a month, and we’d like to bring someone on board for 3 months. $2,000 of that $4,500 total has already been pledged. If you’re interested in getting a better understanding of the nonprofit and grant landscape in Detroit, please donate today — or email us for more details: matth@localdata.com / bc@thermitic.net

Donate

Exploring “meshaging”

I wrote this for the commotion blog a while ago… cross posting!

Over the past few years, The Work Department has been active in building community wireless networks in Detroit. We have experimented with different types of hardware and software, and we have helped neighborhoods build useful networks to share internet connectivity and provide local file sharing. Something we haven’t had much of an opportunity to explore, though, is building more elaborate systems that leverage the unique traits of mesh networks.

As we worked through other parts of the Commotion project, we brainstormed ideas for wireless mesh applications. We noticed that our ideas would often replicate existing web services — e.g. a local fileserver for music or movies, or a local message board for neighborhood discussion. We began to wonder what would make a community wireless application more appealing than using a centralized Internet-based application. We agreed that it wouldn’t be enough to offer someone the simple satisfaction of knowing their data is decentralized… there would need to be some other benefits to using a local application.

What would these benefits be? What is special about the architecture of a community wireless mesh network? In pondering these questions, we considered what is provided by these networks — earlier, I mentioned that the networks provide internet connection sharing and local file sharing, but that’s only a part of the story. These networks also provide something much grander: they become community institutions. Unlike the Comcast hardware that is bolted out of arm’s reach on a utility pole, our community wireless equipment lives on our porches, in chicken coops, in our bell towers, and next to our desks. Each piece of equipment has a story behind it. We know who held the ladder while it was being installed and who lent their hammer drill to run a cable up to it.

A community mesh wireless router’s IP address is more than a 32-bit number. It has history and meaning. How can we build applications that reflect and enhance this?

I had the good fortune to meet Adam Magaluk at Detroit’s hackerspace, OmniCorpDetroit. Adam works on mesh wireless systems at Illuminating Concepts, and is deeply interested in OLSR and embedded systems. We are both young programmers and share a preference for modular and decentralized systems. During our initial conversations and research, we ended up favoring web browser based application development. This way, people who might want to use an application wouldn’t have to download anything. Since today’s web browsers have lightweight streaming messaging capabilities with WebSocket, we would have a lot of flexibility in application development.

To build a web browser based application, we can start by limiting the amount of work the server does to a bare minimum. In the circumstance of a chat application, we can say that the server should simply keep a record of who is connected to a chat session (in a sort of subscription model) and then, as messages are posted, transfer messages from the publisher to the subscribers.

Limiting the duties of each mesh node to passing messages and keeping track of connected clients ends up being beneficial in two ways: it conserves computing resources and encourages decentralized application development. Since most community wireless routers are low power, low cost devices running with MIPS CPUs and 4-16MB memory, the former benefit is clearly attractive. The latter benefit is a bit more complex — do we really need a fully decentralized application? Why can’t we just have a little bit of local node storage? It sure would make things simpler if we could have a local data cache instead of trying to develop a peer-to-peer storage system, but for now we’ll embrace this limitation when designing applications.

To begin experimenting with the core concepts of lightweight messaging systems that can work with community wireless network hardware, we built an example application to provide WebSocket service to clients connected to a Commotion access point. This service can be utilized by anything on the network, but in our first example application, it is employed by a web application served from a publicly accessible LuCI URI linked from the splash page. The application provides a simple interface to chat with other people who have connected to the local node’s websocket chat system.

Thanks to the work of Hans-Christoph Steiner (from The Guardian Project) on the jsoninfo plugin, OLSRd can easily provide some useful network information as a json object to web applications. Above the network layer, our WebSocket message server can provide data about connected clients and possibly other information in the future.

After you get your head wrapped around the WebSocket server, its underlying restrictions, and the mesh network playing field, you can start to imagine various situations where local messaging might be interesting. With an idea in mind, a developer can easily jump into a familiar web application development environment. If you have used things like WebSockets or socket.io, you already understand the core concepts of writing a mesh network application using these building blocks. As we build more features into the platform, it will offer more options for developers.

Next Steps

Currently, the system provides a messaging service that doesn’t utilize node-to-node mesh connections. As it stands, we can develop some interesting and useful applications, but there is definitely a lot to gain from adding functionality and possibly revamping things in the interest of security or privacy.

Our next major task is to begin experimenting with systems that- allow neighboring nodes to subscribe to each others’ connections. To use the chat application as an example of how this might be used: a chat participant might be able to start a conversation with people connected to their own mesh node and its next neighbors, or some other arbitrary number of hops.

We would also like to experiment with simple implementations of shared / distributed storage. Again, to use the chat system as an illustration, we could have chat participants store chat logs and offer them to new participants who broadcast a request for the last N minutes of conversation. There is a lot of distributed storage work for us to reference, of course, so we have our work cut out for us!

Aside from enhancements and features in the messaging system itself, we have plenty of ideas for the actual applications. We have recently been prototyping games that could use a neighborhood or multi-neighborhood mesh network as a playing field. We have found that prototyping and brainstorming games is an enlightening process: it helps explain the ins and outs of the technology to people, and also presents clear challenges to create obvious and attainable goals within the technology’s limitations. We’ll be sharing some “capture the flag” style game ideas that utilize a “meshaging” system during the next couple of weeks.

Loving, Graceful Machines to Watch Your Chickens With

It’s gotten cold in Detroit again, and the chickens need the usual TLC: more food, more straw, heated water dispensers, and active heating inside the coop. In previous years we’ve used a single incandescent lightbulb to keep the coop at a hospitable temperature, but this year, we’re trying something different: we’ll use an infrared heat lamp along with a daylight-simulating incandescent lamp. The heat lamp can stay on all night and not bother the birds — inconsistent lighting might have a bad impact on the birds’ health. The incandescent lamp should turn on at the pre- and post-crepuscular hours at dusk and dawn to add a bit of daylight and keep egg production up.

You may remember last year when I posted about the chicken sensor, an arduino with a temperature sensor and an ethernet shield that attached to a wireless mesh node. After the weather got warm enough, I decommissioned the chicken sensor and haven’t touched the arduino platform since. Now it is time for me to jump back into the open source embedded systems fray: either I hack together a system to toggle these lamps and monitor temperature, or my neighbors and I are going to have to run out to the coop during those crepuscular hours and fumble around with electrical switches while getting our hands pecked off by feisty young hens.

So, in the interest of avoiding bloody pecked-up hands, I’ve planned out an upgraded chicken sensor: one could call it v0.2.0 or one could call it by the codename “All Watched Over By Machines of Loving Grace.” I chose this codename because it describes how the chickens will feel.

Remote Control

JeeLink (left) and JeeNode (on breadboard, right) with FTDI (hanging off the side)This year, instead of using an Arduino with Ethernet wired to a mesh node that posts directly to Pachube, I’m going to use a JeeNode that polls a computer in my house that handles all of the posting. The JeeNodes are very cool, and JeeLabs is doing all sorts of neat things with physical computing.

I’m glad that I have taken my time with the JeeNode: while searcing through the wiki I came across a few shiny gems of projects. The shiniest by far is JeeMon. I was initially planning on writing a little node.js server to listen for temperature packets and post them somewhere on the internet, but JeeMon is a much more full and exciting solution… and an excuse to improve my tcl skills (I’ve done some quick expect scripts before but that’s it). This blog post at jeelabs has a good introduction and quickstart.

So far, JeeMon seems like a winner of a platform for DIY network physical computing projects. It’s backed by a great programmer who develops great hardware. Tcl has some nice text processing features — so much of the work in this type of project is sucking information out of sometimes-garbled strings. Its event-driven-ness makes sense with random bursts of radio-transmitted information. Finally, although it has a lot of examples dealing with the jeenode world of things, it is not at all tied to a specific platform or network technology.

Toolchains

The Arduino IDE is very, very integrated: all of the required libraries for compiling are included within the distribution. This makes it nice and easy for people to get started with Arduino, and it also makes it easier to run multiple virtual environments of different versions of the IDE. It has some built-in features to let you use your own text editor, but it’s still pretty clumsy. For past projects I’ve had to run avrdude with non-standard options to flash a device; I ended up finding where the IDE would put the compiled .hex file during the build and upload it manually. This was a pain.

I started looking around the internet for alternative build methods for arduino programs and didn’t really come up with much; there are a lot of one-off projects (see links below) but all of them rely on a forked version of the Arudino libraries, or even a partial set of those libraries. This makes development really tricky, especially if you’re including non-standard libraries.

I’d love to see the Arduino IDE expose some of the development processes via the commandline. Another option might be to do an scons setup that uses the arduino IDE’s hardware/arduino/boards.txt as a reference.

What’s next

I’m going to continue tinkering with this stuff. Expect more posts as I learn.

One experiment I’m anxious to try out is to hook a JeeLink to an OpenWRT router and run jeemon right from the router. This might make a good addition to the community wireless toolkit we’re building at The Work Department.

Notes

When using the arduino sdk to push code to a jeenode, you generally need to set serial.debug_rate to 57600 in your ~/.arduino/preferences.txt

Check your soldering on the jeenode using the voltages listed in the link below. I messed up the RST -> capacitor connection which caused unreliable uploads but didn’t interfere with anything else… kinda hard to track that one down :)

Links

Toolchain (your mileage may vary)

“create your own arduino ide!”: http://pragprog.com/magazines/2011-04/create-your-own-arduino-ide

forum topic about makefiles: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1284144128

arduino-makefile fork on github: https://github.com/pix/arduino-makefile

fix math.h compile error: http://forums.reprap.org/read.php?146,107925,107925,quote=1 (in short, add an #undef round before round is defined in avr’s math.h)

oh, this is nice: http://www.tmpsantos.com.br/en/2010/12/arduino-uno-ubuntu-cmake/

JeeNode

check board voltages against these values: http://forum.jeelabs.net/comment/3728#comment-3728

random weird project: http://engin1000.pbworks.com/w/page/37615506/RF%20Locator

Thermometers

library to read DS1820 sensors: http://milesburton.com/Dallas_Temperature_Control_Library#Example

a nice DS18B20 setup that I’m using: http://www.makershed.com/Waterproof_DS18B20_Digital_Temperature_Sensor_Ex_p/mkad37.htm

JeeMon

home: http://jeelabs.net/projects/cafe/wiki/jeemon

intro: http://jeelabs.org/2011/11/25/jeemon-for-early-birds/

Pulling copper through Spaulding Court

Cat5 cables, sepertine in the grass outside Spaulding Court

Images of an Amish barn-raising came to mind while I sat deep within Spaulding Court’s westernmost basement, slowly feeding strand after strand of blue wire through plastic conduit. I’ve never helped raise a barn, but I’ve seen pictures: a family in the village needs help putting up a gigantic building so all the neighbors come to lend a hand. But on this hot Sunday in July, our barn was less 2x4s and more Cat5 communications wiring. Spaulding Court, the venerable community-owned stone-walled apartment complex, was getting ten high-speed computer networking lines installed by a dozen volunteers.

Neighbors and visitors listen to Jon give the lowdown

Neighbors and visitors listen to Jon give the lowdown

The goal of that afternoon’s work was to provide each of the south side Court apartments with an ethernet connection to a central router. The occupied units already had wireless internet connections, but these new wires would be more reliable and faster. Getting a cable into each unit took planning: each successive unit needed a cable that would reach out of its junction box to the end unit’s box. Volunteers had been measuring the cable out at the previous Soup at Spaulding event.

The first and longest line gets pulled through the conduit

The first and longest line gets pulled through the conduit

At first I could hear voices from the other units through the plastic conduit—each unit’s basement needed a helping hand to push and prod the slowly-thickening bundle of cable as it was pulled through by a lead line—but as the bundle thickened the voices disappeared and we had to rely on cell phones and messengers to communicate. And soon enough, I got word from the grapevine that the final unit had gotten its length, and it was over! We climbed back into the Sunday afternoon heat.

I’ll put up an announcement on this blog when we are ready to install the router that links all these cables together.

Check out the latest zine from the Detroit Digital Justice Coalition for a synopsis of all our city’s community wireless projects along with a bunch of other relevant news: http://detroitdjc.org/2011/06/30/ddjc-zine-3-out-now/

ssh agent forwarding protip

my source code management / git workflow just got a bit easier: i’ve never used ssh agent forwarding before, but now i can just use one key to manage access to different repos instead of having separate keys on all my hosts.

in the past, i’d never really used “ssh -A” because it didn’t automagically work with the screen terminal multiplexer… but now, thanks to superuser, it does!

Researching text message community alert systems

Preface: I have to put this into a bit of current events context:  I spent the morning researching for this blog post, but was interrupted with news of an ACLU investigation into Michigan police officers breaking into citizen’s cell phones and the iPhone logging location data and mirroring it to your computer’s hard drive.  Both of these stories made me queasy, especially in relation to all of the potentially democratic and liberating ways we can use mobile devices.

So anyways, my neighbors are interested in starting up a community alert system.  We could do it old-school style with a phone/sms tree, but that can introduce time delays, and for rapid response to problems in the neighborhood that’s just unacceptable.  In my short conversations with my neighbors so far, people are definitely interested in a voice and text system, but that might be hard to pull off.  I’m interested in how Village Defense works, and whether a staffed call center makes a difference in emergency response situations.

To start things off in my neighborhood, I’m advocating for a SMS mailinglist system.  Initially I was thinking that I could roll something together using twilio and custom code, but I’ve recently gotten hooked on FrontlineSMS.  I originally came across this project through my tree mapping experiments with Ushahidi.  FrontlineSMS uses a GSM modem (either a dedicated device or a tethered cellphone) to send and receive text messages programmatically.  It’s written in Java, field-tested, and seems super-solid overall.

The software’s GUI lets beginners easily define workflows for all sorts of sms communications needs.  I was excited to discover (via frontlinesms’s superfast twitter reply to me) that a project in Trinidad and Tobago uses FrontlineSMS for a neighborhood alert system!

It has the option to tie into an online SMS service provider (like clickatell) instead of using the local GSM device, but for this project I like the idea of keeping as much of the infrastructure local as possible.  Eventually, I’d love to experiment with using FrontlineSMS with an alternative cellphone network set up with OpenBTS and a bunch of abandoned old gsm handsets.

Supplies needed:

  • a computer that can run the FrontlineSMS java app
  • a gsm modem, btw $50-100. http://www.amazon.com/Sierra-Wireless-Mercury-885-Unlocked/dp/B001JU2RRY/ seems to be the only option available via amazon.com; more research pending
  • friendly neighbors that have cellphones with SMS capability
  • a few organizers that get to know the system really well and advocate for it in the neighborhood
  • a loving soul that will donate power and space for the computer to use and inhabit

I’m going to take my experimentations with me to a neighborhood meeting tomorrow, and we’ll see where everything goes.

Springtime meshes

It has been a busy winter for me, and I’m sad to say that i haven’t been very active with the community internet building until recently… that said, it has been pretty awesome for the past few weeks.

cut coax, foreground, with jig, background

Cut coax, foreground; jig, background

For the past couple OCD “open hack night” Thursdays, I’ve invited fellow wireless hackers to work on neighborhood mesh projects, talk about network protocols, and generally goof off in nerdy subversive ways.  That first Thursday, these two super-smart network engineer types, Patrick and Adam, came by.  The next week, piles of coaxial cable showed up and we started building omni antennas!  Also present this past Thursday was Ryan Hughes.  He’s organizing a community wireless project in Ann Arbor, and recently attended the Battle Mesh.  Finally, another superleet hacker came into the mix, Marky B, who is interested in experimenting with mobile mesh devices.

Over the next few weeks, we’ll be busy working on these antennae as well as some other experiments.  I’ve got a few new dual-radio open-mesh nodes on my workbench, and i’d like to work on devising a benchmark test for small neighborhood mesh networks.

my neighborhood: institutions, current mesh, future mesh

my neighborhood: institutions, current mesh, future mesh

Also notable:  A few weeks ago, I took part in a panel at SXSW Interactive (a surprisingly well-recorded audio feed of the event is available at that link).  Along with Adriel Thornton, Diana Nucera, Jenny Lee, and Invincible, I spoke about Detroit’s future media-based economy.  I introduced the idea of “media miles” as a technological parallel to “food miles” — sure, we all like avocados and parmesan reggiano once in a while, but shouldn’t we prioritize what we can grow in the back yard?  How can we design technology that emphasize local community exchange, in the same way we are designing food distribution systems that do the same?  Of course, you know the answer… mesh networks and community internet.  I’ll be elaborating on these ideas sooner or later, in cahoots with Nina Bianchi.

Magento dev notes: conflicting extensions

Scenario: you’ve developed a magento extension, tested it on your development server for all these potential fringe cases, even brought in live customer data+code to test against… finally you deploy it to the live site, only to find that another (3rd party) extension uses the same dirty <rewrite>s as your code does.  Damn.

What a great occasion to learn all about resolving namespace conflicts in magento.  Here’s my list of links:

This is really all you need to know: http://www.webshopapps.com/blog/2010/11/resolving-magento-extension-conflicts/

If you don’t know how to use your text editor, you might need to use this extension for help: http://www.maisondulogiciel.com/english/magento/magento-extension-conflict.html

And finally, here’s an excellent / slightly confounding exposé: http://magebase.com/magento-tutorials/magento-extension-clashes-winners-and-loosers/

bicyclists and North Corktown

Recently a few of my friends have asked me what could help encourage more people in my neighborhood to ride bicycles. For all the time I’ve been a bicycle commuter and advocate for cyclists in Detroit, I’ve never really considered what a specific neighborhood could do to encourage bicycle use. My work at Back Alley Bikes / The Hub of Detroit is rooted in a neighborhood that I moved out of, and after the Jeffries projects closed down it turned into less of a neighborhood resource and more of a city-wide resource (more on that in a minute). Whenever I’ve seen bicycle advocacy come up in the public discourse, it’s been about city-wide or state-wide issues (bicycle licensing, safe streets funding, etc).  It’s not often that I see local/block-level efforts to promote green transportation…  but isn’t that the right place to start?

Blair rides her bike when it's cold

It’s easy for me to not think about it on the day-to-day:  I’m more than happy to jump on my bike and ride to work 5 miles away in the middle of winter… mostly because I’ve spent my whole life growing fond of cold-weather discomfort and learning how to fix a flat with frozen fingers.  What would it take to convince someone with less pain tolerance and more concern for their finger’s nerve endings? If you look at North Corktown from a mainstream bicycle-aware urban planning standpoint, the situation might seem bleak.  There isn’t much in place that would encourage non-automotive transportation: bus stops are mysterious, sidewalks come and go, and the nearest bike shop and grocery store are a half-hour walk away, in opposite directions; in other words, you’d better pray that you don’t end up with a broken chain and an empty pantry.

The mainstream urban planning fancy-pants plan for a neighborhood like North Corktown might include accoutrement like bicycle lanes, a marketing campaign to encourage alternative transporatation, and maybe a spokesthing for good measure.  I think that a lot of these ideas may not be especially relevant to many of Detroit’s neighborhoods.

A pile of cycle in my neighborhood

Rather than paying tens of thousands of dollars per mile for silly things like these, I’d prefer to see that money go into Detroit’s growing bicycle service economy.  Detroit has a history of creative entrepreneurship, and the last few years have seen a plethora of bicycle-related businesses start up: The Hub’s in-school youth education services and repair shop, Wheelhouse Detroit’s bicycle tours, Detroit Greencycle curbside recycling pickup, Cass Cafe’s food delivery service.

A bicycle-related business grows the local economy and promotes bicycling at the same time.  These groups are putting down fertile soil to grow bigger and better things on in the future.  Those bike lanes take a lot of nutrients to get going, don’t they?  Shouldn’t we start with the basics?

I live across the street from an apartment complex that was recently bought by a neighborhood nonprofit.  Many residents look forward to using some of the units for community institutions, and I think that it’d be a perfect site for regular bike education workshops.  An organization like Fender Bender or Mt Elliott Makerspace could provide a mobile toolkit and some educators, and my neighbors could try wrenching a bit or maybe learn some winter bike riding skills.

Let's jam econo with small-fry bike education on a massive scale

Running a program like this can be done on a shoestring budget (c.f. Back Alley Bike’s budget of 4000/year a few years ago), and can have lasting impact as well as serve as a statistical/research base for expanding into new ideas and ventures.  A few other projects (Earthworks on the east side and All Saints Church in SW) are running their own small-scale bike education programs, and I’d love to see more neighborhoods join in.  In Earthworks’ case, The Hub sponsored the formation of a shop at the soup kitchen/community farm and it turned into a program on its own over the course of a year.  And I heard that the youth at All Saints want to open up a retail shop…

It’s up to us to make these ideas and plans available to any and all neighborhoods in our city.  As the above projects show, we have what it takes to make amazing things happen, without having to wait on municipal decisions or state mandates.