Dave Winer : Why [do] we have to design our software to the user who freaks out? … when we are basically disempowering the user who is curious? … People aren’t stupid. And people who design software for people who are stupid, get what they deserve, which is stupid users. I prefer to design software for people who are smart, because I’d much prefer to work with people who are smart.

And … sometimes people who are smart act stupid because you treat them like they’re stupid. So I prefer to treat them like they’re smart.


Great Morning Coffee ramble. 🙂

MP3 here : http://mp3.morningcoffeenotes.com/cn05Jun23.mp3

Sigurd Rinde vs. hierarchy :

Do the test:

1. Write a letter, using a word processor, to a friend about some tax issues, some personal stuff and a great new joke you just heard.

2. Save the file to a folder. Choose the folder according to either recipient, theme or whatever you normally choose. Your choice.

3. Wait two months.

4. Find it.

Did you find it immediately? Or did you have to think hard, trying to put yourself into your own mind two months ago – was it in a folder named ‘Friends’, ‘Letters’, ‘Jokes’ or in a folder somewhere named ‘Tax issues’?

I also like this :

The sticky point about two dimensional tree-structures is that you have to assimilate the logic of somebody else. Or yourself two months ago.

Tree structures should be chopped down

Sigurde then goes on to suggest something even wilder. Why not tag people within organizations rather than put them into slots in the org.chart.

Hey! You can officially be a programmer, and accountant, and tea-maker : all at the same time, if that’s the part you play.

Seems like Thingamy are going to support this idea in their software too :

Hang on a few weeks, we’re tinkering with a slightly wacky CMS for the heck of it (and to test these ideas in practice) to produce navigation-bar-less-no-trees-in-sight websites/knowledge repositories, should be fun. Watch this space.

So, I was all set to start writing some unit tests to begin the refactoring I described below.

But then I needed to do a bit of procrastination, first. 🙂

That article is good advice for procrastinators. But what grabbed me was this :

You can accomplish a lot more in small increments — even fifteen minutes is enough time to do a little bit of quality work. Just get a decent start, and don’t worry so much about finishing. If you start often enough, the end will take care of itself.

That’s the ideal for the smart disorganized individual. Working in a lot of 15 minute (or shorter) fragments according to your inspiration, energy and available time.

But there’s a big problem : switching costs. Every time you drop something and pick it up later, you have to re-aquaint yourself with the context of what you were doing. You have to recharge the short-term memory. Of course, if you’d documented what you were up-to initially, returning would be easier. But in fifteen minute bursts, who has time to write documentation too?

Without that, a lot of your fifteen minutes, and a lot of your energy, get wasted on rediscovering what you were doing previously. Or even, if you’ve totally forgotten (as I sometimes have), redoing something that was already done! That makes the SDI way less effective than someone who can actually concentrate and stick at one task for a reasonable length of time.

Not surprisingly, I think personal wiki is the beginnings of a solution. What’s needed is somewhere to keep track of what you’re doing as simply as possible. And while you are doing it.

Notes should be written to accompany the process. Ideally, you can open a notebook, create a new page and just get down to it in less than a minute. Using the notebook as a scratch-pad for your ideas while you work.

Then, when you want to switch out of that context, You want to hit “save” and be finished with it. Not hit “save” and be having to think : “where shall I put this document in the file-system? Oh, God! Is it better to put it under ‘My Documents/teaching/advanced-programming/examples/’ or better to put it under ‘Development/Python/adPro/’ Wow! I’m such a loser because I can’t keep my files sorted”

Similarly, when you return to the project, to make the most of those 10 – 15 minutes, you want to recover that context quickly, not frantic scrabbling around hard-to-click little folder-icons in Windows Explorer, waiting for the turgid “Find files or folders”.

You usually remember enough about the project to remember its name. So you really just want to type that name into a convenient place on the screen and be there.

Alternatively, stick a link to each project, slap bang on the start-up page of the notebook in large letters. In a personal wiki this is trivial. You just hit edit; type the page-name link; save; go to the page. Now the context is reachable within one click of opening the wiki.

If you have several projects on the go, put a bullet list of links to them as the first thing on your front page. That puts them all easily within reach. When the project finishes or becomes less of a priority, you can move the link elsewhere : further down the page or onto another one.

On the other hand, maybe when you started thinking about “BirthdayInvites” yesterday, you forgot to link this from the front-page. It’s not really a big project, but today it would be nice to get there quickly. But what did you call it? In this situation, the RecentChanges button is invaluable. Hit “Recent” and yesterday’s (and the day before’s, and the … etc.) edits are within one-click.

In exceptional circumstances you forgot the name of the page; you last touched it months ago; and you don’t remember a route to it from the front-page. Now “search” comes into its own. If you can remember just a name or word that’s likely to be in the page, you can search for it. It’s a little longer, but it will still get you there faster than wandering cluelessly in Windows Explorer.

Why is wiki so good for this? Well, having built-in search and RecentChanges is handy. But hypertext, not hierarchy means that a wiki can have “small world” properties. Everywhere is only a few clicks from everywhere else. Compare this to what happens once your file-system gets crowded and in getting from the Ping project to the Pong project you might find yourself going up five or six levels to find a common root of the two, and then navigating (more or less blindly) down another branch of the file-system. Going down is less comfortable than going up. You have to scroll around to find the right icon to click in the absurdly cramped “file open” dialog. That’s assuming you recognise which route to take at all. Often you find yourself guessing wrong, going down the wrong sub-branch, and having to backtrack.

Bill Seitz agrees about the importance of smart-ascii as fundamental. He says the trick is finding a “style” of plaintext editing that can be rendered to a format that can then provide an outliner-ish view (collapsing hierarchies, etc.) (I’m pretty sure that can still just be HTML v4). And then Transclusion comes next… or an [Outlin Ing] editor that gives you more capability in restructuring the page, but still saves in that Smart Ascii format so you can still get work done in a plain browser window…

I think I like all of this. Today I had a series of small brain-quakes which might have reconfigured the geography of SdiDesk dramatically.

Here’s a list of random thoughts.

  • Yep, pages won’t change from being smart-ascii underneath.
  • But maybe internally I can represent them as a more tree-shaped structure.
  • A page can be a sequence of PageSections. Each of which can be either a paragraph, or a table or a bullet-list (sub-tree)
  • In fact, in the last refactoring, I experimented with the decorator pattern. Networks are actually decorators for ordinary pages. They implement the “Page” interface, have an inner component which is a MemoryResidentPage, but offer extra functionality. I’ve been thinking of doing the same for Tables.
  • Now I am wondering if I can define a standard interface called “PageSection” or something : make each object : Page, Network, Table, BulletList etc. implement it. And use it as the basic component of a tree-shaped document.
  • At the moment I have some rather confusingly (clunkily) named function which serialize Tables and Networks into Smart Ascii and parse them back again. (I was calling these serializations the Pretty Persist. And so there were functions like SpitAsPrettyPersist etc.)
  • But the cleaner, more logical thing would be that raw should be a public, string property of any PageSection. And setting it would automatically update the object, and getting it would also get the most up-to-date version.
  • Same could be true of Pages themselves, of course. I would then have a common interface convention for …


This is where it gets awkward. I’d like a fully generic, nestable, recursive structure. That’s easy to do internally, but I’m quite a long way from that with my particular markup implementation. Can you do fully recursive in Smart Ascii? How? And how do you stop that becoming as awkward as XML?

I guess that’s what Bill means by “a “style” of plaintext … that can be rendered to a format that can then provide an outliner-ish view

Hmmm. That was fairly stream of consciousness. I hope it made sense. It helped me anyway. And comments on this, welcome as usual.

ps : Transclusion I already have, of course. (Or at least, including the body of one document in another.) If I could only solve how to embed a network in an ordinary HTML page, then I could make that general as well.

Bill Seitz : I think treating every page as an outline is a better direction to go


I’m wondering what this means in the SdiDesk context. That every page should really be a tree, rather like an HTML or XML document?

That the basic, underlying representation of pages is plain-text is a non-negotiable virtue for me. I don’t want to get involved in XML as the base representation.

On the other hand, at present SdiDesk treats pages with a bunch of heuristic substitutions (much as traditional wiki does). You can go a long way with this approach, but my rewriting bullet-lists is actually an admission that a more structured way of thinking works for this part of a page.

The same is true of tables too. These are parsed into a special Table class.

And if I allow table objects and list objects to be embedded sub-parts of pages, why shouldn’t we treat the page as a list of “nodes” which can be either table, bullet-list or paragraph?

Could also be used to generate “table of contents” as with wikipedia . And allow finer (purple) addressing.

Aaargh! Too many ideas to implement. Not enough time. Worth mulling over though. Comments welcome, as usual.