Archive for July, 2008

Has Critical Mass outlived its usefulness?

As I’ve said before, I regularly read (and almost always enjoy) the Bike Snob NYC blog. His post this week on Critical Mass really struck a chord with me:

One of the things that make cycling so great is that it enables you to avoid crowds and pointless delays. Few things are more satisfying than effortlessly weaving your way through a traffic jam. So while I’ll begrudge nobody his or her Critical Mass, personally I don’t understand the appeal of forming a crowd and creating a pointless delay. And it is a delay, whether you’re in a car or on a bike. I once accidentally got caught in a Critical Mass ride while out riding. I felt like a dolphin ensnared in a tuna net. One second I was sailing along, and the next I was trapped among a bunch of people with rickety bikes rolling on wobbly, rusty brown steel rims on the verge of collapse. It was like watching a Beatles “Yellow Submarine”-esque cartoon LSD sequence where all the bicycles were rolling on pretzels. Sure, they had taken back the streets, but I wish that as a cyclist they might have saved a small sliver for me so I could get to where I was going.

I am very much a “vehicular” cyclist: I ride in with cars in traffic, taking the full lane unless there is an ample, marked bike lane. I avoid sidewalks, crosswalks, and other pedestrian features, mainly because I don’t trust people on foot to act predictably, and because they tend to just slow me down. Critical Mass is similar: riding in a CM requires you to give up control of your speed, direction, and destination, which robs us of one of the most fundamental benefits of biking. Furthermore, it does so in a way which pisses off every driver stuck behind such a behemoth, without even offering the obvious fun of a spontaneous individual or small-group ride.

The Midnight Mystery Ride, World Naked Bike Ride, and other similar events have a lot more to offer than CM, in my opinion. First off, they happen at night, when they aren’t competing with tired, grumpy commuters for space on the road. Second, they offer a type of event unique to cycles: anyone can get on the road and snarl traffic for miles in either direction by moving slower than the prevailing speed, but it’s pretty tough to drive out into the urban wilderness and camp out in interesting locations when everyone’s in a big motorized vehicle.

If Critical Mass is going to be anything other than a big “F-You” to the car drivers of the world, it needs to evolve. Simply putting a bunch of bike riders in traffic during rush hour is no longer an effective means of lobbying for cyclists’ right to the road, if indeed it ever was.

PostgreSQL help needed

I set up an empty PostgreSQL database for use by our telecoms admin here at Reed. She created a number of working tables for an integration project she’s been planning, and now it’s my turn to pull the info out of her database and into our LDAP directory.

Unfortunately, I seem to be having some sort of basic “failure to communicate” situation going on. Poking around the database as the ‘postgres’ super-user, I see the following:

telecom=# \dt
         List of relations
 Schema |  Name  | Type  |  Owner
--------+--------+-------+---------
 public | june   | table | telecom
 public | test   | table | telecom
(3 rows)

Interesting…there really should be more there. Then I remember she’s a recovering MS SQLServer admin, and so may have split her work out into its own schema namespace:

telecom=# \dn
        List of schemas
        Name        |  Owner
--------------------+----------
 Phones             | telecom
 information_schema | postgres
 pg_catalog         | postgres
 pg_toast           | postgres
 public             | postgres
(5 rows)

My first thought was, “Okay, cool; I haven’t had much of a chance to mess around with Postgres schema support. Time to learn!”

On attempting to actually query the data, though, I get the following:

telecom=# select * from Phones.Identification;
ERROR:  schema "phones" does not exist

(I had previously determined that the ‘Identification’ table existed using PGadmin to browse the entire namespace.)

In point of fact, querying from the public schema doesn’t appear to work, either:

telecom=# \d test
               Table "public.test"
  Column   |          Type          | Modifiers
-----------+------------------------+------------
 LastName  | character varying(100) |
 FirstName | character varying(100) |
 Ext       | character varying(100) | default 20
 ListedExt | character varying(100) |
 Room      | character varying(100) |
 Date      | character varying(50)  |
 Cable     | character varying(100) |
 LenPort   | character varying(100) |
 PK        | character varying(50)  | not null
Indexes:
    "UID" UNIQUE, btree ("PK")

telecom=# select count(Room) from test;
ERROR:  column "room" does not exist
LINE 1: select count(Room) from test;

So at this point, I’m basically stuck. Any suggestions from out there amongst the tubes? Is it a charset issue, since she’s working on a Windows client? Am I missing some grants that would actually allow me to get at the Phones schema?

Distributed (useful) data

I think that the infrastructure for the next generation of interesting network-aware applications is being built right now, and that it’s going to change the way people think about data, collaboration, and connectivity.

What are these projects? Simple: the distributed storage and merging tools. The most successful example is probably Git, but a bunch of other interesting related projects (CloudRCS, Google Gears, Prophet, etc.) are all exploring a similar space. Basically, the proposition is that, given the right kind of atomic update operations, data can be modified on a bunch of different nodes, and merges can happen asynchronously (if at all) when time, connectivity, or workflow permits it.

To explain why I think these tools are important, and where I think the opportunity exists for the next crop of interesting applications, let me offer examples from two different conferences I’ve attended in recent months.

First, an example of where distributed authoring tools succeeded: at RubyFringe, almost every presentation which featured code included a GitHub link and invitation to fork the project and push back changes. In fact, one of the presenters introduced Gist, a tool designed to allow even throw-away “pasties” of code to be version-controlled and shared using Git as a backend. 

Anyone interested in checking out a copy of the code, making some tweaks, and pushing them back to the original author just needed a copy of Git. They didn’t have to do the work online, and didn’t even have to use GitHub if they didn’t want to, and their work would still be version-tracked and shareable with other developers.

In contrast, while at the NITLE Moodle User Meeting in Tacoma back in June, I struggled to share an outline for a presentation I made with my co-presenter. The hotel where the conference was happening had effectively useless ‘net access, so Google Docs and other online services were out of the question. We eventually just had to sit down next to each other the night before the talk in front of my laptop and edit the outline as plaintext, and then copy the file as a whole to his machine for conversion to Keynote slides.

Now we have a simple text file containing the outline, and a PDF generated from the Keynote slides, but no way to show the evolution of the presentation over the days of the conference, or to track changes for future adaptations of the material. Furthermore, if one of us wants to make changes and share with the other, we’re stuck with email attachments (or the glorified Web 2.0 FTP-clones like Dropbox) to keep up to date.

Programmers have figured out the value of distributed authoring, and understand the necessity for sane merging and conflict-resolution practices from long, painful experience. Knowledge workers in other fields have been using the “track changes” features in Word for just as long, but haven’t yet made the leap to fully-shared authoring. Even when they do, it tends to look more like a Wiki than an offline, sync-able tool like Git.

There’s a huge potential in this space for applications other than source code and other plaintext formats. Tabular data like spreadsheets, outline editors and presentation tools, and PIM and calendaring systems could all benefit from asynchronous, distributed authoring and merging. There’s some work being done at the OS level, (iSync/SyncServicesLive Mesh, etc.) but I think that the really interesting stuff is going to happen out at the edge, amongst the startups and small app developers.

RubyFringe wrap-up

I’m sitting in a coffee shop in Vancouver, BC, trying to sufficiently load myself up with caffeine so I can make it to a normal bedtime. The weekend was tiring and thoroughly satisfying — RubyFringe provided an ass-kicking combination of thought-provoking talks, great food, and more-than-ample supplies of drinks, and I’m actually pretty satisfied with missing OSCON (and all its concurrent geeky fun) in order to spend a few days letting the experience soak in.

If pressed to find a single coherent theme that sums up the whole concept, I would probably have to say that it was the challenge to listen to that crazy voice in the back of your head that tells you to do something different and risky, because the payoff is so huge. Even more importantly, we heard stories of success and failure, which served to remind me at least that mistakes are at least as informative as successes.

The secondary undercurrent to the whole thing, of course, was the relationship between code and music, and indeed between code and art in general. Giles riffed on Nick’s earlier presentation bridging code and jazz with a nod to IDM and Burning Man, and did so with a style that kept people in their seats more than 20 minutes into the lunch break…and then earned him a standing ovation.

There’s already talk of a 10 year reunion, and I’m going to do whatever I can to find a way to spin off a similar event in Portland next year.

Dispatch from Toronto

So far, this has been easily the best conference I’ve attended since LL1. Serious nerd-ery, great hallway-track conversations, and a single track of talks limited to 30 minutes have made for a very desirable signal-to-noise ratio.

Nick Sieger’s talk on jazz and programming was the highlight of today’s talks, at least for me, but the overall level of presentation was pretty damn good.

The continuing flow of excellent food + free drinks hasn’t dampened anyone’s spirits as far as I can tell, either.

That being said, I am more than a little disappointed that I’ll be missing FOSCON. For those who haven’t had the pleasure, and have any chance of being in the Portland area next Wednesday night, I can’t recommend it highly enough. In my experience, it manages to pack about 50% of the awesomeness of a two-day conference like RubyFringe into a mere three hours, and does so with a singularly “Portland DIY” attitude.

Perhaps there’s an opportunity to bring the two events closer together next year?

RubyFringe-inspired idea #1

Just after Jay Phillips‘ presentation on Adhersion, a small group of us were tossing out other interesting ideas that could be implemented with a full Ruby development stack on top of your call-processing system.

My favorite was the idea of a RBL (realtime blackhole list), as inspired by spam filtering for phone numbers. Basically, you would maintain a distributed list of telemarketers, prank callers, and other folks whose calls you don’t want to answer.

To coin a phrase:

If Burning Man attendees can be called “burners,” I humbly propose that RubyFringe participants be called “fringers.”

Discuss.

IP

R0010954

Gone Coding…

R0010892

peace

DSC_0032