Advocacy Developers Convergence in San Francisco

I enjoyed the Advocacy Developers Convergence last week, where about 40 super-passionate folks — mostly developers of advocacy tools — gathered in the Presidio to discuss ways to collaborate. Among those represented were Advo Kit, CivicSpace, IndyVoter, Groundspring, Identity Commons (one of three hats I was wearing), and many, many others. Aspiration organized and facilitated the event, and Blue Oxen Associates provided the Wiki.    (1JJ)

While the scope of projects represented — most of which were open source — impressed me, I was really taken by the collective energy in the room. These weren’t your average techies. These folks cared about improving the world, and their passion was palpable. Even the most hardened cynic would have walked away from that gathering with at least a smidgen of hope about our future.    (1JK)

I wore three hats. First, I was there to facilitate Wiki usage during the event. In this regard, I basically did nothing. Most of the people there were already highly Wiki-literate, and the rest picked it up quickly. Second, I was there to help Fen Labalme talk about the Identity Commons system and to identify other potential early adopters. Third, as always, I was there both to share what I knew about collaboration and to observe and learn from others. I was particularly interested in watching Gunner’s (Allen Gunn) facilitation technique. Gunner, who recently took over Aspiration along with Katrin Verclas, used to work for Ruckus Society, and has facilitated a number of interesting events, including several international Open Source boot camps.    (1JL)

Mapping the Space; Emergent Goals    (1JM)

One of Aspiration’s stated goals for the event was to begin mapping the space of advocacy tools. That begged the question: What exactly is an advocacy tool? It was a question most of us conveniently avoided. Some tools are clearly and specifically designed for supporting the needs of grassroots advocacy, such as email campaigns, volunteer organizing, and friend-raising. Several (most?) other tools used by advocacy organizations (such as MoveOn) have multiple applications — mailing lists, contact databases, and so forth.    (1JN)

We never reached a collective solution to this problem, but we seemed to be moving in the direction that Blue Oxen has already gone in determining how to map the collaborative tool space: Map functions (or patterns) rather than tools, and show how different tools can be used for different functions.    (1JO)

The other goal for the event was to identify and pursue opportunities for collaboration among the participants.    (1JP)

Aspiration’s stated goal for the event was to begin mapping the space of advocacy tools and to facilitate collaboration among the participants. A number of interesting projects emerged:    (1JQ)

  • Several people expressed interest in incorporating the Identity Commons protocols into their tools for Single Sign-On and Data Sharing (all with user privacy built-in).    (1JR)
  • An Open Source legislative contact database that activist groups could freely use.    (1JS)
  • Face-to-face code (and other) sprints. A small group is planning a VoIP sprint somewhere on the East Coast later this summer.    (1JT)
  • Internationalization working group, basically a support group for folks internationalizing their code. One of the great things about the attendees was that international representation was reasonably good. There were folks from Poland, Uruguay, and Canada, and people dealing with many other countries.    (1JU)
  • Technical outreach to organizations. Connecting these groups with the right tools, and explaining to them the virtues of open source. A group is planning to use a Wiki to generate a Nonprofit Open Source Almanac.    (1JV)

The challenge with events like these is sustaining the energy afterwards. Face-to-face events that go well are often victims of their own success, because they create a level of energy that is simply impossible to match online. That said, there are certain things that can help assure continued collaboration:    (1JW)

  1. Individual commitment to shared goals.    (1JX)
  2. Group memory.    (1JY)
  3. Shared workspace.    (1JZ)

This group has all of the above. People were super action-oriented. Tasks were getting accomplished on the spot. Requests for information were often followed a few seconds later by shouts of, “It’s in the Wiki” — music to my ears. In general, folks who easily acclimate to Wiki usage — as this group did — are already inclined to share knowledge and collaborate.    (1K0)

Facilitation    (1K1)

Gunner is both high-energy and easy-going. He’s got a goofy, infectious grin and is quick to drop gut-busting witticisms. It would be easy to ascribe the effectiveness of his events to his personality, but that would be largely inaccurate. A well-meaning and amiable person can easily kill the energy of a group by under- or over-facilitating. Gunner has a strong fundamental understanding of self-organizing systems and very good instincts for when to sit still and when to perturb.    (1K2)

Every good event I’ve attended with large groups of people followed MGTaylor’s Scan Focus Act model, and this was no exception. The beginning of these events are always about discovery and Shared Language. Discovery (or “scan”) is inherently messy and unsettling, but when done correctly, “action” naturally emerges. Most bad events I’ve attended are bad because they try to skip this first step.    (1K3)

Each day consisted of several breakout sessions with groups of three to five people, followed by report-outs, yet another pattern of effective face-to-face events. The agenda for the later breakouts emerged as the event unfolded.    (1K4)

The first day began with a game called A Strong Wind, which was an excellent way both to build energy and to get a sense of who was there. Following that and at the beginning of the subsequent days were In Or Out exercises, a way to get a sense of everybody’s mood and to build individual commitment to the collaboration that would follow. The first day, Gunner asked people to describe their moods in one word. The second day, he asked for colors that described their mood. The third day, he asked people to describe the most beautiful place they knew, be it a geographical location (e.g. California) or a situation (e.g. time spent with family, friends).    (1K5)

As a way to accomodate a number of demos, Gunner organized a Speed Geeking session on Tuesday morning. I’m not sure yet whether I liked it or not. On the one hand, I enjoyed the interaction and the energy. On the other hand, it was incredibly draining for the people giving demos (including me), who also missed out on the demos happening simultaneously to theirs. I think the Planetwork Forum model of eight demos — four minute presentations (PowerPoint highly discouraged) and two minutes of Q&A — followed by two hours of unstructured socializing/networking is more effective, but I’m not ready to discount Speed Geeking entirely.    (1K6)

Good Folks    (1K7)

The most important prerequisite for good events and good collaboration is having the right mix of people. I really like MGTaylor’s strategy for achieving this: The larger the group, the more likely you are of having that mix. This group was relatively small (40 people), and I suspect that Gunner and Katrin’s people instincts played a huge role in making sure we had a good group.    (1K8)

I hate to single people out, because I really liked and was very impressed by everybody there. Nevertheless, I can’t help but mention two people. First, I was glad to finally meet Kellan Elliott-McCrea, the author of Laughing Meme, in person. Time and again, I meet folks whose blogs I enjoy regularly and whose work I admire, and I constantly walk away even more impressed with their authenticity and their decency. It’s how I felt when I first met Ross Mayfield and when I met Seb Paquet, and I felt it again when I met Kellan.    (1K9)

Second, I was glad to meet Mark Surman, who’s based in Toronto. Mark founded the Commons Group several years ago, which is very similar in spirit to Blue Oxen Associates. I meet a lot of like-minded people, but it’s a rare treat to meet someone doing similar work. Mark and his group are doing great stuff. They’re an organization folks should keep their eyes on.    (1KA)

Transclusions, Path-Based Addressing, and Version Control

The PurpleWiki community has been rumbling recently, thanks largely to the contributions of two members of the Canonical Hackers, Jason Cook and Matthew O’Connor. Jason wrote perplog, an IRC logger that supports Purple Numbers and Transclusions. Matthew hacked a PurpleWiki node manager, then started adding and fixing other stuff, including an XML-RPC interface. Additionally, John Sechrest developed an experimental email interface to PurpleWiki. Lots of great stuff. It’s forcing us to get off our butts and make some long-promised changes and explain some long-undocumented things. Open Source is a wonderful thing.    (117)

A lot of the excitement is because of PurpleWiki‘s support for Transclusions. We had Transclusions in mind when we architected PurpleWiki, but we (or I, at least) didn’t think Transclusions would actually be implemented until much later. However, exactly one year ago today, Chris Dent got the itch and started playing. A few months later, Chris committed some code, and suddenly, we had Transclusions. It was a total hack, but it worked, and it was unexpectedly cool.    (118)

It’s still a hack, and it needs to be cleaned up, but it’s suddenly become a higher priority. First, we have a pretty good idea of how to support Transclusions “correctly.” Second, having had the chance to use Transclusions regularly, we are starting to recognize their utility and want to take greater advantage of that. (See, for example, my early specs for Abelard.) Third, people are starting to get excited about them.    (119)

Transcluding Multiple Chunks    (11A)

Currently, we support Transclusions of individual nodes (paragraphs, headers, list items, etc.) via the following syntax:    (11B)

  [t nid]    (11C)

where nid is the ID of the node you want to transclude. This works fine when you want to transclude small chunks, but at times, it’s useful to be able to transclude multiple chunks on a page. Rather than specify a transclusion for each individual node, it would be nice to have a syntax for specifying a collection of nodes in a single transclusion.    (11D)

Chris proposed the following syntax:    (11E)

  [t nid,nid,nid,...]    (11F)

This is problematic. The current implementation suggests that the transclusion command be replaced by the content identified by the specified NID. This proposal suggests that the command be replaced by both the content and the structure of the content. If you had a document like:    (11G)

  = Plan for World Domination {nid 1} =    (11H)
  # Finish PurpleWiki. {nid 2}    (11I)

and you tried to transclude this content with:    (11J)

  * [t 1, 2]    (11K)

what is the parser supposed to translate this to?    (11L)

A proper solution must be treated as its own structural element within a PurpleWiki document. More importantly, the syntax should capture document-specific context. This contrasts with the current syntax, which ignores document context entirely.    (11M)

Why is document context important? Suppose you have the following task list:    (11N)

  = To Do {nid 3} =    (11O)
  * Buy milk. {nid 4}   * Feed iguana. {nid 5}   * Implement distributed Transclusions. {nid 6}   * Vote in primaries. {nid 7}   * Expose API to Backlinks. {nid 8}    (11P)

Suppose you want to start a PurpleWiki-specific task list, transcluding all of the list items relevant to PurpleWiki (in this case, nodes 6 and 8). The resulting document might look like:    (11Q)

  {title PurpleWikiToDo}    (11R)
  = PurpleWiki To Do {nid 9} =    (11S)
  * [t 6] {nid A}   * [t 8] {nid B}    (11T)

Now, suppose you want to replicate this task list on another page. You could transclude all of the items individually, just as you do on the PurpleWiki To Do page. In this case, a slight variation of Chris’s proposed syntax (a standalone structural element) would simplify that process. (It also raises an interesting question: Which NIDs do you use for the transclusions: 6 and 8, or A and B? Does it make a difference?)    (11U)

However, what I really want to do is say, “Transclude all of the list items on the ‘PurpleWiki To Do’ page.” For this, you want something like XPointer:    (11V)

  [transclude PurpleWikiToDo#xpointer(id("9")/li)]    (11W)

A few observations: First, the command should be on a line by itself, and it should be interpreted as an independent structural element that will be replaced by a set of structural elements and content. I used “transclude” instead of “t” to make the point that these are two different commands. Second, the Transclusion command specifies a range of nodes within a document, as opposed to a document-independent list of nodes. Third, this combines a path-based address with an ID-based address.    (11X)

Fourth (and this is an implementation detail), if we want to support such syntax, it would behoove us to use an XML data model rather than the home grown model we’re currently using. This way, we could easily plug in existing XPointer implementations to do the queries.    (11Y)

Version Control    (11Z)

The fact that Wiki pages are dynamic throws a kink into all of this. The syntax I propose above takes this into account for the most part. Barring major changes to the PurpleWiki To Do page, the transcluded content will include all of the PurpleWiki tasks, even if more items are added later. If you had to list a set of NIDs, then you would have to be diligent about updating that list manually every time the To Do page changed.    (120)

In addition to supporting path-based addressing, we also need to allow people to specify versions in the address. In other words, you may want to transclude a specific version of a node or a set of nodes from a specific version of a document.    (121)

This shouldn’t be too difficult, but there are some complications. The biggie is whether to transclude a node if the node no longer exists in any document. My instinct right now is telling me that yes, it should, but it should make it clear somehow that it’s an orphan node. (See my previous entry on link integrity for more on this.)    (122)

OCSI Meeting Synopsis

I was in Anaheim yesterday for the Open Collaborative Services Initiative (OCSI, pronounced “oxy”) workshop, which was part of the OMG Technical Meeting. Johannes Ernst, one of the OCSI organizers, invited me to present my manifesto on collaborative tools (which will be published in Dr. Dobb’s Journal and on the Blue Oxen Associates web site).    (WI)

OCSI is an attempt to get collaborative tool vendors to make their tools more interoperable. One of its early goals is to develop a shared architectural blueprint for describing collaborative tools, perhaps initially in the form of a white paper. This has been a refrain of mine for quite some time, and so I was very glad to participate in the group’s second meeting.    (WJ)

As it turned out, there was a tremendous amount of conceptual synergy in the room. I suppose I shouldn’t have been too surprised. At the beginning of my talk, I explained that one of our beliefs (also known as the The Blue Oxen Way) is that Shared Ontology (which results in Shared Language) is a prerequisite to effective collaboration. OMG is a very strong proponent of Model Driven Architecture, which is essentially an instantiation of Shared Ontology. Not surprisingly, there was universal consensus in the room about developing a shared model of collaboration — both on the human-level (e.g. Blue Oxen‘s work with Pattern Languages) and the system-level (the topic of my manifesto).    (WK)

In his introductory remarks, Johannes made several interesting points:    (WL)

  • The word “collaboration” means many different things to different people. This simply underscores the need for a common vocabulary.    (WM)
  • Collaboration seems to be an “it” topic among CEOs and CIOs. However, as often as they mention collaboration and as important as they claim it is, the collaborative tools market has been flat the past few years. At first, this seems to be a contradiction. However, the number of corporate downloads of free IM clients over the past few years indicates that the need for collaboration is real. One of the problems is that tools are not interoperable enough.    (WN)
  • There is no horizontal industry initiative for improving interoperability of collaborative tools. However, several vertical industries have expressed interest. One of the challenges is to get the different industries to realize that they share common needs so as not to duplicate efforts.    (WO)
  • Johannes chatted with a few tool vendors about this problem. Their response: “That sounds great, but I have a product to get out.” The way to get vendors more serious about interoperability is probably bottoms-up — via the user community.    (WP)
  • In this regard, the Open Source community could play an important role. The prequisite for standards is Shared Language and free implementations. We have the latter, but we don’t have the former. If we created Shared Language and if Open Source tool-builders adopted it, we could build a compelling case for standardization. Johannes feels that it is vital to involve both the proprietary and Open Source communities in the OCSI effort.    (WQ)
  • Collaborative interfaces should be as transparent as telephone numbers. When we see a telephone number, we know what to do, regardless of the underlying service provider, protocol (POTS versus VOIP), type of telephone, etc.    (WR)
  • Cut-and-paste is a type of interoperability between collaborative tools. (A poor one, as I and others noted later in the workshop, but also a relatively effective one — a good example of loose-coupling.)    (WS)

Other talks of note:    (WT)

  • David Hartzband, VP of collaboration technology at , provided a four axes view of collaborative tools: synchronous, asynchronous, inline, and contextual. He also observed two trends in the collaborative tools space: business communications convergence (e.g. telephone integrated with email integrated with your documents, etc.) and enterprise application functional convergence.    (WU)
  • Carol Burt, CEO of 2AB, shared her vision for model-driven access management. Not only could such a model have ramifications for those developing secure applications and those selling security software, it could also potentially plug in to an OCSI model for collaborative tools.    (WV)

At the end of the workshop, Joaquin Miller (the other OCSI co-organizer) led a discussion about the next steps within the OMG umbrella. The consensus seemed to be to propose the formation of an OMG SIG, which could potentially evolve into an OMG Task Force. Not being an OMG member myself, the conversation both baffled and fascinated me at the same time. Nevertheless, the folks there seemed to know what they were talking about, which is always an excellent sign.    (WW)

The next meeting will be at the next OMG Technical Meeting in St. Louis next April. We’ll continue to collaborate via an eRoom set up by David and via the OCSI web site. Our action item for now is to share our individual high-level models of collaborative tools in order to identify commonalities and to serve as straw men for additional discussion.    (WX)

Blog Backlinks Enabled on PurpleWiki

If you view the Backlinks on any of my Wiki pages, it will now display Backlinks from both the Wiki and also this blog. For example, if you view the backlinks to “DougEngelbart”, you will see a list of all of my Wiki pages and blog entries that mention Doug.    (SG)

The beautiful thing about this feature is that it maintains context for all of the different concepts described on my Wiki. I list several Patterns on my Wiki, with some level of detail on each page. But when you look at the Backlinks to those Patterns, you see a list of all the stories where the Patterns are mentioned. I tell the stories as I have before, and the tool explicitly ties the concept to the stories that describe the context. That’s augmentation! As Chris Dent said, it “makes the universe bigger.”    (SH)

My essay, Wikis As Topic Maps, describes this phenomenon in further (and slightly more technical) detail.    (SI)

Open Source At Work    (SJ)

How this feature finally became implemented is a wonderful example of what makes Open Source so great. We’ve wanted it for a while, but didn’t have time to implement it. Last month, I started thinking more seriously about implementing the feature, because I wanted to demonstrate it to some potential clients. Unfortunately, I was swamped, and didn’t have time to do it myself.    (SK)

David Fannin to the rescue. David had installed PurpleWiki and the MovableType plugin, and liked it. However, he also wanted the Backlink feature. So, he wrote it, and contributed it back to us. Neither Chris nor I nor anyone else in the small PurpleWiki community knew David beforehand, but as you can imagine, we welcomed his contribution.    (SL)

David’s patch was just a hack. Chris had some ideas for refactoring the PurpleWiki code to better integrate this feature. So, he implemented them, and released a preview of the code. Chris’s refactoring made it very easy for me to write a similar plugin for blosxom. Suddenly, we had the feature I had been pining for.    (SM)

As an aside, I had grander plans for how to implement this feature, and those plans haven’t gone away. (See my notes on TPVortex for a preview.) The important thing is, David and Chris’s approach worked. It may not do all of the whiz bang things I eventually want it to do, but it does what I want it to do right now. More importantly, it may very well inspire others to implement some of the grander ideas. Release Early And Often is an extremely important pattern of Open Source development, because it enables collaboration, which accelerates the implementation and dissemination of ideas.    (SN)

Precedence    (SO)

Ours is not the first integrated Wiki and blog. Notable precedents include Kwiki and Bill Seitz‘s Wiki Log. These tools all had the integrated Backlinks feature before we did.    (SP)

The key difference between these tools and ours is that they require you to use a single tool. You have to use Kwiki as both your blogging tool and Wiki to get all of the features. Our approach integrates PurpleWiki with MovableType, blosxom, and conceivably any other blogging tool. This is consistent with our overall philosophy of improving interoperability between tools using Doug Engelbart‘s ideas as a unifying framework.    (SQ)

We’ve only taken baby steps so far. We plan bigger and better things. More importantly, we want to encourage other tool developers to adopt a similar approach, and to collaborate with each other to do so.    (SR)