There is no folder

Originally published on

Do not try to bend the folder — that’s impossible. Instead, only try to realize the truth. Then you will see that it is not the folder that bends–it is only yourself.

Tagging seems to have spurred a growing amount of research on categories and classification.

A recent paper by Clay Shirky, entitled Ontology is Overrated: Categories, Links, and Tags directly challenges the desktop metaphor which currently underlies much of Plone’s UI. To be sure, it is certainly possible to model the connections that Shirky describes using topics, smart folders, and a disciplined use of keywords, but the metaphor is critical for designing and intuitive system, all the way down to the icon.

I have recently been working a bit with Drupal, and their handling of this problem is worth checking out.  The core taxonomy module, combined with its corresponding menuing systems (menu, sitemenu, taxonomy menu) provide a great deal of flexibility in this regard.

Organization is going organic.

Saints in the Church of Writely?

Two months back I saw Richard Stallman talk at a NYC Gnubies event and I asked him a question that I have been thinking alot about lately — Would a Saint in the Church of Emacs use gmail?

To me the question revolves around the growing threat that 3rd party webservices poses to the freedoms that free software is designed to protect. In O’Reilly’s What is Web 2.0 he argues that software is transitioning from an artifact to a service, and that data is becoming the new “intel inside”. In an age when applications have become commodities, could the freedom of my data (in an open format) be interchangeable with the freedom of software?

I recently listened to the Chief Open Source Officer at Sun Mircosystems pose a similar question in his talk, The Zen of Free. He talks about the importance of Open Software implementing Open Standards, which is close to the idea I have been advocating, but doesn’t quite go far enough.

Using free (as in beer) third party web services is very tempting, but I am worrying more and more about the traditional freedoms that free software protects against – vendor lock-in, proprietary data formats, and freedom to modify policy according to application specific requirements.

I would be less antsy about using web 2.0 apps if I had some assurance that I could get my data back out without screenscraping a bunch of html pages. Even services with APIs like flickr and delicious create vulnerabilities, as I was loathe to discover last week. Delicious provides a programmers api, but its api only exposes methods which operate on a single user. Thus, if you want to export a collection of links that have all been tagged with a particular tag, (reasonable if you are engaged with a community in distributed research) you are back to screenscraping!

These considerations and more advocate for the need for free (as in speech) versions of many of these services. There are certainly some side-effects of running a centralized service that are inherent in it being centralized, but many communities are making use of these “public” services because of their convenience, and the ease with which they can be “mashed up.”

Which brings me back to the design that we have been thinking alot about at work lately. Anders and I presented a talk at pycon demonstrating some of these ideas. Anders did a great job writing our talk up here:

Tasty Lightning

Crucially, it is imperative not to conflate our advocacy for building components that expose themselves as webservices with building apps against third-party web services. The design we describe resembles a traditional
mash-up, except the components involved are locally controlled as opposed to relying upon external, corporate services. For all the usual f/oss reasons it can be important to “own” and run your own services.

But this argument also has everything in the world to do with Ulises In Defense of the Digital Divide as Paralogy essay. In this essay Ulises grapples with Lyotard’s critique of new media under the logic of capitalism which has “established commodification and efficiency as the ultimate measures of the value of knowledge.”

he continues:

…Lyotard states, in the final passage of The Postmodern Condition, that new media technologies can be more than simply tools of market capitalism, for they can be used to supply groups with the information needed to question and undermine dominant metaprescriptives (or what might be called ‘grand narratives’). The preferred choice of development, for him at least, is thus clear: ‘The line to follow for computerization to take . . . is, in principle, quite simple: give the public free access to the memory and data banks’ (Lyotard 1984: 67). (Gane, 2003, p.9)

Considering Google’s stated ambitions to “house all user files, including: emails, web history, pitcures, bookmakres, etc” the freedom movement better wake up to the fact that there is more to freedom than free software, and we are being outflanked.

Free software is only one corner peice of this puzzle – to complete the jigsaw we need the corners of free data, in a free format. Anything else?

(yes, I know I am posting this question using blogger – a situation I hope to remedy after the semester finishes).

The Me Generation

isomorphic surprises: stickies, tasty, and the importance of user contributed content

I have been thinking alot about tagging lately, especially how a complete tagging system – comprised of user-item-tag triplets, is isomorphic to rdf‘s subject-predicate-object triplets. It is amusing to think about how egocentric Web 2.0 is – The subject is always me. Web 2.0 might be made of people, but not just any people – Just the most important one in the world.

Today I had a fun time trying to explain to people on irc the power and importance of user contributed content annotations within plone. Crucially, user content annotations are per-user, per-object, and in many cases a single user might want to annotate a particular object with more than one annotation.

Interesting annotations can come in many flavors. There are free form notes, fine grained annotations (anchored to particular phrases – think msword trackback – or geometrical coordinates on the target – nice for image annotations), keyword annotations (aka – tags), etc ect. There many problems that can be solved with custom per user content annotations, including quiz and poll results, per student answer submission, and lately we have been working on allowing users to clip audio and video by annotating start and end times on media objects.

It is important not to confuse per-user tagging with DC:Subject – the dc metadata is shared across all users (like categories in the wikipedia) and in that sense, is global. While we are on the topic of tags, it is useful to talk about the vocabulary that drives the tagging. Vocabularies can be fixed or free, individual or collaborative, and personal or shared. All of these variations are interesting in different cntexts, and have to do with whether or not I see your tags, or if we each are developing our own ontologies.

In educational technology annotations are a big part of the problems we are trying to solve, but there are tons of use cases in the world at large. Additionally, a high performance, robust tagging engine can power personal content organization, like gmail’s labels.

Which brings me to the products we have been developing at CCNMTL. We have been using PloneStickies, a general purpose content annotation framework, in production for over a year now. Built using AT References, it allows us to create per-user AT objects connected to the target object. AT Schema Annotations won’t do the trick here since, like DC:Subject, these annotations are instance-wide. Z3 annotations might work, but by building AT derived stickies, we pick up search, workflow, permissions, and the richness of AT. This allows us to quickly and easily develop custom stickies, like the StickyClip.

PloneStickies has a ways to go, but the basics work great. It is not yet super useful out of the box, since the portlet it ships with only allows users to attach a single free form StickyNote to the target object. But it is great to develop applications with. It ships with with some super snazzy css stickies, complete with colored/resizable/title-barred/drop-shadowed/roll-upable/transparent-when-dragging notes, which can preserve their own x-y position and state across sessions and never fall off your screen. It now supports attaching multiple stickies to a target, but does not yet provide a mechanism for the target object to place the stickies itself.

At first we thought we could implement a Plone tagging solution using this framework – just create a StickyTags made out of keyword fields, and voilà – plonr. Trouble was, since tagging is such a symmetrical model, its tough to build an efficient zodb implementation (for me, at least) that can handle all the querrying we wanted to do.

Enter the tasty microapp and the PloneTasty proxy (about 90% done). Tasty is a stateful (sqlobject) turbogears component that exposes a REST api, ships with its own snazzy ajax tagging client, and can be used across frameworks, languages, and platforms. We are even hoping it can help make the world a better place.

So StickyTags (which doesn’t exist) and PloneTasty are two implementations of the same concept, with StickyTags being the AT/zodb implementation and PloneTasty/tasty the new microapp design (mashup architecture?) we have been working on and are pretty psyched about.

And if you act now, you get the knife set and the lint remover too, for just 3 easy installments.

Faster, Better, Cheaper

Originally published on

In this episode, Sean Kelly at NASA compares j2ee, rails, zope/plone, turbogears, django… cue the laughtrack

Okay, this is a long one, but it rivals any comparison matrix:


Plone comes out shining, although arguably it compares apples to pomellas.  Someone with the chops should really cut this baby up into chapters, cause its  a win for dynamic  languages over j2ee, and python, and Plone to boot. (spoiler: he uses the zmi for “hello world” and ArchGenXML for the time tracking app).

I could also connect this presentation to ideas in Johnny Can’t Program (cited in a recent interview with Behlendorf) and “where have all the zmi developers” gone, but  I’ll save that for another post.


Out of Context

Today I saw Ted Selker present a talk on “Context-Aware Computing: Understanding and Responding to Human Intention” His perspective on inventions resonated strongly with my recent thinking on social interfaces and software as architecture, and in turn, ideology.

Ted is helping to create a world where intelligence is everywhere, transparently. People joke about toaster oven’s with IP addresses, but you ain’t seen nothing yet.

A few of the examples really stuck out though – intelligent doors that give different people different messages about the availability of the inhabitant, tools that help people manage their relationships better (e.g. themail, clustering and color coding emails, rather than putting them in buckets), and a great little anecdote about doctors who don’t wash their hands before examinations.

In this last case, a hospital approached the lab asking for some high tech solution to insure that doctors washed before procedures. They used to have human supervisors (union, I’m sure) standing by the sink, and were envisioning some sort of rfid-cybercop-surveillance solution. Instead, Ted and his team designed an electronic doorstop. The examination room door would not close until the doctors washed their hands for at least 20 seconds.

Ted has a background in cog-sci and is acutely aware (the whole media lab seems to be) of the ways in which technology is becoming a leading art, and ways in which behavior can influence worldview. I wish this understanding was more widespread.

A few other thoughts –

Ted’s characterization of inventing as adventure movie, moving “at the speed of physics” reminded me alot of extreme programming – release early, release often, embrace change, favor improvisation over the paralysis that comes with the heft of over-engineering and over-designing.

Many of his UI strategies seemed to draw heavily from techniques I first learned about reading The Art of Memory (also echoed in research suggesting larger screens improve efficiency).

Also notable is how this approach of transparent, cognitive prosthesis contrasts with the UI the informedia group presented. Their Visual Query Interface presents the user with sliders allowing them to interact with the system to fine tune the strictness of the computer’s judgment. This mixed mode of interaction seems to differ fundamentally from the approach the contextual computing team is taking.

/* reset the net - */