Keep moving

Hashing for the Homeless

The Legend of John Henry holds a steel driver in contest with a steam powered hammer, casting human excellence against the progress of technology. Henry is a folk hero, but he dies betting against technology. The point isn’t that technology wins, though — we don’t really lose when technology wins.

I’m a technologist, but I’m not in it for the tech — I’m in it for making things that make things better. Code is an unreasonably effective lever. It sounds syrupy to say it, but I believe that computers are the best way for me to make the world better. They work faster and more tirelessly than I could. Bits travel the world freely, providing value to people I will never meet. Things I wrote 10 years ago are still doing useful work, and they may continue to do so after I am gone.

But there is a gap in society. Technologists are seen as wizards, in the Matrix. Sometimes they are shown as heroic, nerdy, or villainous, but always unassailably “other”. Normal people don’t do this thing. Normal people feel disenfranchised by technology. Some people feel it’s useful, but don’t see themselves ever producing with it. Very few people see it for what it really is: a tool for your use. It’s often said that tech sophistication is a function of generation — that there was a web generation, a mobile generation, that the next generation will get it better.

I disagree. Tech is changing more rapidly, not less, while our ability to incorporate the new capabilities into our practices, norms, and laws is staying constant. Each generation’s youth get a head start in incorporating new things because early in life everything is new — we have fewer bad patterns to match. But the faster the strides of tech, the more quickly youth’s head start is overtaken. But we can choose not to be John Henry.

It would help everybody if we worked to close this gap, and casting the gap as generational does real harm because it encourages waiting while we might act.

The computer and the internet — they carry meaning only in relation to our connections, interactions, and outcomes. (Picasso quipped that computers are useless because they can only give you answers.)

I’ve written before that everyone should be a programmer; but if the computer is already a tool for your use, please think back about how you got to this point. Why does it matter to you, and what might have changed that for you? How can you make that change for the people in your life? How can you apply this rare talent — of being a wizard — to things that make material differences in people’s lives?

I’ve had some success appealing through automation. Tell your friends that if they’ve ever been bored while using a computer, they’ve just found a reason to learn programming. Most people who have used a computer have done some tedious work on it — categorizing pictures, or filling in spreadsheets, for example. Using that time to learn and to automate is probably worthwhile.

But it turns out that hashing is also helpful to the homeless.

I recently met with Doniece Sandoval of Lava Mae. She’s working on providing mobile showers to homeless people here in San Francisco. If you’ve ever been to San Francisco, you’ve seen and smelled how many homeless people there are. These people lack basic facilities, and there’s a tremendous shortage of shelters and showers. What few facilities there are are in a concentrated area of the city, while the homeless spread throughout the city. Showering even once a month is challenging. Mobile showers are an interesting approach to this problem, because they are more scalable than fixed facilities, and because they can bring the service to people who have precious few travel options and resources.

Doniece has a problem, though — she needs homeless people to know when her service will be available — what time of day and where in the city. But not only that — she has NIMBY to address. Nobody wants a huge line of homeless people loitering around their neighborhood in hopes of a shower. Lines will form because her service will be overwhelmed with demand.

She was exploring options to address these opposing concerns. Perhaps unannounced popup locations for fixed amounts of time, too short for lines to form? Pretty unfair and difficult logistically. Perhaps homeless people could sign up to the service, receive a wristband, and be notified when their number came up? Pretty expensive and hard to manage.

It occurred to me that she could use a hashing algorithm. Lava Mae could always start service at the same time each day, and a location per day. People could be assigned time slots during the day based on something they already have: a name. The exact time slotting doesn’t matter - it could be as simple as 10 minutes per letter, so that people whose names start with A come at 9AM, and names starting with D come at 9:30, and so on. It’s important that the hash be simple and intuitive, but the direct mapping of letter to a specific time isn’t the only approach. Another could be that A through D collectively get the first hour, or whatever other grouping/distribution is useful.

With this approach, everybody knows when they can get a shower (it stays the same time for each person), and there’s no point coming earlier or staying later. Checking whether people are allowed at that time is simple — any form of ID would do — and it would be fair (assuming time slots were adjusted to per-letter population). If there are too many people for a given time slot, at least each person in that slot got a fair chance (everybody who came for a time slot could get picked in a small lottery). NIMBY and wasted time are both minimized.

To a programmer, this idea is quite simple — we use hashing all the time, mapping arbitrary values into a known space. We think abstractly about solving problems all the time. But it solves a real-world problem in a practical way. Any time a service needs to be fairly distributed from a thing “they” have to a thing we control, hashing probably will help.

Activism can be, in part, an engineering problem. And we can all be engineers. Maybe you should be an activist. Or maybe you should help an activist become an engineer. Causes is hiring if you’d like to get started here.

Chat for Open Source

In an effort to make Open Source more welcoming, I like to look for difficulties people have when entering the field. Often the newcomers don’t feel like part of the group, don’t know people, don’t know where to start, don’t feel confident enough in their skills or our cultural values to risk the engagement.

Sometimes, though, the problem is in the tools themselves. IRC (Internet Relay Chat) is one of those tools. It isn’t the perfect chat system, but it is the one that took root in Free Software and in Open Source. Most major projects use IRC, and it’s around these channels that some of our sense of belonging develops.

I’ve suggested IRC to newcomers before, and I think the text-based format, the hoops you have to jump through on first use, and the jargon are off-putting.

Despite making it clear that IRC can be very useful, I have rarely seen newcomers willingly take it up. I think they don’t realize how much of a difference it can make to have realtime discussions with knowledgeable peers. That benefit would be apparent if they got over the first-use hurdle, though, and I hope this video accomplishes that – IRC, though creaky, is one of the main places that Open Source happens.

You should use it. Here’s how (choose HD and fullscreen for best viewing):

Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 Unported License.

Once you start using IRC, you might also want these tips on etiquette from Mahdi Yusuf.

Explaining Digital

Some time ago I was asked what “analog” means, as opposed to “digital”, when discussing media formats (like documents, images, videos, etc). The person asked me over instant message chat - so the discussion was captured and I can now easily share it. The discussion is lightly edited for clarity and privacy.

My statements are formatted normally; the asker’s in block quotes.

Everybody Should Be a Programmer

Among folks who code, there’s a perennial question - “should everybody be a programmer” or, somewhat less aspirationally, “should everybody know how to code”.

My First Tattoo

I’ve meant to write for years. I love the power that writing gives to our thoughts - the ability to speak to people you’ve never met, to learn from prior experience, to know more than your personal experience, and, at its best, to know a person without ever meeting them. The ability to accumulate knowledge beyond ourselves is the basis for society, and in some sense the printing press was the birth of the nation-state (and other terrible things like the Protestant Reformation).