Begin main content

Code listings via "Screen Shots"

In his page on Implementing VisiCalc, Bob Frankston describes how he made program listings by doing screen shots on a TRS-80:

I made a listing of the TRS-80 program by using my SX-70 Polaroid camera to take a picture of each page and then worked with this listing as I rewrote the code for the Apple.


08:47 PM, 30 Nov 2006 by Mark Aufflick Permalink | Comments (0)

Douglas Engelbart - Father of more than just the mouse

I am a big fan of learning from history. In the case of our industry, computer science, the history is not very long. Some people act like we have no history and discard it, but it is richer than you think.

There has been a bit of a move lately to recognise the role of people like Doglas Engelbart - these days even popular press articles will often make a passing reference to the "father of the mouse".

I can distinctly remember the first time I read As we may think, the Atlantic monthly article by Vanevar Bush in 1945 where he describes a hypertext system for aiding scientific discovery. I remember reading it in 1996 or thereabouts. The "web" was in it's infancy, but the dream was old. (You might want to get a copy of From Memex to Hypertext: Vanevar Bush and the Mind's Machine if you want to know more about Bush. It's a bit dry but packed with great stuff).

As we may think made me realise that computer science and human computer interaction (HCI) could get great value from drawing on our history. Being a big Apple fan, I knew about Xerox Parc, and the modern history of computing, but here was a whole era I knew nothing about. That lead me on a search that discovered Douglas Engelbart.

EngelbartDouglas Engelbart headed a research team that designed a system called NLS for oNline Learning System. He was more than just a man in the right place at the right time - he fought for funding year after year, from one government agency to another, until he reached his goal. And that goal is demonstrated in his famous 1 hour demonstration.

I have known about "the demonstration" for many years, but now thanks to Englebart's prescience in having the demo filmed and someone saving the footage and uploading it to "the web 2.0", we can all experience it. I have to say, it is even more incredible than I had believed possible.

I knew about the pioneering user input devices (the mouse, the chording keyboard), I knew about the multi-user collaborative features with hypertext linking, I knew about the interactive interface with line drawing, outlining, folding etc.

What I was unprepared for was the incredibly advanced hardware and software design ideas. My list from watching the 1hour video is:

  • DMA (direct memory access devices)
  • video conferencing (of sorts)
  • Using CRT latency to provide smooth interactivity
  • Domain specific languages (including a text pattern matching language and a high level language tightly coupled to the hardware - MOL - not unlike C)
  • C-Meta - a meta language that was used with a compiler-compiler for creating all their domain specific langauges
  • Code as documenation with a Smalltalk-like approach to code browsing and documentation where the code was treated exactly like the data (not too different from the Userland frontier approach now that I think of it)
  • Change tracking - the system kept track of who made what changes to what documents or statements
  • System wide search
  • Weighted keyword descriptors used with the search to provide ranked results
  • I mean this is just incredible. It would be an impressive system today - perhaps not unlike emacs - but in 1968! A mere 23 years after Vanevar Bush envisioned a hypertext research system based on microfilm.

    Simply amazing. Everyone must watch it - available on Google Video: Douglas Engelbart: The Demo.

11:40 PM, 24 Nov 2006 by Mark Aufflick Permalink | Comments (1)

Converting Apple 1 hex dumps for the pom1 emulator

Traditionally, Apple 1 (or Apple ][ for that matter) hex dumps look something like:

0300: 25 14 23 84 23 14 16 1B
: FF 9F 1E 1D 1C 1B 1A 19

This is suitable for entering straight into the Woz Monitor as a line starting with a colon indicates that the following bytes should be palced in the ram immediately following on from the previous write (or read).

I was having trouble with the paste function in the pom1 emulator, probably due to speed sync issues. pom1 lets you load rom dumps, but it expects the memory address on each line, not just the first.

As always, perl to the rescue :) With the following handy perl one liner you can convert a rom dump file in the usual format:

perl -pe '$base = /^([0-9A-F]{4}):/ ? $1 : uc sprintf "%04x",hex($base)+8; s/^[^:]*:/$base:/'

11:39 AM, 23 Nov 2006 by Mark Aufflick Permalink | Comments (0)

Apple 1 retro fun

Apple1I'm thinking of asking for a replica Apple 1 kit for Christmas. Amazingly there are at least two choices, either a Replica 1 from Briel Computers (US), or an A-One from Achatz Electronics (Netherlands) There also seems to be a guy who has designed an even more faithful replica using the original Apple 1 PCB layout and unused surplus components. I can't find more than an unused ebay auction for his kits.

To make sure I won't get bored within an hour of completing it, there are thankfully a few emulators around to play with (Woz having released the original Monitor ROM sources for free some time ago). The one I'm having most success with is the patched version of pom1 released by the author of the Krusader Apple 1/6502 assembler (with the assembler and Apple Basic in ROM).

The ironic thing is that the hp48 calculator that I am using to do decimal/hex conversions (since I can't do them in my head yet) has way more cpu power, a bigger stack, more ram, more advance graphics and even IR!

I'm also looking into the C port of pom. It sounds like it has more issues than the Java version, but I don't much like Java so I might hack on it. The code is nice and clean - only 3.5k lines of c and header. Half of that is in the 6502 emulator. Of course to put 3.5k lines of c into context, check out the hex dump of the entire Apple Basic interpreter by Woz :)

Image source:

05:06 AM, 23 Nov 2006 by Mark Aufflick Permalink | Comments (2)

Feed republishing ... via print media?

I have bloggedbefore about RSS feed republishing, but now it seems to have invaded the print media!

mX is a free (ie. advertising funded) newspaper that is given out for free to commuters on their way home in Melbourne and Sydney. DB from TramTown tells me that it used to be called Melbourne eXtra but was renamed for the launch into Sydney.

I intentionally avoid taking one because I try to avoid as much trashy journalism as possible, but it's full of pictures so I can't help noticing some of the stories in my fellow commuters' copies.

And today I realised why the stories always look so familiar - they are copied straight off Boing Boing!

Obviously many "human interest" stories are widely carried, but it's pretty wierd that on the same day that boing boing has a story on kit cars from japan, mX has the same story. On a previous occasion I saw an mX with a story on a cool Japanese transport robot that boing boing had shown on the same day. Now I understand the allure since I also linked to the boing boing story but then I'm not pretending to be a real newspaper.

mX has no online edition, so I'll have to start taking a copy to check myself. If I find more instances I'll scan them in and post them.

05:51 AM, 22 Nov 2006 by Mark Aufflick Permalink | Comments (0)

Novell pwned?

Either Novell got pwned or, in the words of an anonymous groklaw commenter, "They must think we are as daft as they are pretending to be".


We disagree with the recent statements made by Microsoft on the topic of Linux and patents. Importantly, our agreement with Microsoft is in no way an acknowledgment that Linux infringes upon any Microsoft intellectual property. When we entered the patent cooperation agreement with Microsoft, Novell did not agree or admit that Linux or any other Novell offering violates Microsoft patents.


Ron Hovsepian
Chief Executive Officer
Novell, Inc.

See the ever reliable Groklaw for more.

04:45 AM, 22 Nov 2006 by Mark Aufflick Permalink | Comments (0)

Improving search with machine learning

Ever since I wrote a small client/server demonstrating AI::Categorizer for Sydney University's Web Engineering group (where AI:Categorizer's auther Ken Williams was researching at the time) I have been interested in the practical application of machine learning and AI in particular (you can see Ken's powerpoint presentation about the demo and theses here if you're interested).

Lately I have been wondering why I don't see it appearing in search solutions more obviously. Sure there's Google personalized search, but I'm not sure I've seen amazing improvements. Certainly I have not been made aware of what those improvements are (and Google's public releases doesn't seem to mention AI).

I can think of any number of ways that existing, proven, AI techniques could improve search, so I've decided to do somehthing about it!

First off, there is the issue of irrelevant topics returned in my queries. A classic example is "Java". We all know it's a somewhat popular programming language. It's a type of coffee too right? But it's also the name of the most populated island on the earth (and holds the capital to the worlds 4th most populous nation), which also contains some active volcanoes. Want to know more about it? Well if you go to Google and search for "Java" you're going to need more patience than me - I got to search result page 10 with no mention of anything other than the programming language (with the exception of one Wikipedia result on page 3 I think).

So I should learn to write better search queries like "Java island". Or use a directory like Yahoo!.

That's pretty much my options currently. What about combining the two? What if I could refine my search results by selecting from the top categories represented in the result set, much like you do when you search for "tyres" - you can drill down to "tyres - retail and fitting". So assuming I'm Google and already have an index of the web, all I need is to categorize every page on the web.

Armed with the already human-categorized data set (or corpus) that handily offers in RDF form, I can train my machine learning categorizer robot. Then I can run that categorizer over the search result set and I have everything I need.

So how effective could that be? Well my rough prototype that I banged together over the weekend has only been trained on 500 documents because I'm running low on my DSL quota for the month so I'm going to wait until nearer the end of my billing cycle before letting it loose on the whole of the dmoz data, but similar machine learning experiments I have seen have consistenly resulted in the 98-99% accuracy band.

The other obvious way to improve results is to apply AI to the data set made up of [my search terms, which link(s) I chose]. I guess this is what Google personal search does, but there is so much more you could do with this data - like using clustering to provide Amazon-style suggestions "other people whose search terms are similar to yours found this link useful".

I'm pretty excited - this is great stuff and very applicable to our current data-laden world. Plus I just like data :)

10:05 PM, 19 Nov 2006 by Mark Aufflick Permalink | Comments (2)

Everyday Parallelization

I just got back from some last minute purchases at our local Coles metro and it struck me how much I enjoy the checkout procedure.

After you have loaded all the goods out of your basket onto the bench, there is always a few moments while the cashier scans the remaining items. With the Coles system, I can swipe my frequent-shopper card, then my credit card and finally select the desired account.

It's a classically paralellizable situation . Two inter-dependant resources with multiple duties, some distinct some shared. One resource (the cashier) almost always takes longer and so it makes sense to allow the other resource (the shopper) to complete as many tasks as possible while it (you) would otherwise be in a blocked state.

It reminds me of discussions I used to have with my friend Matt about the implicit least-cost decisions involved in every day situations, such as picking pedestrian routes.

Does anyone else have examples of well designed human processes that exhibit good parallelization? Or the opposite?

PS: apologies for gratuitously making up words from the parallel stem!

09:12 AM, 19 Nov 2006 by Mark Aufflick Permalink | Comments (0)

Webdesign IS design, dammit!

I was browsing the ideas page of boxes and arrows. Christina posted an article to a great article by Lance Arthur under the digg-savvy idea title Webdesign is dead. It got my creative juices going and my comment ended up being such an essay that I thought I would reproduce it here for you all to enjoy!


Ever since my first "real" IT job where I was exposed to a lot of designers and printers (courtesy of working for an Apple reseller) I have had a love affair with type. Graphic design too, but especially type and typographical layout. One of my favourite ways to fill a few spare minutes was to leaf through font sample books from various font foundries or tweak a font in fontographer (ah memories).

Being forced to limit oneself to HTML was a hard change for me. I remember when I first discovered http/HTML (late 1992 if I remember correctly, when one of my favourite gopher sites release a newfangled web version), the delivery mechanism excited me, and it was all ascii at first, so layout wasn't even an issue. Then came Mosaic. At first it was exciting, but then I realised the awful truth: it resulted in the destruction of the clean, simple, structural purity of plain-text html; and yet it did not deliver sufficient power to actually display good design.

Now with the advent of XHTML/CSS we are in a better situation. We can get an even better, more pure, structural mark-up of data, while simultaneously being able to display it in a pleasing way. Still, we are stuck in a place where what is possible is dictated to us by the CSS standards committee and the browser implementations thereof.

Changing tack for a moment, let's think about what it is that we use the web for - what information are we normally displaying? Or more pertinent here, what design tools do we need for what we are trying to communicate?

I like the following paragraph in Lance's article:

First off, I like distinct areas of separation. As you can see here, I used spacing and borders to set off the sections, giving the main content more weight by making it bright and big and stage centre. The headlines are also rather weighty, so that finding each article on the main page is simple, but the headlines are not so large that they outweigh the content itself.

Here is a person actually thinking about the style of the communication first. So many people say they are designing a "style" when really they are designing a "look". Like a human conversation, a web site/page communicates in so many ways. The page style/layout. The navigation. The typographical layout. The style of writing. The collaboration tools on offer. You might think I'm talking hogwash, but imagine you are reading a paragraph in a company "blog" You read the phrase "we value our customers feedback" and then you notice that they have comments disabled. That is communicating something, and it's the opposite of what the words are saying. It's interesting to note that there are more possible "communication parameters" in web publishing than traditional publishing, and yet web publishing is rarely approached with the same vigour as is traditional publishing.

After the above quoted paragraph, Lance goes on to talk about the colour palette which shows that at least he is applying some vigour - lets have more of it I say!

So anyway - this isn't quite on the topic of "Webdesign is dead", but I think a more interesting/useful title would be "Webdesign IS design dammit!" or perhaps "Will webdesign for typefaces" ;) The latter only makes sense to those of us who remember when real typefaces cost > $100 not the $19.95 they do now.

11:46 AM, 18 Nov 2006 by Mark Aufflick Permalink | Comments (0)

MapReduce in Perl

Someone recently asked to get access to the OpenACS paypal-support package that I wrote and lives in my cvs repository. Unbenknownst to me, my recent firewall change blocked access to the cvs web interface, which I have now fixed.

While I was looking around my public cvs interface, I remembered that I had never quite finished my Perl implementation of Google's MapReduce infrastructure.

Since I'm too busy to get back onto it now I figure I may as well unleash it on you guys. Be warned that there's no documentation (that I remember) and that the current implementation only works on a single machine, although the structure is easily extendable to multiple machines by replacing the forking with some form of rpc.

My sample Perl implementation of MapReduce (for sufficiently weak meaning of the word 'implementation' ;)

Given that limitation it may also not quite work properly - I really don't remember what state I left it in. Nevertheless if you first read the MapReduce paper by Jeffrey Dean and Sanjay Ghemawat then the api and code should make sense.

If anyone finds this interesting please feel free to email me any questions. If enough people are interested I may be able to make the time to polish it off and write documentation!

11:36 PM, 17 Nov 2006 by Mark Aufflick Permalink | Comments (0)

Natural selection meets Engineering quality

At that time [1909] the chief engineer was almost always the chief test pilot as well. That had the fortunate result of eliminating poor engineering early in aviation.

--Igor Sikorsky, reported in AOPA Pilot magazine February 2003.

01:59 AM, 07 Nov 2006 by Mark Aufflick Permalink | Comments (0)

2006 F1 Season Stats has a great roundup of interesting stats from this years F1 season, including my favourite:

Kimi Raikkonen may not have won but he did manage to rise 19 places to finish third in Bahrain. That was the greatest position gain any driver had made in a race since 1993, when Fabrizio Barbazza rose from 25th to sixth in the San Marino Grand Prix — in a Minardi!

04:52 AM, 06 Nov 2006 by Mark Aufflick Permalink | Comments (0)

psh (Perl Shell) and the Emacs shell-mode

That I love both Emacs and Perl is a matter of public record.

One of the thing that's great about so-called agile languages (like Perl) is that they lend themselves to interactive shells. If you've played with Ruby on Rails you have probably come across the excellent irb. Well psh is one (of many) such shell for Perl.

Trouble is it insists on extensively using gnu readline (if installed). This is great for regular terminals but is a royal pain if you try to use it within a shell-mode buffer in emacs.

To get rid of all those escape characters without hacking the code, add the following to your .pshrc:

require "$ENV{HOME}/.pshrc_emacs" if $ENV{EMACS} eq 't';
and that .pshrc_emacs should look like:

    package Psh::OS;
    sub setup_readline_handler {}
    sub remove_readline_handler {}
    sub reinstall_resize_handler {}
    sub check_terminal_size {}


02:26 AM, 03 Nov 2006 by Mark Aufflick Permalink | Comments (0)

Interesting weblog stats

Every month the #1 search term for this site is either "skills matrix" or "IT skills matrix". What comes after that is somewhat variable.

"Mel Kaye" is always near the top of the list somewhere, proving the IT world's unending search for the folklore that is the closest thing we have to real history. I used to be on the first page of Google results for that query. Now I'm way down the ranks.

Now I have a new entry into the list - and it has debued at #2!

The new entry is ...(drumroll please).... MAGIC MUG CAKE!

You can read this highly sought after blog entry, but also take a look at the Google search. The only other solid reference to "magic mug cake" on the net is from someone in Melbourne (must be an AU only product) and they also have a sheep on their mug. Amazing coincidence?

12:01 AM, 03 Nov 2006 by Mark Aufflick Permalink | Comments (0)


Blog Categories

software (41)
..cocoa (23)
  ..heads up 'tunes (5)
..ruby (6)
..lisp (4)
..perl (4)
..openacs (1)
mac (21)
embedded (2)
..microprocessor (2)
  ..avr (1)
electronics (3)
design (1)
photography (26) and white (6)
..A day in Sydney (18)
..The Daily Shoot (6)
food (2)
Book Review (2)


Icon of envelope Request notifications

Syndication Feed


Recent Comments

  1. Mark Aufflick: Re: the go/Inbox go/Sent buttons
  2. Unregistered Visitor: How do make a button to jump to folder
  3. Unregistered Visitor: Note I've updated the gist
  4. Unregistered Visitor: umbrello is now an available port on macPorts
  5. Unregistered Visitor: Updated version on Github
  6. Unregistered Visitor: Modification request.
  7. Unregistered Visitor: Accents and labels with spaces
  8. Unregistered Visitor: Mel Kaye - additional info
  9. Unregistered Visitor: mmh
  10. Mark Aufflick: Thank you