Patterning in Cardigan Bay

Finally done something I’ve been meaning to for a while, and brought Patterning into Cardigan Bay.

That means we now have a :patterning card type which can contain Clojure code (it’s interpreted on the server using Babashka SCI) that renders patterns as SVG embedded in pages.

See this example page on ThoughtStorms which has patterns embedded in it.

Here’s a screenshot of how it looks in Cardigan Bay itself.

Happy 10th Birthday, Smallest Federated Wiki

I second this :

Happy 10th Anniversary to the Smallest Federated Wiki! Congratulations Ward Cunningham! And thanks as well to Mike Caulfield and all those who’ve worked on, iterated, and expanded on its foundations since.

Smallest Federated Wiki is yet another great intuitive idea from Ward Cunningham. Ward is always doing stuff that seems simultaneously low-key and unobtrusive, that you later realize to be both brilliant, and phenomenally useful, after you’ve had long enough to think about it.

This is a delightful combination of qualities.

Cardigan Bay Latest

I’ve been slowly tweaking both Cardigan Bay and ThoughtStorms wiki in the last few months

As you can see, there some slight changes. Most obviously the NavBar is starting to gain some significant functionality.

In addition to typing the name of a page and hitting Go, to go to it, you can also type a ClojureScript expression and have it evaluated by hitting the “Execute” button :

The result appears in a new space called the Transcript which is not a page, but a place for the output of these commands.

The third button on the NavBar is “Search”. Which is a full text search in the wiki.

Obviously, this functionality is also available in cards, to be embedded in a page. There’s a new interactive ClojureScript workspace card which contains code that can be edited and run :

There’s also a search card which can be embedded. You’ll see that in the edit mode there’s a new bar of buttons to embed boilerplate for specific activities. Here we’re going to embed a Search card.

The button adds the boilerplate. We just add our search-term. In this example “SmallTalk”

Save to come out of edit mode, and we have that search embedded as a card in the page.

Other improvements. The bookmarklet receiver now automatically turns certain links into their embeds. Eg. this was bookmarked from YouTube with a single click of the bookmarklet, and is already an YouTube embed card in the InQueue

Finally, not only does Cardigan Bay produce an RSS feed. There’s also now an embed RSS feed card type. This card, in ThoughtStorms, rather recursively, embeds the RSS feed from ThoughtStorms :

Right now, all this stuff is checked into the GitHub / GitLab repositories. It’s not in the next release version yet, but will be, pretty soon.


The Future of Lisp

Another rescued Quora answer to the question : What is the future of the LISP programming language?

I’m writing this answer as an unabashed Clojure fanboi.

The second of these advantages is syntax for data-structures.

(defn f [x y] (the int (+ x y)))

That’s it. You’ve typed the expression (+ x y) as having to return an int. (That’s what (the int sexp) does. )

The Free Software Foundation #1

I’ve been answering a couple of questions about the Free Software Foundation on Quora, recently.

Here’s the latest.

Should social (software) freedoms as espoused by the Free software Foundation trump technical superiority as implied by the Open Source development paradigm?


The political message of the Free Software Movement is much bigger and more important than the “look this is a cool way to develop software” message that the Open Source people developed.

Our world is being eaten by software. Everything we do in our lives today has a layer of software mediation. And that layer of software is getting thicker, and the layer of free humans with their own discretion to make decisions, is getting thinner.

So at the supermarket you pay a machine rather than someone at a checkout. If you buy on Amazon, almost all your shopping interaction is with server farms, not service workers. Same with most companies, you deal with websites and bots rather than receptionists. We learn from online videos rather than take personal classes. Factories build things with more and more robots and 3D printers and fewer and fewer humans assembling and welding parts. We manage our social relations via social media rather than meet in person in pubs and cafes. Yes, we love socializing and we do a lot of pubs and cafes too. But the proportion of our social lives mediated through software just keeps getting higher and higher. We increasingly vote via software. Manage our money via software. Manage our health bureaucracy via software. Police watch us via software. The military fights wars increasingly through software (cyber attacks on enemy computer networks and autonomous drones).

The world is being eaten by software. And that means the limits of your freedom, to what you can and can’t do in this world, are encoded into and determined by the software that the machines run. And those are decided by whoever programs / owns and controls the software.

In this world eaten by software, we have no freedom if we can’t ensure that the software works for us. If the software works for someone else, that someone else rules every aspect of our lives.

And this what the Free Software Foundation and the Free Software philosophy stands for. For the fight to push back against having our lives controlled through software, by giving us the right to see and control what software runs the machines that inscribe our lives.

The Great Software Stagnation

Jonathan Edwards is one of those people I both profoundly agree with and profoundly disagree with.

In his new year essay The Great Software Stagnation he again complains about the way the computer science field seems to be running out of new ideas.

I agree wholeheartedly with his frustration. And, sure, with a few bright exceptions, innovation in computing seems very poor compared to the enormous strides made in the 60s and 70s.

Of course, some of this is that lower-hanging fruit have been picked. Some is the natural inertia of a large number of users of computers these days.

But I continue to oppose Edwards’ theory, that it’s all the fault of the internet and Silicon Valley luring people away with promises of getting rich. I think (as I’ve outlined in this following Tweetstorm response to Edwards) that it’s all the fault of “direct manipulation” as an ideal for UI designers.

The Great Software Stagnation is real, but we have to understand it to fight it. The CAUSE of the TGSS is not “teh interwebs”. The cause is the “direct manipulation” paradigm : the “worst idea in computer science” \1

Progress in CS comes from discovering ever more abstract and expressive languages to tell the computer to do something. But replacing “tell the computer to do something in language” with “do it yourself using these gestures” halts that progress. \2

Stagnation started in the 1970s after the first GUIs were invented. Every genre of software that gives users a “friendly” GUI interface, effectively freezes progress at that level of abstraction / expressivity. Because we can never abandon old direct manipulation metaphors \3

The 1990s were simply the point when most people in the world finally got access to a personal computer with a GUI. So that’s where we see most of the ideas frozen. \4

It’s no surprise that the improvements @jonathoda cites, that are still taking place are improvements in textual representation : \5

The main innovation in Rails is textual (you rethink the Ruby code that describes an ActiveRecord class as a schema definition for the whole system) \6

DevOps tools take configurations that were done through filling in web-forms or obscure config files and puts them back under control of scripts in a real programming language. \7

React is a new higher level set of linguistic constructs to describe a reactive UI … etc. \8

In other words, progress in CS is still possible, but has slowed down in all the places where people have stopped programming in languages where new ideas can be created through grammatical composition and abstraction \9

And where we try to get by with a fixed repertoire of gestures to manipulate data directly. \10

If you want to fight stagnation, you have to fight the cult of direct manipulation, and fight the expectation that computers should be so easy that users don’t need to think or learn new concepts to be able to do things with them. \end

Now, I don’t expect Edwards to agree with me on this. He’s very keen on direct manipulation in his experiments. And I understand that. Direct manipulation is a wonderful thing when your gestures are sitting at the top of a tower of linguistic abstractions. Mapping that ultimate level of power directly to your body and visual system gives you remarkable power very easily.

The problem is that we don’t know how to grammatically recombine and build further abstractions in the gestural domain, so however great that power is, a direct manipulation approach will always freeze you at that point.

Sticking with text and language feels more artificial and clunky, but if you do stick with it, then you at least have a chance that you’ll later on invent a higher level language to go beyond your current state.

A Test of Mind Traffic Control

Today I managed to screw up my todo.txt file that I use with Mind Traffic Control.

I had to recreate it from some backups that weren’t quite as up-to-date as I needed them to be.

And I got a lot of duplication in the file. And obviously items that had been done are now back in it. (Remember, I don’t keep “checked off” items)

So how to fix?

Diffing MTC is complicated. Because you do a lot of re-ordering of the queue in MTC, two todo.txt files can be almost identical, but the diff of them is huge. And it’s hard to understand how similar they really are.
Fixing that problem is kind of easy : you sort both copies of the file into alphabetical order, diff them again, and now it’s much easier to see and deal with how much difference there really is.
So I did that. On Linux simply

cat todo.txt | sort  > sorted_todo.txt.

And then

meld sorted_todo.txt sorted_backup.txt

And that was fine.

Deduping a sorted file is easy. I’m sure there’s a command line tool for it already but I wrote a 4 line Python script.

So now I have as up-to-date a version of the todo.txt as it’s possible to have. And it’s deduped.


it’s now sorted in alphabetical order. And has 1506 items in it.

This is going to be interesting.

So the philosophy of MTC is precisely that the order / structure of the overall queue isn’t really that important. It obviously IS important because your “Next Item” is what’s at the front of the queue.
But most of the time you deal with a few items in the front. And then searching / pulling / pushing “tags” to estimated distances into the future.
That’s worked fine. But I’ve never done a mass (and arbitrary) reordering of the queue before.
So this is going to be a big test. Are the facilities of MTC, plus my own previous tagging discipline and ability to remember what to search for, sufficient to the job of managing a list of 1500 items now that they are out of order?
In some ways, I’m happy to have to face this challenge. It’s going to be a very interesting test. I’m optimistic that MTC is up to it. But I’m keeping an open mind. I may find some issues. And have to write some extra functionality to resolve it.