A one-click installation of a full Mac, Apache, MySQL, and PHP suite. Not a starpack, but as close as it gets. Hefty package, but it seems to be doing everything just right: all the stuff is inside a single folder - install=copy, uninstall=delete. The attention to detail is impressive, considering how many different technologies are brought together - all the way to a DashBoard widget to control this thing.

Transactional memory

There's an interesting article about TM and STM in ACM's Queue. Somehow, I get the impression that Vlerq's mutable views are very similar.


This article caught my attention, especially because of this summary:

If you want to be rich: Don't build what you want, build what they want.
If you want to be a happy geek: Build what you want but don't try to sell it.
If you want to be rich, stop doing research and start schmoozing with the rich.
If you want to be happy, stop caring about the rich and start doing research.

New disk

My new 120 Gb hard disk came in today... cool.

It came with a MacBook around it... super cool!

Power saver

What a clever idea! I'll wait for a euro version.


The small Lua scripting core can now be extended to do just-in-time compilation to machine code with LuaJIT. The features page give some speed and size results. Very impressive...

Bisection bug search

Here's something I've occasionally would have loved to have: an automated way to identify a hard-to-isolate bug by reverting to older versions. It would be cool to see more such new ideas applied to the art of programming itself.

Disk failures

Yesterday, the system disk of "teevie", my AMD64 Linux box (which also hosts a range of other OS'es as VMware images) started running into hard disk errors.

The drive was getting terribly hot, so I took it out of the 3.5" drive slot to get some more free-air cooling. Problems went away long enough to recover all partitions with a couple of restarts (and many hours of patience). Thank you Knoppix and rsync, for being there when I needed you.

As it so happens today a big new external HD arrived (Maxtor OneTouch III), so I have been busy making full backups of all the main machines around here. No fun, but I guess I got away with the occasional when-I-think-of-it full backup style I've been doing for years now. It's not the work lost that I fear (I really do backup my active files a lot), but the amount of time it takes to restore a well-running system after serious hardware failures. Copying these big disks takes forever.

The failing IBM Deskstar 120 Gb drive worked for about 5 years without a hitch, so it really did well. Luckily, there's a spare 80 Gb around here which can take its place - but it sure takes a lot of time to shove those gigs around and get all the settings just right again!

Functional Programming

Under the title Functional Programming For The Rest of Us hides a short article which explains an enormous amount of basic detail about FP. State, concurrency, continuations, closures - it's all there in a delightfully readable overview.

More articles by the same author are here. I can't figure out who the author is, other than... By day I'm a Java developer at a mid-size Wall Street firm.

Flip the coordinates

As people occasionally re-discover, object-oriented data structures are not always very efficient. A recurring problem is how objects are usually implemented by assuming that logical relatedness must translate to physical proximity.

How mis-guided.

In Fortran, collections of structs were often simulated by allocating arrays for each element, and indexing across multiple arrays to access struct fields. Somehow, we seem to have forgotten about the performance benefits that can give. I'll be even bolder and state that we're squandering huge amounts of performance by insisting on placing all fields of an object in adjacent memory slots.

Maybe one day others will see the light and figure out what Metakit and Vlerq are all about...

Update: See a related paper by Steve Johnson. Thx Andreas Kupries for the reference.

Free as in beer

James Bach blogs about people who contact him to get free advice. It seems to be happening more and more.

I can only quote a good friend on this: You get what you pay for.

For me, this does not mean that I won't answer questions or support others - on the contrary - but that it is my choice to do so, not any sort of obligation.

Tcl/Tk Conference

FWIW, I'll be presenting a paper about Vlerq and Ratcl at the Tcl/Tk conference in Chicago next month. Am very much looking forward to it!

A trend?

occurred to me that just about everything I've done in terms of software over the past years can be summarized as a simple progression:

    A somewhat disturbing trend is that each next step is taking longer to complete... oh, well.


    I'm re-discovering VoodooPad again. A quote from an older interview with Gus Mueller:

    Don't underestimate the amount of work that goes into a real Macintosh application. Or any application, for that matter.

    The current 3.1 release is very impressive, and highly innovative IMO.

    Unopinionated software

    Another gem by Mark Roseman about Tcl/Tk's (lack of) popularity.


    Mark Roseman posted a reply to the ever-recurring Is Tcl/Tk dead? theme. Priceless.

    Dynamic languages

    Wow, the Dynamic Languages Symposium 2006 looks like a heck of a conference! Too bad I can't make it (there really is no way) ...


    Copyright ownership is a murky issue, as El Reg explains.

    Papers, archived

    It looks like a new trend is to start offering all back issues on some CD-ROM, DVD, or even hard disk at relatively low prices. Publications like Dr. Dobbs, National Geographic, and now the New Yorker are all available in electronic form. Great (I have the first two of these, and a few others).
    Wouldn't it be nice is some
    standard browser emerged, so that we don't end up with a huge mix of supplier-specific reader software? The current situation is a bit like having a different reader application for every web site...

    Data transformation

    Brian Theado pointed me to Dabble DB (blog). Fascinating (more discussion on this here).


    Christian Neukirchen's Brne is the first mention I've ever seen of anyone working on something even remotely similar to Vlerq.

    Wee.. so maybe there are some more lost souls chasing the same dream on this planet after all! Wonderful, I need to get in touch with that guy...

    Update - more details.


    ... and their personal preferences. Interesting variety.


    Interesting article by El Reg about modularity and other important aspects of software and its development process.

    Vlerq lives

    The Vlerq research project, which aims to supercede Metakit one day has undergone a dramatic transformation these past weeks.

    I have completely rewritten the code as a C extension for Tcl, re-using many ideas and insights but also adding some new ones, and the result has shattered many of my prior assumptions. The new code is a fraction of MK's C++ code base, about 75% C and 25% Tcl, and it looks like it is turning into an incredibly good fit for Tcl.

    The big surprise for me was the enormous simplification
    and speed increase which means Vlerq now outperforms MK's highly tuned code in many cases, often by a factor 2..3, and I confidently predict that this is not the end of it either.

    Deconstructing databases

    A very good article by El Reg. Reading between the lines, I can see Vlerq going there on several levels.

    Features and bugs

    The developer perspective. Recommended reading for both sides of the fence.

    Terminal Zen

    Long live the command line - for development, that is.


    Hilarious! ... be sure to watch the video.

    Mac development

    This fast-paced 15 minute video shows the iTerm terminal window and the TextMate editor in action in a demo of Ruby on Rails. It's a fascinating view into (web) development in the 21st century IMO.


    A quote I couldn't resist copying here:

    The last good thing written in C was Franz Schubert's Symphony Number 9. --Erwin Dieterich



    Here is some source code in a blog entry about decoding "tar" archive headers, which IMO is a good example of how different languages have their own way of expressing logic (Ruby in this case).

    Wouldn't it be nice if there were a place where the same problem, preferably a simple-to-understand-but-not-quite-trivial-one-to-solve, were coded in different languages and all collected somewhere?

    Not as a shoot-out, but to help understand just what the different styles, formatting choices, standard libraries, and conventions are. Hey, let's call it a "sleep-in", to protest against language apartheid!

    I'd really like this world to move on from "mono-lingual" language-centric communities ...


    Great read.

    Lightweight is extinct


    An easy way of checking whether your browser is standards compliant is to check whether the installation files for your browser were smaller than 50MB, or the run-time memory usage is less than 300MB. If this is the case, you should download a more recent browser to get the full Web 2.1 experience.

    Pinch me, please (yes, I know it was meant as a joke).

    Offline Wiki

    At last, the start of integrating online and offline use.

    Joel Spolsky

    He's right ... and I need to think (not necessarily to change my situation, but perhaps my goals).


    If globals are evil, then how come developers keep on using them more and more?

    I'm referring to the fact that software increasingly depends on pieces spread all over my hard disk, with "configuration files" everywhere. Pick any non-trivial developer tool - the problem is not just that it's hard to get things working properly, but that any configuration change later may break things.

    If that isn't global state (and the worst engineering approach ever!), then I don't know what is ...
    What a mess.

    The big one

    It had to happen. I knew from the start that it would be almost inevitable, at some point.

    And today it did. I ran the marathon in Rotterdam! All 42 kilometers! In 5:15 - phew! Now I'm tired but very pleased with this moment, and seeing the preparations since July 2005 pay off.

    Onwards, back to coding!!


    A column-oriented database. Looks very interesting!

    Core Data

    Here is an impressive quick introduction with a few small videos describing how to create a "Core Data" application from scratch - this is Apple's way of building data-aware apps (using Objective C, Cocoa, Interface Builder, etc).

    The interesting pieces are the very slick GUI tools to create a data model, to visually design the GUI, and the way to tie actions and code together. This seems to work with native data formats, SQL,
    and XML as storage engines.

    A superb intro, though I'm not convinced that this is the way to go, ultimately.

    Vlerq 1.0

    I've released Vlerq 1.0 (i.e. Ratcl 1.0 + Thrive 2.23).

    A bit worried about the amount of work still remaining, but nevertheless: lots and lots of progress so far. One could say I'm halfway there.

    Books, yummy

    As what is starting to become a tradition, I've been collecting book ideas and recommendations for the past year or so. If the topic and reviews stick long enough, I then order all of them at once to extend my library and have material for all those times when reading seems like the best thing to do. I find it particularly effective to overcome setbacks and productivity dips.

    So here's the list that just arrived, in random order:

    • Operating Systems (3rd ed: "The MINIX book"), by Tanenbaum & Woodhull
    • Ajax in Action, by Crane & Pascarello
    • Rapid Development, by Steve McConnell
    • Data Crunching, by Greg Wilson
    • The Seasoned Schemer, by Friedman & Felleisen
    • Micro-ISV, by Bob Walsh
    • The Mythical Man-month, by Frederick Brooks
    • Practical Common Lisp, by Peter Seibel
    • Joel on Software, by Joel Spolsky
    • Code Complete, by Steve McConnell

    Plenty to catch up on!

    Keep it simple

    From NYT:

    "Complexity kills. It sucks the life out of developers, it makes products difficult to plan, build and test, it introduces security challenges and it causes end-user and administrator frustration." - Ray Ozzie, CTO, Microsoft

    Yup. KISS.

    No database

    Every once in a while (especially with scripting languages), I come across the intriguing phrase "no database required". Often as a feature (example).

    It sounds as silly as "no file system required, prefer raw disk blocks!" to me... What's next - no data structures required? no programming language required?

    I s'pose the cause of this is the deployment hell involved in using any of the mainstream databases. Sensible objection, but wrong conclusion.


    In it's own inimitable way, El Reg has a crazy story about what can happen when the real world meets the world of geeks. Or when people start seeing ghosts/hackers/terrorists on every corner, eh... web page.

    The fascinating issue here is how a welcome greeting turns out to have so few hints that non-geeks (that's the
    other 99.999% on this planet, remember?) may conclude it's some sort of threat...

    Long runs

    Having run for over 30 km a few times recently, I think I now understand the term "in the long run" better. It's about setting goals, staying on course, and persevering. It's also about patience - and enjoying both the process and the outcome!

    Native queries

    The more I look, the more I see people everywhere trying to solve the problem of marrying databases and SQL (and XML and XPath) without using either. There's LINQ, and there's Ruby for example.

    A solid relational foundation
    inside a programming language (whichever one is used) still seems to be a long way off. I sure wish I had more answers ready.

    Third Manifesto

    A fascinating post which proposes to implement Chris Date's "Third Manifesto" database concepts (and I guess its "Tutorial D" language) on top of a substantially modified implementation of SQLite. I'd love to see this fly (but I doubt it will, for several reasons).


    Could the Dynamic Languages Day be what I hope it is - an attempt to bridge the gap between the many scripting languages to emphasize and leverage the commonality between them? I hope many more will come - and would have attended had I known about this. The presentation movies are on-line, great!

    Product design

    A delightful intro about software product design. Here's part of it:


    I'm the schmuck on the bottom left, btw...

    Nested structures

    Views and sub-views are not really new or unique. Everybody struggles with nested structures. Master / detail, XML, group by, pivot tables ... all have some aspects related to nesting and grouping.

    Here's one I had not seen before:
    Data Shaping and Advanced Data Shaping.

    I'm still not convinced that either SQL extensions or XPath-/XQuery-like solutions are the "right" way to deal with these concepts.

    Alan Kay

    When Alan Kay speaks, I want to hear every word he says. Or read it, at least. This talk is about the abysmal state of computer science.

    When people react instantly, they're not thinking, they're doing a table lookup.

    Not particularly relevant, but a neat quote nevertheless... Here's another one I wholeheartedly agree with:

    Lisp is the most important idea in computer science.

    The one thought I came away with after reading this was: thinking takes time.


    It's not Ratcl. But osh does do things which look similar to Ratcl's pipelines. It appears to be geared towards remote and parallel execution.


    Here are a couple of evil C constructs. Whee, makes my code readable in comparison!

    W3 intro's

    I used to get lost in all the web technologies people have come up with. No longer. There's a website which has excellent (brief!) intro's about CSS, XSL, XQuery, AJAX, ASP, SVG, and dozens more acronyms-du-jour. At last - a site which helps me learn without taking over my life!

    Column performance

    An independent study (heh!) confirms the value of columns-oriented storage (with thanks to Nikos B for passing on this link).

    Minimal LISP

    MISP is a minimal Lisp which is being described in a number of very short and readable blog entries. I love it - not only is it a delightful read, it might in fact be a great candidate to implement on the Thrive VM.


    I've been updating my website with "rsync -a --delete (from) (to)" for years. Very happily so, I might add. Only this time, the original happened to be on a local NFS mount, and that mount point happened to be inaccessible when I did the update.

    So rsync then deleted hundreds of MB's from my webserver before I could hit CTRL/C ...
    (Many hours later: all the data has been pushed back out through the ADSL uplink. Phew!)


    The Slimserver is an MP3 jukebox which plays nice with iTunes music collections (and it does not require a Squeezebox player to be useful). Works nicely (coded in Perl, not deployed as Starkit, oh well). And now it looks like the Nokia 770 could become a nice front-end for it.

    When I have time for it, am having way too much fun with Vlerq right now!

    Email soup

    The bad news: it took exactly 15 days to accumulate 1000 junk emails in my Gmail account (and 55 meaningful ones). And that's after dizzie's basic spamassassin and amavis rules were applied... (stopping another 500 virus emails!).

    The good news: Gmail automatically dropped some 98% of the spam. Plus another 75 daily auto-generated emails I always ignore, via a couple of filters.
    I now re-route all jcw@... emails to google and then pick them up via POP. It looks like Gmail spam filtering is particularly effective - perhaps because they can detect the same email content arriving for many people and all coming from the same source, and then "undeliver" them as soon as a few people start tagging them as spam, which is very quick to do on their web UI.
    Great, just a few emails a day. No distractions!

    Impressive coding

    Richard Hipp continues to impress with his thorough coding + testing style. It's truly amazing what a dedicated and professional programmer can accomplish in just a few years.

    Bug tracking

    I've just completed the (trivial) installation of CVStrac for use in my main OSS projects. It offers excellent integration of the CVS timeline (with RSS feed) with a ticketing system, and makes it easy to cross-link and cross-reference all the bits and pieces. Thank you Richard Hipp for this gem!

    The base url is - replace ? with one of: critcl, metakit, oomk, sdx, tclkit, vlerq, or wikit.


    The "Reg" has an article about exception handling, with their usual dose of humo(u)r. Here's an excerpt:

    If you're running under Windows XP, consider converting the exception into a null pointer dereference in the catch handler:

    catch(...) { // now we're really stuffed int* p = 0; *p = 22;
    This has the advantage over an ordinary crash that you will get one of those special OS-supplied dialogs, that asks permission to send log details back to Microsoft. Naive users will interpret this as a Windows fault, and will direct their bile Redmondwards.

    GTD + FMP = ActionTracker

    GTD (Getting Things Done) is a very interesting way of getting organized. FMP (FileMaker Pro) is a powerful end-user database. And ActionTracker looks like an excellent way to brings them together.

    The other tool I found was
    kGTD, which uses AppleScript to make OmniOutliner Pro perform the necessary steps. But this approach is doomed IMO: using a free-style outliner to move copies of information around is bound to stay brittle forever, whereas a database such as FMP can manage data in a perfectly relational structure and present numerous views on the same data using joins, selections, and ordering.

    FMP is an incredibly well thought-out and mature system BTW, I'm surprised how little it seems to be appreciated and used.


    This is the time of year where I often wonder what I'm about and where I'm headed. Instead of a boring monologue, here's the list of books piled up next to me, waiting to be read, finished, or re-read, as the case may be:

    • Machiavelli, a man misunderstood - by Michael White
    • Getting Things DONE - by David Allen
    • The Mathematical Century - by Piergiorgio Odifreddi
    • Database System Implementation - by Garcia-Molina, Ullman, and Widom
    • Lisp in Small Pieces - by Christian Queinnec

    Ordered as a neat stack, smallest book on top.
    Somehow, I think this list forms a good overview...


    My weekly "long run" has taken me to the 17 km milestone today. Took two hours, roughly half the pace of world-class marathon athletes. So I guess that makes me half an athlete :) - and proudly so!

    Lisp Universal Shell

    If you do research and development in signal processing, image processing, machine learning, computer vision, bio-informatics, data mining, statistics, simulation, optimization, or artificial intelligence, and feel limited by Matlab and other existing tools, Lush is for you.