Peer Pressure

Month

August 2009

2 posts

Info Condom

The recent suffering of Twitter and Facebook (and others apparently) at the hands of a huge DDOS is just one more reason to disapprove of centralized, single-source, non-federated services: They are vulnerable to just this sort of thing.

A system of federated presentation services and many Banks of Content would be far less vulnerable. Oddly, this is a well known lesson and a fundamental piece of the architecture that underlies the internet. However it is a problem that is far easier to solve at the level of technological interaction than at the level of social interaction.

One of the appeals of Twitter and the like is that you can experience moments like this: “I’m on Twitter! ZOMG are you on Twitter too!!?? You totally have to get on twitter and then we can be on twitter together!”.

That’s far more fun and engaging than: “I propagate my microblog content by URI from my robust distributed content store to multiple presentation services, it would be great if your microcontent could co-mingle with mine on the open internet and together stimulate the generation of new knowledge.”

(Actually that sounds really sexy to me, but I’ve been told I’m a bit strange.)

Aug 7, 20092 notes
#openweb
Recent TiddlyWeb Plugins of Note

Though the historical roots of TiddlyWeb are as a store for quine-like systems (I should write more about this), because it has a very flexible plugin system it also manages to be something of an unintentional web-app framework. Many plugins have been developed over the past several months. Many are experiments to demonstrate possibilities. Others are practical tools. Here’s a bit of info on those I’ve recently put together. Ben Gillies, Jon Robson, Mike Mahemoff, and FND have all been doing interesting work as well.

Just this morning I made markdown.py which is in the class of plugins known as wikitext renderers. These provide a method for transforming the text of tiddler stored in TiddlyWeb into some other textual form, usually HTML. The default renderer is called ‘raw’ and returns its input. TiddlyWebWiki uses the wikklytextrender plugin as its default renderer. It takes TiddlyWiki formatted text and returns HTML. The markdown renderer renders Markdown syntax to HTML. It’s possible to run multiple wikitext renderers in the same TiddlyWeb instance, which is used is determined by the value of tiddler.type. Here’s the entire content of the markdown plugin:

import markdown2

def render(tiddler, environ):
    """
    Render text in the provided tiddler to HTML.
    """
    return markdown2.markdown(tiddler.text)

ramstore.py is a StorageInterface implementation for TiddlyWeb that persists the main entities of TiddlyWeb (Tiddlers, Bags, Recipes, Users) into RAM in the same process. Persist is not really the right term because as soon as the current process goes away, so do the tiddlers. This plugin mostly exists for testing (it allows you to effectively mock a store without actually being a mock) and to demonstrate the bare minimum of what a store needs to be able to do to fully support the StorageInterface. Longer term, however, I can see it being useful as part of a layered caching solution (one thread reads or writes RAM and returns control to the web request handling layer, another thread wakes up when RAM is written and takes what is written and sends it downstream to more persistent layers).

The default distribution of TiddlyWeb provides no exposure of User entities over HTTP. userbag.py and users demonstrate two (incomplete) ways of exposing them. The former uses a combination of diststore and a simple StorageInterface implementation which presents the users on a system as tiddlers in a bag called ‘users’. The latter add /users and /users/{usersign} routes with handlers that query the store. At the moment both are read only.

Maybe I’ll write another one of these.

Aug 6, 20093 notes
#tiddlyweb
Next page →
2010 2011
  • January
  • February 1
  • March
  • April
  • May
  • June
  • July
  • August
  • September
  • October
  • November
  • December
2009 2010 2011
  • January 1
  • February 2
  • March 2
  • April 1
  • May 2
  • June
  • July 1
  • August
  • September 1
  • October 3
  • November 2
  • December 1
2008 2009 2010
  • January 5
  • February 5
  • March 4
  • April 1
  • May 1
  • June 6
  • July 1
  • August 2
  • September
  • October 3
  • November 5
  • December 4
2008 2009
  • January
  • February
  • March
  • April
  • May
  • June
  • July 19
  • August 24
  • September 5
  • October 7
  • November 3
  • December 1