Wednesday, December 24, 2008

Tuesday, December 09, 2008

Titanium is the free-software version of Adobe Flex / AIR?

Sunday, November 30, 2008

ExtJS has a TreeGrid
A couple of great videos via Zbigniew

Avi Bryant's powerful spreadsheet editor that remembers changes that you make by hand and can apply them in bulk to the rest of the lines in your spreadsheet. Note that Avi's a Smalltalk guy, and a more primitive version of this (repeat last replace) has been in the Smalltalk environment for decades. Cool to see that Smalltalk ideas are still proving revolutionary 30 years later :-) (And cool of Avi to keep discovering them and taking them further)

Another way of doing something similar : Mass Edit which puts simultaneous editing cursors under the user's command. Very clever. That's from a video by David Huynh who seems to be involved in a lot of other neat research, like this mashup tool.

Thursday, November 27, 2008

A Platform Wars post on spreadsheets.
Not making as much progress on SdiDesk.NET as I thought I would. How can Visual Studio 2008 be soooo S-L-O-W? I swear it takes between 30 seconds and minute both to start and stop(!!!) my program executing.

At least with punched cards you knew where you were.

Tuesday, November 25, 2008

Jocelyn Paine is one of the more interesting thinkers about evolving spreadsheets. Here's some recent stuff about components in Google Sheet.
StackOverflow discusses how to keep notes about programming projects : paper notebooks win hands-down.

Monday, November 24, 2008

Bill Seitz :

One Product Management rule Of The Day, that I try to impose, against resistance from most people, is Tasks that aren't crucial don't become more important with age. (Of course, if you have a paying client, "crucial" may be filtered via the Golden Rule.) Every task that takes more than 30min (even less?) should be evaluated against "is this the most important thing to do now?" (FoCus). Go ahead and stick that item on a To Do List. But it's ok if it sits there forever.
A blog written on Google App. Engine.

Thursday, November 20, 2008

More playing with online spreadsheets.

Here's a cute example. This is an EditGrid spreadsheet that pulls book data from Amazon (including price in dollars), currency data from Yahoo, and then calculates the price in pounds of the books. It's a "calculator" meaning that I've set up only one field to be editable (the search term for the book, in the white cell) and you can change this in your local copy, without it changing my original.

Looks like spreadsheets really are evolving to be the online user-programmable dashboards which people can use to create and publish their own mashups and other software. Very exciting.

Tuesday, November 18, 2008

So I created a CollabFinder profile.

Now, what would be really smart would be a way to import my StackOverflow rating into it.
It's definitely SdiDesk week this week. Watch the repository.

Wednesday, November 12, 2008

PythonCard, the Hypercard / VB-like python development environment maybe being forked and revivified.
Interesting new Subtext programming language presentation. (Schematic Graphs)
Quick answer to the guy who used yesterday's Form Experiment to ask what's happening with SdiDesk ...

Here's the status report :

1) In the last couple of weeks I quit my job and moved back to the UK ... which has been taking up quite a lot of my time and energy.

2) Once we've settled in, I hope I can get some time to focus on my projects ... including SdiDesk (and GeekWeaver, MTC etc.) The good thing, no more distractions from my previous demanding day-job. The bad thing, after a brief holiday I need to find work in the UK. (Offers, tips and suggestions are, of course, welcome)

3) SdiDesk was converted to VB.NET this year. And the source-code in progress is available on Google Code.

4) I am NOT a VB.NET programmer, and frankly, from the little I've played with it so far, I'm not very excited about getting more involved. I admired VB exactly because the combined language + IDE made Windows programming mindlessly easy. Throw away that virtue (as VB.NET seems to have done, and I'm blaming the new, incredibly sluggish and cluttered VS2008 as much as changes to the language) and it has little to recommend it against other languages.

5) On the hand, I'm a pragmatist and often able to find something interesting pretty much anywhere. I also know that in a recession I may not be able to be too fussy when it comes to getting a job. So I will be spending a bit more time over the next month or so tidying up the VB.NET codebase, fixing some egregious issues, and making an installer. It's going to be useful to me to be able to say that I can operate in the VB.NET world, and produce working products.

6) Longer term, my preference and commitment is still to a Python SdiDesk-like thing. And most-likely a Python server with UI in the browser (javascript etc.) I've cooled towards the idea of Flex (mainly because my trial copy expired and I remembered all the problems of depending on proprietory software)

The attraction of anything other than the browser has always been the vector drawing in the network diagramming part of the software. But I'm sure that if I just wait a little bit longer, the browser will eventually be able to handle this too.

7) As always, I'm not unaffected by user feedback and other things going on in my life :-) ... if there's suddenly a surge in interest or demand for a VB.NET SdiDesk then I may reconsider.

8) Joe Question asks : "how risky is it to commit myself to SdiDesk.NET then? What about all my pages?" Answer : SdiDesk.NET reads your existing PageStore files. There may be some issues with the size of the diagrams, but everything works. If it doesn't, tell me.

However, you can't even try SdiDesk.NET currently unless you're a VB programmer because it's only available in source form. There will certainly be a build for end-users this year and it will read your existing PageStore. The main reason you want this is if you're an existing SdiDesk user who has moved (or will move soon) to Vista where the old VB6 version won't run.

I'm always committed to upgrade compatibility. You'll be able to move your existing SdiDesk pages to SdiDesk.NET, and you'll be able to import them into a future Python version.

Friday, October 24, 2008

Good overview of PBWiki's corporate wiki business.
Age distribution of StackOverflow users (hat tip mfeathers)

I mentioned that I think StackOverflow is totally amazingly wonderful, right? :-)

Tuesday, October 21, 2008

Interesting. Reia's Tony Arcieri debunks Erlang's "single assignment" propaganda.

I guess someone could argue that once you have multiple assignment you're going to be more tempted to write a longer chain of actions as a sequence of statements rather than composing it out of multiple functions ... and this may be a bad thing.

But I've ranted often enough against languages which think its their job to constrain programmers that it better not be me who makes that argument.

Update : I'd like to see Frederik's question about closures (in the comments of that blog-post) answered though.

Update 2: Ulf Wiger points out that it got answered by Robert Virding later in the comments.
Follow on from yesterday's "Python / Haskell crossbreed" post. Both Al "Folknology" and Gleber point me at the Reia programming language. A Python / Ruby like scripting language on top of the Erlang Open Telecom Platform (Erlang's parallel virtual machine).

Very sweet ... I've subscribed to the mailing list to find out more.

Monday, October 20, 2008

Prediction I made :

I predict that in five years time, the hot language will either be a version of Python which has adopted ideas (Pattern matching arguments, Monads, immutability etc.) from Haskell; or a Haskell-like language which has borrowed some syntactic sugar from Python.


Don't know if I entirely believe that, but it's a good conversational gambit. And there's a certain logic to it if you look at the languages visually.

I'm personally, more into investigating Erlang at the moment, mainly because it seems more practical. The fast, parallel virtual machines are here and ready to go. But I could see myself looking back at Haskell too if it seemed to be gaining momentum.

I guess I also like the Erlang story on concurrency through message passing rather than transaction memories. And perhaps the whole typing thing is overdone in Haskell, although I can certainly see that it buys you more in that context than in, say, an OO language.

But I'd really love to see someone come up with mashup of the best bits of Python, Erlang and Haskell. It would *look* more or less like Python, although would find some-way to do multi-line lambdas etc. Like Haskell and Erlang it would have pattern matching arguments, functions defined over several definition statements, and immutable state. Like Erlang there'd be processes and messages as standard. Like Haskell, monads. Classes might be more like Haskell.

How might a language like this look?


class Tree(val,left,right)
def size(None) : 0
def size(Tree(_,left,right)) :
1 + size(left) + size(right)


Note that what's in brackets after the word Tree is neither a super-class (as in Python) nor a list of types as in Haskell nor a definitive list of field names. It's something more like information that a Tree is a tuple of three elements. And that by default they're called val, left and right.

These default names for the elements of the tuple can be over-ridden in functions which deconstruct a Tree using patterns. For example, the size function doesn't care about the initial val element and so leaves it blank.

I just thought of trying to make size a method of the class Tree. The syntax might then look something like this :


class Tree(val,left,right) :
def size(Tree(_,left,right)) :
1 + left.size() + right.size()


Where, obviously, the object itself is still (as in Python) explicitly passed as the first argument to the method, but instead of being called "self" we pick it up with the pattern of another Tree constructor and so it gets broken into _,left and right.

But where do we put the None / empty tree clause? My first thought was something like this :


class Tree(val,left,right) :
def size(None) : 0
def size(Tree(val,left,right)) :
1 + left.size() + right.size()


But that's not quite going to work. If this really were a more statically typed language like Haskell, and we knew that left and right were always Trees, this would be OK. But as we're trying to go for Pythonic duck-typing we have a problem. We would still like left.size() to mean, "pass the method selector size() to the object left" and then let the class of left decide how to handle it. But where left is None we have no idea which class to use to call. We could have a multitude of classes which define size(None); which would we pick?

Note that this is not the pattern-matching's fault. We'd have the same problem here :


class Tree(val,left,right) :
def size(self) :
if self is None : 0
else :
1 + self.left.size() + self.right.size()




We could get around the problem by disallowing methods which take a single None argument, effectively forcing the programmer to write something like this :


class Tree(val,left,right) :
def size(Tree(_,None,None)) : 0
def size(Tree(_,None,right)) : 1+right.size()
def size(Tree(_,left,None)) : 1+left.size()
def size(Tree(val,left,right)) :
1 + left.size() + right.size()


But this starts looking somewhat clunky.

We might make it a bit less awkward by providing conditional evaluation to the left and right subtrees. Based on Python's current conditional expression syntax that would look something like this :


class Tree(val,left,right) :
def size(Tree(_,left,right)) :
1 + (left.size() if left else 0) +
(right.size() if right else 0)


Or maybe we have to accept a static type system closer to Haskell's. Perhaps the types, in this case, contribute to Haskell's terseness.
Alternatives to Google Application Engine
Hey. I wonder what YML is.

Sunday, October 12, 2008

DesktopZen :-)
I'm expounding my usual "late-bound" tabs model of IDEs again, over on StackOverflow.

... late binding between the buffer in the editor and actual concrete thing you're working on, gives the editing environment more flexibility and power.

Think this is out of date? One place where the idea is back with a vengeance is in the browser, where you don't have 1-1 correspondence between tabs and web-pages. Instead, inside each tab you can navigate forwards and backwards between multiple pages. No-one would try to make an MDI type interface to the web, where each page had it's own inner window. It would be impossibly fiddly to use. It just wouldn't scale.

Personally, I think IDEs are getting way too complicated these days, and the static binding between documents and buffers is one reason for this. I expect at some point there'll be a breakthrough as they move to the browser-like tabbed-buffer model where :

a) you'll be able to hyperlink between multiple files within the same buffer/tab (and there'll be a back-button etc.)

b) the generic buffers will be able to hold any type of data : source-code, command-line, dynamically generated graphic output, project outline etc.

Saturday, October 11, 2008

Thursday, October 02, 2008

George Monbiot has a good piece on pursuing the work you want.


So my final piece of advice is this: when faced with the choice between engaging with reality or engaging with what Erich Fromm calls the "necrophiliac" world of wealth and power, choose life, whatever the apparent costs may be.

Tuesday, September 30, 2008

Work is never fun if you do it for other people.

But why?

I'd guess it's not simply that someone else is asking you for it. It's that the other person is *always* setting some constraints, defining the boundaries of what the thing should be, that don't entirely line up with your own.

And then there's a *disappointment*, a sense of the thing not being quite "right" as you have to cut and stretch the product to fit the Procrustean frame your client asks for.

Sunday, September 21, 2008

Saturday, September 20, 2008

Surprising SdiDesk news!!!!!

Like Cthulhu, SdiDesk, is still, currently dead, but occasionally stirs in its sleep and sends out weird dreams to the minds of men. Here's one-such ...

Around this time last year I got a new laptop with Vista and discovered that the old SdiDesk (in VB6) didn't work. Not having VB6 on the machine (or any installers for it) I didn't have a way to fix the problem. And anyway, I was (am) emotionally committed to getting off the Microsoft / VB treadmill and moving to a Python SdiDesk. (Really, I am!)

Six months later, though, heavily involved with GeekWeaver etc., I realized that I'd done nothing towards it. And SdiDesk was still broken.

I came across the new Visual Studio 2008 Express (free-as-in-beer) edition and decided to take a quick look.

It was s-l-o-w even on this newish laptop. And heavy, and I couldn't make much of it. But I realized that a) while I still wanted nothing to do with VB.NET and Windows-only programming b) SdiDesk was going to go extinct pretty quickly if it couldn't run at all. There seemed to be a closing window of opportunity to keep the original code-base and program alive. And I couldn't quite bring myself to let it die entirely.

So why not find someone else, who already knows about his kind of thing (VB6 to VB.NET conversions)? Via Rentacoder I contracted Zebo in Faisalabad, and thanks to some dedicated work by him, the SdiDesk source is now converted to VB.NET.

I'm not entirely sure where I'm going with this. The job Zebo did was a straight upgrade of the original VB6 code, (using the mechanical conversion and manually fixing the things the update couldn't handle). It's taken a while to sort out some weird security issues (eg. why the hell wouldn't Vista let it see Today's date?)

What there is now is new source-code which I've put on Google. If you're a VB.NET programmer you can check it out of the SVN repository and it should run.

I want to make a couple of minor tweaks before I make an installer for end users.

After that I'm keeping an open mind. It will depend a lot on whether existing SdiDesk users upgrade and new users appear. In general, the aim is still to move off VB, but exactly how and when, is open-ended.

Remember that this is the official blog for SdiDesk news and discussion so you can always get the latest news here.

Monday, September 15, 2008

StackOverflow went live today, and it's already pretty good.

Update : Actually StackOverflow is awesome! Look what cool tricks people are doing with it.

Joel has another hit on his hands. It's amazing what you can do when you're smart AND have an audience.
This looks good. CodeMirror, an in-browser code-editor.

Sunday, September 14, 2008

Tuesday, September 09, 2008

Compare and Contrast : TiddlyWeb with Ian Bicking's suggestion for the browser being able to request individual sub-trees of a DOM from the server.
The web is becoming more and more "feedlike".

(And yet email is ... well email is sort of feedlike, isn't it?)f

Friday, August 22, 2008

A wiki with "Executable English"?
Of course, if like me, you use GMail for everything, these new email interfaces are less accessible ... when will Google offer a skinnable / pluginable architecture for Gmail, I wonder?
Couple of interesting blogposts on Email :

Reinventing the Email Client

Five open questions on Email

Saturday, August 16, 2008

Sunday, August 10, 2008

Haven't written here for a long time. A couple of notes and catch-ups.

Chandler 1.0 is out.

I was struck by these features :



Chandler aims to provide a more integrated approach to managing information with:

* A Quick Entry Bar to enter everything from ideas to reminders and appointments.
* NOW-LATER-DONE Triage List to collect, process and track everything from deadlines and meetings to drafts and ideas.
* Tickler Alarms to auto-re-focus deferred (LATER) items to NOW



Something like this experience is already available in Mind Traffic Control if you want to experiment with it. :-)

I'm getting into two further things :

Zbigniew Lukasiak has got me thinking about email again. It's still the most commonly used social software, and there is still room for improvement. Zby and I are thinking of doing something about this ... watch this space for more.

Meanwhile, I'm also back into feeds, in particular, creating and reading Yahoo Pipes. I'll talk more about this soon too.

Finally, a couple of good posts from Stowe Boyd about the shift to the flow internet. Or rather, the ongoing need for recombiners for the small pieces (eg. comments, replies etc.) that are scattered across dozens of different feed services like Friendfeed etc.

Wednesday, July 30, 2008

Sunday, July 27, 2008

Dave Winer's back on the Windows OPML Editor ... which is great for me and for GeekWeaver ('cos I don't have a Mac and there's no Linux port yet.)

Meanwhile ... anyone know other decent OPML editors? I'd be particularly interested in ones that run in the browser.

Saturday, July 26, 2008

Very important Mind Traffic Control update today.

The art of Mind Traffic Control is to defer as much as possible until later. But there are times you might have deferred a bunch of things until next week, only to find that actually, you *could* start doing some of them this week after all. (Maybe another task just got cancelled and freed up some time)

Until now, it's been a flaw in MTC that you couldn't rescue this stuff from the future.

That's now been fixed.

If you find yourself with time on your hands and want to pull items back : go to the Overview menu, and the Deferred list. You'll see a new button at the top titled "Restore the selected items to main queue". There's also now a column in the table with checkboxes for each item. Select any items you want to pull back and press the button. That's it. The items are back in the main "next actions" queue.

Of course, please tell me if this seems to have caused any problems. Doesn't look like it this end, but your bug reports are important.

Tuesday, July 22, 2008

App Engine Guy links Gist

Smells like a move towards a hyperlinked, online IDE.

Tuesday, July 15, 2008

My post yesterday on Composing, about Geeks, Suits and Abstraction is relevant to SDI philosophy too.

Executive Summary : Geeks, by definition, have to be good at shifting their thinking between different levels of abstraction; Suits, by temperament, believe in the rigid separation of levels into the corporate hierarchy and would love for technology to enforce that.

Sunday, July 13, 2008

Dave Winer :
I don't like it -- because it betrays a not-useful point of view. I am not part of a crowd, I am an individual ... When you mash us all together you miss the point.


Update : continues

Of course, what Winer is ignoring is that companies are thinking of the crowd as an "aggregate" exactly because that's the only business model they have. It's no good calling it bad taste or a failure of vision, companies are entities who's function is to siphon off surplus value created from aggregates of people and give it to shareholders. If they don't have *someone* to "exploit" there is nothing for the shareholders.

Winer's philosophy is right for the web, and for us individuals, but it demands a new business model, possibly post-company.

Saturday, July 12, 2008

What do people think about the Grazr widget along the side here? I introduced it using an OPML outline of my online life to explore the evolving OPML ecology.

But that's turned out be pretty inflexible compared to the gutter-tools that blogger is starting to offer. The OPML went out of date, (although I like the collapsible aspect). And the fact that the widget takes up a lot of room even when showing only the highest level, makes it kind of clunky.

So maybe I'll remove and replace by blogger list. Or should I give Grazr another chance?

Update : Cool! Mike from Grazr solved one of my issues. Read comments. Grazr stays for the moment.

Update 2: And I refreshed my OPML file too.

Tuesday, July 08, 2008

Sounds like Bernstein doesn't really like this book, but doesn't have any alternative to recommend.

Monday, July 07, 2008

Prioritizing by Anxiety.

I see what he's getting at although I'm not entirely convinced.

Obviously No Free Lunch tells us that no "prioritize-by-X" strategy could be appropriate to all circumstances. (Including the FIFO algorithm of Mind Traffic Control).

Because of this, the less time wasted imagining you can specify priorities in advance, the better. Because the only time you can assign priorities is when pulling things out of your queue. To the extent that "anxiety" helps you identify the most urgent to do now it's useful. But Andre does recognise that anxiety (like most *emotional* indicators) is pretty ambiguous; it might be that an item makes you anxious exactly because you *don't* know how to do it or even what you *want* to do about it. So, even choosing to address it now, doesn't mean "doing" it now, it may be a signal to cancel entirely.

Still ... it's to good if it helps you reduce anxiety overall. Perhaps not if you start to *cultivate* it as a priority-identification mechanism.

BTW : MTC works on the opposite theory, assuming that it's easier to know which items you can definitely postpone, than it is to know which are most urgent ... so at least it helps you clear the former out of the way. Nevertheless, what this post mainly reminds me is that, now I'm up to around 200 items under Mind Traffic Control, even MTC is breaking down for me.

Or rather, it's missing something. And I'm starting to wonder if that's the "someday/maybe" bucket. Originally I assumed that "3 months in the future" was more or less equivalent to a someday/maybe ... but I'm finding that that's not the case.

I'm scared to push things so far ahead, even for things I have no idea when I'd get round to. Because there's always the possibility that I might get inspired to try them tomorrow. I need another queue to get things out of the way, but from where I can bring them back, if inspiration strikes.

Opinions anyone?
Pencil Project looks interesting.

(hat-tip @adrianh)

Sunday, July 06, 2008

Tonight's tweak to Mind Traffic Control : there's now an "[untagged]" filter ... so if you are using #tags but you find those untagged items are getting lost when you aren't filtering, well, that's the solution. Chose the "[untagged]" filter to restrict your queue to only those items *without* #tags.

Wednesday, July 02, 2008

I think this is probably the most mind-blowingly stupid and bad thing I've seen for a while.

There is no automated metric on earth that can get even a vague approximation of the value of a piece of programming. My colleague, yesterday, solved a fiendish long-troubling bug, by removing one character of faulty indentation from a 2000 line spaghetti routine. One change, one character and a comment. How would the system assess the "productivity" of that?

If SDI means anything, it's a rejection of the entire mindset that believes in the creation of, and use of, software in institutional control and measurement of employees. Bleaarrghhhh!

Update : someone from the company came back at me after I twitted (good for him, respect, obviously) ... but I went into full rant. :-)
A, surprising, good thing about Caché. It's "alive".

Monday, June 30, 2008

On another blog, I come out of the closet.
Gotta admit, this new Blogger blogroll sorted by freshness of update and showing the latest post headline is rather cool.

Saturday, June 28, 2008

Hat tip App. Engine Guy ... an App. Engine book.
I made an update to Mind Traffic Control today which should speed it up a little ... it's working for me in my queue ... but if anyone sees any error messages ... scream.

Oh, also, your deferred list in the overview should be sorted.

Friday, June 27, 2008

And, of course, I'm not forgetting about Chris Dent's TiddlyWeb either .... though it's harder to track progress without a blog, eh, Chris? :-)

Update: Doh! Chris reminds me there's a Tiddlyweb Twitterfeed
Meanwhile, as if goaded into action : a new WikidBase release.
Wow! Manuel Simoni is on fire! with BuckyBase development :

- Import into Google Spreadsheet

- Google Gadgets Visualization

- RDF triples (ah well ... if it makes him happy)

- and is this a TreeGrid???

This is seriously exciting.

Wednesday, June 25, 2008

What is Flying Logic?
Amused by Galaxiki

Could there be an interstar mashup?
Here's something else that looks pretty cool. BuckyBase is a data-wiki where pages are like free-form records (dictionaries of key / value pairs) that can also be can be shown grouped into tabular form.

It's fairly simple at the moment (another just-launched GAE experiment), but I can't help thinking that in my "enterprisey" day-job I work with nothing but data which is structured like this : records that are less than normalized, sometimes viewed as separate pages, sometimes squashed into grids. Give it the ability to add a few extra-constraints, some kind of blank form definitions; hook it up to Google Visualization and let it embed Gadgets; add some more sophisticated querying ... and you've got the heart of a small-business data-base application : Filemaker-as-a-service.

And if Google can ensure that Application Engine really is fast, powerful and secure enough to host serious applications, then it looks very promising as the new standard substrate for a whole ecology of this kind of wiki-derived tool.
Processing. In Javascript. In Tiddlywiki.

Now, that, I am impressed by.

That is a whole new world. Gadjets written in Processing?

Tuesday, June 24, 2008

Google's whole Gadget thing is becoming increasingly impressive. Look at the dynamic widgets which can hook up to and pull data out of online spreadsheets. You can also embed Gadgets in online spreadsheets etc.

Making your Gadget collaborative is pretty straightforward too.

Thursday, June 19, 2008

A while ago on Platform Wars I wrote :
99% of the world's "semi-structured" data is not in Microformats but in tables in spreadsheets.


Wildly inaccurate estimate I'm sure. But I'll bet it dwarfs XML formats including RSS. So where's the Yahoo Pipes for CSV and spreadsheet data? The mashing, pivot-tabling, cartesian joining of live grids?

Yahoo Pipes does have a CSV reader ... but I'd like to see more. Particularly pivoting and SQL-like selects, projects and joins.
Anyone not worked out how to use #tags in Mind Traffic Control?

All you do is write your tag words with a # as in #work or #food and these items get tagged. Once you have tagged items in your current queue, a select box appears at the right of the "next action" box, allowing you to filter next actions by a tag.

Once you select a filter, only items with the selected tag will be shown. To see all queued items again, simply remove the filter.

Wednesday, June 18, 2008

I'm eavesdropping on a fascinating email exchange between Chris Dent (of Blue Oxen and Socialtext fame) now working on TiddlyWeb and Frank McIngvale who's project is WikklyText.

I haven't had time to take it all in yet. But it looks like Chris has got TiddlyWeb working on the Google App. Engine. And Frank has got a stand-alone TiddlyWiki markup language working.

The main idea of TiddlyWeb continues Chris's focus (since Blue Oxen days with EEKim, I'd guess) on sub-page level elements on wiki. Remember Blue Oxen's thing was Purple Numbers, individual paragraph Ids. Here, he's using "Tiddlers", the individually named, sub-page elements that TiddlyWiki would show or hide, and assembling them in a new, looser collections called "bags".

From what I understand so far, having named tiddlers rather than arbitrary purple numbers is definitely a move in the right direction. (In the sense that it makes the small pieces human-addressable as well as machine-addressable.) In fact each item is addressed by a combination of Tiddler name + bag name (where bag is more a kind of policy or query)

There's long discussion going on right now about URIs (which seem to become almost queries or operations on the bags) to access the tiddlers in a ReSTful way that I'm still absorbing.

Anyway, they're definitely "banging the rocks together" in wiki and breaking pages up into a finer granularity. And, after Twitter's discovery of the virtues of 140 character status updates, now generalized to a theory of micro-blogging, the world is definitely ready for a wiki micro-chunking experiment. Who knows where it will lead?

Sunday, June 15, 2008

I use Subversion source-control (I have one web-hosted repository, one on my pendrive, and I just started using Google Code.)

But I'm tempted by distibuted source-management. The arbitrary decision as to whether I host a project online or on my pen-drive is ... well ... arbitrary, and sometimes needs to be revised. Distributed would be better. And I'm increasingly tempted by Bazaar (bzr).

The other thing that attracts : it's in Python and easily incorporated into an existing python program. I haven't given up on the whole SdiDesk / wiki-like notebook / developing in wiki thing. Perhaps there'll be a bazaar-as-PageStore one of these days.

Meanwhile ... watching the proliferation of repositories (I'd like to check out Folknology's GitHub hosted Reactores) I'm starting to think there's a need for an access-standard. Some kind of lowest common denominator ways of checking out checking in and merging codebases from all these repositories.

Anyone know of anything like this?
Ouch! Major down for Mind Traffic Control today.

Must be something to do with the fix I posted this morning which I thought was pretty harmless (and worked for me at that moment, honest!)

Anyway, I'm not in front of a machine where I can work on it, this second. But I'll roll back to the previous the moment I am. Probably in an hour or two.
I fixed a subtlish bug in Mind Traffic Control today.

I was trying to pull the email address out of user objects using user.email() ... however it seemed that you might be able to have users who don't have an email address and for who user.email() fails or returns None. Not common, I guess because user id's are based on Google accounts (which is mainly Gmail accounts I'd assume.)

Anyway I've now wrapped all attempts to get user.email() in a try. But next question, what should I do instead? When I find a user without an email, what should I use to identify him or her?
Ohloh is a YASN for free-software writers?

Thursday, June 12, 2008

Tim Burks talks about his language Nu (seems to be kind of Ruby-like behaviour with a Lisplike appearance (lack of syntax?)

Good references to Brad Cox's Planning the Software Industrial Revolution.

Cool. Didn't know this stuff before.

Tuesday, June 10, 2008

Dan Bricklin :
Socialtext is announcing today that they are adding integrated spreadsheet capability to their enterprise-level wiki, making use of the new SocialCalc code I've been developing with them. This isn't just a repository of separate spreadsheets, nor a separate standalone system like wikiCalc, but rather a full wiki where a page can be either the traditional paragraphs of text or a spreadsheet grid.


Cool ... now, if they could just *also* add network diagramming as another page-type that would really be getting somewhere. (Not, of course, that the grid pages in SdiDesk really achieved "spreadsheet" status ... but that was always a long term hope.)

Ah ... well ...

Actually, there may be some SdiDesk news soon ... you never know.

Update : Bricklin has longer background piece.

Saturday, June 07, 2008

Friday, June 06, 2008

Mind Traffic Control is ruthelessly useful. Indeed, it kind of strips out everything else *execept* usefulness.

Which is why, if you're thinking of trying it out, here's a hint. Don't try by putting in some random fake items like "test 1", "test 2" etc.

All they do is sit there and remind you to do them. You can't fiddle around organizing and prioritizing them, dragging and dropping or attaching little icons to them etc. (Which is the point.) So MTC looks inert.

In fact it *is* inert, because you don't really need it. MTC does nothing, because you want nothing from it. You don't really have a task of doing "test 1" or "try out mind traffic control" so the computer can't help.

It's as if Mind Traffic Control magically knows when it's being useful and when you don't really care.

So, to get the real MTC experience, put some real tasks in. Just 3 or 4 of the things you actually have to do over the next couple of days, and leave it open in a browser-tab on your machine.

Then MTC feels wanted. And the magic kicks in. ;-)

Wednesday, June 04, 2008

Aza Raskin dreams of easier Firefox extensions.

Let's hope that he's working on it.

Also, interesting to compare Steve Yegge on the Firefox vs. Emacs war.

Tuesday, June 03, 2008

Loads of nice stuff going on in Squeakland.

Showing Seaside demos to a colleague this week made me wonder whether I need to dive back in. It's been a long time (15 years) since I wrote any Smalltalk. And what with Python, Erlang, GeekWeaver + some C, PHP, Javascript; and Cache ObjectScript (don't ask!) in day-job, do I have room for Squeak?

But PyPy Goes Squeak looks fascinating.

As does this conference.

Saturday, May 31, 2008

The biggest problem I've noticed people having with Mind Traffic Control is with delegating. They were sometimes delegating without filling in the task description (thinking that the original task description would get copied across - which it wasnt't) or delegating to names of people which clearly weren't email addresses (or Goggle logins).

Now I've trapped this. When delegating a task, it's description gets copied (although you can still edit it), and the system also traps non-email addresses as targets to delegate to.

Keep watching ...

Monday, May 26, 2008

Om Malik suggests a freemium business model for Twitter that starts charging for tweets per follower.

Sunday, May 25, 2008

Rather great Paul Graham essay on adult treatment of children.

This resonates :


Innocence is also open-mindedness. We want kids to be innocent so they can continue to learn. Paradoxical as it sounds, there are some kinds of knowledge that get in the way of other kinds of knowledge. If you're going to learn that the world is a brutal place full of people trying to take advantage of one another, you're better off learning it last. Otherwise you won't bother learning much more.

Very smart adults often seem unusually innocent, and I don't think this is a coincidence. I think they've deliberately avoided learning about certain things. Certainly I do. I used to think I wanted to know everything. Now I know I don't.


Update : and another good one on the internet as dangerous distraction for procrastinators. Twitter is ridiculously addictive. In the wrong state of mind I can find myself trying to refresh once a minute.

Mind Traffic Control is partly meant to try to harness that dynamic for good ... or at least for work. It gives you something to click manically hoping for new surprises to pop out, but it's only ever work which pops (assuming you only put real work or necessary tasks in).

Note, at some point I may import RSS feeds into MTC ... but remember, it's vitally important you do not connect MTC up to some kind of "news" feed. Don't drink from the fire-hose, as they say.
I realize there's no defined way of submitting bug-reports or suggestions for Mind Traffic Control. I need to set one up. In the meantime, use the comments for this post.

Thursday, May 22, 2008

Couple of interesting posts on Twitter scaling issues.

Twitter starting a conversation with the community, and some speculation about the issues. It's not the writing it's the "view my page which collates from multiple other users" which is the issue.

If that's the case I wonder what an Erlangish solution would be. There's no real reason for the Twitter *database* to be centralized at all. (In this sense, Winer's thoughts on total decentralization are apt.) Could you not have multiple nodes, each with it's own database of some users. These nodes are going to have to talk to each other only when someone pulls a page out.

You could also, presumably, in the extreme case have entirely separate servers for different users, and only integrate the overview of all people being followed "at the glass" in the browser or RIA client.

Wednesday, May 21, 2008

Adobe Thermo looks interesting.

At first, of course, it looks just like another Visual Basic which is of note only because it targets Flex (and hence the Flash Virtual Machine).

But it's clever in the way that it imports Photoshop files and takes advantage of some of the logical structure.

Not for me, though, obviously.

Wednesday, May 14, 2008

A very natural conjoining ... spreadsheets become wikis.
Python as a Platform

Smart Disorganized Philosophy #2



Chatting with BillSeitz I found myself saying this :

MTC needs to have what Udel called the "special charmpower" of email ... that groups are spontaneous and form bottom-up from the flow, rather than having to be designed up-front, prior to the flow .... otherwise people keep using email
Another list view for Mind Traffic Control

Tuesday, May 13, 2008

OK, somewhat ugly, but they're there by popular demand ... full lists of your tasks.

Don't worry Mind Traffic Control isn't forgetting them. :-)
If you follow @exmosis on twitter you'll see he's busily trying to deconstruct Mind Traffic Control turning it into an untask-list or a barter-market.

@adrianh is constructively sceptical.

Lots here

Monday, May 12, 2008

Mind Traffic Control now has #tags.

If you use any word beginning with a # when describing a task, the task gets tagged with this word. And once you start tagging, a filter appears to let you filter your queue to present only those tasks which contain the tag.

Not entirely sure I've got the UI right on this one. It is simple, I think. But maybe not obvious, and maybe not in the right place at the moment.

Comments, bug reports, suggestions welcome as always.

BTW : a good thing about the GAE, it is so simple to add new functionality. This was about three hours of development and another 3 of debugging.

The reason for the longish debugging is what looks like a quirk in GAE.

At one point I was using a user object instead of a user email in a query. (I'm using user email's as user id in the database.) You might assume that this would simply fail with some kind of type error. But interestingly it worked on my local machine (somehow in the SDK it looks as though the user object gets correctly coerced into its email) but not on the appspot server where the query always returned nothing.

Read into that what you will.

Smart Disorganized Philosophy #1


I've been on a Smart Disorganized Individuals tip for several years, now. Always writing software compatible with that philosophy.

But what is the philosophy? What does this software mean?

In this series I'll start to make some specific notes towards that. Here's the first.

SdiDesk is wiki : a network of texts.

GeekWeaver is a programming language written in an outliner : a hierarchy.

Mind Traffic Control is a multi-user, dynamic queue, a "flow" of tasks.

Each is SDI. Each is completely different. Each is for specific purpose.

SdiDesk excels at capturing ideas and the relationships between them that are static.

Outlines excel at authoring or creating structure which is ultimately intended for a reader.

Flows excel at capturing change and movement.

OTOH, each is bad for something. These are true, even if you might imagine them not to be.

Wiki is surprisingly bad for authoring. Outliners are surprisingly bad for managing todo-lists. Flows are a surprisingly bad place to put ideas that you want to keep forever.

Wiki is great for writing, but awkward for the kind of reworking and structuring needed to polish a document for an external audience.

Outliners fail to match the dynamism of shifting tasks and priorities in the real world. They focus on making a structure of something which needs little structure.

MTC will lose your ideas when they are no longer in the future.

Saturday, May 10, 2008

Today's Mind Traffic Control update.

The "defer" screen was simple, but not simple enough. Why make the user go through two mouse clicks - select a radio button and then the submit button - when this can be reduced to one? Now choosing how long you want to delay is a single button click.

I was also finding, when defering, that I wanted to remind myself of today's date. Now I've just added a display of today's date for convenience.

In general, I'm going to follow a philosophy of trying to identify and implement small improvements like this to MTC.

All suggestions welcome.

Friday, May 09, 2008

Just remembered Paul Graham's essay from earlier in the year. It really spoke to me (what with my bias towards the agile, experimental, piecemeal, wiki-natured, wabi-sabi way of design).

Of course it's my road-map for the ongoing development of Mind Traffic Control.
Day 2 of Mind Traffic Control in public.

Development continues with MTC exporting OPML

Wednesday, May 07, 2008

Mind Traffic Control roll-out continues.

Nothing spectacular in terms of numbers, but friends are making interesting comments and suggestions; and some strangers are discovering it via the Twitter announcement.

Eikeon pointed to twemes as a place to search for the #tag #MTC on Twitter.

Good chat with Folknology. He's encouraging me to open up the data. Hence I did CSV export of your tasks. Al, likes RSS/Atom but I still need to find out whether feed-readers can do the required Google login to get at a non-public feed.

Rup3rt weighed in with a number of comments starting :
Wow an invisible list machine almost like a gumball/toy dispenser ...


and continuing


I like to see what is ahead but it is good with the delegation - I can line up things for the estagiarios. This is great for non-negotiables like driving instructions, recipes.

* The font for "This task was delegated to you .. may report the sender for blacklisting and delete this task" is a bit big

* I would like a difficult autoaddress (1gg23ff3d3reedd@mindtrafficcontrol.appspot.com) to delegate tasks by email and maybe I could get other tasklists to feed into MTC using this (to just top it up with priority1 or todotoday tasks)

* Maybe paste a list of (line break delimited) tasks that are automatically added

* Maybe show in a widget

* Maybe show total number of tasks

* How would time estimates of task duration fit in? It could be a diversion to see "You have 13 hours of traffic to negotiate")


Good suggestions. I'll be interested to know what everyone else thinks.

But here are some initial thoughts :

Font issue, yep. Mailing tasks in to Mind Traffic Control would be great; a very useful addition. But I'm not yet sure I can do it on the Google Application Engine.

I might be able to do it using another hosting service but that's introducing a lot of new complexity into the system : running two different hosting services, writing scripts on the old-skool one to pass emails it receives into MTC in some way, being responsible for security (how do I stop spammers mailing tasks to you via the system?) etc. Going to take a while to figure that one out.

Importing other formats and / or entering multi-line, multi-task lists is easier and more likely to appear soon. I'll definitely go for the multi-line input box in the short-term future. I'd be interested to hear what formats readers currently use for to-do lists so that I can import them. I immediately think OPML, of course. But are there others?

Widgets ... actually I've been playing with OpenSocial and Orkut Widgets for my other GAE project. It's cute ... but I'm not yet sure what I'd put in a MTC widget.

Task counts and time estimates I'm ambivalent on. I don't want to make MTC a paranoia inducing space where you arrive on the front page to be presented with something saying "Welcome to Mind Traffic Control. You have 280 outstanding tasks". On the other hand, I see that people would like some sort of overall measure of what they have to do. More thinking on this.

Finally, there's a couple of issues of "philosophy", particularly why I'm resistant to letting you flag tasks with "priorities" but leaving that for the next post when I'll be more coherent.

Tuesday, May 06, 2008

Softlaunch ... no fanfare ...

Mind Traffic Control



This is my first Google Application Engine application. A kind of next-action list for the Twitter generation.

Basic instructions :

1) You need a Google account to login (eg. Gmail) ... it's a GAE app.

2) There's a blue box for inputting tasks you need to do. Once you start entering them, Mind Traffic Control will show you your next action.

3) At which point you have a choice. Say you did it. Delay it (push it to the back of the queue). Delegate it to another user. Defer it to a future date. Or delete it altogether.

4) Keep going.

There are a couple of ideas behind this. First, that people have been getting too hooked up on the idea of "organizing" their tasks and actions into lists. But organization itself isn't really an end, it's a means towards making sure you remember and discover your tasks, as a means towards the ultimate end of getting stuff done. So instead of thinking of tasks as list-management, Mind Traffic Control treats tasks as un-structured flows.

The real focus is on capturing the tasks as quickly and easily as possible. So, inspired by Twitter and Folknology's Rel3, the input box is always there at the top of your page.

The other focus is when the task is presented to you. At this point you need all your options to quickly route the task. In a more static system we might say route into particular "bins" but here it might be better to say "channels" (unless it's the ultimate sink of "done" or "deleted".

Another idea ... it's meant to be the simplest workflow that could possibly work. Just short messages which can be routed. Everything else has to be constructed by humans on top of this. But as, once again, we've seen with twitter, it looks like humans are pretty good at filling out these communication channels.

Anyway, off to bed ... will write more posts here soon ...

please have a try with Mind Traffic Control, and if you have any comments, feel free to post them here.

Saturday, May 03, 2008

I've now been playing with GAE for a couple of weeks, and it's still looking pretty good. I've now got an Orkut developer account so I can make Orkut widgets tethered to a GAE based service.

Meanwhile looks like GvR has been doing some cool stuff within Google with internal development tools, and has just released it to the outside world, thanks to GAE giving us access to BigTable etc.

Saturday, April 12, 2008

Thursday, April 10, 2008

Now this is very cute :


[(f.title,f.key())
for f in db.GqlQuery("select * from Film order by title")]


See that? A GQL (query language for GAE) query object automatically supports iteration, so you can use it in a list comprehension.

Monday, April 07, 2008

OK ... better start finding out about Google App. Engine

Damn! Don't think I was in the first 10,000 applicants for a beta ... got the downloadable development environment though ... watch this space ...

Update : Actually, I did get one ... :-)

Wednesday, March 26, 2008

Sometimes you need to take a step back from a problem, to see the forest for the trees.

GeekWeaver was being held up by something that seemed a rather complicated knot; one that I've wrestled with a number of times but never really untangled to my satisfaction.

So last night I decided to restart with a clean slate. I didn't look at the existing code or existing unit-tests. Didn't even open my IDE or project file.

I just started up IDLE and in a single file, redid the whole thing from scratch, in a fast test-driven stylee.

Amazingly I think I've come out with a cleaner solution, messing around with fewer classes and no attempt to over-re-use with inheritance. The whole thing took about two hours total. Of course, it's not quite finished, and still needs to be integrated back into the main codebase. But I like it a lot more. It's shorter and easier to understand.

Sometimes (at a certain granularity) old code *is* more of a burden than an asset. Understanding what it does and what you can do it is a cognitive cost that outweighs its value. Don't be afraid to throw code away when you need to.

Caveat for small granularities. Obviously rewriting an entire application from scratch is a different matter.

Thursday, March 20, 2008

Sweet Expressions ... great idea for making S-Expressions more like other, more readable programming languages
without losing their power (such as generality, macros, quasiquoting, homoiconicity, and easily-manipulated program fragments).


Hat-tip Folknology

Wednesday, March 19, 2008

Sunday, March 16, 2008

Very interesting. Recently my "ProgrammingInWiki" page on WardsWiki seems to have come back to life. Along with a companion WikiIDE.

A WikiDE is, of course, something I've been working on in the background for some time. But I'm far from having anything to show yet. So if these guys get there first, good luck to them.

I just want to be able to start working this way.

Wednesday, March 12, 2008

Damien Katz has more interesting comments about Erlang's "ugliness".

(hat-tip @Folknology)

Sunday, March 09, 2008

I've been wondering what Ward Cunningham's been up to at Eclipse. Jon Udell is on the case : Interesting tools for software developers.

Apparently's Ward's now at a wiki-startup. (Mark Dilley seems to be involved too.)

Saturday, March 08, 2008

Cobra seems to be like Python with optional compile-time type-checking and other quirks removed.

It also has contracts, which ensure certain conditions when calling a function. However, wearing my new Erlangish hat, I wonder what contracts buy you over pattern-matching arguments?

Unit testing built in to functions is interesting. Not sure what I think of that .... yes, it's useful and convenient. But a) it may clutter up clean code (I tend to let a certain amount of messiness leak into my unit-tests, that I don't let into my code); b) it's not so easy to see how it can be used for test-driven development - how can I write my test before my class? And, worst of all, c) I tend to use unit-tests when refactoring and moving functionality from one class to another.

It's very simple to change a :


x = MyClass()
self.assertEquals(x.f(4),10)


into


x = MyClass2()
self.assertEquals(x.f(4),10)


and have my unit-tests already defining the new target I'm aiming for.

But if the test is is actually *part* of MyClass, then that's going to require more premeditated moving stuff around during my experimental refactoring.

Thursday, March 06, 2008

I'm way too busy now ... but I'm having some kicking ideas about my own grandiose bid to improve programming ...

... think GeekWeaver in an SdiDesk-alike editor (obviously).

Then imagine that *everything* is a template.

That's the way that GeekWeaver is already going. Everything is a template (ie. has named slots that can be filled). Function calls are just the injection of a data-block into that template. Another way of putting it, all objects know how to handle the "call" message with a data-block as argument, even if they don't do anything very useful with it.

But now imagine that all the types of things you can get in SdiDesk ... text pages, grids, network diagrams, are also templates. And you can plug and pipe them together any way you like. One page can hold a table, another a network diagram-shaped template, and a third can be specified as the result of injecting the first into the second.

Hmmm ... this definitely looks like it's going in the right direction.

Monday, March 03, 2008

Somehow I feel I should be exploring WikidBase

Looks clever ... and in Python.

Saturday, March 01, 2008

Here's a question ... why is Erlang so ugly?

I don't mean that in a pejorative way (not much, anyway). I mean, I really love what it does. I'm totally impressed with Erlang's power and simplicity. I'm writing simulations which are about a quarter of the size of the Python equivalent. So this is not to be taken as a criticism of Erlang which I'm definitely committing myself to, this year. Rather this is some random speculation about programming language aesthetics.

Erlang is wonderfully concise. And yet, somehow, unlike Python, unlike Haskell, it just doesn't come across as beautiful. It's confusing. It looks cluttered.

A couple of lines look fabulous. But the simplicity doesn't scale.

At first guess, there seem to be three issues.

a) As people have noted, the record type is ugly. It is. And counter-intuitive to use in patterns (although I may just be stupid).

b) In general I think it's good and brave thing to take a stance *against* objects. But I haven't figured out how to do encapsulation (data-hiding, abstract types)

Sure, I can define polymorphic functions (one clause at a time per input type) which is a lot shorter and more powerful than overloaded methods in Java. But it has the effect of jumbling all my data-types together. Which just feels *wrong* to me. (Of course, maybe that's some residual OOness in my thinking.)

But I think that may be part of the bigger issue :

c) erlang doesn't seem to have resources for "programming in the large". And, ironically, because erlang is so powerful, that problem becomes visible at a smaller scale - precisely because in erlang "large" programs are actually "small".

Or rather, the only resource is "modules" (which means breaking up into multiple files - always an extra overhead.)

But if you avoid breaking things up into files, the opposite problem becomes apparent. I can do the equivalent of a small Java class (let's say something around 50-80 lines) in about 6 to 10 lines of Erlang. But 10 lines of erlang is too small for a separate file. So I'll add the next 10 line packet of functionality to the same file. By the time I'm up to 4 or 5 packets that would be handled as different classes in Java or Python I may have written only about 50 lines of code ... but it's all running together!

There's no higher level of organization to distinguish and separate the code. In Python I often put 5 or 6 small-medium classes in a single file or around 300-500 lines. But the indentation and editor make these reasonably distinct and identifiable. In contrast, my equivalent 200 lines of Erlang have no visual cues to break them up. I can't use functions as a visual element because pretty much every line is a new function (except when I'm doing I/O, which has its own "issues").

I'm left with using comments but my editor (Komodo), excellent in many ways, doesn't actually know Erlang and so doesn't colour them differently. And, in general, because functions are powerful, they *are* short : one or two lines. But those lines are typically much denser than Python. Even if a dedicated editor would colourize them, I'm not convinced that's such a big win at this density. On the other hand, I don't want to artificially scatter them out into multiple lines. I'm not trying to recreate Python with a slightly less appropriate syntax. I want to take advantage of Erlang's power and conciseness.

But I wonder what the right aesthetics for a language as high level, dense and abstract as Erlang is. Haskell looks cleaner to me - maybe because it does abstract data-types right. But can it solve the problem of organizing your larger-scale things? Lisp is no role-model. ML and its offspring have always repelled me visually. (Nothing can be more ugly, dispiriting and patronizing in a programming language than an explicit "begin" statement.)

Suggestions, anyone?

Wednesday, February 27, 2008

And I thought I was ambitious, trying to write a programming language!

My friend Oli has decided to reinvent programming as we know it. Details are still trickling out via his web-site : Semantic Programming. And I'm in frenzied skype conversation with him, trying to figure out what it's all about.

In outline, it starts from some intuitions behind the Semantic Web : that there should be a massively parallel, distributed graph-shaped database of facts (relational assertions) represented on different machines across the world. But it then layers programming on top of that. Instead of a passive data-structure crawled by scutters, SemProg agents (roughly, the servers which manage different data-nodes) are active. There is message passing between the facts themselves, and agents may have hardwired interpretation to act on some facts (what Oli is calling "axiomatic" understanding), or a "deductive" understanding (I guess rather like Prolog inference), and even a "behavioural" understanding via (I guess again) learning from observing other agents.

I'll keep following this here on Smart Disorganized. Very interesting if it works out.

Would GeekWeaver support Semantic Programming? It seems like Oli is thinking of multiple editors for different types of information, all of which compile down to the same underlying graph-structured format so that the data can be combined. (Rather like Language Oriented Programming.) It seems quite possible that GeekWeaver could output something like his graph-format. I'll certainly be experimenting.

I'm also trying to persuade Oli to look at Erlang as a potential implementation language for the distributed virtual machine. I'm increasingly impressed by Erlang. Finding it very powerful and concise.
Towards End-User Programming with Wikis

Thursday, February 21, 2008

Paul Graham's Arc Challenge . Examples in Lisp, Smalltalk Seaside, Ruby, Perl and Python (using generators instead of continuations)

And an Erlang response.

Monday, January 28, 2008

@adrianh suggests looking more at Parrot Compiler Toolkit ... which is very cool.

I'm finding that language design is hard. Not just the implementation part (although that's hard too) ... but just figuring out how to make a syntax that allows all the things you'd expect to be done in an elegant way.

I'm starting to appreciate how clever certain common design patterns are in language design, and how hard it is to deviate from them. More on this soon ...

Wednesday, January 16, 2008

Here's an interesting question (after reading this).

Why does anyone want to write "large" programs? Everyone knows large programs are difficult to build and maintain. Want we want is *small* programs that happen to be powerful (do a lot) and scale over large numbers of users. Is there any reason to think that "large" program correlates with either of these things?

Supplimentary question. Are 10 programs of 1000 lines each, which have to nevertheless interact (via pipes or XML-RPC calls etc.) actually any easier than one 10000 line program?

Update : Folknology has been making a pretty decent case for Erlang as a language optimized for writing software as a swarm of small programs.