Mjumbe Wawatu Poe
Passionate about technologies that help us be better humans.
Updates
-
@MinajSoldier is that really the order? I'm waiting on Prince.
-
Minimal, implicit bump outs at 48th and Baltimore. I approve, @PhilaStreets. http://t.co/tnsTipCmQ8
-
RT @AfricasaCountry: It's Malcolm X's birthday today (would have been 88). Read and listen to Ossie Davis' eulogy for Malcolm X:... http://…
-
At the #ECBACC (@ The Enterprise Center w/ 3 others) [pic]: http://t.co/SxVDiJcIy2
-
@PhillyPhriedman that game looks awesome
-
6 days ago from web | Reply, Retweet, Favorite
-
RT @TechnicallyPHL: Wilco Electronic Systems launches Knick Knack Learning, an edtech company http://t.co/ji6nM4B5E2 partnered with @wearej…
-
Best thing about wisdom teeth removal: yams and applesauce.
-
@mbteach @alexknowshtml it's hard to work around tacos
-
Awesome #TranslateTech session with @lucyfedia at #TCamp13: http://t.co/yqBTr6Q5gD. Up-goer 5 is going in my toolbox http://t.co/AgBaS3RAVW2 weeks ago from web | Reply, Retweet, Favorite
-
"A way to help computers understand what's in things that look like paper and books." What is it? #tcamp13 #translatetech2 weeks ago from web | Reply, Retweet, Favorite
-
Notes from my Selling Transparency session earlier today, thanks to @greena11: http://t.co/nagrB0FmPK
-
In case you missed it last night: Download "Octavia City" Parts I & II -- http://t.co/PoCMNJfRj83 weeks ago from web | Reply, Retweet, Favorite
-
@JamesArleth @aneiciawilliams @CJ_Looters @OopgDan @xzheng315 Sorry for missing this morning. Great start on the WP site!3 weeks ago from web | Reply, Retweet, Favorite
-
Listening to: "Octavia City: Original Afrofuturistic tales by authors inspired by Octavia Butler" http://t.co/9EYfRbBu2k4 weeks ago from web | Reply, Retweet, Favorite
-
Looking forward to this tonight: "Octavia City: Original Afrofuturistic tales by authors inspired by Octavia Butler" http://t.co/9EYfRbBu2k4 weeks ago from web | Reply, Retweet, Favorite
-
Yo, what?! "Octavia City: Original Afrofuturistic tales by authors inspired by Octavia Butler" Thursday, 8-11 http://t.co/9EYfRbBu2k
-
@FreedomReeves @RashidZakat @tayarishasaurus I'm gonna be at the 34th and Walnut Starbucks 6, if you can. Unless I think of a better place.
-
@agilbert @PhilaArchitect @geoffd @GeorgiaGuthrie @steiny @timwis @themightychris @pamasaur @atogle how am I that lucky?4 weeks ago from web | Reply, Retweet, Favorite
Posts
Django 1.5 has experimental support for Python 3. This is great news, and means that we should all be upgrading our Django apps to be able to support both Python 2 and 3. Django has some documentation on how to go about this process. I recently went through this for one of my apps and, while the changes to the app itself were easy enough, I had to figure some things out myself for my testing setup.
I like to use Travis for continuous integration.
- It's easy to set up (I usually just copy a .travis.yaml file from another project and tweak a couple settings)
- It integrates really well with GitHub, even automatically running tests against people's pull requests
The .travis.yml for my projects usually looks something like this:
language: python
python:
- "2.6"
- "2.7"
env:
- DJANGO="Django==1.3"
- DJANGO="Django==1.4"
- DJANGO="git+git://github.com/django/django.git@master#egg=django"
# command to install dependencies
install: pip install -r requirements.txt
# command to run tests
script: python setup.py test
Then I'll list my requirements in requirements.txt, and put a test command in setup.py. Travis, when given this configuration, will run tests in six different environments:
- Python 2.6 with Django 1.3
- Python 2.6 with Django 1.4
- Python 2.6 with Django's trunk
- Python 2.7 with Django 1.3
- Python 2.7 with Django 1.4
- Python 2.7 with Django's trunk
Up until now, this has served me well.
With the introduction of Python 3 support, I introduce an additional Python environment for my tests:
python:
- "2.6"
- "2.7"
- "3.2"
Now Travis will run tests in 9 environments. However, in some of those environments, the tests will fail, even after I've done the work to make my app Python 3 compatible. So what happened?
The environments that Travis sets up are:
- Python 2.6 with Django 1.3
- Python 2.6 with Django 1.4
- Python 2.6 with Django's trunk
- Python 2.7 with Django 1.3
- Python 2.7 with Django 1.4
- Python 2.7 with Django's trunk
- Python 3.2 with Django 1.3
- Python 3.2 with Django 1.4
- Python 3.2 with Django's trunk
But notice that, even though my app may be compatible with Python 3, Django 1.3 and 1.4 are not. So, these environments will produce errors when even trying to install Django.
My solution to this is to introduce a couple of checks in my install and test running scripts. First, I have to make my Travis configuration a little smarter. I use a separate install script that checks whether the Django version is compatible with the Python version, and immediately exits if not:
.travis.yml:
language: python
python:
- "2.6"
- "2.7"
- "3.2"
env:
- DJANGO="Django==1.3"
- DJANGO="Django==1.4"
- DJANGO="Django==1.5"
- DJANGO="git+git://github.com/django/django.git@master#egg=django"
# command to install dependencies
install: ci/install.sh
# command to run tests
script: python setup.py test
ci/install.sh:
#!/bin/bash
PYTHON_VERSION=$(python --version 2>&1)
if [[ "$PYTHON_VERSION" > "Python 3" ]]
then
if [[ "$DJANGO" < "Django==1.5" ]]
then
echo "Cannot install $DJANGO on $PYTHON_VERSION"
exit
fi
fi
pip install six==1.2.0 mock==0.7.2 $DJANGO --use-mirrors
That line if [[ "$DJANGO" < "Django==1.5" ]] in the ci/install.sh script does a lexicographic comparison against the $DJANGO environment variable, so even when I'm using the Django trunk from git, it evaluates correctly as being greater than "Django==1.5" (upper-case "D" is less than lower-case "g"). Now, Travis will immediately exit (with an implicit exit code of 0, indicating everything is alright) from installing my dependencies before installing six and Django, which is important for the next step.
Next, in the script that runs my tests, I want to check whether Django has been installed:
runtests.py:
try:
import six
from django.conf import settings
except ImportError:
print("Django has not been installed.")
sys.exit(0)
Here, it tries to import those things that did not finish installing above. If it cannot import them, then it will immediately exit. The exit code 0 tells Travis that all the tests for this environment have passed, which, since there are no tests for this [invalid] environment, they have.
Now my project is ready for testing with Travis under Python 2 and 3!
Update (11 March 2013):
I just learned about the matrix section of a Travis config file! See here for an example.
Lately I've been creating a fair number of APIs that store some JSON in a field in a database. Often this is a good reason to use a document database like Mongo or Couch, but sometimes a relational DB will do you better (e.g., if it's just a small amount of data for each row that is free-form, but the relational aspects are many and important). If you are using a relational DB with a JSON field, you will at some point have to deserialize that JSON for use as data.
I'm concerned with the speed of my APIs, so I began wondering what the best way to do this was. When returning a single record, there aren't many choices. I load the record, pull out the JSON field value as a string, deserialize it, and put it back on as a dictionary. However, when returning a potentially large set of records, my first inclination was to process each record individually, and compose them all into a list. Something like the following:
def get_record(...):
record = execute_query(...)
data = process_record(record)
return data
def get_many_records(...):
records = execute_query(...)
data = [process_record(record) for record in records]
return data
def process_record(record):
json_str = record['blob']
record['blob'] = json.loads(json_str)
return record
The issue here is that, if I have a number of records,
json.loads will get called once for each one. The other option that I had was to compose all of the JSON data into a single list, deserialize it all at once, and then partition it back out to its original objects -- something like: def get_many_records(...):
records = execute_query(...)
json_str = '[%s]' % ', '.join(record['blob'] for record in records)
blobs = json.loads(json_str)
for record, blob in zip(records, blobs): # izip for Python 2.x
record['blob'] = blob
return records
My first thoughts: I prefer the first code block, because it allows me to share code between my single- and multi-record getters, and it seems clearer. Also, I don't really know yet whether the latter would gain me anything significant. To test, I wrote up the following:
from timeit import Timer
list_str_code = """
import json
list_str = '[' + ', '.join(['{"a": 1}']*1000) + ']'
data = json.loads(list_str)
"""
str_list_code = """
import json
str_list = ['{"a": 1}']*1000
data = [json.loads(dict_str) for dict_str in str_list]
"""
list_str_timer = Timer(list_str_code)
str_list_timer = Timer(str_list_code)
print list_str_timer.repeat(number=1000)
print str_list_timer.repeat(number=1000)
On my machine with Python 2.7, the
list_str_code ran consistently more than 3 times faster than str_list_code (1.2 vs 3.9 seconds). With Python 3.2 it was nearly 5 times faster (0.7 vs 3.3 seconds). That's pretty significant.It is worth noting that I tried this with lists of different sizes as well. Even if I construct
list_str and str_list each with only 10 elements and run the code 100,000 times, the list_str_code is still several times faster.Update:
At the suggestion of @mricordeau, I tried rerunning the timed code using Ultra JSON (ujson) instead of the core
json module. I did this by just installing (pip install ujson) and replacing the lines that say import json with import ujson as json. It was, indeed, blazing fast. Notably, it brought the execution times much closer together (for the run above where I got results of 1.2 and 3.9 seconds, ujson gave me times of 0.21 and 0.27 seconds respectively)! This implies to me that much of the time in the core json module is spent in start-up (or tear-down) code each time you call loads.I don't know whether desktop programming is dead, but I do know that there are apps that I want that the web can't give me yet. These are mostly software development-related, but that's what I use my computer for most.
Since I use Gnome on Linux pretty exclusively these days (and I'd like to continue), I'd like to start a study/hack group for Gnome/Gtk+/GObject programming.
I've been watching the GObject platform change quite a bit over the last few years. Most significant, in my opinion, has been the introduction of GObject introspection (GI), which essentially made it possible to use any C+GObject library in any language, as long as there's a GI binding for that language (and there are for Java, JavaScript, .Net (Mono), Python, Ruby, and more).
My goals are (1) to be comfortable enough with GI programming to quickly create applications that I want, without the GI layer being the roadblock, (2) to be comfortable enough with C+GObject or Vala to translate potentially reusable pieces of GI applications into actually reusable components. And (3ish) if I can contribute to the examples, tutorials, and docs all the while, that's a win too.
So, if anyone is interested is interested in learning or practicing Gnome/Gtk+/GObject development in a group, hit me up @mjumbewu, or in the comments. Standing offer, so even if this post is several months old, hit me up.
Thanks!
- Mjumbe
I've been doing a few experiments with mapping/reducing in Python using the multiprocessing module.
Some things I've learned
Some of these I suspected, but some were surprises to me.- Passing data between the parent and child processes is slow -- try not to pass big data.
- Splitting across multiple processes actually does speed up computation, as long as you don't have to pass back a lot of info about each thing.For example, this could be a good candidate for mapping to processes:
def square_all(nums):
This, maybe not so much:
return sum([i*i for i in nums])def square_all(nums):
The first just returns a single number for each subsection of data. The latter returns a potentially large list.
return [i*i for i in nums] - Using processes and queues directly is more flexible, but mapping over pools saves a lot of typing. For example, these functions accomplish similar things. The first is a function that just runs the processing on a single entire data set. The next two demonstrate running the data in multiple processes. In multi, it splits the data roughly evenly over n processes and immediately runs those processes in parallel. In pooled, it splits the data into n parts and doles each part out over p processes. When n == p, multi and pooled do basically the same thing.
Note that, in order to accommodate the Queue pattern in multi, I had
to modify the function being called:def square_all(nums, q=None):
if q:
q.put(sum([i*i for i in nums]))
else:
return sum([i*i for i in nums]) - Performance of the process pools was more erratic than the manually handled processes and queues. This may be due to memory constraints; for some reason, when my script got down to looping over the pools, the memory usage went way up. I took a screenshot of my system monitor running on half as much data.
- My computer performedabout equally well above 3 processes when they were handled manually. I expected that 8 processes would not have worked out well, but I was wrong.
The script
Here's the source of the script that I used to run the experiment:#!/usr/bin/env python3
#-*- coding:utf-8 -*-
from itertools import chain
from math import floor
from multiprocessing import Pool, Process, Queue
# ---------------------------------------------------------------------------
# The data to process. Why a global? No reason really.
full_count = 1000000
full_range = range(full_count)
# ---------------------------------------------------------------------------
# The processing function. Something simple.
def square_all(nums, q=None):
"""
Simple function to loop over and square all the numbers in ``nums``.
"""
if q:
q.put(sum([i*i for i in nums]))
else:
return sum([i*i for i in nums])
# ---------------------------------------------------------------------------
# The processing wrappers.
def single():
"""
Run the the function on the full range of values.
"""
result = square_all(full_range)
return result
def multi(n):
"""
Partition the range into n parts and run each in a separate process.
"""
# Partition
parts = _partition(full_range, n)
# Map
queues = [Queue() for _ in range(n)]
processes = [Process(target=square_all, args=(part, queue))
for part, queue in zip(parts, queues)]
for process in processes:
process.start()
for process in processes:
process.join()
partial_results = [queue.get() for queue in queues]
# Reduce
result = _combine(partial_results)
return result
def pooled(n, p):
"""
Partition the range into n parts and run on a pool of p processes.
"""
# Partition
parts = _partition(full_range, n)
# Map
pool = Pool(p)
partial_results = pool.map(square_all, parts)
# Reduce
result = _combine(partial_results)
return result
# ---------------------------------------------------------------------------
# A few utilities for partitioning and combining.
def _partition(l, n):
"""
Partition the list l into n parts, and return a list of the parts.
"""
count = len(l)
return [l[floor(i / n * count):floor((i + 1) / n * count)]
for i in range(n)]
def _combine(partial_results):
"""
Combine the list of partial results into a final result.
"""
result = sum(partial_results)
return result
def _time(f, reps=10, args=tuple(), kwargs=dict()):
for _ in range(reps):
t = time.time()
f(*args, **kwargs)
print (' ', time.time() - t)
# ---------------------------------------------------------------------------
# Here's the script to generate the results.
if __name__ == '__main__':
import time
print('Time for single process:')
_time(single)
for n in range(2,9):
print('Time for {} process:'.format(n))
_time(multi, args=(n,))
for p in (2,3,4):
for n in (p,2*p):
print('Time for {} partitions over {} process:'.format(n, p))
_time(pooled, args=(n, p))
Tomorrow, November 2nd, there is going to be a general strike in Oakland. Though I support #occupy, I'm not going to be on strike, for a few reasons:
- I also support the organization I'm working for, think they're doing good work, and feel that it is not incongruous with #occupy (though it's certainly not the same)
- I don't actually work in Oakland
- Help out #occupy tech support. I've come across requests from several #occupy communities for additional IT hands (I don't know whether there is a central place where these requests are posted). If you feel so inclined, volunteer a little time to maintaining an #occupy web site, or posting minutes, etc. (if anyone knows more about what tech needs #occupy communities have, please speak up).
- Help create logistical tools. The #occupy communities that I've seen are little micro-societies and, like any society, have a number of logistical considerations and concrete needs. Are there tools that could help? For instance, I liked the idea of needsoftheoccupiers which they described as "a wedding registry meets Freecycle for the Occupy movement".
- Do something creative/educational/inspirational. #Occupy has people paying [at least superficial] attention to issues of economic [in]equality and social participation. That doesn't happen too often, so take advantage of it by creating a visualization or an info-app that awakens peoples imagination and helps them see things that they wouldn't normally. Things like BankMigration map and Slavery Footprint come to mind.
Update:
Something else that could perhaps use some help:
- @benzotweet is "trying to develop a database solution for occupy... crazy requirements! no training, role based security, decentralized... #wiki?"
"This isn't a protest, it's a revolutionary movement empowering people to create their own change. ...We're trying to encourage people to organize and create their own change outside of the existing establishment through direct action."Update 2:
An interesting idea for a project that came up last night: log tweets tagged with "#occupy..." that have pictures, pull out the geo exif data, and put it on a live-updating map ... kinda like http://www.artmapper.org/ (source at https://github.com/mertonium/muralmapper).
Update 3:
To stay abreast of tech-related opportunities to support #occupy, join the occupyhack googlegroup.
Update 23 Jun 2011: I have renamed the django-model-filters package django-model-blocks. It now lets you easily override the template used for a given model. Check out the changes on Github or PyPI.
Tonight I'm writing my first Django custom filter. The problem I'm trying to solve is that I want generic templates. For a given model I want to be able to set up browseable index and detail pages with minimal effort. As it stands now, say I have the following model:
...
class PepulatorModel (models.Model):
serial_number = IntegerField()
height = IntegerField()
width = IntegerField()
manufacture_date = DateTimeField()
color = CharField(max_length=32)
def __unicode__(self):
return u'Pepulator #%s' % self.serial_number
...
Now say I want my users to be able to browse my pepulators in a simple way, with the following caveats:
- They cannot edit pepulators, only view (rules out
adminapp) - I want to define the URL structure (rules out
databrowse) to be something like:
http://www.mysite.com/pepulators/
http://www.mysite.com/pepulators/?color=red
http://www.mysite.com/pepulators/012345/ - I want to specify the base template so that it integrates well with the rest of my project (also rules out
databrowse)
Currently, I can use the generic views ListView and DetailView, but I still have to write templates that go something like this:
{% extends base.html %}
{% block content %}
<header>
<h1>Pepulator #{{ pepulator.serial_number }}</h1>
</header>
<div>
<span>Serial Number</span>
<p>{{ pepulator.serial_number }}</p>
</div>
<div>
<span>Height</span>
<p>{{ pepulator.height }}</p>
</div>
<div>
<span>Width</span>
<p>{{ pepulator.width }}</p>
</div>
<div>
<span>Manufacturer</span>
<p>{{ pepulator.manufacturer }}</p>
</div>
<div>
<span>Color</span>
<p>{{ pepulator.color }}</p>
</div>
{% endblock %}
Okay, a bit verbose, but it's not going to kill me. However, now say I want to change some of the fields on my model. Well, then I have to remember to change the fields in my template as well (error-prone — this is why you don't violate DRY without good reason).
All I wanted was a simple view of my model!
So, I considered making an app that was leaner than databrowser and just provided generic templates to go with generic views. I found myself having to extend the generic views anyway, though, because there's no way to access a model instance's fields and field names without explicitly feeding them to the template's context. Then, I gleaned some inspiration from uni_forms: I'll make filters!
Now my plan is to be able to say, using the example of the Pepulator detail view above:
{% extends base.html %}
{% block content %}
{{ pepulator|as_detail_html }}
{% endblock %}
Sublime. (This must exist somewhere; but for now, I can't find it.)
So, I start off by creating my app
$ python manage.py startapp generic_templates
Now, from the documentation on creating custom tags and filters, I see I should create a templatetags direcotry in my app. In here I'll put an __init__.py file and a module called generic_filters. This way, when I'm done, to use the filters, I'll put near the top of my template file:
{% load generic_filters %}
I decided to start with the detail filter (as_detail_html), and to write a test first. I know generally what I want this to do, so I write the following test:
"""
Test the generic filters
"""
import datetime
from django.test import TestCase
from mock import Mock
from django.db.models import Model, IntegerField, DateTimeField, CharField
from django.template import Context, Template
from generic_templates.templatetags import generic_filters as gf
class DetailHtmlFilterTest (TestCase):
def setUp(self):
# Create a sample model
class PepulatorModel (Model):
serial_number = IntegerField(primary_key=True)
height = IntegerField()
width = IntegerField()
manufacture_date = DateTimeField()
color = CharField(max_length=32)
def __unicode__(self):
return u'Pepulator #%s' % self.serial_number
# Create a model instance
now = datetime.datetime.now()
self.m = PepulatorModel(
serial_number = 123456,
height = 25,
width = 16,
manufacture_date = now,
color = 'chartreuse',
)
# Mock Django's get_template so that it doesn't load a real file;
# instead just return a template that allows us to verify the context
gf.get_template = Mock(
return_value=Template('{{ instance|safe }}:{{ fields|safe }}'))
def test_model_format(self):
"""Tests that a given model is formatted as expected."""
expected_detail = (u"Pepulator #123456:[('serial number', 123456),"
" ('height', 25), ('width', 16), ('manufacture date', %r),"
" ('color', 'chartreuse')]") % self.m.manufacture_date
detail = gf.as_detail_html(self.m)
gf.get_template.assert_called_with('object_detail.html')
self.assertEqual(detail, expected_detail)
In short, set up a model and an easy template, and check that the template is filled in correctly. Of course, since I haven't yet written my filter, this fails.
This (as_detail_html) was a straightforward method to write, but I did get tripped up because of the poor documentation available on Models' Meta classes. Here's the first go at the filter:
from django.template import Context, Template
from django.template.loader import get_template
def as_detail_html(instance):
"""
Template filter that returns the given instance as a template-formatted
block. Inserts two objects into the context:
``instance`` - The model instance
``fields`` - A list of (name, value)-pairs representing the instance's
fields
"""
template = get_template('object_detail.html')
fields = [(field.verbose_name, getattr(instance, field.name))
for field in instance._meta.fields]
context = Context({'instance':instance, 'fields':fields})
return template.render(context)
One other thing: I actually want to be able to use the filter in my templates, not call it directly in my code. I'm new here, so I write another test to make sure I understand what's going on:
def test_filter_is_registered(self):
"""Test that the filter can be used from within a template"""
template = Template(('{% load generic_filters %}'
'{{ pepulator|as_detail_html }}'))
context = Context({'pepulator':self.m})
expected_detail = (u"Pepulator #123456:[('serial number', 123456),"
" ('height', 25), ('width', 16), ('manufacture date', %r),"
" ('color', 'chartreuse')]") % self.m.manufacture_date
detail = template.render(context)
gf.get_template.assert_called_with('object_detail.html')
self.assertEqual(detail, expected_detail)
And it turns out all I have to do to satisfy it is change my module in the following way:
from django.template import Context, Template, Library
from django.template.loader import get_template
register = Library()
@register.filter
def as_detail_html(instance):
...
Now I have a working object detail template. Yay! I figure I'll do the list the same way.
More on Github: https://github.com/mjumbewu/django-model-filters
Do you have a PhillyCarShare account? Do you know (or want to know) Python? For the past few months I have been working on a public API to PhillyCarShare's reservation and account management system. However, I have only had opportunity to test it on single-member, personal accounts (since that's the only kind I have). So now I'm reaching out for some assistance. I'm open-sourcing the interface and encouraging (or imploring) folks to tinker with it.
Developers
The source is available on github at github.com/mjumbewu/pcs-api. It's written in Python to run on top of AppEngine (though it could theoretically be ported to Django with minimal effort). I have an instance up and running at phillycarshare-api-kwawatu.appspot.com/. The app name is purposefully gargantuan, as appengine names are permanent for now, and I didn't want to create any problems for the future.
I know everyone is tight on time, so if there's anything I could do that would make contributing easier, please let me know. I realize the documentation is a bit lacking right now, and I'm working on it :). If you have any questions at all, let me know in the comments, or shoot me a message by email or on twitter @mjumbewu
Non-developers
If you're not a developer but still want to help test the API or stuff developed with the API, or have any other questions, contact me as well.
A system is a big black box
Of which we can't unlock the locks,
And all we can find out about
Is what goes in and what comes out.
Perceiving input-output pairs,
Related by parameters,
Permits us, sometimes, to relate
An input, output and a state.
If this relation's good and stable
Then to predict we may be able,
But if this fails us—heaven forbid!
We'll be compelled to force the lid!
#bcphilly I had a great time at BarCamp Philly 2010 yesterday. BIG ups to the organizers, JP Toto, Roz Duffy, Kelani Nichole, and Sarah Feidt. I had the opportunity to sit and pontificate with some of the most awesome folks from the city, the region, and beyond...and picked up a couple t-shirts to boot!
In the morning there was the session on Weaving a Regional Mesh For Open Innovation. I think the content of the session could be summed up in a statement made by the presenter, Joe Raimondo: "The World needs R&D". It was more or less an open discussion on ways to foster and encourage innovation around real-world local problems. We touched on early education, higher education, mobilizing community [human] resources, traditional hierarchical organizational structures, and a host of other topics. Most of it wasn't terribly specific to this region, outside of the examples raised (as most people in the room were from the region). It was an awesome way to start off the day.
Then there was an OpenDataPhilly talk featuring Paul Wright, Mike Jewsbury, Mark Headd, and Stuart Alter (not much of a tweeter) from the DoT. There were some good questions brought up by the audience here, such as how Philly is addressing the issue of 2-way data streams (as opposed to just from government to citizens), and how they (we?) are approaching data and digital tool access with respect to the digital access divide in Philly. Not all the questions were answered in ways that were yet satisfactory to me, but these are hard problems and only recently starting to get worked out anywhere, so I'll cut the panelists some slack.
After that I chatted and mulled around for a while, and eventually ended up in Kris Walker's presentation, Internet as Platform. It was an apt refresher on open-web principles, showcasing the current state and trajectory of web [browser-based] platforms. If I can recall where his slides are hosted, I'll post it here. Update: Here's those slides
After a nice lunch at Good Dog with Corey Latislaw, Jason Cox, and Pam Selle, I intended to attend a talk entitled "JavaScript is Real Code" with Len Smith, but for whatever reason it was moved to a later time slot. Instead, I and a couple other folks stayed around for an impromptu session on jQTouch with Wil Doane, who shared samples and explanations from code that he uses to teach a class at Hudson Valley Community College. I wanna do that!
After a bit of shuffling around, deciding on my next session, I settled into Riot URLs: Gender Feminism and Tech with Maria Sciarrino and a room full of folks discussing women and men (and boys and girls) in tech. On one level, I enjoy sitting around talking about bias in tech (takes me back to my college days), but there's something weird about it too. Maybe because I feel it's too important an issue to be touched on in an hour-long discussion, which is often as far as people go with it. Maria did express a desire/make a suggestion that the discussion continue in some form. Update: Maybe a regular brunch?
Lastly, I sat for a few in Corey's last-minute addition to the schedule, a disscussion around coding for good. I wish I could have stayed for the entirety of this session, but I had my partner's birthday celebration to get to (trade one good time for another).
Still have some thoughts to digest, and I'll do so later, either here or over on Kwa Watu. Just want to say thanks again to the organizers, the volunteers, the sponsors, the presenters, and the attendees of this BarCamp Philly.
I was reading up on design patterns a couple days ago after reading this scathing piece. The author is expressing his disappointment that so many software developers are generally ignorant of design patterns.
The article inspired me to search for some good flash cards for studying design patterns. Of course, nothing replaces a good reference like the Gang of Four, but still, study aids are nice. As it happens, a few years back Jason McDonald did put together an attractive set of cards based on the GoF patterns. These were nice, but I wanted something more extensible. So, I decided (or rather, was compelled) to spend a-whole-heaping-lot of time that I really didn't have over the last couple of days to stand up a mobile web app based on McDonald's files.
The app is located at http://www.kwawatu.com/gof — just point your sufficiently capable mobile browser at that address. It was written with jQTouch (which wasn't too bad to learn, coming from some familiarity with jQuery), and my guess is that it'll only work on iOS, Android, and WebOS. Possibly in Opera Mobile, but I wouldn't take that bet. On iOS, if you tap the '+' button in your browser, you can add the app (with a cute little icon, courtesy of M.C. Escher) to your home screen. I imagine you can do something similar on other systems. The source is available on my github. You need Python and Django to generate the app.
The "cards" are meant to accompany a good reference. Many things could be better about the app, but it's time for me to put it away for a while. I have work to do.
Even though it appears that the world has not yet heard of it (at the time I am writing this, all Google can tell me is that there is a 15 second say-nothing promotional video, and that I and one other person have tweeted it), I'm looking forward to checking this out:
Seventeen African nations gained their independence in 1960, but the dreams of the independence era were short-lived. Africa ... states of independence tells the story of some of those countries - stories of mass exploitation, of the ecstasy of independence and of how - with liberation - a new, covert scramble for resources was born.
I'll try not to be confused by the GMT air times.
I was looking through my Google docs for something I had noted a while ago (btw: it is helpful to have all your notes in one place—I need to do that more often), and I came across this list I made back in December of things that I consider important. I'm not sure if this is a complete list, but it is certainly still true.
It's good that I keep these things somewhere that they can be found. Now I need to work on finding and reminding myself of them on a regular basis.
- Be African
- Wear my Africanness proudly
- Study/explore my Africanness avidly
- Be a Craftsman
- Care about my craft(s)
- Strive to be the best that I can be
- Never cease to learn about what I do
- Be Ma'at-ian citizen of the Earth
- Apply my knowledge and talents to the betterment of life
- Lead a balanced life
- Not bite more than I can chew
- Be honest with myself and others
- Spend time getting to know myself
- Strive to make things that I'm a part of better
- Make good decisions
- Be prudent
- Be just
- Be discerning
- Be confident
- Be open (and humble)
- Be willing to change your mind
- Treat each day as a new opportunity to [... what? be great? be effective? act on my values? bring what I want into the world? ah...] live with purpose.
- Keep my life interesting!
To do: Work out a system to review and place things I do in context of these important things regularly.
I was looking to buy a few albums from Amazon today, when I found out that they only provide their mp3 downloader in a 32-bit package. Moreover, it requires other packages that are not available in the Lucid repositories.
Why do I want the Amazon downloader? Well, you can download individual songs/files from Amazon without the downloader, but in order to get whole albums at once (as well as some goodies that are sometimes packaged only with albums), you need the downloader.
I found a post that addresses this issue in a slightly earlier version of Ubuntu, but it didn't work immediately for me. So, here's what I did:
- First, I backed up my /etc/apt/sources.list
- Then, in the original /etc/apt/sources.list file, I replaced all instances of "lucid" with "karmic". There are packages that the downloader needed that are available in the Karmic repositories, but not Lucid. Specifically, these are the 1.34 versions of Boost libraries:
- libboost-filesystem
- libboost-date_time
- libboost-iostreams
- libboost-regex
- libboost-signals
- libboost-thread
- Use synaptic to refresh your package list, and to install the above packages as well as libglademm-2.4-1c2a (you can do it from the command line, but I used synaptic).
- From here, follow the instructions at http://www.ensode.net/roller/dheffelfinger/entry/installing_amazon_mp3_downloader_under (look in the comments for the current location of getlibs.deb). While installing amazonmp3.deb, if it tells you that there are other dependencies missing, go ahead and install those as well.
- After you've finished, don't forget to restore your /etc/apt/sources.list from the backup you made in step #1.
I'm having a bit of trouble recently understanding what I'm doing.
I'm not working for anyone else right now. No steady paycheck (no real paycheck's at all, yet). But I'm not unemployed. More and more I'm hearing the word entrepreneur. Of course, I've known the word, but never though it'd be applied to me. I've though about starting a business, other organizing endeavors, etc., but never wanted to be an entrepreneur.
I think, as I'm coming to understand it, there's nothing inherently that I have against entrepreneurialism. I think this is just another instance where I am deeply frustrated by the game we're playing.
Dictionary definitions of "entrepreneur" are usually similar to: One who organizes, manages, and assumes the risks of a business or enterprise. But the dictionary definition isn't really what I'm referring to here. It's rather the concept of what an entrepreneur is in my mind. For me, the concept of entrepreneur smacks too strongly of capitalism for me to be completely comfortable with it. It sounds like someone trying to make a buck. It sounds like the infinite creativity of humans directed toward financial gain.
Being around all of the independent workers, free agents, and self-proclaimed entrepreneurs that I have been recently, I'm realizing that they don't all share my feelings about the concept. I'm learning that entrepreneurialism is multifaceted, complicated (as most things are). According to a video by Grasshopper, which Cameron Herold showed in a TED talk, "entrepreneur" is just a relatively new word for "thinker", "doer", and "innovator". In a presentation that he gave at the European Creative Cities Conference, Blake Jenelle says that, to him, entrepreneurialism is "The art of building something that has never existed before.
I like Blake's definition, but that's not what an entrepreneur is to me. For me, an entrepreneur is someone who devises a way to make money off of something, whether it existed before or not. And maybe that's why I like the concept of missioneur, so far, which Jenelle has been evangelizing lately. For me, the appeal of missioneurialism is not any affinity for entrepreneurship, but instead because I see it as a tool with which to move money from the center. As such, I do not see it as entrepreneurship, though.It's entrepreneurialism as much as grassroots community organizing or non-profit work. By definition, each of those activities may be entrepreneurial, but they are not considered in the same vein.
To do: Write (and post) my mission. This is what will guide me, more than labels of entrepreneur or missioneur.
Went to an IndyHall happy hour tonight at National Mechanics. It was excellent.
There's one thing I've been noticing over the past couple weeks. "Successful" people are positive. I know this is nothing new or terribly original, but it's something that, when you really get to talking to people, you can't help but notice. They have a way of seeing the lesson and the value in almost any experience.
I have only anecdotal evidence yet (I'm a scientist), but I think it may be true that positive people are "successful" too. I'm thinking this is because there are fewer opportunities for outright failure when the majority of experiences have some value. So positive people are less likely to classify what other people would as outright failure; they're just stepping stones—educational moments—on the way to something else.
Ok, that's enough Tony Robbins for tonight.
By the way, I don't really hate marketing. I just have a lot to learn.
I'm just a little frustrated at Facebook right now. When I created my event, I checked the little box that said "Anyone can view and RSVP (public event)". Then, on my event page, under Event Information, it says:
This is a public event. Anyone can see the event, RSVP, or invite others to this event.Awesome. Sounds good.
So why, when I clicked on a link to my event without being signed in today, did it tell me that "You must log in to see this page."?!?! Turns out that when they say that anyone can see the event, they're just lying to you. Really what they mean is:
Only people with a Facebook account, or people that were explicitly invited, can view your event. And there's no way to open it up. Because the only public that we care about is the select portion of the public that chooses to use Facebook. We will alienate anyone else. Sorry.Damn it, Facebook! I already sent out the announcements.
I hate marketing. I guess the marketing I'm referring to is the sending of notices through email, twitter, facebook, and every other communication channel you can access. It makes my palms sweat. Makes my heart beat fast. I feel like I'm bothering people. I feel like I'm inundating a lot of already over-inundated people with extra information.
Part of this is that I have to get better at using different communication channels. For example, I sent out a tweet about the Phillyware meeting this thursday. It said:
hey folks, i'm holding a brainstorming meeting for ideas on building civic software community in philly. come by:http://tinyurl.com/24n8g3sSomeone from Refresh Philly repackaged it as:
Interested in building civic software tools for Philly citizens? Join @mjumbewu at @indyhall this Thurs http://bit.ly/9QOg1pI found that a much more appropriate blast. Why? They both talked about the meeting, but while my message leads with what I was doing, RefreshPhilly's leads with the reason you would be interested. It engages you with a question, an actual prompt through which to consider the meeting, in 140 characters or less.
This is, of course, something that anyone with any experience in marketing would know.
So I was sitting here yet again enjoying my Gnome desktop experience, and I was so moved by my enjoyment that I had to write a post about it. I'm really loving my Gnome these days.
Whenever I do a fresh install of Ubuntu (my distro of choice for a few years now), there are just a few things that I do to get my desktop just how I like it:
- I add a keyboard shortcut for the system monitor (usually Shift+Ctrl+Esc). When something's dogging my system, I don't want to have to click through menus to find out. I want it right at my fingertips.
- I install Do and Docky. I tried out Do at some point when I was looking for a bit of eye-candy, but it turned out to be so much more. I'm just a Super+Space away from my most used tools. It's like the quick efficiency of a terminal, but with all the glamour of the graphical desktop. It takes the graphical command runner far beyond Alt+F2 (or Win+R for that matter). I use Docky at the bottom of the screen. It took a bit of getting used to, but it just makes me feel good to look at it now. Maybe it's because I remember back to all those panels and desktop widgets whose main and only objective, it seemed, was to look nice (i.e. look like the Mac OSX bar), eschewing functionality. Docky covers aesthetics and functionality, and does both swimmingly.
- I download Epiphany and set it as my default browser. Epiphany is nice to use in part because it's the most light-weight browser around. Its beauty lies in its simplicity. If I want to open a link or an HTML file, I click and BAM, there it is. Moreover, it's nice to have a browser that just blends into my desktop. Don't get me wrong: Epiphany's not without its issues (on the top of my list are 151943, 598291, and 598584). I do suppliment it with Chrome as, for the time being, some web applications just work better there. If, say, I'm going to be editing several Google Docs, I'll use Chome; it's a less frustrating experience. Also, Epiphany can be slow at rendering some pages (for example, try scrolling down pages that use the experimental -webkit-box-shadow CSS style). However, by and large Epiphany provides a pleasant experience. With a few extentions, it's my casual-browsing browser of choice.
- I install Hamster and set the notifications to every 15 minutes. As I endeavor to improve my productivity, it's helpful to know where I spend my time. Also, being notified that I'm working on "Distractions" is a pretty good motivator to get back to work.
There are other things I do (pick a nice background image -- which changes every month, twiddle with fonts, download gstreamer packages, install a slew of plugins for gedit, ...), but that's pretty much all I need.
I wasn't sure how I was going to feel about all this social media stuff that Ubuntu integrated into the desktop by default, but it's certainly growing on me. I let Empathy and Gwibber start up with my computer. Also, I installed a Docklet for my GMail. I've found that, rather than inundating me with distractions, all of these desktop-integrated tools allow me to better concentrate on whatever I'm doing because I'm not constantly switching to my browser to check whether I have any new emails or tweets. If something new comes in, I get a nice, non-intrusive notification in my peripheral vision. I can glance at it and barely slow my typing. I don't even have to have my browser open, which contributes to my having a clean-looking desktop, which makes me love my Gnome even more.
Both Empathy and [especially] Gwibber have their issues as well, but overall I'm willing to put up with them to get the benefits. It's not a perfect desktop, but I'm very pleased these days. Having been using Gnome since 2001, it's nice to see how far things have come.
Anyways, being a develper, I'm hyper-sensitive to the fact that software doesn't appear out of thin air, and software never "just works"; other people make my software work. With Gnome, I have an even deeper appreciation of this fact, because many of these people are volunteers. That is astounding. My hat goes off to Gnome. Thanks!
Someone commented on my post-RefreshPhilly post the other day. Which was weird because I never really expect anyone to read this blog. It's more of a personal space. But then if I didn't invite it, I'd have made the blog private.
Anyway, it makes me nervous about writing anything disparaging. It prompted me to re-read my post, nervous about what I said. But I have no reason to be nervous (my most harsh comment was that the talks weren't "earth-shattering"). Really, I just have to remember that, even when writing to myself, I'm incredibly forgiving of my subjects.
So today, in about 13 minutes, I ran this much:
View Larger Map
It's about 1.5 miles, according to Google. I think I was trying to outdo my before. But it turns out I didn't do much better. I mean, I wasn't as beat as before, but I think that may be because I had more of a goal. Anyway, it's not bad. I feel like I'd like to be able to do 2 miles in 15 minutes or less.
- Information Architecture
This is classification of information within context. It's clumping and separating. It's apples and oranges, but to a botanist or a chef. The information architectural design is going to determine the structure of your menus and links (and probably other stuff).
Start with a detailed breakdown of the domain (context) you're working within, from a users point of view. Classify them according to importance and according to how well they can be achieved through software, and then clump them into separable categories (experiential goals -- things the user wants to do with the software).
The presenter recommended a book: Mental Models: Aligning Design Strategy with Human Behavior by Indi Young. Might be worth checking out. I should also get around to reading those other books like The Design of Everyday Things. - Back-end Coding
This, in the case of HappyCog and the Greater Philadelphia Tourism Marketing Corporation (GPTMC), was construction of the system that the site maintainers will interact with. It was choosing and setting up a CMS. It was also deciding how to transfer all the old data into the new system. - Front-end Coding
This was basically taking the design and coding it. She gave some good best-practices advice, like making landing pages for all top-level menu links (for folks without javascript), and making :hover = :focus and onMouseOver = onFocus for those people browsing with their keyboards (I do that!). Also, I like their "megamenus". - Design
I would sum-up design as a word in one of the slides: reinterpreting. It was taking a new [conceptual] image of the city and putting it into a visual statement. They came up with some emotive themes that they wanted Philadelphia tourism to embody (contemporary, fashionable, and a couple others I don't remember), and evaluated each of their design possibilities against those themes.
So this is the route I ran today:
View Larger Map
Apparently it took me about 10 minutes. Hm. Well, I'm not training for a marathon or anything, but I'd like to be in good soccer shape. That's not good soccer shape yet, I think.
I have to say, I am quite disappointed to be losing Lala. I think it has turned out to be my favorite music site ever. I mean, Pandora's cool (and it was cooler before I had to listen to ads), but sometimes you want to listen to what you specifically want to listen to. And Lala let you do that for $0.10 (or like $1 for albums). It was so easy to buy music at those prices. No complicated "is it really worth that?" questions. If you liked an album, you bought it, no hesitation. Then, you could listen to it to your heart's content until you decided that you needed it everywhere, and you made the plunge and bought the whole album. And you could still listen to it online. And if you never needed it everywhere, you never bought it for offline. No problem.
Now I'm faced with a delima. Lala's closing. My online songs will go away. Do I buy them? That's quite a bit to drop at once (particularly without a steady income). Apple will likely open up a similar service (well, one would hope), and I'd be able to use my Lala credits there, but I've never liked Apple software. Apple makes bloatware. Even if it were exactly like Lala in every respect, it'd take me some time to get over the Apple brand.
Oh well, I suppose I'll just wait and see.
I wonder if Apple's service will use Flash :). If it used HTML 5 audio, that'd be awesome. In spite of my less-than-stellar feelings about Apple and "HTML5", Flash is terrible on 64-bit Linux.
Update: OK, I sent it to MA a while ago, but here's some pictures anyway.
I'd like to address briefly one thing from Obama's speech in Cairo (you can find all but the very beginning here). In part 2 he says:
"Violence is a dead end. It is a sign of neither courage nor power to shoot rockets at sleeping children, or to blow up old women on a bus. That's not how moral authority is claimed; that's how it is surrendered."
A NY Times article addresses this:
"Many ... would not agree with Mr. Obama’s categorical comments about the futility of violence, noting that American revolutionaries had used violence in their struggle for independence against Britain." Violence happens to be an integral part in many moral struggles that we laud in retrospect. Yes, even in the U.S. civil rights struggle. Also, in the part 1, we find Obama justifying the U.S. troop presence in other countries. "Necessary", he calls it. I can't really blame him for not at least acknowledging this apparent hypocrisy, as the fact of it is antithetical to the rest of his point. But he's too intelligent to not recognize it.
Posts
(I also posted this over on the OpenPlans blog)
A few weeks back, I sent out a solicitation to a bunch of city clerks and other people connected to City Council bodies around the country that use Granicus's legislative management software, Legistar. I was requesting signatures on a publically available letter as a statement of the importance of opening the legislation data that Granicus collects through Legistar. This type of data has been a persistent interest of mine ever since I helped start Councilmatic a couple years ago.
The Method
To find the cities that use the software I searched Google for all sites on the domain legistar.com (i.e., with the search query "site:legistar.com"). Then I wrote a little scraper to step through the pages of that search and collect the subdomains. I took the results and started collecting contact information for the City Council contacts in those cities (see those results here — it's a far-from-complete list). I then contacted the people in that list with a little bit of background about myself, my projects, and the letter's purpose:
The letter is meant to let Granicus know that their clients think that it is important to have their data open and available to the public, specifically through an API. The letter is directed at Granicus because, as the letter states, they are in a unique position to open this data for a number of bodies all over the country at one time. The developers at Granicus are in favor of this type of action, but we believe that hearing from their clients that this is important would help them to prioritize it further.
...Many opportunities for business enterprise, journalistic storytelling, public advocacy, and citizen experimentation are lost when there is no access to quality data sources.
For demonstration of the latter point, see amazing work done by the likes of Open City folks in Chicago, or AxisPhilly in Philadelphia, or work coming out of the Code for America fellowship. There are many more examples of applications built with open data (here's a list of seven more apps covered by Mashable), but the data has to be out there in a way for developers and tinkerers to work with first.
An additional, unstated purpose was just to raise awareness about the value of opening this data, particularly with so many different parties interested in local legislative data recently.
The Response
I received responses from 5 of the people on the list, two from cities that agreed to sign. Both of the cities with favorable responses were from people that I had some prior connection to, at least through some common acquaintance, underscoring the importance of personal relationships and trust when making changes. I think that it is reasonable to expect a low return rate for any cold-call communication. The person on the receiving end is even less likely to response, I think, when they don't understand the purpose of the solicitation. We're still far from a point where an open data vocabulary is common in government. For example, one of the contacts that got in touch with had this response:
Please note that any documents pertaining to the [city represented] that would be available through Granicus/Legistar are already available to any member of the public through our website. I am fairly confident that is true of any city that utilizes their services. Have a good day and a wonderful new year.
The benefits of making data open and available in raw formats is something that I have found difficult to communicate outside of one-on-one conversations. It is definitely a big step to make data available in a human readable format, but computers aren't good at getting information in the same ways that humans are. Enabling people to build new things, tell new stories, and otherwise make the data useful to more people in more ways requires access to the data in a more computationally malleable form.
What's most frustrating is that, often, data is already sitting in a repository somewhere ripe for developers to use. This is evidenced by the fact that many documents, such as every Legistar legislation record, are generated from raw data. That data is simply inaccessible in its raw form. Access to the data is mediated by the format that the document is rendered into. Scraping is an option in this case, but it is an overly complicated, inherently fragile solution, and there are better solutions to be had.
Data openness initiatives like these have a higher chance of success when there are local supporters who understand the issue and can coach city contacts through what it all means. This is the approach that the OpenCity group is taking in Chicago, with some success. If I did this over, I would start with cities that have a local Code for America brigade to help with the outreach.
I spoke on a panel at a conference a couple of months ago: Reinventing Older Communities, Building Resilient Cities. The panel I was on was titled "Innovation with New Information":
Governments are using technology to better understand challenges and create solutions to meet them. Residents are using technology to report problems to local government for quicker resolution. In this session, we explore how technology is changing the relationship between governments and their constituents and offering greater efficiency, transparency, and accountability in the process.
I went to a midnight showing -- 12:30 actually -- so when I left the teater it was quite late. I won't say much about the movie, as I don't want to spoil it for anyone, and the specifics of the movie aren't important anyway. But I was energized. I felt like I could leap over cars and take any of the baddest bad guys in a fight if I had to. I was inspired, and a world of possibility seemed open to me. Yes, that "world of possibility" mainly consisted of vigilante justice, but that's not important.
Inspiration is a powerful thing. Unfortunately, in our every-day life, there are too many things that have the opposite effect. Sure, some things are uninspiring, but I would say that the opposite of inspiration is disempowerment. One stimulates you to action, the other encourages inaction. One expands your perceived realm of possibility, the other reduces it.
Disempowerment doesn't always take the form of someone telling you that you cannot do something either. Often, it is instead a message that there is nothing you can do. For example, in Philadelphia, the school district is broke. They're being dismantled, 40 schools are closing next year, and 6 per year for a few years after that. This is the framing that the issue has most often taken. As framed, it's a problem that no ordinary citizen can address -- it's a "city-scale" problem (it may be bigger than that, but I'll jst call all big problems city-scale for now).
In the face of this type of problem, people will do two things: (1) consider what effect the problem will have on themselves and their family, and (2) consider what they can do to mitigate the effects of the problem for themselves. There's not any point of considering a solution to the stated problem, for an ordinary citizen, because it's just too far outside of their circle of influence. I think this is, again, because of the problem framing.
A few people are able to cut through the problem framing and see that it is in fact a collection of many smaller problems. For example, the following post showed up in my Facebook feed one day i early May:
Schools are closing and if you weren't already aware moms and dads, the City of Philadelphia isn't offering "Summer Enrichment Programs" either, which means that there will be an exorbitant amount of children in need of some outside tutoring or help from wherever their struggling parents can find it. I wish I had a center that could accommodate every single child being left out due to these horrendous "budget cuts" but I can't. However what I can and will do and you can too is volunteer some of your time this summer on a consistent basis to the youth in your communites!!! I don't want money getting in the way of providing a service that most who need it can't afford so I will be offering my own "Enrichment Program" for a handful of "Early Childhood" age children this summer for free. Every Saturday morning I will offer this service for at least 3 hours. If you have a child in the SW area or are dedicated enough to drive from wherever you are and would like to get your pre-k, kindergarten, or 1st grade child some additional help with reading, phonics and basic math, before the new school year I am sure that we can make some progress together. Again this will be "free enrichment" not free babysitiing so there will be no drop-offs. If your child is here you will be as well...."team work makes the dream work"!!! Inbox me for details and soon so that I can come up with an offcial schedule as soon as possible!!!"
Reframing problems on "human-scale" returns power to humans. Another simple example: in Boston, in the winter, it snows. It can snow a lot. And the snow can cover and bury anything that's stationary for long enough. It covers everything including fire hydrants. As a consequence, in the event of a winter fire, emergency personel find themselves wasting valuable time finding and digging out the hydrants. The city doesn't have resources to dig out all the hydrants. And neither do you. This is a problem framed on city-scale.
In the face of this problem, a project emerged: Adopt-a-Hydrant. This is a web application that allows anyone to "adopt" any particular hydrant in the city. It says, "when it snows, this hydrant might be buried, so we'll notify you so that you can check on it". It took a city-scale problem and reframed it to human-scale. (Access to open data is a part of this. Hiding detailed information and knowledge about the world behind the wall of Government, and only letting the knowledge out in large aggregated chunks disallows human-scale reframings. If the city didn't provide data on the locations of all the fire hydrants, Adopt-a-Hydrant couldn't have been built.)
Empowerment is only part of the solution. The other is what we started with -- inspiration. Both are crucial. Inspiration with no real power will fall flat, and power with no inspiration won't even get started.
Make visible the people who are doing things, especially small and local things (the person who shovels out a fire hydrant down the street when it snows has a real impact). Hold them up as heroes and tell their stories of achievement. Further, don't just make these people visible, but demystify their process of making change. People will be more likely to do things if they know how, or at least know that they have access to instructions.
The internet has borne tools successful at doing all of these things: inspiring and empowering people to mobilize resources they have access to in order to make an impact on their own or other peoples lives through access to information, networking tools that augment real-world activity and interest, and technology that removes the hassle of traditional barriers to entry (for example, accepting electronic payment). The field of civic engagement software remains ripe with opportunity in this respect and I'm eager to see what's developed next.
I'll continue to think about this, and I hope that I get another chance to give this talk (or one like it). I feel that the content is true and isn't often framed this way, at least when talking about software.
- It's a good time. Community organizing is sexy now. Facebook is watered down. There’s not a hub for inspired people to share their successes -- to show off. Excited about putting together a bar that appeals to organizers' narcicism.
- Schools in Philly suck, and there are certain groups of super-moms who are teaming up and saying they’ll be involved in their local school, which is horrible, and make it good. There are others who want to do that as well. If we were able to provide a mechanism for sharing those strategies, that would be awesome.
- Education about and sharing of experience is exciting. There’s so much good that happens that it just makes sense that there should be an easy way for people to learn about what others do.
- Creating civic leaders. Encourage and convince (or con) non-civic leaders to take action. Turning complainers into civic leaders.
- Making it exceedingly easy to do something positive in your community.
- There are cool things that people are doing to make their city a better place, but they’re really hard to find. There are weird ways that people help, and I would like it to be more easy for people to find what those ways are. If it was more transparent and people could see “recipes” for getting things done.
- Would have loved to have a tool like this when doing community organizing so that I could know who it is that’s out there already organizing events, so that I could talk to them; ask to share organizing letters, contacts, etc.
- Bringing knowledge from people who know how to get things done to people who don’t know how to get things done. Also, putting the spotlight on people who are doing the right thing.
- Excited about imparting practices that good leaders have now onto new leaders.
- Seeing people getting involved/voluneering because of the ET
- Seeing people exchanging organizing knowledge through the ET
- Seeing people organizing who haven’t organized before
- Seeing people taking action who would not otherwise have
- Seeing people making an impact on real people in real places
- Seeing people contributing their stories of successes through the ET back to the ET, demonstrating investment in the community
- Seeing people getting up to speed with community organizing faster than those who came before them, which we may measure by surveying people when they register
- Seeing companies wanting to provide plugins for their software to connect with the ET
I've been thinking recently about how to enhance city institutions using tech skills. I'm still relatively new to really diving into it, but this represents some of my current thinking on the topic.
All I know so far is that this is a two-way street: people need to build up their institutions, and institutions need to support their communities in building them up.
The Gist...
For institutions:
- Let your community help you.
(Corollary: Avoid, when possible, legal agreements that restrict you from receiving help from your community) - Empower your community to help you.
- Ask your community to help you.
- Your community is you.
For developers:
- Just do it.
- Have patience.
- You are your institutions.
Institutions...
Let your community help you. People want to help. Don't push them away (with few exceptions). I love how some of Philly's innovative schools readily accept community support (I'm thinking Science Leadership Academy and Devnuts). Though, the institutions may need to be doing something to inspire community support in the first place.
A corollary here is that institutions need to avoid legal agreements that restrict them from receiving help from their community. Sometimes you just don't know until it's too late that you're involved in such a restrictive agreement, particularly with the pace of new technologies. But at the point of realization, you should from thence treat the restrictive agreement as if it is bad for your institution, because it is.
And giving your community opportunities to express their affection is a good thing. So ask them for help, if you need it. As with any relationship, of course, don't overstep your bounds. And this only works if you have a relationship with your community in the first place. Which you should. If you're really local (not just biding time until you can expand to increasingly larger markets), you need to focus on the relationship between you and your community. For a local institution, your community is you. If your product is not as strong as your competitors', then your community will wise up. And with potentially larger, national competitors with deeper pockets, it may be difficult if not impossible to keep up in perfect step with product quality. But community love (e.g. affective bonds) will keep your patrons with you. Affection is added value.
Developers...
If you have a project that you think would benefit a community institution, go for it. Shoot first, ask questions later. Times that I've taken this approach have sometimes worked out, sometimes not. But I have regretted every instance of not acting. Sometimes this may be bad advice (anyone have stories for the comments?), but if you wait for the institution to back you up, you may be waiting for a long time. Even if you act first, you may be waiting for a long time, but at least you'll have something to do while you wait. You'll have drive to keep going because you can see something happening, and you may be able to pick up supporters because they'll see something happening.
Nothing happens unless someone acts anyway. So it might as well be you. Because, when you get down to it, you are your institutions. They are yours to accept or neglect, shape or destroy.
So if you have the resources, and it doesn't hurt anyone, just get started developing. Legal worries? Worry about it later (of course, comply with any cease and desist orders; but if you get none, then keep going).
A few weeks ago I attended the Supernova Forum at the University of Pennsylvania. It was great — I got to hear from and talk with so-called thought leaders in business, government, education, and media on topics related to the "network age". While there, I was plagued by a feeling that there was some phenomenon absent from the conversation, but I couldn't identify what it was. Since then, I've reflected and named this phenomenon "The tyranny of the tech elite". This tyranny is a reframing of the idea of digital inclusion. It is somewhat in contrast to the idea of the internet as a democratizer. I'm still struggling with this concept, so take this as a work-in-progress.
(I was going to write this post myself, and have been agonizing over how to do it right. After some research, I found that Joshua Breitbart already wrote much of it for me four years ago. So, in summary...)
The future of us...
The Web is a pretty neat technology. With it, people can do and have done some amazing things.
Generally, we (the educated, technologically savvy, modern-day bourgeoisie...yes, probably you too!) think it's so great that we want everyone to take part in it. So, we talk about technology vis-a-vis marginalized groups like "how do we get them to where we are?" We talk about reducing digital division, and increasing digital inclusion. There are a few assumptions in this: (1) Where we are is good (nay, best, at least for now), (2) They will want/need to be where we are.
Joshua Breitbart has this to say about digital inclusion:
[The phrase "digital inclusion"] carries an implication that people who are offline are being brought into a perfect world. That’s clearly not the case.
What we see in the online world is the result of a land rush where English speaking white men had first crack at the virtual real estate. Digital inclusion is like saying poor people, people of color, and non-English speakers are allowed to shop in white neighborhoods.
This maybe gets to the heart of the tyranny. Access to global networks and technology is a real issue, and it's deeply distressing how closely race, class, gender, and other "traditional" forms of marginalization are correlated with access gaps. However, the digital divide these days isn't so much about people having access to global networks and technology. It's about shaping those global networks and technologies in ways relevant to one's own reality. Defining the future of technology. Some have a much larger hand in creating these definitions for themselves, their neighbors, and their children.
It brings to mind danah boyd's tweetable quote regarding privilege and publicness (at about 30:30 in the video): "...[T]he internet is not automatically a great democratizer." Certain voices get heard farther, louder, and more readily than others, and carry more weight in public discourse. When we observe and analyze how technologies are used, what affects they have, and where we (and our children) are taking them, we do so from a certain perspective, bringing in our own selective focus and our own ideas about which voices to privilege. As it happens, the cultural idea of what "the future" — of technology, of the internet, of us — will be is still left by a wide margin to those privileged voices.
Of course, technology is not novel in this regard. The prevalence of privileged perspectives are as old as hierarchical society (or at least as old as forms of mass media/communication). Marginal or alternative perspectives are always late to the popular discourse. We have to remember that the Web may alter structural inequalities, it does not remove them. This formulation of the digital divide isn't something that can be eliminated by distributing computers and high-speed internet access (though, in some way, that helps).
So...what now?
Joshua Breitbart goes on in his article:
We want to do more than just include people in the online world as it currently exists. We want that new involvement to transorm that world. This is what I hope to imply with the phrase digital expansion. It’s also what I want to imply when I talk about “open internet.”
So how do we achieve digital expansion? I'm not really sure. I half-way agree with Jeff Jarvis that time (and demand) will heal some of these wounds. However, we can't wait around and expect structural inequalities to spontaneously disappear. I have some guesses for first steps (some of these are borrowed loosely from Chicago Digital Access Alliance (CDAA)'s 10-Point Plan for Digital Excellence):
- Make the internet universally available. This stuff should be a public utility. Or, better yet, a human right. I don't think that access (or lack thereof) to capital should be a determinant in whether one can access the internet or not (capitalism is one of the most frustratingly unacknowledged forms of sanctioned discrimination).
- Keep (make?) the internet open/neutral. Though, as Breitbart points out, openness on its own is not enough. "Open does not mean equal, it doesn't mean that usage or usefulness is the same for everyone. Access does not equal justice, but it is necessary for justice. Therein lies our work."
- Be aware of and concerned with social justice issues. They don't go away once you move online. In some ways, they're exacerbated.
- Invest in people. Digital literacy and fluency are forms of human capital and require public investment. Digital proficiency must be promoted at neighborhood based locations, especially community technology centers, community based organizations and libraries, to strengthen resident understanding of new technologies. And remember that access at an early age is a key factor in raising people who don't just know technology, but are comfortable with it.
- Build local infrastructure (social and technological). “Price points are one barrier to entry for the poorest community members' use of a network, but so are software design, literacy levels, and misinterpretation of what a community needs from a network,” says Hannah Sassaman, Program Director of the Prometheus Radio Project. Community networks need to be about more than Internet Service Provision — they need to build community-wide Local Area Networks to house information, services, and multimedia on the network itself. Emphasize being a part of a local community and building relationships within that context. Yup, create divides — but divides that are respectful of one another. These will allow diversity to flourish on the Web.
There's a lot more to this conversation (like about how in/effective legislation might be in addressing the issue), but that's a start.
OneWebDay is a global event aimed at giving all people a chance not only to celebrate the Internet, but also to raise awareness of the importance of maintaining the open-networking principles that have made it the success it is. As OneWebDay 2010 approaches, I'll be posting some of my own and other peoples reflections on One Web.
OneWebDay should be local and global simultaneously. It should highlight the ways that people use the web locally, and acknowledge in a non-trivial way that the web they use is the same web that is used the world over—one web.
Talk of the death of the web has gotten a fair bit of play since the Wired article on August 17. Notwithstanding its grandiose title, there's actually a fair bit of useful content and food for thought in the article (it's actually two articles—one by Chris Anderson and one by Michael Wolff—explaining the same phenomenon from different perspectives).
Fact of the matter
The Web continues to grow. And so does the internet. The Anderson article says that the web — "largely HTML data delivered via the http protocol on port 80 — accounts for less than a quarter of the traffic on the Internet...and it’s shrinking." However, Internet traffic as a whole is growing exponentially each year (interestingly, United States traffic is only growing roughly linearly — check out Cisco's Visual Network Index forecasting tool).
So, while the Wired articles paints this picture:
It seems a lot more like this:
What is the web? (and what's a browser? and an app? ...)
So, the web isn't dead. But so what? As the Anderson article points out,
The Web is, after all, just one of many applications that exist on the Internet, which uses the IP and TCP protocols to move packets around. This architecture — not the specific applications built on top of it — is the revolution.Not only is the web but one app built on the Internet, but each website can be thought of as an app unto itself, built on top of the Web. In this sense, the Web is very much like an app market. (There is at least one crucial difference between the Web and the App Store as application marketplaces: no one — or maybe everyone — owns the Web1. No one can tell anyone else what can and cannot be put on the Web1.)
Technologies get superseded all the time. Several social networking sites (apps?) have come and gone. A few years down the line, no one really notices. One day, the Web as we know it and access it through web browsers may fall out of favor relative to some other information creation and distribution technology. But probably not any time soon. Unlike the case of the big social networking sites, the Web is not really in competition with the App Store (or any other marketplace). The Web is an open network, benefiting and growing as much as Apple (well, maybe a little less) from the success of the App Stores millions of Internet-aware applications.
Technology, or values?
The danger posed by threats of the death of the Web is not really that we would lose the Web, but rather that whatever takes its place might not be built on the same foundational values as that which gives the Web and the Internet such promise and potential.
So what are the values behind the Internet/Web? I don't know of any comprehensive or authoritative lists, but here are a few around which there seems to be some consensus:
- Transport Equality — As far as the Internet is concerned, all nodes and data should be equal. No prioritization based on arbitrary distinctions.
- Collaboration and Transparency — Development proceeds under shared global ownership and is based on open standards.
- Accessibility and Openness — Anyone should have access the content on the Web, and anyone should be able to create content on the Web.
If anything right now has the ability to kill the Web, it is our lack of protection of these values. Forgive the drama, but the Web devoid of its principles is dead. This is why this net neutrality stuff is such a big deal. So far, Chile has passed a neutrality bill. Now we're just waiting for everyone else to catch up.
In the mean time, it's on us to protect, express, and spread Web values. At the 2009 Internet Governance Forum, Ian Peter proposed we write 10 Commandments of the Internet. Of course, what these are still need to be determined. His were:
- Independence of applications
- New applications can be added anytime that’s a core value
- Permissionless innovation
- Open standards
- Accessible and globally inclusive—anyone can use it
- User choice—I can choose what applications I use and where I go to with them
- Ease of use—I can use it in my language, I can use it in a device I’m familiar with
- Freedom of expression
- The ability to change rapidly
- Trustworthy and reliable is one we have to work on; it’s got to be a core value.
1This is debatable. Given sufficient resources, there are few limits to what you could do, but ultimately you are beholden to whoever owns the servers your data lives on, and the wires that connect you to the Internet backbone.
OneWebDay is a global event aimed at giving all people a chance not only to celebrate the Internet, but also to raise awareness of the importance of maintaining the open-networking principles that have made it the success it is. As OneWebDay 2010 approaches, I'll be posting some of my own and other peoples reflections on One Web.
OneWebDay should be local and global simultaneously. It should highlight the ways that people use the web locally, and acknowledge in a non-trivial way that the web they use is the same web that is used the world over—one web.
In April 2010, OneWebDay.org announced that it would merge with Drumbeat, "a new initiative of the Mozilla Foundation that shares all of OneWebDay's goals and values." Additionally they say that they "will retire [the OneWebDay] brand and invite all of its people to join forces with Drumbeat’s growing community."
I think the merging with Mozilla Drumbeat is a good thing. It is useful and important to have avenues for people who are willing to get more involved. However, does it justify dissolution of the One Web Day brand? Institutionalized celebratory events can play a useful societal role. Nathanial James, former executive director of OneWebDay, says:
I’ve spent most of my time with OneWebDay listening to as many of you as I can reach. Here’s the number one thing I hear from you: “Our OneWebDay was amazing! Let’s do more! What’s next?James presents this as a reason for merging with Drumbeat, but how many of those people asking "what's next" would not have gotten involved at all without One Web Day? If anything, I think this is an excellent reason to continue to support and build the One Web Day brand. As the event spreads, more and more people will be exposed to the ideals underlying the open web. Some of those people will choose to become more involved, and others, though not organizing directly, will take values learned and spread them. Spreading the meme of the open web is as important as active organization.
Of course, it is preferable to have the values of one web be celebrated and practiced every day. As James writes, "Unlike OneWebDay, [Drumbeat projects happen] every single day and with some powerful infrastructure behind [them]." This is a great thing. In order for these projects to achieve their maximum impact, though, open web values need to be integrated into the cultural fabric. They need to be presented in a sticky way and embraced by people outside of the circles of the technology elite. That should be the place of events like One Web Day.
OneWebDay is a global event aimed at giving all people a chance not only to celebrate the Internet, but also to raise awareness of the importance of maintaining the open-networking principles that have made it the success it is. As OneWebDay 2010 approaches, I'll be posting some of my own and other peoples reflections on One Web.
OneWebDay should be local and global simultaneously. It should highlight the ways that people use the web locally, and acknowledge in a non-trivial way that the web they use is the same web that is used the world over—one web.
Last OneWebDay, Sanjay Patel shared some surprising data comparing "what it costs [him] on a montly basis to get cable speed internet here in the United States along with 3 different quotes [they have] received for installing internet connectivity to a school that is a stone’s throw away from one of Tanzania’s largest cities."
Check out the full post here: OneWebDay | The Epic Change Blog
OneWebDay is a global event aimed at giving all people a chance not only to celebrate the Internet, but also to raise awareness of the importance of maintaining the open-networking principles that have made it the success it is. As OneWebDay 2010 approaches, I'll be posting some of my own and other peoples reflections on One Web.
OneWebDay should be local and global simultaneously. It should highlight the ways that people use the web locally, and acknowledge in a non-trivial way that the web they use is the same web that is used the world over—one web.
I'm designing a survey to administer at recreation centers and libraries to get a sense of what people get out of the city's public computing infrastructure, what people seek to get that isn't available, and what they assume isn't available but would like to see. I would expect the survey to be filled out when a user is done with their session on the computer, so that they'll have a sense of whether they had achieved what they came to achieve on the computers.
I'd probably be violating all sorts of human subject research rules by just going in and asking people to take the survey, but if I can't get explicit permission, that's what'll happen.
The survey is at http://bit.ly/8XwlRn. It is still evolving at this point. Most importantly, I have to get people to look over it so that I can get it into some more normal language.
Update: So, I've gotten a couple of pretty good pieces of feedback since I posted this yesterday. First, from @digitallogic. Noting the fact that people are often unaware of the realities of various available technologies and so are unable to determine certian changes that would provide them with a meaningful impact, he says:
The ideal approach would be to follow someone through their whole usage and observe where improvements could be made, though this may be a better in a business environment due to the nature of tasks be performed and obvious privacy issues.
Barring that, hopefully these might go more in that direction:
- Is there anything you would have liked to do on the computer today which you were unable to?
- Other than your primary goal (check email, do homework, read websites etc), what did you spend most of your time on? (wording on this is weird, trying to see if there's some major hurdle that could be over come, ie - 5 mins to check email but 15 mins to log in)
The next bit is from @beingpurposeful. She recommends that I stay away from negative questions, as value biases are more easily built into these. To ask something and not its inverse paints that thing as notable (i.e., abnormal). Sure, I have my own value biases, but I'd do well to protect the survey from these as much as I can.
So, I have to build these suggestions into the survey. Thanks!
I was at the Apple store the other night, and it dawned on me that Philadelphia's computer centers should employ Apple Geniuses. They should be intimate with the inns and outs of the machines in the centers. They should have a thorough knowledge of the city's technology infrastructure, what you can do with it, and how it can solve your problems. At each center the geniuses should report to the community they serve, as well as to the Division of Technology, maybe on alternating weeks.
This wouldn't just be of service to the technically challenged community members, but would also help the DoT keep a pulse on how city residents are trying to use the centers—what they're doing and what they'd like to do that they're not currently able to.
Now, I'm not just saying that you should put tech-savvy people in the centers. I have no idea how Apple trains and prepares their Geniuses, but the patience, warmth, and passion about the technology they're showcasing is what makes Apple's Geniuses work. Good customer service. That's probably the hard part, but it's also the most important. I'd take a passionnate and compassionnate person over an actual tech genius who was cold and impatient any day. Though, of course, I'd prefer a passionate and compassionate bona fide tech genius. Maybe it's something you have to select for in the interview process.
Todo: Do some research into how the city's computer centers are currently staffed/supported.
Here's an excellent talk by Nalini Kitamraju, assistant professor at the University of Twente in the Netherlands, for Harvard's Berkman Center for Internet & Society on the tension in creating e-government services using user-centered design principles.
This one's highly recommended for anyone interested in how governments can better interact with citizens in the digital age. To be honest, the lessons from the talk are not limited to e-government; they can be applied to government in general. However, as we're fumbling through figuring out how to best use the tools we've developed over the last half-century or so, the video provides some great food for thought.
Nalini Kotamraju on the Tension between User-centered Design and E-government Services
Individuals and institutions are slower to adopt e-government services due to a lack of user centricity in design and development. Work with PortNL, an integrated e-government service for expatriates in the Netherlands, suggests the core of governments' difficulty in creating user-centered services lies in a fundamental tension between the needs of users and those of governments. In this talk, Nalini Kotamraju — an Assistant Professor at the University of Twente in the Netherlands — explains how the purposes of e-government services can be met through a user-centered design approach, and how site builders can put the needs of users ahead of the ideas of governmental clients.
Through most of the talk, Kitamraju is focussed on government (remember: government is just a group of citizens) as a service provider. One of the points that she brought up during Q&A is that participatory democracy is relatively low on citizens' lists of e-government concerns. Granted she was doing her research in the Netherlands, but I would venture that much of it is relatable to the United States and other Western countries, at least most of the time. The popularity of democratic participation ebbs and flows in this country. Many people are looking for ways to use tech to help drive popular participation, and it will really be no small feat to do so. We're not in a situation where the masses are perpetually pounding at the doors of city hall.
At the same time, though, there are novel uses of modern social media and technology for driving engagement. At the Supernova forum this past week, I learned about ThinkUp, an app from Gina Trapani & Co. at Expert Labs. It provides an exceedingly simple way to poll for anecdotal answers to arbitrary questions using Twitter. It's not a government app per se, but certainly one that they could use. Perhaps it's not that citizens aren't interested in talking with the government. Perhaps citizens just feel that it's not worth the effort—government doesn't listen anyway. Perhaps if there were better, more engaging, less bureaucratic ways to communicate with government, people would be more interested in doing so.
In other words, maybe citizens' standards are just lower than what they should/could be. If there are no worthwhile communication channels with government, then no one expects there to be. However, if there were worthwhile channels, then people may raise a fit if you to take them away. This brings to mind Tim O'Rielly's conception of government as a platform (a good definition of a platform, via Scott Heiferman, is something that enables people to empower other people). For now, government is like an IBM/360; you can build on it (well, some people can), but it's cumbersome, expensive, and often over-centralized. When will we get to Django or Ruby on Rails? And what cultural shifts will be necessary?
But I digress.
Watch the video (in one of several formats) here.
(via Putting People First)
Okay, I'm submitting my Gigabit bid. If you like it, vote for it on the Gigabit Genius Award Google moderator page. It should be one of the most recent ones. This was adapted from a post a few days ago. For more information on the grant, go here.
Summary:
Set up a system where residents could access their desktop and files over the internet, from any computer. Offer a service that rents out netbooks that come configured to connect to the system. For visitors, it would serve as their portable guide to the city. For residents, it would serve as their city dashboard. And for students, it would enhance their classroom materials.
With a citywide fiber network...
We could set up a cloud desktop service. With high-speed communications infrastructure on the gigabit level, the experience of using a cloud desktop (if well-constructed) shouldn't differ too much from using a native desktop today, assuming a reliable connection.
To take advantage of the desktop, we could have a low-cost netbook rental service. You can get really quality books in the $350 range. These could be paid off for the business if they rent at $1.00/day (plus a bit for insurance/security deposit) in under a year. The price of internet service would have to be factored in as well, but the rental service could obtain a very competitive contract if they buy in bulk. We could offer every resident one personal cloud desktop account for free.
The netbooks could come loaded with some city-branded fork of, say, ChromiumOS, whose opening screen can be configured based on the renter (Resident or Visitor, for example). For visitors, it could be like a VisitPhillyOS. It could be their light, portable guide to the city, incorporating and expanding on all aspects of the new visitphilly.com.
For residents it could serve as a virtual briefcase preconfigured with various useful tools for using their city—a PhillywareOS. With it, residents could locate and have instant streaming access to local community radio and television stations. Notifications for things like 311 reports they've filed or updates on legislative actions they've subscribed to could be integrated into their desktop experience. It could come configured with applications for things like managing utilities, licenses, and taxes, and other things that residents might be interested in doing with the city (however, expanded online presences for these services would have to be created first; see Philadelphia 3.0).
The hardware rental aspect of this idea isn't technically necessary; residents would be just as able to access their personal cloud-desktop from library computers, or from any computer with the appropriate software. However, the rental aspect is exciting because it seems a good way to expand tech access in the city. A pay-as-you-need model might be ideal for many residents. And with all their data online, if they did have to get rid of their computer (e.g., for financial reasons), it wouldn't be AS big a deal.
Perhaps most exciting is that schools could strike up some sort of subscription deal, so that students would all have a netbook and a PhillySchoolOS cloud desktop account, which would come loaded with educational software tools. Look for netbooks that are good for reading and eliminate the need for physical text books. No more beat-up, out-dated texts (even if the computers get a little banged, the information content could be kept up-to-date).
And this wouldn't only be valuable for the technology challenged either. I've actually considered doing something like this myself—keeping a machine up at my house, and just VNCing in from a nice light, portable, netbook with an SSD. The primary thing that stops me is that latency is just too high—I like (and for some development tasks, need) a snappy interface. Gigabit to the rescue!
One more reason I like the idea of netbook rental is that it could work even without gigabit! It would just work so much better with it.
With $10,000...
What could be done with $10,000? That is enough to buy about 20 machines. That's not many. Moreover, gigabit infrastructure does not yet exist in Philadelphia. But we wouldn't need to twiddle our thumbs until it does. One possibility for the grant funds would be to use a limited number of netbooks (starting with 10 or so) to run a pilot program, perhaps in cooperation with one of the Free Library branches in the city. Netbooks could be rented through the library's checkout system to any adult with a library card.
Let's use Clear Wireless as a simple sample price point. From Clear, with a 2-year subscription agreement at 40$+tax ($42.80)/mo, you can get a Dell Inspiron Mini-10 with built-in 4G WiMax for $250+tax ($283.54). If you expect to use a netbook for the full two years, the cost of hardware and internet comes out to $1310.74 (or $54.62/mo). If the library charged something like $0.60/hour ($0.01/min) or $5.00 for overnight, the price of the hardware and internet service could easily be recouped.
Improve this idea!
This is doable! If you have something that you think would make this idea better, leave a comment, or send a message to the Philly Software for Citizens Google group.
The deadline for submission of ideas to the Gigabit Genius Grant is nearly here (it was extended, at some point, to June 30). I've looked through the submissions (all 158 of them, so far) and there are a few that I like.
Some are good ideas but very vague, some of the ideas are very science fiction, and some have very little to do with high-speed communications at all, but all's good in the name of generating initial ideas.
One thing I notice is that so few of the ideas link to any place where they provide more information, which is a shame; I'd like to see more depth to some of them. So, for some of the ones I liked that didn't have much further explanation, here's my take.
Cloud Computing
So, this was probably my favorite suggestion. Allow for very low-cost computer/netbook rental with "cloud"-based desktops and application access. Actually, there are three or four submissions that propose this in some form. For example:
a truly ONLINE "COMPUTER" where you can access and use all your files and software/application from any connected device. Soft/Apps would be running on the server side.and
Create a redbox type rental system for netbooks ($1/day) to provide low income areas an affordable computer solution. Operating System processing and software access would happen in the cloud removing the need for the latest and greatest hardware.and
Utilize thin client computing on a residential level to give low income housing an affordable solution for PC's. Operating System processing and graphics rendering would happen in the cloud, negating a need for the latest and greatest hardware.So, have a low-cost hardware rental service (does Clear rent out hardware?) with netbooks. You can get really quality books in the $450 range. These could be paid off for the business if they rent at $1.50/day (plus a bit for insurance/security deposit) in under a year. The netbooks could come loaded with some city-branded fork of ChromiumOS or something, whose opening screen can be configured based on the renter (Resident or Visitor, for example). For visitors, it could be like a VisitPhillyOS. Nothing too complicated. For residents it could come configured to, by default, point to applications ("cloud"-based, of course) for things like managing utilities, licenses, and taxes, finding local community media, reporting non-emergency incidents (311 stuff), and other things that residents might be interested in doing with the city (however, expanded online presences for these services would have to be created first; see Philadelphia 3.0).
With high-speed communications infrastructure on the gigabit level, the experience of using cloud applications (if well-constructed) shouldn't differ too much from using native applications today, assuming a reliable connection.
The hardware rental aspect of this idea isn't technically necessary; residents would be just as able to access their personal cloud-desktop from library computers, or from any computer. However, the rental aspect is exciting because it seems a good way to expand tech access in the city. I know people who, over and over, save up, buy a cheap computer and end up pawning it at a later date (at a much lower price) because they need the money for something else. A pay-as-you-need model might be more appropriate for many residents. And with all their data online, if they did have to get rid of their computer, it wouldn't be as big a deal.
Of couse, another dependency here is that network access itself would have to be affordable. Netbooks are much less useful without the net.
Oh man, and schools could strike up some sort of subscription deal, so that students would all have a PhillySchoolOS cloud desktop account, and a netbook. Look for ones that are good for reading and eliminate the need for physical text books. No more beat-up, out-dated texts (even if the computers get a little banged, the information content could be kept up-to-date). I suppose they could even rent out iPads, though without handwriting recognition, or the ability to wrest control from Apple, I'm far less excited about that idea. Go with some other tablet netbook.
And this wouldn't only be valuable for the technology challenged either. I've actually considered doing something like this myself—keeping a machine up at my house, and just VNCing in from a nice light, portable, netbook with an SSD. The primary thing that stops me is that latency is just too high—I like (and for some development tasks, need) a snappy interface. Gigabit to the rescue!
One more reason I like the idea of netbook rental is that it could work even without gigabit! It would just work so much better with it.
So that was my favorite idea. Here are a few others I like for one reason or another:
City Online
I would create a "city online" that means: online where and how much is the article you wanna buy + see traffic online + school clases online + trafic cameras online + etc etc : that means from home you can see ALL that happens in the city servicesAlso related:
Make every city device a data gathering node. Traffic lights, garbage cans, surveillance cameras, public spaces, metro stations, buses, etc. Then, use statistical analysis on the data to create a better city according to people behavior and needsMore data (yesss!). While we're at it, start applying IPV6 addresses to city locations like mad. Houses, street lamps, trash cans, mail boxes—all of it. Then, give them all little transmitters and let them send status updates over fiber. "I'm a trashcan, and I'm full. Empty me!" Maybe a little far off, but not nearly as sci-fi as it once was.
Remote Music Collaboration
Real Time Music Collaboration with Remote Viewing Parties... Artists throughout the city can participate in a real-time concert from the comfort of their own homes, while listening parties allow friends to listen, cheer and sing along. From home.I actually know a friend of mine who tried something similar out (a remote DJ tag-team session). It can be done, using current infrastructure, but it's far from ideal. Because the software has to play tricks to synchronize the timing between the two musicians, it's clunky to use for things involving coordinated improvisation.
Libraries
Redesign all of the existing libraries into a multi-sensory experience on all possible topics.I don't really know what that means, but I think something with the libraries would be great. In order for libraries to stay relevant they've got to do a bit of reimagining of what they are. Libraries aren't just books. Libraries were centers of historical memory. They were places where the encoded information in society went to be maintained and cataloged, so that it could not be forgotten. These days "the internet" is taking on that role. I guess. I'm not really convinced. I mean, sure, the internet doesn't forget, except it does. Things get deleted all the time. Without a concerted effort to maintain information, it's too easy to throw it away. Of course, some organizations have made it their business to cache and catalogue the internet (e.g. Google). But what's the library's role today. Thankfully, I believe there are some smart folks in Philly thinking about this very question on a regular basis.
So, before I forget what happened, over the next couple of days I have to record my thoughts on the brainstorming session that took place tonight at IndyHall. I'd normally post this kind of stuff on a more personal blog, but this was, after all, a public meeting. Forgive me if the thoughts are a little stream-of-consciousness.
In my final analysis, I think that the meeting was valuable. I think some useful ideas came out of it. However, I think the next one won't be quite like it. The next thing that comes should be more action oriented. Maybe for a project. I have to contact the other people who were present and see what they think, and get some other input too.
#1
- Firstly, I have about zero experience in open meeting facilitation. I just want to put that out there. Many issues below were exacerbated, if not caused, by this fact.
So what happened?
Anyways, here's the statement of what I wanted to talk about:
I want to consider what we'd need to create a community that encourages engagement with the wider community, fosters developer and designer innovation around software for citizens, and participates in ensuring that the software can get made and that people—all people, or close to it—can use it.In reality, we spent a lot of time all over the place (see #1 above). I think for most of the time we were touching on (or at least around) the "ensuring that the software can get made" part, in the form of discussing government data and what strides were being made in opening it up.
We also talked a bit about the question of what [non-government employed] citizens' roles could be in assisting the process of getting the government to a point where their records (our records) were digitally available, even internally to the government. Councilman Green mentioned that part of the problem is the volume of data that the government receives in paper format. For example, for tax return data, they require that six fields are input into an electronic system. However, the tax return forms have 20 fields (e.g., SIC codes are not recorded). Each piece of information that is not transcribed, for whatever reason, into a database is essentially lost (though I'm sure that reams and reams these papers are filed away somewhere). So, the only way we can get to providing electronic data is to require every submission to the city to be electronic. I think the gist is that it is a nearly intractable problem to have completely open electronic data when all the inputs, at the volume of inputs that a municipal government has, are not electronic. It's just too easy for things to be lost in any analog to digital data transformation.
It makes some sense, though I'm not completely sold. I think governments can get hi-fidelity enough, just by doing things like recording all 20 fields on the tax return (why would you record only 6? why ask 20?). However, I do agree that, for the sake of efficiency, data should go in electronically as well, and I believe it should be stored somewhere in a lossless format.
However, it still doesn't really address the question of what citizens can do. I wish we had better answers.
Green did bring up examples of other states that require departments who are going to be doing "this stuff" (by which, I assume, he means improving their information infrastructure) to have an overall RFP, but to also break down each segment of the task so that people can apply for individual parts that they excel at. That way the departments aren't only comparing monolithic proposals, but can also compare more piecemeal. This also allows smaller, local folks a chance to get some of the project money, as opposed to relying on the same large contractors that all cities around our size rely on. Now, to be honest, I wonder whether this works. While departments may be saving money, I would imagine that the coordination of projects like this across contractors costs a significant amount of time and effort. But it's an idea.
It was certainly a mixed blessing to have Bill Green at the meeting. He was able to field a lot of questions about what's going on in the government with data, which is nice. He's a very knowledgeable guy, and seems to be involved with a lot of potentially beneficial efforts in the city government. However, since he was there to answer those questions, much of the conversation revolved around data (of course, I didn't help—see #1).
At some point some discussion on the use of data came up. Who would be the main beneficiary of opened government data and why? Academics (Urban Studies, Political Science, Buisiness, ...) who use it to do comparative analyses and publish papers? Citizen watchdog groups who might keep government honest? Who else uses government data? This is actually one question I've shied away from many times. It's a hard question (particularly in light of the reality of relatively low civic involvement in Philadelphia). It reminds me of a quote I heard from one of the PdF talks this May:
In defense of cities ... I think the responsibility is ours to show the more entrenched factions of the cities that are not letting go of the data where the use is, that there's a huge hacker community right now that's interested in cities. Some subset of them are interested in it because it's just a brand new set of data, not because they're interested in cities per se. And I'm worried that we need to move beyond the sense that just having the data solves the problem. Carol Coletta of CEOs for cities made a comment a couple months ago that "if you listen, you'd think that you could fill a pothole with data. Just pour it in, smooth it out, and fix your problem." Basically, what I'm saying is the tougher nuts to crack in city government, I think, need to see tangible examples of the benefits, savings, efficiency ... So, part of the responsibility is ours.At the meeting, someone suggested (similar to Tolva in the quote above) that perhaps the best way to discern what data to use and how is to:- John Tolva (at about 1:45)
- Choose a couple of simply defined problems,
- Determine what is needed for solutions, and
- Go from there
Technical Disconnect
Another thing that was discussed was the communication gap between neighborhood associations (at least the one we had represented) and developers. This actually reminds me of another idea that a friend of mine brought up to me (and I'm sure others have had this idea as well) of some kind of jobs site for local neighborhood organizations looking for technology solutions. Seriously, there are many professionals out there that have jobs and are looking to donate a few hours a week (or at least work for minimal pay). It would be a relatively easy service to set up. The difficulty would be in the rest of the execution.
Would it be like a jobs board? Jobs boards work well when an organization knows what it wants a potential employee to do. With neighborhood associations, it's often the case that they don't have knowledge of what specific technologies could be applied to solve their issues. They just know that they have an issue. So, maybe it should be more like an issue tracker. Where someone from an organization could go and describe their issue, have it discussed, and eventually assigned and resolved. There would have to be good documentation on how to write an effective issue report—include a descriptive title (not "WE NEED HELP!"), methodically structure the report (something like: (1) current process, (2) what goes wrong, (3) what should happen, and (4) maybe a proposed solution), try not to harp on specific technologies for solutions, etc.
E.g.:
Issue: Center City residents don't know about CCRA events(I don't know whether this is an actual issue the CCRA has. It's just an example)
Posted By: The Center City Residents Association
More Information:
- Current process -- CCRA plans meetings and events
- How it breaks (undesireable outcome) -- neighborhood residents don't know about events
- What should happen (desired outcome) -- neighborhood residents should be informed of (and maybe even RSVP for) events
- Proposed solution -- A CCRA community calendar online
I like an issue tracker better than a jobs board because it allows for interactive formation of solutions. With a jobs board, you have "i need this" to which someone replies "ok, i can give that to you", and that's it. With an issue tracker, people can request specific additional pieces of information, propose and comment on potential solutions, etc. That's all appropriate for this instance because it's not just technical skill that the creative community can provide, but also best-practices advice on how to use tech products.
Now, in addition to the site (this is that execution part), I think there should perhaps be a get-together every month or two for people who post issues to the site (general public folks) and developers who address issues on the site. If there's no face-to-face community around this stuff, it's just gonna be that much more difficult to maintain. This wouldn't have to be a formal thing. Maybe part of it could be like a show-and-tell for things that have gotten done through the site. Like at the end of GiveCamp. Except with alcohol, and with fewer seats. And more mingling.
So, how does this help build the community?
- Community Engagement: Philadelphia organizations are provided a place to go and discuss technical problems with professionals/volunteers. Also, the happy-hour thing reinforces the connection between tech and the city.
- Developer Innovation: It provides a way for developers (be they full-time employed or not) to get involved with community issues. The issue-tracker format allows a structured, but open-ended approach to finding solutions.
- Political Advocacy: I'm not sure it necessarily covers any technology advocacy areas. Whether it would require any opening up of technology depends on the nature of the issues presented. It's possible that an issue might require (or benefit from) some as-yet unopened data, or extending tech access to an underserved group, but I don't know. This also doesn't prescribe a way of dealing with those issues if they were to come up. Have to think on that one further.
"North Philly needs Kiva"
One idea that came up that I wish we had returned to (my bad—see #1) was the "North Philly needs Kiva" comment. This is certainly provocative (in that it draws inspiration for a Philadelphia program from a model that is effective primarily in so-called third-world areas...to my knowledge), but nevertheless, it's an idea worth pursuing. Or at least thinking about.
I mean, let's do this for a second. Let's call it "Phiva" (terrible name?).
First of all, there would be a large amount of coordination involved in this: between neighborhood business associations, lending coordination institutions, etc. The creative community should probably not shoulder it all, but should be there as consultants for as much of it as possible.
It would be nice to get input from the Philly community-at-large about the idea, how they might use microfinancing if it were available to them. To get this kind of information we might go to local business centers in the areas that would be most served by these microloans. I'm thinking places like the Enterprise Center in West Philly. I don't know an equivalent in other neighborhoods, but that could be looked into. We could either try to get information on how microfinancing would be used from them, or we could ask them to hook us up with some contacts from the community from whom we could get the info. Again, the creative professionals/volunteers involved shouldn't necessarily have to become experts in microfinance institutions, but they should get a good idea of requirements (technical and social).
So how does Phiva help build community around civic software?
- Community Engagement: Hopefully it would prompt interaction between developers/designers and maybe community business associations or something.
- Developer Innovation: As a specific project, it would require developer innovation to implement. However, it wouldn't in-and-of-itself foster an increased capacity for developer innovation within the creative community. It would be a hell of a thing at show-and-tell though. It might encourage people to get involved with other projects.
- Political Advocacy: Things like Kiva work to shift the power relations in society. I like that. In terms of technology advocacy, however, I'm not sure. I would hope, though, that it would at least further the conversation about how access to technology is often access to opportunity.
Really, Phiva wouldn't be something that I'd look for the developer community to come up with on their own. perhaps it would be something put into the issue tracker.
Issue: Small West Philly businesses are unable to obtain micro loans
Posted By: The Enterprise Center
More Information:
- Situation: West Philly businesses look for loans
- Undesireable outcome: They cannot qualify for large loans, and don't have access to smaller ones
- Desired outcome: They have access to loans in the amount they need
- Proposed solution: Phiva
I'd like to see a community in Philadelphia that is concerned with the effective creation and distribution of software that allows city residents/citizens to better use and affect their city. This partly came out of a report that I put together for a class that I took in the Spring. The report was called "Phillyware: Taking Philadelphia into the 21st Century through Software Developer Civic Involvement".
Anyway, I'd like to get more people in on generating ideas for what this should look like. So, I'm planning a brainstorming session.
The flyer:
The invitation:
Event Page: http://www.facebook.com/event.php?eid=124590897575130&ref=mf
Please come and join Philadelphia software developers, designers, and technology advocates in discussion about creating a place for developers to innovate around software tools that can better enable residents to use and affect their city. Let's brainstorm what this could look like, some potential roadblocks, logistical considerations, etc.
Consider three aspects: community engagement + developer innovation + political advocacy = Software for Citizens*.
What: Philly Software for Citizens Brainstorming Session
Where: Independents Hall, 20 North 3rd Street, Philadelphia, PA
When: June 24th, 6:30 PM
Why:
- To keep local government and authorities accountable in the data they release and in how they release data
- To allow Philadelphians to think ahead of the curve about what their city can be
- Because we ARE citizens
- Because it'd be fun (you know it would!)
Some possibilities for discussion:
- Periodic [un]conferences around those three areas
- A community around a project repository (like Gnome.org, but around OpenPlans.org, for example)
- Meetings with Philadelphia community groups
- Camps/Hackathons (like in Ottawa: http://opendataottawa.ca/)
- Bring your own ideas...
* "Citizens" in this case isn't political; it just refers to participating members of society. See the Facebook group (http://www.facebook.com/group.php?gid=131677170182058) for more information.
I enjoyed reading this article[1] about increasing instances of using computers to help analyze ones own personal life. This is the kind of world I envision eventually, and that I'd hope to help create. Sometimes I wonder what I'm getting myself into.
While I count myself among those the author describes as data-driven, I don't agree with his portrayl. It seems like he's saying, in the data-driven life people let their data explain them -- praise or condem them. If you gain a pound, if you jump around through tasks, if you have too many drinks, the data is all there to prove it. But really, the data does nothing on its own. I would venture to think that few "data-driven" people think of their data (let alone the machines/tools that they use to record it) as separate from themselves. The details are just more of you exposed, and machines put it within easier reach. The tools and the data simply are you formulating ideas about yourself in different ways. They are an extension of you.
At the end of the article the author notes that his own personal tracking experience was only useful to him as a "source of critical perspective." My point exactly.
[1] The Data-Driven Life
http://www.nytimes.com/2010/05/02/magazine/02self-measurement-t.html
So, it turns out[1] that five cities have finally been selected to participate in the Code For America[2] program for 2011: Boston, Boulder, Philadelphia, Washington, D.C., and Seattle. Each of these cities will identify the need for some city government project that can leverage modern web technologies, be assigned a group of five developers[3], and will work with them to develop that project over 11 months, starting in January.
I am on pins and needles to see what comes out of this. I'm also curious how the city governments plan to pick the projects.
[1] "Five Cities Get Free Civic Apps Through Code for America". Digital Philadelphia. http://digitalphiladelphia.wordpress.com/2010/05/07/five-cities-get-free-civic-apps-through-code-for-america/
[2] "About". Code For America. http://codeforamerica.org/about/
[3] Developers apply for the opportunity. The application will be available June 1, and the deadline is August 1. "For Developers". Code For America. http://codeforamerica.org/for-developers/
Over on GOOD.is, there's a video posted that demonstrates Keiichi Matsuda's conception of what augmented reality might look like. As we've seen in some previous posts, this type of reality may not be [as] far off [as some would like].
But what's with all the ads? Adds a touch of realism, I suppose.
Augmented (hyper)Reality: Domestic Robocop from Keiichi Matsuda on Vimeo.
What Augmented Reality Could Actually Look Like
http://www.good.is/post/what-augmented-reality-could-actually-look-like/
A few posts ago[1], I referenced the Sixth Sense TED presentation. Here's[2] another technology along the same lines. It's a prototype video for an Android app that retrieves information on a person using facial recognition. They call it Recognizr, an "augmented ID" concept.
Also, for those eye-tracking augmented reality glasses that I mentioned in the other post...the eye-tracker just seems like a slight modification of this[3].
[1] "SixthSense" from MIT Media Lab
http://kwawatu.blogspot.com/2010/02/sixthsense-from-mit-media-lab.html
[2] Recognizr
href="http://www.youtube.com/user/TATMobileUI#p/u/0/5GqJHaNRla
[3] Student learns to control computer with a blink of an eye
http://www.rit.edu/news/?v=46626
And make sure to check out the WSJ video:
Andy Jordan's Tech Diary: EyeTech Quick Glance
http://online.wsj.com/video/andy-jordans-tech-diary-eyetech-quick-glance/6B9D2F61-C8FE-41F8-BA10-4F2DFB85355D.html
For those of us surrounded by the minutiae of computers all day, it’s easy to forget there’s a world of people out there who just don’t get it. And it’s not their fault. It’s ours.
Interesting article over on the 37 Signals design and usability blog. Some meta-analysis regarding the iPad. I really like this quote from Fraser Speirs:
The Real Work is not formatting the margins, installing the printer driver, uploading the document, finishing the PowerPoint slides, running the software update or reinstalling the OS.
The Real Work is teaching the child, healing the patient, selling the house, logging the road defects, fixing the car at the roadside, capturing the table’s order, designing the house and organising the party.Fraser Speirs, Future Shock [2]
[2] http://speirs.org/blog/2010/1/29/future-shock.html -- Future Shock
PIM practices become easier if [an] organization provides some infrastructure to alleviate the difficulty of these activities. But a larger value is that the organization can leverage these personal practices to improve the effectiveness of others and to capture that elusive corporate knowledge in an easy way.
Thought provoking. Give the video a watch.
[1] Situating Personal Information Management - http://www.youtube.com/user/googletechtalks#p/u/1/eA9NT4b6UNA
The conference for Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA) has a new name and overall mission. It's now Systems, Programming, Languages, and Applications: Software for Humanity (SPLASH). I'm liking the name.
Seems like they're attempting to reconcile the inclusion of the Onward! track of the OOPSLA conference. I approve.
In 2002, Onward! was created as a special track within OOPSLA to be a venue for bigger ideas than normally are accepted by mainstream computer science conferences, but within the scope of OOPSLA’s focus. "Bigger ideas" included new approaches to programming, software, and software development; new paradigms; and even new ways to present ideas.
Beginning in 2003, Onward! papers were included in the OOPSLA proceedings, and in 2005, Essays and films were added to Onward!. As the track grew, it became clear that there was a need for Onward! in a larger context than object-oriented programming, and in 2009, Onward! spun off from OOPSLA to become a stand-alone conference focusing more broadly on software and programming in all their manifestations, and including not just the pure technology but also processes, methods, and philosophy.
From 2010, we plan that Onward! will be co-located with SPLASH (the evolution of OOPSLA), but in the future, the sky’s the limit.
For important dates and information, see:
http://splashcon.org/
http://onward-conference.org/
Pattie Maes and one of her students, Pranav Mistry, demonstrated a system they've been working on to "augment" a user's experience of the world by delivering relevant information about certain objects, as well as allowing the user to interact with that information.
Pattie Maes and Pranav Mistry demo SixthSense
http://www.ted.com/talks/pattie_maes_demos_the_sixth_sense.html
I've imagined something similar in the form of glasses that record your eye movements and cross-reference that data with recorded images of what's in front of you with to determine points of focus. Then, theoretically, they could display information about whatever you're focusing on onto the glass of the spectacles. Pattie Maes takes it in a slightly different direction when, at around 08:30 in the video, she says, "who knows, maybe in another 10 years we'll be here with the ultimate 6th sense brain implant."
Regardless of the interface (fingers, eyes, brain, etc.), is this something that would be good for humans?
I thought this was pretty awesome and on-point; check it out:
http://10gui.com/video/
An apropos re-imagining of the way that interaction with the desktop computer should work. At first I thought, while watching, "if you're gonna suggest a change for desktop interaction interfaces, why not just go all out and promote eye trackers or cerebral interfaces." But I realized that Miller's way is a significantly different approach than the one we have now, while still possible in the relatively near future.
I mean, we already have multi-touch; hardware for the input device could be developed cheaper than a multi-touch display (since it doesn't have to display as well). Then it's a matter of writing drivers (easy enough) and adapting software (maybe a little harder). Integration with Gnome 3.0 would be awesome.
The Net is most sluggish in September. ... It makes sense, according to Joe Robinson, who coaches massive corporations like IBM on work-life balance. "I can cite eight studies indicating that performance and productivity go up after vacation," he said. When you return from a long stint at the beach, you're not just recharged, you're more efficient. Even reaction times go up by 30 to 40 percent. It's not surprising then that Internet speeds lag when we're all back from vacay, hustling online, grabbing at that brass ring.
I found this through an article on Lifehacker[2]. It reminds me that software (and computing in general) for humans isn't just about software, or about what people do with software. It's also about humans. Human-friendly computing needs to consider the wider context of a person's human needs.
[1] Burning Question: Does Internet Speed Vary by Season?
http://www.wired.com/gadgets/miscellaneous/magazine/17-10/ts_burningquestion
[2] Net Speeds Drop in Autumn, But Productivity Rises
http://lifehacker.com/5376133/net-speeds-drop-in-autumn-but-productivity-rises