An information mapping puzzle

One of the core values of the elmcity project is respect for authoritative sources. Every event that syndicates into the system should have an URL that points back to that authoritative source.

Often, when the source is an iCalendar feed, some or all of the events leave the URL field empty. That’s why I encourage curators to provide a default URL for the whole calendar. For example, the newest city to join the hub is Falls Church, VA. One of the feeds that curator Dave Witzel created (using FuseCal) is for the Dogfish Head Ale House. As you can see in Dave’s metadata catalog, the bookmark he created for its calendar points to the URL of a FuseCal-created iCalendar feed. And one of the tags on that bookmark is:

url=http://www.dogfishalehouse.com/component/option,com_jcalpro/Itemid,70/

The url=http://… tag is how a curator tells the elmcity aggregator: “This is the default URL I want you to use, for any events in this feed that do not individually specify a URL.”

In this example, Dave has pointed the url= tag at the events page at the ale house, which is also the URL that he fed to FuseCal in order to get it to produce the iCalendar feed.

Let’s look at another example: the Thomas Jefferson Public School. Here, Google Calendar is the source of the iCalendar feed. And Dave has bookmarked the web page in which the school has embedded that calendar.

One place this default URL shows up is in the reference HTML view of the Falls Church calendar. On June 3, we see:

Wed 09:15 AM
7th Gr. Jazz Band Concert at TJ
(Thomas Jefferson Public School Calendar)

The link points back to the source. So far, so good.

Now, these source URLs should also propagate to any downstream services that syndicate from the hub. And in each of the outbound formats — XML, JSON, and ICS — they do. Here’s how that originally worked:

XML:
<event>
<title>7th Gr. Jazz Band Concert at TJ</title>
<url>http://www.fccps.org/calendar/tj.htm</url>
<source>Thomas Jefferson Public School Calendar</source>
<dtstart>2009-06-03T09:15:00</dtstart>
</event>

JSON:
{
"title":"7th Gr. Jazz Band Concert at TJ",
"url":"http://www.fccps.org/calendar/tj.htm",
"source":"Thomas Jefferson Public School Calendar",
"dtstart":"\/Date(1244020500000+0000)\/"
}

iCalendar:
BEGIN:VEVENT
DESCRIPTION:For more information regarding this or any other event please
 contact the MEH Main Office at 703-720-5700.
DTSTART:20090603T091500
URL:http://www.fccps.org/calendar/tj.htm
SUMMARY:7th Gr. Jazz Band Concert at TJ
UID:633778966573833700@elmcity.cloudapp.net
END:VEVENT

But this perfectly sensible mapping fails for iCalendar. It turns out that many popular calendar programs don’t surface the URL field in an iCalendar VEVENT. Apple’s iCal does, but Outlook, Google Calendar, and Live Calendar don’t.

What to do? Until somebody helps me find a better solution, here’s mine:

iCalendar:
BEGIN:VEVENT
DESCRIPTION:For more information regarding this or any other event please
 contact the MEH Main Office at 703-720-5700.
DTSTART:20090603T091500
URL:http://www.fccps.org/calendar/tj.htm
LOCATION:http://www.fccps.org/calendar/tj.htm
SUMMARY:7th Gr. Jazz Band Concert at TJ
UID:633778966573833700@elmcity.cloudapp.net
END:VEVENT

In other words I’ve added a LOCATION field, which in this case was (not atypically) empty in the source calendar, and I’ve filled it with the same value that’s in the URL field.

The RFC2445 spec defines LOCATION like so:

Property Name: LOCATION

Purpose: The property defines the intended venue for the activity
defined by a calendar component.

And it gives this example:

LOCATION:Conference Room - F123, Bldg. 002

I’m stretching LOCATION to mean “virtual location of the source of information about the event” instead of “physical location of the venue for the event.”

Given that mapping, here’s how the 7th Gr. Jazz Band Concert shows up in various apps:

Google Calendar:

Outlook:

Live Calendar:

Apple iCal:

Notice how iCal renders both URLs — the one in the LOCATION field, and the one in the URL field — as clickable links. I wish the other programs also made an URL in the LOCATION field clickable. Reporting the source URL is better than not doing so. But the extra friction involved in copying the URL and pasting it into a browser will tend to prevent that from happening.

Given all this, I’d love to hear suggestions for a better approach. One thing to keep in mind is that I’m trying to strike a balance between two conflicting goals. I want to make the downstream syndication formats useful. But not too useful, because I also want to build a connected ecosystem that helps all the upstream sources — including Eventful, Upcoming, and growing populations of iCalendar feeds — thrive. The elmcity service doesn’t aim to be a container of other people’s stuff. It aims to be a router, or actually a whole bunch of routers, each of which helps bootstrap a connected ecosystem in which people become the authoritatives sources of their own information, and in which they learn to syndicate that information to one another.

Dilbert might like the crazy way we do calendars online. But Scott Adams prefers a sane alternative.

When I shared my strategy for harvesting Keene’s softball schedules, the Little League baseball schedules hadn’t yet been published online. Now I see why. It took the folks at the Keene Cal Ripken Baseball Association (KCRBA) a while to get them written down in Excel, and then produced and uploaded as a set of web pages like this one. We’re two weeks into the season, and those pages are finally up, but not — sadly yet typically — in a useful calendar format that can mesh with other calendars.

Over the weekend, @llama_grande tweeted:

Dilbert creator on calendars @judell may enjoy http://bit.ly/2lKTlb

I set it aside thinking it was a cartoon I’d enjoy later. In fact, it’s a cogent essay by Scott Adams that nicely captures part of my motivation for doing the elmcity project. From the essay:

I think the family calendar is the organizing principle into which all external information should flow. I want the kids’ school schedules for sports and plays and even lunch choices to automatically flow into the home calendar. And when I want to decide what to do on the weekend, I want to click on the date for next Saturday and have all the relevant choices of plays, movies, and events pop up.

I think the biggest software revolution of the future is that the calendar will be the organizing filter for most of the information flowing into your life. You think you are bombarded with too much information every day, but in reality it is just the timing of the information that is wrong. Once the calendar becomes the organizing paradigm and filter, it won’t seem as if there is so much.

Meanwhile, here’s the reality for Kevin Curry:

checking a PDF 4 school lunch is daily routine 4 me

That’s how it is for most of us, most of the time. But it needn’t be.

Consider the Little League example. If the keystrokes that were poured into Excel to create those web pages had been directed into almost any calendar program, the schedules could have been published both as HTML for online viewing and as iCalendar for syndication to other calendars.

Happily, FuseCal can set things straight. It handily created calendars for each of the 27 teams. I collected the feed URLs and wrote a throwaway script to spray them into Delicious. In a few hours, when the elmcity service scans that account again, all the games will be included in the combined calendar. And anybody who wants what Scott Adams wants — to have the kids’ sports events flow into a home calendar — can have it.

This is wrong and backwards, of course. And while the creator of Dilbert would probably enjoy the absurdity of my solution, I’m glad to know he’s also thinking about the right way to move forward.

An essay for my fellow University of Michigan alumni

Like all University of Michigan alumni who were in the school of Literature, Science, and the Arts, I receive the quarterly LSA Magazine. This spring I’m actually in the magazine. For an issue on the theme of surviving in tough economic times, I contributed the back-page editorial which the editors entitled Can the Noosphere Save Us? The themes will be familiar to readers who know me: personal publishing, knowledge sharing, online collaboration. It was a treat to be asked to write about these topics for a diverse audience of UM alumni.

I would have subtitled the piece: “Ask not what the web can do for you. Instead ask what you can do with the web.” It features three people I have interviewed for my Innovators show, all of whom exemplify that dictum. They are Jean-Claude Bradley, Susan Gerhart, and John Leeke.

In order to make things easier for Susan Gerhart, who’ll be using a screen reader, I’m supplementing the PDF version posted at the magazine’s site with a plain HTML version.

Status of my InfoWorld archive

I’ve collected the original URLs of articles and columns I wrote for InfoWorld at http://jonudell.net/InfoWorldArticles.html. Almost all are now live again, albeit redirected, after having been scrambled in the recent site reorg.

Still missing in action is my blog from that era. I have the whole thing in a clean XHTML archive that I can easily republish to my own namespace. However, since the articles and the blog essays cross-reference one another, I’m still hoping that the blog will reappear at its old namespace — underneath http://weblog.infoworld.com/udell — so that the cross-referencing will still work in both directions.

If the blog doesn’t resurface at its original namespace soon, I’ll go ahead and migrate it to mine.

Talking with Joan Peckham about computational thinking

When Phil Windley pointed me to Jeannette Wing’s manifesto on computational thinking, she had me at hello. The intellectual tools of computer science, she argues — including the ability to work at multiple levels of abstraction, to automate repetitive processes, and to make and use state machines — are really “a universally applicable attitude and skill set that everyone, not just computer scientists, would be eager to learn and use.”

In 2007 I interviewed Jeannette Wing for my Innovators show. Since then she has moved from Carnegie Mellon to the National Science Foundation, where she is — among other activities — working to define, promote, and bootstrap the teaching of computational thinking.

On this week’s show I spoke with Joan Peckman, a University of Rhode Island professor of computer science who’s on leave to work with the NSF on that mission.

Toward the end of the podcast, she relates this delightful anecdote:

At the first CSTB workshop on computational thinking for everyone, someone from the University of Indiana showed a video on how he was teaching science. We all looked at it and thought: “But it’s also computational thinking!”

In the course of teaching elementary school students about honey bees, he took them out on the playground and asked them to act out what the honey bees did: leaving the hive, finding the pollen, giving directions to the other bees. Then he brought them back into the classroom, went to a whiteboard, and engaged them in activites that I would identify as modeling, debugging, and drawing finite state diagrams. He didn’t call them that, but that’s what they were.

Yes he was teaching them science, but the way he was analyzing the subject, and engaging them in analysis, clearly involved a set of computational constructs.

In my own recent writing and speaking, I’ve suggested that feed syndication and lightweight service composition are aspects of computational thinking that we ought to formulate as basic principles and teach in middle school or even grade school.

We tried, but failed, to come up with a phrase that embellishes computational thinking with connotations of flow, orchestration, and connectedness. Syndication-oriented architecture. gets partway there, but will never fly in the mainstream. Maybe connected thinking? But you don’t want to leave out what computational connotes. Perhaps computational and connected thinking? Nah, too wordy. I’d love to hear suggestions for a tagline that concisely captures both aspects.

For more background on computational thinking, here are Joan Peckham’s show notes:

The CSTB (Computer Science and Telecommunications Board) of the National Academy of Sciences is holding Computational Thinking for Everyone: A Workshop Series in 2009. Monitor their website for developments and reports: http://sites.nationalacademies.org/cstb/CurrentProjects/CSTB_043590

Previously awarded CPATH projects (only some of which address computational thinking directly … although the current solicitation requires it):

2007 award portfolio – http://www.nsf.gov/cise/funding/CPATH2007awardsfinal.pdf

2008 award portfolio – http://www.nsf.gov/cise/funding/CPATH2008awardsfinal.pdf

Computer Science Unplugged (http://csunplugged.org/) site has a wealth of classroom ready activities.

Rebooting Computing Summit in January 2009 (http://www.rebootingcomputing.org/). Several working groups emerged from this meeting. Some of the groups were concerned with computing education, and in defining and better communicating computing to others.

The Computer Science Teachers Association (CSTA) has a web repository with K-12 computer science teaching and learning materials: http://csta.acm.org/WebRepository/WebRepository.html

The Carnegie Mellon University Center for Computational Thinking site has materials and resources: http://www.cs.cmu.edu/~CompThink/. [ed: Sponsored, I’m pleased to say, by Microsoft Research.]

Name this antique gardening tool

A friend lent me the antique tool shown in these photos. I’d been thinking about renting a rototiller to prepare three garden beds, but this thing tore through them way more easily than I could have done with a shovel, rake, hoe, or garden weasel. It’s really good at clawing up major weeds and clumps of sod.

Our question: What is this thing called? I looked through the catalog at antiquefarmtools.info. It’s full of beet shovels, muck rakes, turnip grubbers, and barley forks, but I didn’t find anything that looks like this artfully blacksmithed and wickedly effective tool.

Extracting iCalendar feeds from embedded Google calendars

One of the ironies I’ve uncovered while working on the elmcity project is that many folks are publishing iCalendar feeds without even realizing it. I’ve found a number of Drupal websites, for example, that present calendars as web pages without offering the corresponding ICS links. But the biggest source of implicit iCalendar feeds is Google Calendar.

Here’s a typical example of Google Calendar embedded in a web page: Commmunity Gardens of Huntington WV. Curators for the elmcity project have figured out how to extract the ICS URL from this kind of page:

  1. View the source of the page (or frame)

  2. Find the script that embeds the calendar

  3. Find the email address mentioned in the script — in this example: communitygardenshunt@gmail.com

  4. Form an ICS URL based on that address

OK, it’s not that bad. As Bill Rawlinson points out here, there’s a civilian (non-geek) alternative:

  1. Click the Google Calendar button

  2. Add the calendar to your Google Calendar application — assuming you’re signed up to use it

  3. Click Settings -> Calendars

  4. Click the calendar you just added

  5. Right-click its ICAL button and capture the link

But either method is cumbersome. So I’ve added a service that streamlines discovery of the iCalendar feed’s URL. The easiest way to use that service is to go here and install the gcal2ics bookmarklet. When clicked from a page with an embedded Google Calendar, like the Huntington Community Gardens calendar, it yields this:

URL of web page with embedded Google Calendar:

http://www.huntingtoncommunitygardens.com/8.html

ICS (iCalendar) URL for that calendar:

http://www.google.com/calendar/ical/communitygardenshunt%40gmail.com/public/basic.ics

Why would a service like Drupal or Google Calendar ever publish an HTML rendering of a calendar without also offering the corresponding feed URL directly? Because, I guess, we have all failed to teach people what feed URLs are, and show them why they matter.

MySpace + FuseCal = Awesome

For a while now, I’ve been wanting to connect the wealth of musical performance schedules on MySpace to the elmcity calendar project. For example, here’s the MySpace page for Jatoba, three young guys from Brattleboro whose eclectic, high-energy, acoustic string instrumentals and vocals have inspired me the couple of times I’ve seen them around town.

As is typical, there’s a calendar on their page. So I should be able to plug its iCalendar feed — and more specifically, the Keene-based performances in that feed — into the Keene calendar hub. But MySpace doesn’t export iCalendar feeds. What to do?

Today I hit on a solution. Here’s the recipe:

1. Visit a band’s MySpace page:

2. Click the (view all) link on the calendar to arrive here:

3. Copy the URL of the (view all) page, paste it into FuseCal, arrive here:

4. Filter the list, arrive here:

5. Click the Add to my calendar bar, arrive here:

6. Click Other Calendar, arrive here:

That’s your iCalendar feed URL in the box. In this example, the feed contains just two entries for Jatoba’s two upcoming Keene performances. Here’s the first:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Public Display Inc//FuseCal Software//EN
BEGIN:VEVENT
URL:http://collect.myspace.com/index.cfm?fuseaction=
 bandprofile.listAllShows&friendid=273136461&n=JATOBA
SUMMARY:VENDETTA  \, Keene\, New Hampshire  - free 
DTSTART:20090507T213000
END:VEVENT

You can subscribe to that URL directly in your calendar program. If you’re an elmcity project curator, you’ll want to take one extra step to syndicate this calendar into your hub:

7. Bookmark the FuseCal URL.

Now Jatoba’s Keene performances will appear on the elmcity calendar, courtesy of FuseCal and Delicious. And neither MySpace nor Jatoba had to get involved. The web’s funny that way.

Proximity search in Google and Live?

I recently added a specialized search to help curators working with the elmcity project find recurring events in their communities. It’s helpful, but would be much more helpful if it produced results only when the two searched-for phrases occur in close proximity.

The phrase pairs look like this:

"every thursday" "keene nh"
"first friday" "keene nh"

I’d like to limit results to pages where these pairs occur within, say, 100 words of one another. My search robot uses both Google and Live because, well, why wouldn’t you want the best of both worlds? But as far as I know, neither supports a proximity syntax like:

"every thursday" within 100 "keene nh"

I only need to run my search robot occasionally, and there are only thousands of pages per calendar hub, and there are only a dozen hubs yet. So for now it’s feasible to use brute force. I can, and likely will, fetch all the pages found by the two engines, analyze them, and reject those that fail my proximity test.

But since I am virtuously lazy, I just thought I’d ask. Are their undocumented features for either or both of these engines that I’m missing?

Curating softball schedules

Keene is crazy about baseball and softball. In the men’s softball league alone there are 56 teams, they have played 73 games so far, and will play another 431 through August. I know this because the schedule was made in Excel, and published as a web page that Excel’s Data->From Web feature can easily read back.

That Excel spreadsheet isn’t at all useful, however, if you want to combine the schedule with other public calendars, or with your own personal calendar. For that you need an ICS feed. And almost nobody — from the major league websites to local leagues like mine — bothers to provide those.

So I made an ICS feed for Keene men’s softball, and I did it in an unusual way. My first thought was to point FuseCal at the schedule page, which is just an HTML table that looks like this:

DATE TIME FIELD AWAY HOME Lg
Fri. Apr 17 6:00 PM D Computer Solutions of
Keene
J.A. Jubb C1
Fri. Apr 17 6:00 PM O Peerless Insurance C&S 1 D2

But FuseCal wouldn’t read that page. It’s a service that specializes in digging structure out of unstructured text, and I guess it got freaked out when it saw too much structure in this page!

Normally in cases like this I’d write a script to read the HTML table, parse out the dates and times, and write an ICS feed. But that isn’t a skill most people have, and I’m looking for ways to help calendar curators do this kind of thing for themselves.

Then it occurred to me: What would FuseCal read? How about this:

Fri. Apr 17 06:00 PM,
Computer Solutions of Keene vs. J.A. Jubb, Field D
Fri. Apr 17 06:00 PM,
Peerless Insurance vs. C&S 1, Field O

In other words, the same stuff lightly reformatted, and coalesced into a single cell per row. And yes, FuseCal will read that.

So I added a column to the Excel sheet with this formula:

=CONCATENATE(A4, " ", TEXT(B4,"hh:mm AM/PM"), ", " D4, " vs. ", F4,
 ", ", "Field", C4)

Then I exported that column back out as this HTML page, used FuseCal to create this ICS feed, and bookmarked it for inclusion in the aggregator.

This has to be the weirdest maneuver I’ve ever thought of. Taking away structure in order to be able to add structure? Crazy! And yet it makes perfect sense. FuseCal is a component that specializes in turning weakly-structured calendar-like data into better-structured calendar data. It also knows how to do other useful things, like monitor the source of that data for changes, and convert the data into ICS format. If it’s easy enough to provide the sort of weak structure that FuseCal expects, why not just do that and leverage its strengths?

So I did, and here are the key outcomes:

  1. The softball events now show up on the aggregated calendar.
  2. They’re also available directly from the ICS feed, so that players and their families can add these events to personal calendars.

Nice!

It would be even nicer if, as a member of, say, the Blazers, I could scoop up just my own team’s events. And in fact FuseCal does support filtering. As the creator of the feed, I can go into the application, type Blazers, and restrict the feed to just those events. But I’d have to create 56 separate filtered calendars to provide feeds for all the teams. Feature request for FuseCal: Support filtering on the feed URL, so I can form URLs like:

http://fusecal.com/calendar/view/ 741833?h=5f7c2ac6-13cc-11de-a48e-00163e284ee0&filter=Blazers

http://fusecal.com/calendar/view/ 741833?h=5f7c2ac6-13cc-11de-a48e-00163e284ee0&filter=Greenwald+Realty

While we’re wishing, here’s a feature request for Yahoo Pipes: Add a module for ICS feeds! Pipes is a fabulous tool for transforming, filtering, and merging RSS feeds. It would be great to be able to do the same kinds of magic with ICS feeds.

Data-driven career discovery

The fulcrum of my talk last week at the Open Education Conference was observable work. I first started thinking about this back in 2002, when I included this Dave Winer excerpt in my review of Radio UserLand:

We’ve been using this tool since November, internally at UserLand. We shipped Radio 8 with it. When we switched over our workgroup productivity soared. All of a sudden people could narrate their work. Watch Jake as he reports his progress on the next project he does. We’ve gotten very formal about how we use it. I can’t imagine an engineering project without this tool.

Since then I’ve spoken a few times about the idea that by narrating our work, we can perhaps restore some of what was lost when factories and then offices made work opaque and not easily observable. Software developers are in the vanguard of this reintegration, because our work processes as well as our work processes are fully mediated by digital networks. But it can happen in other lines of work too, and I’m sure it will.

My favorite example, from a very different domain, is the historic home preservationist John Leeke. In our interview he eloquently explains how and why he works observably.

This week’s Innovators show, with Charlie O’Donnell and Hilary Mason of Path101, expands on the same theme from a different perspective. Path101’s tagline is community-powered career discovery, and the approach is more data-driven than narrative.

When we narrate our work, we enable others to ask and answer the critical question:

What is it like to be a __________?

Path101’s aggregation of resumes and personality tests aims for different kinds of questions:

What personality traits do other _______s like me tend to have?

What careers do other _______s like me transition into?

Path101 is still a very young service, but I love the concept and will be interested to see how it evolves.

Mashing up LibraryThing, FuseCal, and RSS2HTML to create iCalendar feeds for LibraryThing events

One of the elmcity project‘s curators — Richard Akerman, in Ottawa — likes to use LibraryThing to keep track of events. He provided me with this RSS feed for Ottawa’s LibraryThing events:

http://www.librarything.com/rss/events/location/ottawa,+on

Although this feed does contain event information, it’s weakly structured. The dates and times appear as free text within the RSS <description> element:

<description>Thursday, April 30 (12:00 pm) Jeramy Dodds discusses Crabwise to the Hounds; Matthew Tierney discusses The Hayflick Unit. Join two stellar poets for a team Masterclass on poetry. Jeramy Dodds, recently shortlisted for the Griffin Prize, and Matthew Tierney, author of The Hayflick Unit and Full speed through the morning dark, for an exploration of the intersection of science and poetry.</description>

Could LibraryThing provide an iCalendar feed? Sure. But in order to do so, its events system would want to start gathering information in a more structured way.

Could FuseCal read the unstructured RSS feed and turn it into a structured RSS feed? In theory yes, in practice it doesn’t seem to want to read XML.

But wait. Maybe FuseCal can read an HTML translation of the RSS feed and turn that into an iCalendar feed?

Yep, that works. For calendar curators, and for anyone else who may be interested, here’s the recipe:

  1. Find a service that converts RSS into HTML. For example: http://www.rss2html.com.

  2. Form a URL that uses that service to convert a LibraryThing feed. For example: http://www.rss2html.com/public/rss2html.php?TEMPLATE=template-1-1-1.htm& XMLFILE=http://www.librarything.com/rss/events/location/keene,nh

    For another location, just replace keene,nh with, say, ottawa,on or baltimore,md.

  3. Copy that URL and paste it into FuseCal.

  4. Click Add to My Calendar -> Other Calendar in FuseCal to expose the iCalendar URL.

  5. If you’re curating for the elmcity project, bookmark that iCalendar URL in the Delicious account you’re using to control your instance of the calendar hub.

Of course I could just automatically scan LibraryThing for each instance, just as I’m doing for Eventful and Upcoming. If that’s what curators prefer, I will. But in any case, this is a nice example of the kind of lightweight, spontaneous, opportunistic integration that I mentioned in my talk at the Global Research Library summit.

What is the RSS of calendars?

A conversation with some folks here at the Open Education Conference (#ocwc2009global) just connected in a wonderful way with another conversation on Twitter about what Douglas Hofstadter calls Ob-Platte puzzles, like this one:

Q: What is the Atlantic City of France?

A:Monaco. (Not a city in France. But borders France, is coastal and casino-oriented).

These come from my favorite of Hofstader’s books, Fluid Concepts and Creative Analogies.1 The thesis is that recognizing and extrapolating from patterns is a core aspect of — maybe the core of — intelligence.

Here’s the connection. To the exent that technologists fetishize innovation and newness, we risk overwhelming people with churn. “Forget what you thought you knew,” we tend to say. “This new thing changes everything.” Except, of course, it usually doesn’t.

For example, we’ve done a terrible job of explaining to the world that Twitter is, among other things, a recapitulation of the pub/sub pattern that most people first encountered in the blogosphere. The packets are smaller, the activation threshold is lower, but the same principles apply. You can extend what you know from the blog domain into the Twitter domain. And the two are complementary.

We aren’t getting that message across. Yesterday’s NY Times — featuring Maureen Dowd’s encounter with Twitter founders Evan Williams and Biz Stone — makes that painfully clear.

Analogies are crucial. The elmcity project boils down to this Ob-Platte puzzle:

Q: What is the RSS feed of calendars?

A: The iCalendar (ICS) feed.

We need to help people focus much less on fast-changing applications, protocols, and formats, and a lot more on constant underlying patterns and principles that they can learn and then extend by analogy.


1My review of the book, for BYTE, is now gone too, I see, along with my InfoWorld archive. More proof, if proof were needed, that we need to take control of our lifebits.

A different take on ‘green’ Keene

It says here:

Portsmouth defeated by ‘green’ Keene

Municipal employees in Portsmouth and Keene, the state’s two predominant “green” cities, slugged it out over the course of three weeks and, in the end, Keene delivered the knockout punch.

Portsmouth accepted Keene’s challenge in late March to see which environmentally conscious city could get the highest percentage of municipal employees signed up for the New Hampshire Carbon Challenge by Earth Day. With a participation rate of 55 percent, Keene employees easily outperformed Portsmouth’s 41 percent.

That’s nice. I guess. I dunno. From my point of view, ‘green’ Keene has a long way to go. My struggle to get the city to issue its first-ever approval for a clean, modern, efficient wood gasifier was epic, and cost me more than few sleepless nights.

Then last week the other shoe dropped. I found out, by accident, that I qualified for a property tax exemption. A qualifying wood heating system is defined as:

…a wood burning appliance designed to operate as a central heating system to heat the interior of a building.

Yep, that’s what my EKO-40 does. I get to reduce the taxable value of my property by $10,000. It’ll only save me a few hundred bucks a year, but that’s every year, so it’s nothing to sneeze at. I’m grateful.

But. During all that time I was struggling to get the system approved, no official in ‘green’ Keene said: Oh, by the way, we do encourage this kind of thing, and you’ll even qualify for an exemption, and in fact it’ll be the first one we’ve had the opportunity to do, and we’re excited about that!

Well, the secret’s out now. I’m happy to know that the next person to adopt central wood heating will be able to search, find precedent, and move forward.

Finding and connecting social capital

I spent some time over the weekend perusing the list of possible recurring events that my search robot found, and recording the useful/valid/appropriate ones in a calendar that syndicates into the Keene calendar hub.

It took me a half hour to go through the first 125 items in that list of 3300 search results. I found ten new recurring events for the Keene calendar. Three or four of those came from PDF newsletters that contained English paragraphs like:

Community Singers: Open singing group, no experience necessary, come for the joy of it. Thursdays from 10:45 to 11:45.

Using ordinary calendar software — in this case Live Calendar, but it could as easily have been Google Calendar, Outlook, Apple iCal, Eventful, or Upcoming — I turned these into iCalendar paragraphs like:

BEGIN:VEVENT
RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TH;WKST=SU
DTSTART:20090416T104500
DTEND:20090416T114500
SUMMARY:Community Singers
DESCRIPTION:http://www.lifeartkeene.org
LOCATION:LifeArt Community Resource Center
END:VEVENT

The first thought that will occur to technically-inclined readers is: “Hmm. How might I fully automate that transformation?” I understand, and share, that impulse. But I’m trying to set it aside for now, and focus on a different kind of solution.

At a geekish dinner recently, the conversation turned to automation. The geek mind and personality, someone suggested, tends toward an all-or-none approach. It cherishes algorithms that drive fully-automated processes to 100% completion. It does not value methods that achieve partial results, or systems that engage with people to help them do that refinement.

I think that’s true. As I went through the list of candidate events, I reflected on what I was doing. A lot of it wasn’t mere translation from English to iCalendarese. For example, here’s search result #37:

37. NSD – 2009_02_Issue.indd

Recreation Center, 312 Washington St., Keene, NH. Western Style Square Dance Apparel ….. “We have a dance every first and third Saturday, no matter what!!!”

Here’s the source of the location information:

And here’s the source of the time information:

These components are unrelated. Or rather they are related, just not in a way that machine intelligence is likely to be able to detect anytime soon. But human intelligence can easily figure out that:

  • There is an organization called Monadnock Squares

  • The dances happen at the Keene Recreation Center

  • These are the kinds of events that happen on regular recurring schedules

So I searched for Monadnock Squares, and wound up adding this event to the calendar:

At this point I realized what the tagline for this project should be. The one I’ve been using is accurate but uninspiring:

community calendar syndication

So I’m going to try this instead:

finding and connecting social capital

When Robert Putnam says that we are bowling alone he adds:

More Americans are bowling than ever before, but they are not bowling in leagues.

Yochai Benkler points out that the networked information economy enhances our ability to:

…do more in loose commonality with others, without being constrained to organize their relationship through a price system or in traditional hierarchical models of social and economic organization

Maybe there’s plenty of social capital around, but it’s just harder to find, and connect with, because it’s no longer tightly coupled to traditional clubs, leagues, and organizations.

A lot of it is represented online, it turns out. It just isn’t published in a way that’s easy to find and connect with. I hope this project will help change that.

To that end, I’m wondering how to help curators process lists of many thousands of candidate events. Mechanical Turk comes to mind. It would be great to enable curators to carve their lists into batches of 100 and farm them out to volunteers. Is there a free Mechanical-Turk-like service for doing that?

A power tool for calendar curators

This installment of the elmcity+azure series shows how curators can find and publish events that are discoverable online, but not available in a structured form that can syndicate in and out of one of the elmcity hubs.

Introduction

When a curator signs up for the elmcity calendar aggregator project, the first question is invariably: OK, where do I find calendars? Although the service aims to gather and republish iCalendar feeds, there’s a chicken-and-egg problem: The vast majority of calendar information on the web is implicit, not explicit. This project is all about finding a lot of that implicit data and making it explicit.

One great asset for calendar curators, as I’ve mentioned before, is FuseCal. I’m using it, for example, to turn this poorly structured page at the Keene Public Library into an iCalendar feed that can participate in the syndication network. Curators in Providence, Huntington, and elsewhere are having good success with FuseCal.

But the universe of implicit calendar information is much large than FuseCal alone can address. There is no fully automatic way to discover that implicit data and make it explicit. So I’ve cooked up a computer-assisted method that I think will be a power tool for motivated curators. It’s based on a specialized search robot that looks for phrases like this:

"every thursday" "keene nh"
"4th sunday" "keene nh"

The output from the search robot, for Keene, is here. It contains over 3000 entries like this:

22. September08newsletter.nws

Keene, NH 03431. Return Address Requested. NON PROFIT ORG. U.S. POSTAGE PAID …. Every Thursday from 5:30-9pm. For more info call Ben Grant at 603-283-6601 …
29. Women’s Learn to Play Hockey | Model Web Site

… solution for you. The program runs from November 10 th through February 23 rd, every Monday … great program. Come see us at 149 Emerald Street in sales tax free Keene, NH

Many of these pages mention implicit recurring events that a curator can make explicit, by publishing them in a special iCalendar feed. Since I’ve already shown how to publish iCalendar feeds using Outlook, Google Calendar, and Apple iCal, I’ll add a fourth example to that series and show you how to do it using Microsoft Live Calendar.

Setting up a feed of recurring events

Let’s look at search result #22, September08newsletter.nws. It turns out to be a PDF newsletter from the Keene LifeArt Community Resource Center, whose official events page is under construction.

Here’s what the newsletter looks like:

It mentions a bunch of recurring events, including:

Community Singers: Open singing group, no experience necessary, come for the joy of it. Thursdays from 10:45 to 11:45.

Cheshire County Structured Storytelling: Creating and sharing stories about heroism and humor. Thursdays from 10:45 to 11:45.

Publishing one of these into an iCalendar syndication network, using Live Calendar, is a two-part process. Part one is a once-only setup of the feed. Part two happens once per recurring event.

Setup, Step 1: Add a new calendar

Setup, Step 2: Share the calendar

Click Import into another calendar application

Setup, Step 3: Capture the URL of the iCalendar feed

In this case, the link is webcal://jonu.calendar.live.com/calendar/recurring+events1/calendar.ics.

Setup, Step 4: Bookmark the feed in your curatorial account

Change webcal: to http: and use these three tags: ics, feed, and trusted.

Adding recurring events to the feed

Now repeat these steps for each recurring event you’d like to publish:

Per-event, Step 1: What, where, when

Per-event, Step 2: Recurrence

Per-event, Step 3: Details

Use the best link you can find for the organization, group, or individual sponsoring the event. Anyone who discovers the event at the hub, or in any feed that comes from the hub, will follow that link to find out more about the sponsor and the event.

Outcomes

On the next aggregation cycle, the event will be captured and reflected back in various ways. Here’s the internal representation:

<event>
  <title>Community Singers</title>
  <url>http://www.lifeartkeene.org</url>
  <source>recurring events: LifeArt Community Resource Center</source>
  <dtstart>2009-04-16T10:45:00</dtstart>
</event>

Here’s how it’ll show up in the default HTML rendering:

Thu 10:45 AM Community Singers (recurring events: LifeArt Community Resource Center)

Why recurring events?

Because there’s a high payoff. You could publish an individual event this way, but once it scrolls past the event horizon it’s gone. When you publish a recurring event, though, you’re creating a gift that will keep on giving.

Why should a curator have to do this?

You can certainly try to explain to sponsors that they can do this for themselves. But in my experience, most aren’t open to that discussion. As a curator, though, you can model the behavior you’d like them to emulate. As their events syndicate, and show up in various places, they’ll begin to notice, and will wonder why they’re not the authoritative sources for their own information. At that point, you can say: “You can be! And you should be! It’s easy! Let me show you how!”

Talking with Erin Kenneally about digital forensics in a connected world

My guest on this week’s Innovators show is Erin Kenneally, a lawyer who helps law enforcement agencies think about digital forensics, and about the authenticity of evidence in a connected world. Methods that were considered best practices not long ago — like shutting down computers, capturing images, and analyzing them — are no longer practical in an ecosystem of always-on services. It’s tempting to say that cyberspace rewrites all the rules of the game, but as Erin points out, that’s not really really true. There are always logs, and people responsible for those logs, and procedures for managing those logs — in physical as well as in virtual space. When a case comes before a judge, a well-documented set of best practices regarding physical custody of computer systems is likely to be as relevant as the cryptographic methods that may have been used to protect and validate the bits.

Someday all this will be relevant to the lifebits scenario I envision. In that model I push as much of my personal data as is feasible to the cloud, surround it with a set of access control and auditing services, and route transactions there whenever I can. When you and I do business, my view of our transactions is logged and audited in a system I control, governed by practices I can document.

What happens when I’m compelled to provide evidence or documentation, but don’t want to cough it up? If I’m running my lifebits service in a translucent way, the cloud infrastructure never sees my data unencrypted. But while that’s feasible, it radically limits my ability to allow automated transactions against my data. So in practice I’ll want to let the infrastructure to access the data as my proxy. Doing that in a controlled environment, with a robust access control scheme that’s uniform across all my transactions, and with comprehensive auditing, will be vastly preferable to the worsening mess we’re in now.

Community calendar curation: The startup guide

Suppose your community is Ypsilanti, Michigan. The steps are as follows.

1. Choose an identifier for your new hub. For example: ypsicals.

2. Choose an identifier for yourself. This can be a Facebook name (or id), a Twitter name, a Gmail address, or a Windows Live email address.

3. Notify the elmcity administrator that you’re ready to start your new hub.

4. When you receive confirmation that the hub has started, visit http://elmcity.cloudapp.net and log in using your Facebook, Twitter, Gmail, or Windows Live identity.

Stepping into the river with Heraclitus

From the Benjamin Jowett translation of Plato’s Cratylus:

Socrates: Heracleitus is supposed to say that all things are in motion and nothing at rest; he compares them to the stream of a river, and says that you cannot go into the same water twice.

Heraclitus would have loved the web. The ever-changing river of information, flowing around and through us, brings his doctrine of flux vividly to life.

But I don’t think most of us truly embrace the doctrine of flux. We’re more comfortable with stocks than with flows. And that’s one of the key challenges I’m wrestling with at elmcity.cloudapp.net.

The service is not a database, and does not contain stocks of events. It is, instead, a hub that coordinates flows of events. But that model doesn’t make immediate sense to people.

Q: How do I put my events into your database?

A: You don’t. You just arrange for your database to publish a feed. The hub subscribes to your feed and to others, and in turn publishes a merged feed to a network of downstream subscribers. From the hub, or from anywhere in that network, people who find your events then follow links back to the authoritative source: You.

It’s a wonderful model, but a lousy elevator pitch. Given that most people are not computational thinkers, it relies too much on counter-intuitive principles: indirection, pub/sub, loose coupling. And it seems to be all about flux, which is psychologically challenging. Amidst all this dynamic flow, can’t we please have some constant anchor?

Actually we can. At the core of the service is a collection of feeds. The collection changes too, but much more slowly than the streams of events flowing through each feed. Feeds are relatively constant, and so they are manageable. For example, there are far too many events to make individual trust decisions about, but I can easily trust a feed or not.

Of course there are some ways in which we do need to manage individual items in feeds. For example, you can pluck an event from an iCalendar feed and stick it onto your personal calendar. Or you can transfer a single MP3 from an audio feed to your player. This feed/item duality makes the conceptual challenge of feeds even harder.

One new place to experience that duality is SpokenWord.org. My collection there is a mixture of feeds and items. Why items? Feeds are prospective. They look into the future for new items, and make them available to my podcatcher. But when I subscribe to a feed, I may want to make archival items available too. At SpokenWord I do that by “collecting” individual items.

In an interview with Phil Windley, SpokenWord’s founder and developer Doug Kaye says that he was surprised by the extent to which the service is being used to manage feeds rather than items. That’s true inbound, when people submit feed URLs rather than item URLs for inclusion in the catalog. And it’s also true outbound, when they use SpokenWord to consolidate many feeds into a single merged feed that’s more convenient to receive and manage in a podcatcher.

In different ways, the elmcity and SpokenWord projects are both encouraging and enabling people to think in terms of flows, and to manage feeds instead of items.

As we all become more adept at working with flows, I think we’ll need a richer vocabulary of patterns to describe them. At SpokenWord, for example, there’s a big difference between this feed and this one.

The first, based on a script I wrote, points to 45 chapters of Mark Twain’s Connecticut Yankee in King Arthur’s Court. It will never produce a new item. It’s just a way of packaging those chapters so a podcatcher can download them.

The second feed is The Moth Podcast, which is both a historical archive and a way to prospectively grab new items.

Neither pattern corresponds to an iCalendar feed, which is purely prospective. In calendar space I care about today’s events and future events, but almost never about the past.

In rivers of information, feeds provide one kind of anchor. Patterns that describe the nature of feeds, and our ways of using them, are another. These are sources of constancy amidst the flux.

A conversation with Seth Grimes about the voice of the customer

My guest for this week’s Innovators show is Seth Grimes. He’s a business intelligence expert who, nowadays, is really keen on text analytics. In this conversation he explains why: There’s suddenly a lot more text available for analysis.

And it’s not simply because the web continues to grow. The conversational dimension of the web — blogging, and now microblogging — holds particular interest for companies that need to monitor, and make sense of, what is being said about them online.

Seth uses the wonderful phrase “voice of the customer” to describe this new opportunity. As people increasingly narrate their lives and experiences online, that voice becomes easier to hear — or anyway, to read.

Couple that with “voice of the company” applications, exemplified by Public Service of New Hampshire’s use of Twitter during the December ice storm, and maybe we can begin to restore a market dynamic in which these two complementary voices can hear — and respond to — one another.

iCalendar validation: status report

One of the ongoing themes of my calendar aggregation project is the notion that iCalendar files are (or should be) calendar feeds in the same way that RSS and Atom files are blog and microblog feeds.

As I began to explore this idea, I realized that iCalendar feeds are all over the map in the same way that RSS feeds used to be when there wasn’t a robust, well-known validator. So began a parallel effort to improve the state of iCalendar validation.

I’ve written a series of entries on this topic, based on early observations. Now that curators for the aggregation project are finding more iCalendar feeds in the wild, we’re gathering more data for the validation effort.

Here’s the set of iCalendar-feed-generating software products that has emerged so far:

Google Calendar 70.9054
iCalcreator 2.2.8
FuseCal Software
Coldfusion8 
Drupal iCal API
Intand Corporation//Tandem for Schools
Zvents Ical 
Trumba Calendar Services 0.11.5203
WebCalendar-v1.1.2 
Meetup Inc//RemoteApi
iCalendar-Ruby 

For each city or town participating in the elmcity project, there’s a stats page that reports how two different parsers handle the set of iCalendar feeds collected for that city or town.

The first parser is the currently-available online validator based on iCal4J.

The second one parser is DDay.iCal, the component I’m using to parse and load calendars.

The outcomes reinforce what I saw in the table of results shown here. Parsers sometimes disagree about which feeds are valid, and why or why not.

My hunch is that this isn’t actually a huge problem. I think that as we:

  • collect more examples of iCalendar feeds in the wild,
  • converge on the complete set of software products that produce those feeds,
  • and run all the feeds through the available set of parsers,

we’ll find that there are maybe a dozen or so issues that account for the bulk of the discrepancies.

But that’s only a hunch. To confirm it we’ll need to gather the data and do the testing. If the elmcity project succeeds in finding and cataloging enough of the iCalendar feeds out there in the wild, we’ll have the set of feeds that need to be analyzed.

In parallel, I’ll try to run the data through more than the two parsers I’m currently using. I’m aware of iCalendar.py and vObject and will roll those in as I can. If either of these is available as service let me know, that’ll make things easier. And if there are other parsers that could be included, ping me about them. Again, if they’re available as a service, that’d be ideal.

Facts and friction

Last weekend we all had a good chuckle when we saw that WolframAlpha knows — or anyway claims to know — the airspeed of an unladen swallow. But the more telling example, for me, was one that Stephen Wolfram showed in a post-demo discussion:

Suppose you want to know the distance to Pluto. We don’t just look it up. We answer the question: “What is the distance to Pluto right now?” And we compute the answer.

I reckon that this notion of computable knowledge is going to take a while to sink in. Here’s another example:

Q: length of grand canyon / height of mt. everest

A: 4.47.

These examples run the risk of seeming geeky and pointless. But twice in the last few days, I’ve found myself reaching for bits of computable knowledge that weren’t readily available, and that’s got me thinking about what things might be like when they are.

Both examples are from my elmcity+azure project. In one case, I needed to work out distances — based on latitude/longitude coordinates — for locations that might be written as Providence RI or Ann Arbor, MI. There’s no shortage of online services that can do this. But they all report results in different ways, and digging the answers out of XML responses — which may or may not require special handling for embedded namespaces — can be very tricky.

In the other case I wanted population data for cities whose names are written the same way. Here I wound up digging it out of a CSV file published at http://www.census.gov. It’s perfectly doable, but you’ve got to really want to do it. If you have, say, a count of calendar events in Providence, and you want to divide that by population in order to produce an experimental metric for creative class activity, you can’t just write “population of Providence RI” in the denominator and proceed with your experiment. You have to overcome some fairly serious data friction.

In a few months we’ll all get to tirekick WolframAlpha. Then we’ll draw our own conclusions about what it can or can’t do, and is or isn’t good for. I’m not expecting a Delphic oracle. But I would like to be able to compute with facts in a more frictionless way.

Competing for the creative class, revisited

In the current build of elmcity.cloudapp.net, the statistics page for each instance of the calendar aggregator reports a line like this one for Providence, RI:

All events 910, population 48779, events/person 0.02

I’m not exactly sure where this might lead, but I’m thinking that it could evolve into a population-independent metric of what Richard Florida calls “creative class” activity. As I learned at the Cities of Knowledge conference in 2007, city planners are now thinking explicitly about how to compete on the basis of such activity.

If you’re Asheville NC or Portsmouth NH, you can’t compete in absolute terms with San Francisco or New York. But you can compete with them on a relative basis. And you can also compete with similar-sized neighbors like Greenville NC and Dover NC. Here’s an early peek at the data:

city population events/person
keene, nh 23,000 0.07
ann arbor, mi 115,000 0.04
providence, ri 48,000 0.02

It’s not surprising that Keene ranks first, because I began the experiment in that town and have been curating its events for some time. But that’s exactly what interests me about this process.

I can’t measure the actual events-per-person ratio for these cities, because there’s no way to know know that. Most events aren’t reported in a machine-processable way, and so cannot be counted.

What a curator can do, though, is help make the creative class activity that’s really going on not just visible, but countable. Suppose that city A has less activity than B, but does a good job of curating what it has. City A might thereby create the impression that it has more. And by doing so, it might kick off a virtuous cycle that makes that impression real.

Are there any city planners who are gathering and using this kind of metric?

A conversation with Andrew Rasiej about activating student sysadmins, rebooting America, and designing for abundance

My guest for this week’s Innovators show is Andrew Rasiej. The show is a perfect example of what I envisioned a few years ago when I began looking for ways to mash up ITConversations with Social Innovation Conversations. Andrew is a social entrepreneur whose projects all, in one way or another, adapt technology to social need.

In this conversation we focus mainly on two of those projects. MOUSE advances the computerization and networking of schools by inviting students to become system and network administrators. The Personal Democracy Forum is an initiative to reboot politics.

From this interview, and from an earlier conversation with Andrew at Transparency Camp 2009, I took away two key principles:

1. Design for abundance. Activating student sysadmins and crowdsourcing political action are two of many examples where the gamechanging assumption is that resources and talent are abundant rather than scarce.

2. Be a lifelong learner. And to the extent you can, prefer to work with other lifelong learners.

There’s a bit of a conundrum here, because lifelong learners arguably are a resource that really is scarce. I’m still not sure how to think about that.

An assistive technology success story: The Humanware magnifier

As my mom wrestles with the difficult combination of hearing loss and vision loss, I’ve grown more aware of the strengths and weaknesses of various assistive technologies. Many are disappointing, but the Humanware magnifier is working well for her.

It’s basically a digital camera that projects onto a flatscreen monitor. You position your book or magazine on the flatbed, and zoom the onscreen text to the needed magnification.

As I watched her use the device I could see room for improvement. Although the bed slides laterally and longitudinally, the action is a bit stiff. So she tends to slide the reading matter around on the bed, rather than sliding the bed itself. As a result, she winds up realigning the book, newspaper, or magazine more than would otherwise be necessary.

With books, in particular, there’s also the issue of getting them to lie flat. I don’t think there’s any easy solution for that, but my mom’s OK with holding her books open on the bed.

There’s really only one test that matters: Can she read? And the answer is yes. My mom has been a lifelong voracious reader. Her macular degeneration had gotten to the point where she simply could not read, and that was devastating. Audiobooks help, but not much. That’s partly true because of hearing loss, and partly because the audio gadgets she’s tried — CD players, MP3 players — lack the affordances she needs.

The Humanware magnifier just works. There’s a big on/off switch, and a big zoom dial, and she can put a book, magazine, or newspaper onto the flatbed and read. Not nearly as fast as she’s capable of, but she can read. And so she does.

A conversation with Phil Windley about contextualized browsing

This week’s Innovators show has the lowdown on Phil Windley‘s new company, Kynetx. The first application of the Kynetx technology is Azigo’s RemindMe service. It alters search-results pages to highlight cases where the user has — but would likely have forgotten about — a discount-qualifying membership.

There are a number of moving parts in this scenario. On the back end, Kynetx provides a rules engine that decides how to rewrite a page based on the context of the user’s “web episode” and the user’s membership in an organization like AAA. Membership is asserted by an Information Card that the user installs, then presents on request to a browser extension. It asks the Kynetx service for a chunk of page-modifying JavaScript, then runs that code locally to effect the change specified by the rule.

If you’ve followed the Internet identity saga — a story that Phil has helped to write, as author of a book on digital identity and as an organizer of the Internet Identity Workshop — you’ll be thrilled to see that the Kynetx system is responsible for the minting and real-word use of Information Cards. As Phil explains in this interview, the cards as currently used convey no extra information, they merely signify membership. Still, it’s great to see this key technology finally percolate out into the mainstream.

Kynetx will mainly serve companies that want to solidify and enhance high-value relationships with customers by means of “permission-based context management.” Refreshingly, the Kynetx wiki qualifies that definition in a way that will make Doc Searls smile:

The following anti-lexicon contains words and concepts that Kynetx doesn’t use:

  • exploit – while opportunities might be exploited, people never should be.
  • eyeballs – we’re not doing optometry
  • target – you target enemies, not customers.

Near the end of the interview, Phil refers explicitly to Doc’s VRM (Vendor Relationship Management) campaign:

We see ourselves as plumbing for VRM. For example, we’re putting together a green choice card. If you install it, as you search around the web it will show you which companies have been ranked well or poorly in terms of social responsibility. Right now it’s just a demo, and we don’t have great data, but suppose we did, and there were enough of those cards out there, and Constellation Brands was determined by Fortune Magazine to be the least socially responsible company in 2008. If every time a cardholder found a Constellation product on Google there was a little icon indicating that, and there were a lot of people with the card, you could change the company’s behavior. They’d want to get the icon off that page.

It’s a fascinating notion, and it leads to an issue that I should’ve raised with Phil in the interview but will raise here instead. A couple of years ago, during my period of infatuation with Greasemonkey, I made a 4-minute screencast entitled Content, services, and the yin-yang of intermediation. At the time, I’d just invented a Greasemonkey-enabled version of LibraryLookup that was more aggressive than the standard bookmarklet version.

With the standard version, you click a bookmarklet while on an Amazon page, and a query against your local library pops up in a window. With the Greasemonkey-enhanced version, the Amazon page itself is rewritten to say:

“Hey! This book’s available at the Keene Public Library!”

Or:

“Due back at the Keene Public Library on March 28.”

But does the user of a web-based service have the right to modify pages in these ways? The screencast ponders that question. Three years ago there wasn’t enough client-side page rewriting going on to raise that question in a big way, and I guess there still isn’t, but now that jQuery is making the capability broadly available it’s bound to come up.

There’s a continuum of ways in which I can modify a web page in a browser, ranging from font enlargement to translation to contexual overlays. I wouldn’t draw a line anywhere along that continuum. It seems to me that I’m entitled to view the world through any lens I choose.

This doesn’t only apply to my view of the virtual world, by the way. It will apply to my view of the physical world too. We don’t yet have magic glasses that overlay web prices on shelf items, or web reputations on store signage, but someday we will.

I can’t see how I could be prevented from creating a heads-up display — for realspace or cyberspace — that’s advantageous to me. But I’ve got a hunch that those magic glasses are going to be controversial.

A new answer to an old question

Last week I started inviting calendar curators to join the elmcity+azure project. The age-old question immediately arose: How to communicate and collaborate? An email distribution list? A web forum? A blog? A wiki?

Been there, done that. Times are changing, and it felt like there ought to be a new answer to that old question.

Here’s the answer I came up with: a FriendFeed room. From my perspective, it’s an ideal solution. And fittingly, that’s true because it embodies the same principles woven into my elmcity project: syndication, publish/subscribe messaging, loose coupling.

I needed a lightweight system that would enable everyone involved in the project to be aware of, and optionally discuss:

  • Service updates
  • New locations
  • New feeds
  • Issues

So I created a FriendFeed room, and subscribed it to the following feeds:

It took about five minutes to set that up yesterday. I checked the room just now, and here’s what I saw:

In other words, Bill Rawlinson, who is curator for Huntington, WV, found — or, rather, created, using the increasingly awesome FuseCal — three new iCalendar feeds today. Those are three events of interest to the project. It should require near-zero effort for such event to come to the attention of project members. And when the workflow is syndication-enabled — as is automatically true for us, because we are using Delicious as the curation tool — it really does cost nothing to usefully propagate those events. The web hooks are already there, you just have to use them.

I have invited the curators into the room, and some have joined, but a crucial benefit of this arrangement is that nobody has to join unless there’s a need to actively discuss issues. To monitor the project’s event stream you can just go to the project’s FriendFeed room. Or don’t go. Because that stream is also, of course, available as a feed you can subscribe to.

It’s wildly cool, and incredibly useful. Thanks FriendFeed!

A conversation with Andrew Turner about data and design in the geospatial realm

I really chatting last week with Andrew Turner on my Innovators show. Andrew is the driving force behind GeoCommons, a new service that brings social curation and visualization to the realm of geographic information and cartography.

A lot of our discussion wasn’t specific to geographic data. Issues of provenance, data tethering, syndication, and interpretive context apply to any kind of data that lives online and is both produced and consumed by a lot of different people. As more kinds and quantities of data move into the public realm, we’ll discover and codify best practices for coordinating our efforts.

But we also, of course, talked about the special challenges of geographic data. Marrying temporal and spatial data is a huge one. As I mentioned here, the team at Stamen Design is doing great work on that front.

Of course we’ll want to encapsulate, in software tools, some of the chops that produce animated displays like their Oakland crimespotting map, or the Rocky Mountain Institute’s oil import map.

My own related effort was far less effective than that RMI oil import map. The best stories told with data will arc through time, and it needs to get way easier for anyone who cares to tell those stories.

As the tools and services emerge, we’ll run into another issue that Andrew and I discussed. Cartography is an incredibly subtle art, and we will soon see a proliferation of awful maps made by folks with data, tools, and no design sensibility. But that’s OK, in fact it’ll be a good problem to have. People went nuts with fonts and colors when the web was new, and everyone suddenly became a publisher. Over time things have settled down. It’ll be interesting to watch the cycle repeat as everyone becomes a mapmaker.

Revisiting FuseCal and Upcoming

As calendar curators begin bringing the elmcity project to life in their communities, they’re broadening my horizons. Last year, for example, in the comments on this entry, I learned about FuseCal, a calendar-publishing service that can extract structured calendar information from semi-structured web pages. I’ve been using FuseCal ever since, but in my community I’ve only found one otherwise-inaccessible calendar that it can successfully parse. Curators in other communities, however, are finding more. The Baltimore list includes a handful of them, and so does the Huntington, WV list.

In that comment thread, I tweaked FuseCal’s product manager Matt Gillooly when I said that a service based on HTML screenscraping shouldn’t need to exist. His reply was spot on:

I agree that, ideally, FuseCal wouldn’t have to exist — in the same way that, ideally, hospitals and prisons wouldn’t have to exist. :-)

Seriously, though, I think you need to provide a lot of incentive in order to get people to change the way they behave. It’s much easier to sell a Tylenol than a vitamin.

Matt’s right, of course. My goal for this project is to bootstrap networks of calendar feeds in communities. What matters is lighting up feeds, much more than how they get lit. So it’s great to see FuseCal lighting up feeds in Baltimore and Huntington.

Another service that has seen limited use in my own community, but will be more important elsewhere, is Upcoming. It’s ironic because back in 2005, when I first started thinking about this stuff, Upcoming was the model for what I hoped would emerge in Keene. I walked around town that spring, took photos of event posters, noticed how little of that information was available online, and wondered what it would take to fix that. I’d been using Upcoming myself, but hadn’t had much success getting anyone else involved.

In a blog entry I mused about ways to improve the service. One of my suggestions was to provide an API, and Upcoming’s founder Andy Baio heard and responded.

Four years later there still aren’t many Upcoming events for Keene. But as other communities come online, I’m finding that Upcoming is more popular there. So I’ve added it to the mix, and am finally using the API I asked for long ago.

The elmcity service now supports three major sources of events:

  1. A curated list of iCalendar feeds
  2. Eventful
  3. Upcoming

The Eventful and Upcoming sources are governed by three bits of Delicious-tagged metadata. For Keene, they are:

radius=15
lat=42.9336
lon=-72.2786

Both services support queries that, if written in English, would say: “Give me all the events within 15 miles of Keene.”

Won’t there be duplication? Sure, and here’s an example from the Keene calendar.

Sun 05:00 PM Caribbean Night with Steel Drum music
(eventful: Inn at East Hill Farm)

Sun 05:00 PM Caribbean Night
(upcoming: The Inn at East Hill Farm)

I regard this as a good problem to have. Seeing an event from multiple sources is infinitely better than never seeing it at all. Over time I’ll look for ways to coalesce these duplicates. But for now, given that the vast majority of events aren’t being posted online in any structured way, I like showcasing the many ways to do that.

The Floating Arms keyboard

From an article in today’s NY Times by my friend Peter Wayner:

Some people are so devoted to their keyboard that they search for backups and worry about finding another copy of a discontinued version. Jon Udell, a senior technical evangelist for Microsoft who suffers from repetitive stress problems, uses a Floating Arms keyboard last manufactured in the 1990s. The device incorporates the left part of the keyboard into the left armrest and the right half into the right armrest. The weight of the arms is carried by the rests, which put the hands in the optimal position to stroke the keys. It is the ultimate synthesis of easy chair and keyboard.

“[If you are a touch typist] your hands never cross the center line anyway,” explained Mr. Udell. “This way you take all the weight off your shoulders, all the tension off your neck, you straighten your back, and you breathe better.”

What will he do if it breaks? He hopes someone else builds another version because nothing else comes close for him.

“It’s been a godsend and I don’t know what I’ll do without it,” he said, fingers crossed.

Here’s the picture of my beloved “Captain Kirk chair” that we ran in BYTE in 1996:

The Floating Arms Keyboard, from Workplace Designs ((612) 439-4474), addresses postural problems associated with the traditional desk, keyboard, and chair. A BYTE editor found that switching to this keyboard greatly reduced work-related pain.

From that article:

Understanding keyboards is a complex research task. “That is because the problem is multifactoral,” says Cathy Mishek O’Brien, president and CEO of Workplace Designs (Stillwater, MN), which sells the Floating Arms Keyboard.

Thanks again Cathy. If you should happen to find this, I’d love to hear more from you about the story of this product: how it was developed, why it was discontinued. It’s hard for me to understand why a product that was so revolutionary, and is so effective, didn’t succeed.