Begin main content

Filesystems and commercial open source innovation

My friend Rusty pointed me to an article about ZFS File System Makes it to Mac OS X Leopard.

ZFS is a filesystem developed by Sun. The self-professed "last word in file systems" no less. If there's something Sun knows how to do it's design and implement kick-ass OS/hardware level software, and of course now (nearly) all Solaris code is open source.

This is the kind of innovation acceleration that Vanevar Bush was talking about for the post-WWII scientific community - now we're really getting there in the commercial, as well as academic, software community.

Google is gaining from, and feeding open source. So is Sun. So is Apple. Oracle is testing at the edges, others are tipping their toes in as well. Which makes you wonder about the people being left out. Specifically Microsoft.

Microsoft's inability to deliver a next generation file system is welldocumented (even on their own winFS blog). Let's see - even in the early '90s Windows was planning an object file system. Apple had a similar early '90s foray (Pink/Taligent), but now they don't have to - they just tweak some code from Sun.

The more we figure out how open source fits into "co-opetition" (I hate that non-word, but there it is) the faster software will progress. Being the biggest software company in the world isn't going to save you when Chinese and Indian companies start to bootstrap themselves on open source and feed back into it.

07:54 AM, 22 Dec 2006 by Mark Aufflick Permalink | Comments (0)

Christmas deliveries

It was the day of receiving parcels today - firstly my A-One Apple 1 replica kit which is a Christmas gift from Kath - can't wait to get that thing cranking :)

Secondly a parcel I almost forgot was coming, the hard copy of Agile Development with Rails - 2nd Ed. The content is no surprise since I had access to the draft pdfs, but this really is a great book. I'm not doing a lot of rails development, but I have to say that the pragmatic programmers books in general are very good. They are selective like O'Reilly used to be, and they are almost as friendly as Randal Schwartz's standard-setting Learning Perl (aka the Camel book).

It's going to be a very geeky Christmas :)

10:40 PM, 21 Dec 2006 by Mark Aufflick Permalink | Comments (0)

Delicious links in my RSS feed

I recieved the following comment on my RSS feed:

Any chance could stop putting your delicious links in your RSS feed? It's
pretty darn annoying. I already subscribe to your delicious links
via...delicious :) Which everyone is free to do.

How about posting a little how-to on subscribing to your delicious links
directly and then leaving your RSS feed for your blog entries only?

As an alternative, maybe you could you provide an RSS feed sans delicious links?


Yes fair point. When I originally merged the feeds I was in a position where I had little time to write blog posts and I intended to write meaningful "mini-posts" in the comment field of delicious as I bookmarked links. It turns out that these days I use delicious as a bookmarking service (not surprising, since that's what it is) and sometimes I can bookmark rather a lot of pages, so I can see how that should be an opt-in feed.

I'm going on holiday for a week (yay) so there won't be any form of posting then :) When I get back I'll un-merge the feeds and post the suggested instructions.

I'm trying to guess who the anony-commenter was, just can't put my finger on it... but point taken.

02:15 AM, 21 Dec 2006 by Mark Aufflick Permalink | Comments (0)

Cvs Emacs on cygwin

I decided it was time to update the emacs in my cygwin installation. Remembering the days it took me last time I hoped that some of the cygwin issues had been ironed out.

Thankfully some of them have. The bootstrapping process now works flawlessly under cygwin (last time I had to bootstrap the lisp files on a solaris box and then transfer the results to windows for the build process).

It also seems substantially faster (although I may have compiled a full debug version for my previous install - can't quite remember).

Unfortunately the memory allocation problem I blogged about at the time is still there. For posterity, here is the work-around patch for version 1.405 of alloc.c:

Index: alloc.c
RCS file: /sources/emacs/emacs/src/alloc.c,v
retrieving revision 1.405
diff -c -r1.405 alloc.c
*** alloc.c     13 Nov 2006 08:20:28 -0000      1.405
--- alloc.c     15 Dec 2006 04:05:41 -0000
*** 5838,5845 ****
--- 5838,5851 ----
      case Lisp_Int:
+         /*
+               This is bogus, but there seem to be corrupt
+               objects placed on the stack under cygwin.
+               I assume this will lead to a phat memory leak!
        abort ();
+         */
  #undef CHECK_LIVE

11:09 PM, 14 Dec 2006 by Mark Aufflick Permalink | Comments (0)

Developing for arm hardware with qemu

qemu is an excellent multi-platform emulator that includes arm platform emulation. I'm just playing around for now but it's pretty neat.

If you want to do likewise, check out these instructions (including a custom kernel) for getting set up. Note that either because of recent SCSI patches to the qemu source, or because I'm compiling on OSX, the images on that page got stuck in a scsi reset loop during booting. Since I didn't want scsi anyway, I simply took the scsi hardware emulation out of the linked modules (manually removed lsi53c895a.o and added ide.o piix_pci.o in the Makefile) and commented out the scsi initialisation and added ide init in the versatile platform emulation (versatilepb.c):

*** versatilepb.c	24 Sep 2006 03:40:58 +1000	1.6
--- versatilepb.c	14 Dec 2006 01:02:28 +1100	
*** 10,15 ****
--- 10,22 ----
  #include "vl.h"
  #include "arm_pic.h"
+ /* ide support */
+ static const int ide_iobase[2] = { 0x1f0, 0x170 };
+ static const int ide_iobase2[2] = { 0x3f6, 0x376 };
+ static const int ide_irq[2] = { 14, 15 };
  /* Primary interrupt controller.  */
  typedef struct vpb_sic_state
*** 164,169 ****
--- 171,177 ----
      NICInfo *nd;
      int n;
      int done_smc = 0;
+     int piix3_devfn = -1;
      env = cpu_init();
      cpu_arm_set_model(env, ARM_CPUID_ARM926);
*** 194,205 ****
--- 202,219 ----
      if (usb_enabled) {
          usb_ohci_init(pci_bus, 3, -1);
+ /* disable scsi hardware */
+ /*
      scsi_hba = lsi_scsi_init(pci_bus, -1);
      for (n = 0; n < MAX_DISKS; n++) {
          if (bs_table[n]) {
              lsi_scsi_attach(scsi_hba, bs_table[n], n);
+ */
+     piix3_devfn = piix3_init(pci_bus);
+     pci_piix3_ide_init(pci_bus, bs_table, piix3_devfn + 1);
      pl011_init(0x101f1000, pic, 12, serial_hds[0]);
      pl011_init(0x101f2000, pic, 13, serial_hds[1]);

Performance is pretty slow on my PPC G4 powerbook - but then that probably tracks actual arm hardware quite accurately...

08:28 AM, 13 Dec 2006 by Mark Aufflick Permalink | Comments (1)

All my Newton Christmases at once

I was actually searching the interweb to see if anyone had run arm-linux on the Newton hardware since I have a few lying around and it would be a neat hardware package for mini projects.

TitleImagine my surprise when I discovered that not only is the Newton emulator project still alive, but it just released a fully working version, running on a host OS of OSX or linux-arm!! This means that I can finally have thepdaI'vebeenwantingforyears - NewtonOS on lightweight modern hardware :)

Einstein Platform (NewtonOS on MacOS X (PowerPC & Intel) & arm-linux) official page, and at the WWNC (world wide newton conference ;)

The delicious irony of the above photo is that the Sharp Zaurus 5500 was the only (?) licensee of NewtonOS. Now it's successor provides host for it's own historical OS.

Further coverage on: Engadget and Make.

09:42 PM, 12 Dec 2006 by Mark Aufflick Permalink | Comments (0)

Donald Rumsfeld handling press questions

All politicians need a finely tuned ability to deflect questions - who knew that Origami was an effective way? :)

12:21 AM, 08 Dec 2006 by Mark Aufflick Permalink | Comments (0)


I just had a coffee and friand (raspberry and pistachio) at my favourite café in Sydney. It's way cool&#8212;it has a downstairs area that makes you feel like it's only available to those in the know. The staff treat you like a friend, the baristas are Italian and the food is great.

As I was being served my coffee I found myself thinking "I don't care how much this is costing me"&#8212;and that is the secred to differentiation that allows you to charge a premium. Have a product and service that makes your customers think that!

10:27 PM, 05 Dec 2006 by Mark Aufflick Permalink | Comments (0)

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 &#8212; 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)

Oh boy I need one of these

Just saw this posted on Boing Boing. SO much cooler than a segway, and is that nuclear sticker for real?! If so it would never need recharging :)

03:17 AM, 31 Oct 2006 by Mark Aufflick Permalink | Comments (0)

Automatic copy from to MacOS Clipboard

Well, from emacs under X11 anyway...

This has bugged me for a long lONG time. I have been doing a bit of unix coding on my laptop this weekend and it finally got to me. There MUST be a way I thought.

A lot of people suggest autocutsel but all that does is synchronise the X11 CLIPBOARD buffer (or PRIMARY buffer) with the selection buffer. I'm sure this solves issues with some X11 apps that only use one or the other and may get confused. But that's not what I'm talking about.

I'm talking about:

  1. make a selection in emacs, yank a line, do whatever you want that "copies" a piece of text to the "clipboard" (for suitably vague meanings of those terms)
  2. switch to a MacOS app
  3. paste in the text copied in step 1.
So it seems from a LOT of googling that noone has an answer to that short of hacking (which I think is open source so that's possible - if not one could hack XDarwin instead). I don't have that sort of time however. I didn't find any general solution, but I just knew I'd be able to hack pbcopy into some sort of emacs clipboard handler. Sure enough, the workld's most extensible editor obliged! If you apply the following prodding to your .emacs file, you will be in auto copy-paste nirvana :)
(if (eq window-system 'x)
	  (defun paste-to-osx (text &optional push)
		  (let ((process-connection-type nil)) ; use pipe
			(let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
			  (process-send-string proc text)
			  (process-send-eof proc)))))

	  (setq interprogram-cut-function 'paste-to-osx)))
Update: After reviewing this entry on my front page it occurred to me how unlikely it is that anyone has ever hacked up a lisp code fragment directly after some visual basic! At least the foray into a little visual basic hasn't rotted my coding brain :)

11:26 AM, 29 Oct 2006 by Mark Aufflick Permalink | Comments (0)

Setting Outlook Categories with VBA

Posting this in a bit of a hurry. For context see the previous post How to do tagging in Outlook.

Open up the vba editor (Tools->Macro->Visual Basic Editor). Add a new module and paste the following code in (edit to suit).

Then to add the sub as a toolbar button customise the toolbar in the normal way and choose the 'Macros' category in the left pane - all your applicable macros will appear in the right pane. You can just drag it to your toolbar.

If the button seems to do nothing your outlook security settings may not be allowing macros. See Office Macro Security Settings.

Public Sub TagArchived()
    Dim objOutlook As Outlook.Application
    Dim objInspector As Outlook.Inspector

    Dim strDateTime As String

    ' Instantiate an Outlook Application object.
    Set objOutlook = CreateObject("Outlook.Application")

    ' The ActiveInspector is the currently open item.
    Set objExplorer = objOutlook.ActiveExplorer

    ' Check and see if anything is open.
If Not objExplorer Is Nothing Then' Get the current item.
Dim arySelection As Object
        Set arySelection = objExplorer.Selection
        For x = 1 To arySelection.Count
            strCats = arySelection.Item(x).Categories
            If Not strCats = ""Then
                strCats = strCats & ","End If
            strCats = strCats & "archived"
            arySelection.Item(x).Categories = strCats
        Next x
    Else' Show error message with only the OK button.
        MsgBox "No explorer is open", vbOKOnly
    End If' Set all objects equal to Nothing to destroy them and
' release the memory and resources they take.
    Set objOutlook = Nothing
    Set objExplorer = Nothing
End Sub

06:10 AM, 27 Oct 2006 by Mark Aufflick Permalink | Comments (13)

How to do tagging in Outlook

Working on a corporate PC you may be using Microsoft Outlook - whether by choice or not. Outlook uses the traditional hierarchical filing concepts that have been in place for what feels like centuries (who remembers when MacOS replace MFS with HFS, or when ProDOS on the Apple // replaced DOS 3.3...).

After struggling for some time to find a good filing solution I just realised that it wasn't possible. Too many messages belonged in multiple folders at once.

I had another issue which was a humungous inbox, and an 'archive' folder to keep the inbox in check. But where is that email I want? Is it in the inbox, the archive folder, or some other folder?

Categories =~ Tags

What I wanted was tagging. So I hunted around Outlooks functionality and found Categories. Now this does mostly what I want. But it's so hard to get too - I have to right click messages to get that option? First solution: add a categories toolbar button which you can find in the "Edit" section when you customise the toolbar. I renamed it to 'Cats...' to save pixels. (MS KB article on customising toolbars).


Then I wanted a way to 'archive' messages. It turns out that I can just tag messages with a category 'archived' and add a filter to the regular 'view' to exclude all messages with that category.

Filtered views

In addition I can set up other 'views' to show a subset of commonly viewed tags. To get easy access to those different views, add the views menu to a toolbar - you'll find a widget called "current view" in the 'view' section. You can also add a 'filter' button for ad-hoc changing what categories to filter by. (Somewhat useless MS article on using filters)

Ok great, but do I really want to click categories, then click archived, then click ok, every time I want to archive an email? I get hundreds of emails!

One great thing about MS Office apps is that nearly everything is exposed as a vba api. Sure, they are often bad api's, but you can do nearly anything with enough trickery. In the next post I'll include some vba code that will let you make a toolbar button for 'archiving' emails.

Update: The post (Setting Outlook Categories with VBA)

Automatic Tagging

If you used to have rules to file messages automatically - don't worry, because rules wizard understands categories and you can auto apply categories instead of filing. You can even add a chosen tag and choose to auto-archive or not (just like Gmail) by adding (or not) the 'archived' tag.

A neat feature of Outlook categories is that they persist when you reply/forward messages (within an MS Exchange network). If I dig out an old email that I have archived, forward it to someone with comments, and then they reply - all my categories are still there on their reply. Thats actually really useful, except that the 'archived' category means it disappears in my regular filtered inbox view. To counteract that we need some vba code that is triggered when new messages are delivered that will strip the archived cat. I'm too lazy to write that in vba (which has horrendous string manipulation support) so I just strip all categories on inbound emails. Instructions on how to do that in a followup post.

Reducing the clutter

Phew! We're nearly in email nirvana. But my screen is still full of junk that is redundant, wasting space, and distracting me. First I don't want any headers in my preview pane (right click in the grey background of the reading pane and un-tick "header information"). Then I want only one row of toolbar buttons (remove anything you don't want). I also reduced the number of list columns to a minimum (and added the categories column of course).

I also want to (usually) hide the navigation pane on the left - since I no longer need to constantly switch folders. But sometimes I want to switch between sent mail and the inbox (where all my email is - tagged or not) and also the calendar. So I made a toolbar with 6 buttons. Here are the toolbar command category/commands i have:

go/Inbox (assigned a custom icon) : Go/Sent Items (shortened name) : Go/Calendar : View/Bottom : View/Off

My Outlook InboxSo my total toolbar looks like:

TODO: make this post more intelligable and add more screenshots!

06:04 AM, 27 Oct 2006 by Mark Aufflick Permalink | Comments (4)

War on Folate

Vegemite puts a rose to every cheekIt seems that the war on moisture has now been upgraded to a war on everything your body needs.

Australian icon Vegemite is now being searched for by US customs authorities who could be doing more useful things, like targeting dead terrorists.

Now I can understand the US authorities not wanting Vegemite to enter their shores, because it tastes absolutely foul. But that's not their complaint.

No, their complaint is that it's good for you.

[Vegemite] contains folate, which under a technicality, America allows to be added only to breads and cereals.

That's right. That water soluble vitamin B that the US Government's National Institute of Health says you should get 500ug per day of and that helps prevent birth defects and may help prevent cancer and heart disease. It's so good for you that the FDA even requires that Folate be added to bread and other cerials.

10:27 PM, 23 Oct 2006 by Mark Aufflick Permalink | Comments (0)

Oracle. So awesome and yet so lame.

So I've spent a number of hours now, installing and setting up Oracle 10g on my Powerbook. First of all, props to Oracle for making a Mac version at all. I'm sure Steve had a beer with Larry one day and that's how it happened. Second, I think Oracle is an awesome database in many ways, although horses for courses applies : many situations suit Postgres more, and I may even be persuaded to believe that Sybase IQ has it's place (not to be confused with Sybase ASE which has no place on the planet whatsoever).

Ok, with that disclaimer out of the way, why is it so darn hard to get going. First of all it requires a relinking step, with a particular gcc, if you want to use it on OSX 10.4 (see these excellent tips). Second of all, you need to set up a bazillion and one users and environment variables before you even think about running the (ugly) Java gui installer (see these pretty good instructions).

So I have it kindof working, but can never quite login via sqlplus the way I imagine i should. All sorts of incantations result in the following cryptic message:

ORA-12162: TNS:net service name is incorrectly specified

I'm pretty sure the tnsnames.ora file is all sorted, so after the 20th try, I search the web. Thankfully Burleson Consulting has this excellent tip:

The error message ORA-12162 "TNS:net service name is incorrectly specified", is very misleading.

It suggests that there is a problem with the tnsnames.ora file contents, but in reality the message [snip] results from improperly setting your ORACLE_SID value.

So there it is. Tripped up by yet another environment variable. What is it with these enterprise software people and their beloved environment variables?!

07:41 PM, 17 Oct 2006 by Mark Aufflick Permalink | Comments (0)

Hiring Programmers who won't make you say WTF!

The HiddenNetwork is a new IT job referral site brought to you by the people behind The Daily WTF. The Daily WTF is a web site by developers, for developers, where we go to complain and commiserate about bad code and poor development. You would hope that people reading that site have learnt how not to write WTF code themselves.

Thus, the theory is that people who apply for jobs from this network will be somewhat pre-filtered.

Another job site. Great. Just what the world needs.

I think, actually, that what we're seeing is a move to specialisation in job referrals. Instead of bulk job sites trawl-fishing the global pool of developers, we're seeing a move to niche and network based job sites. Sites like LinkedIn are being very effective at providing candidates with pre-existing personal recommendations. Sites like have been providing domain specific candidates to employers in the know for years.

If you're in the hiring market you could do worse than try out The HiddenNetwork. During the Beta period posting is free! The site and their advertising will use geolocation to provide location sensitive jobs to candidates. And in a refreshing change from the control exerted by other job sites, candidates will contact you directly.

Disclaimer: I will recieve a referral bonus for anyone who takes out a job ad from the links above to The HiddenNetwork.

10:50 PM, 14 Oct 2006 by Mark Aufflick Permalink | Comments (0)

Life imitates Art as Montoya takes third at Talladega

I know it's old news now, but as I was reading up on this weeks F1 testing I wondered how ex-McLaran F1 driver Juan Pablo Montoya went with his NASCAR debut. I knew he had qualified on the front row of the grid, but could he show NASCAR what F1 drivers could do?

The Colombian had to pit under caution several times to have his car fixed, but he was able to remain on the lead lap, despite falling back to 31st.

The race was restarted on lap 45, and Montoya charged through the field to make his way up to 11th by lap 54.

"It's pretty nice. In F1 you go to the back and you stay in the back," Montoya added. "You can be two seconds a lap quicker than any other car, and you're still not going to pass. I think I passed probably 40 cars today easily. It was outrageous!" (


In the end he finished third - very respectable for nearly his first time in a NASCAR car.

02:08 AM, 14 Oct 2006 by Mark Aufflick Permalink | Comments (0)

Good test coverage (by curling your right bicep)

I recently listened to a Perlcastinterview with Andy Hunt (of Agile fame).

Most of his comments could almost have been direct quotes from his (excellent) new book Practices of an Agile Developer but one answer about testing really caught my ears. In response to a question about how to know that your writing the right sort of tests in your test driven development, Andy gave the following mnemonic:


Right - are the results right
B - Boundary conditions
I - Inverse relationships
C - Cross check results (with other sources/methods)
E - Error conditions
P - Performance

I love simple mental tools like that. I'll certainly be mentally checking my right bicep when I write tests from now on. Previously I'd only been checking out my right bicep in the shower after the gym...

10:48 PM, 11 Oct 2006 by Mark Aufflick Permalink | Comments (0)

Simple /var/log/secure analysis

I could hear my development server hard drive ticking over more than normal, so I thought I'd check it out. It turned out that I had someone running a script against my ssh server looking for standard usernames. Not likely. My remote root access is turned off (of course) and theres very few usernames (all custom) with password login enabled.

I turned on the intrusion filter on my firewall, so we'll see how that goes. Hopefully it won't impede real connections to my cvs etc.

For completeness I thought I'd add the ip address to the blacklist in my firewall. I saw a sea of attempted connections in my /var/log/secure log and came up with this very shell simple script to sift hack attempts out from bad typing days by either myself or my clients. In case it's useful for anyone I thought I'd blog it:

for ip in `awk '/Illegal user/ {print $10}' /var/log/secure |sort -u`; do echo "$ip : "`grep -c $ip /var/log/secure`; done

It makes some pretty wild assumptions but it did the trick for me. It gives output like: : 16 : 762 : 887 : 29
???.133.81.251 : 4
??.143.0.183 : 4 : 329
??.205.204.190 : 5
I whacked it in a root cron file so I'll get a report each day. (Note I anonymized the low count ip's because I assume that it's me or a client just typing our usernames poorly.)

12:36 PM, 09 Oct 2006 by Mark Aufflick Permalink | Comments (4)

Magic Mug Cake

Magic mug cakeI don't know about you, but I love shopping in large supermarkets. The variety of wacky and interesting junk you can find there seems limitless. Many are worth browsing but occasionally one jumps aout and grabs you and you *have* to buy it.

Magic Mug CakeSo it was with the Magic Mug Cake! Pour the sachet into a mug, mix in an egg, microwave for 90 seconds, add your favourite topping for more fun - it just doesn't get much better than that! I was intrigued by this product. Only slightly less than the Folgers self-heating instant coffee that I bought from a supermarket in San Francisco last year. How does such a large amount of cake come from such a small sachet and only an egg? They're right - it must be magic!

Now the instructions are for a 660w microwave oven, so I figured that my mighty 1100w microwave should be dialed down to 60% and run for the same time.

Magic Mug Cake in microwaveWith 10 seconds to go it was so far so good. As you can see on the left the cake was just peeking over the top of the mug - *magic*! As soon as the heat stopped, however, it sank right back down. It looked way to moist so I figured it needed some more time. After another 30 seconds it looked cooked - but not quite what the picture showed:End Result

Thinking about the process, I think you must need the microwave power and time just right. I imagine that the process involves the cake bubbling up to it's maximum volume and then being 'snap-cooked' into that size/shape. Because I didn't let it run quite long/hot enough the first time the opportunity was lost.

Kath asked me how it tasted. "Just like cake" I said. "Yes, just like cake" she dubiously replied...

05:29 AM, 08 Oct 2006 by Mark Aufflick Permalink | Comments (0)

The creative programmer

"Why Writing is Harder than Programming" is Paul Graham's latest post. Pauls premise is that a programming project can have a definable measure of success and that reaching that success is ultimately achievable (given enough talent and time). With writing, however, "You don't have the same total control over the medium".

TitlePaul Graham is one of my favourite IT writers. Not that he's the best or the most insightful (although he is floating near the top) but because he combines programming with other creative pursuits. That's the way I think it should be. He also invests in the education of others and the support of their ideas.

Probably my favourite programmer (and also a good friend) Lars Pind is similar. He likes to write. He plays at least one musical instrument on a regular basis. He is aprolificphotographer. He's never afraid to debate his approach to programming or life. He programs fast and furious, but with a degree of elegance and insight that, I believe, couldn't come without all of the above.

It's qualities like these that I always look for when interviewing potential employees (or employers), but rarely find.

What do you think? Can you be a good programmer without being creative? Can someone be truly creative and maintain/nurture that creativity without a variety of creative outputs?

Another question to a certain section of the developer audience: How do you manage the peculiar balance of creativity; logic; and a perfectionistic need for symmetry and alignment that comes with programming excellence?

PS: This wasn't supposed to be a Paul Graham/Lars Pind love fest, but so be it!

Footnote: On a totally unrelated use of creativity, a study by Indiana Universtiy shows that (on some selected topics), The Daily Show is as substantive as regular news broadcasts!

09:56 PM, 05 Oct 2006 by Mark Aufflick Permalink | Comments (2)

Cool keyboard hardware

Everyone knows how much I love my keyboard hardware. Every day I use both a Kinesis Ergo keyboard (for my ergonomic satisfaction) and a Happy Hacking keyboard.

But there are two new must haves. Firstly, I have been looking for a good seperated keyboard. As much as I love the concave layout of my Kinesis, I really wish I could separate the two halves further. I also hate having to rehome after using the mouse. I used to love the nipple input on IBM Thinkpads for that very reason.

Last century scientists split the atom. This
century Ari Zagnoev split the keyboard.

-- Australian PC World

But some boffins here in Australia had much better idea, the result of which you can see at the lower left.

The other accessory is this so cute it hurts USB powered hamster wheel. It turns at a rate relative to your current typing rate!


Unfortunately of the two, the hamster wheel is the one already in production...

"Ari Zagnoev" <> wrote:

>Hi Mark
>Thank you for your interest.
>Unfortunately at the moment we only have a few hand made prototypes.

08:41 PM, 05 Oct 2006 by Mark Aufflick Permalink | Comments (0) redesign communicates less with more

I like to browse from time to time to see what people are up to, the state of the hiring market etc. I have always liked their design, and the occasional tweaks are usually good. Their latest attempt to redesign the recommendations UI, however, is confusing and less effective in two ways:

  1. When reading someone's profile, the recommendations are not clearly distinct from the user generated profile. I didn't notice them when I skimmed someone's profile. I also think that placing them at the bottom (rather than inline) reduces the impact that they make.

  2. Menu in the headline box of someone's profile, I see: "profile", which means the profile telling me about the person; "connections" which means the connections that that person has (again - information about the person); and "recommendations" which I assumed meant recommendations for that person (ie. more information about that person). Instead it is recommendations that that person has made about others - which reverses the meaning of the other two tabs. Not only that, but when I did click it, the design doesn't make it clear that it is the other until I am part way into reading it.
Recommendations are one reason why linkedin profiles are more trustworthy than individual websites - should be careful not to lose that differentiator.

The new design is subtle and clean, and more information is available, but it actually makes the information less self evident. In HCI terms, the design lacks what is known as affordance where the function of an object (in this case a link) is intuitively known by it's characteristics. In the case of (1) it's the visual characteristics (traditional affordance). In the case of (2) it's what I would call the "affordance of proximity" (which may or may not be a phrase already in use - I'm sure it is).

In my notes for this blog I jotted down "quote Edward Tufte, but I can't find anything appropriate, and I've gone a bit off Jakob Nielsen lately.

04:19 AM, 05 Oct 2006 by Mark Aufflick Permalink | Comments (0)

Some new photos

It's going to be ages until I get time to scan in the Fuji slide film I was talking about. In the mean time I have shot another roll and plan to shoot more this weekend, so I thought I may as well upload the Ektachrome ones I have scanned already. I haven't done any photoshopping (other than a few dust removals) so please excuse any slightly off colour balancing.

07:49 AM, 27 Sep 2006 by Mark Aufflick Permalink | Comments (0)

Conference Envy

I'd give my right leg to attend this year's OOPSLA and Dynamic Languages Symposium. (Can't give my right arm - I need that for typing).

Attending Designfest or hearing Avi Bryant give a talk titled "Data Refactoring for Amateurs" would be worth the air fares alone.

02:58 AM, 25 Sep 2006 by Mark Aufflick Permalink | Comments (0)

Richard Hammond (Top Gear) in critical condition

TOP Gear presenter Richard Hammond has been injured in an accident while filming an edition of the programme, the BBC said.

Hammond, who often drives high-performance cars as part of presenting the show, has been taken to hospital following the incident at an airfield near York.


He said: "At 5.45pm (on Wednesday) evening we received a report via the fire service of a male person trapped in what was described as an overturned jet car which had been driven on the airfield.

It sounds very serious. Various reports are saying that Hammond is in a "critical condition" and in a special "neurological unit".

Top Gear presenter hurt |

Update: He was doing 280 mph at the time aiming to set a new UK land speed record in a jet powered Vampire. Sky News: Top Gear Man In Crash.

Apparently the Vampire is powered by a Rolls Royce Orpheus jet engine and accellerates from 0 to 272 mph in 6 seconds. One, two, three, four, five, six. There - you're now travelling 272 mph.

Further Updates:

  • TV host 'improving' after crash | BBC online,
  • Hammond in a serious but stable condition | BBC Top Gear,
  • Jeremy makes statement,
  • the BBC ask for messages of support to be sent via email.
  • Doctors at Leeds General Infirmary said they are 'reasonably optimistic' that Richard Hammond will make a good recovery despite having suffered a significant brain injury

08:29 PM, 20 Sep 2006 by Mark Aufflick Permalink | Comments (0)

Widgets are the new screensavers

Remember when you had that old Mac Plus, or maybe an LC or some such, and you used to go scouring your friends, swap meets, bulletin boards etc, for that new cool screen saver? Somehow you would rotate back to Flying Toasters every now and then, but I remember a lot of cool screen savers.

They didn't really save your screen, it was more like computer popcorn.

I think widgets are a lot like that. A very few are useful (like the survey widget I used on a recent post from MajikWidget) but most are popcorn.

Of course there's nothing wrong with popcorn. I like popcorn. And I like Asteroid. Happily they have come together in this Asteroid widget from Widgetbox!

Update: Well just like the screensavers of yore, widgets han hijack your computer! Or your blog at least. It seems that the site that submitted the asteroids widget ( replaced the Asteroid widget contents with advertising some time after I wrote this post.

As a replacement, this widget will get a new game every time releases one.

08:35 PM, 12 Sep 2006 by Mark Aufflick Permalink | Comments (0)

Nikon CoolScan 5000 scanned photos on their way

I shot a few rolls of film last weekend. Both were E6 (slide) film - one Kodak Ektachrome 100 the other Fuji Velvia 100. The comparison between the films is quite striking, but I'll get into that later. Processing was expertly handled by Vision Graphics who are right behind my apartment in St Leonards. Why have I been going all the way to the Lab?!

It's also been an experiment for me since I'm doing my own scanning with a (borrowed) Nikon Super CoolScan 5000 ED. I haven't finished with the colour calibration yet but here's a sampler of what's going to be uploaded to my 23hq photos later this week.

20060911 Preview

The camera is a Canon EOS 30 and the lens is a Canon Ultrasonic 24-80. The locations above include Dee Why, Woolloomooloo, San Francisco and Singapore (ok, so there were a few shots already on the roll before last weekend ;)

12:03 AM, 11 Sep 2006 by Mark Aufflick Permalink | Comments (0)

Michael Schumacher Wins! Retires!!

Ferrari LogoWhat a night in Formula 1. A crazy stewards decision, Alonso fighting back only to suffer a blown engine, Kubica getting his first podium in his third F1 race, Schumacher winning and thus closing the drivers title fight to two points...

All par for the course in the exciting world that is F1.

But nothing compares to Michael retiring. Love him or hate him - he's a champion and he's done more for the sport than most. I can't believe he's retiring. He didn't sound like he wanted to retire!

Mark my words though, he will win the chanpionship this year. In the drivers conference he referred to his upcoming "3 wins", and Ferrari management are already calling him an "8 time world champion"!

Can't wait to see Kimi in a Ferrari too!

Update: Sorry for the horrible typo of Schumacher in the heading. I was correct in the body - that's what happens at 2am in the morning people.

12:03 PM, 10 Sep 2006 by Mark Aufflick Permalink | Comments (0)

OpenDarwin shutting down?!

Hexley - the Darwin OS MascotWell I can see that this is old news, but the demise of OpenDarwin is very sad. I must say I didn't realise what the original goals of the OpenDarwin project were, but it will be missed as a ports management community. I found OpenDarwin ports far better maintained and managed than fink and now it looks like I'll have to move back. Very sad.

Update: I can breathe easy - it seems that darwinports is continuing and will now be hosted by the (sort of) new Mac OS Forge. Well that's a relief.

11:04 AM, 08 Sep 2006 by Mark Aufflick Permalink | Comments (0)

Issue with comments fixed

Thanks to an email from a would be commenter I discovered that some html quoting code I recently added to this site's code was over-quoting the url used for the ajaxian followup comment code.

It's now all fixed so please feel free to resume your normal rate of one comment every month or so :)

06:50 AM, 08 Sep 2006 by Mark Aufflick Permalink | Comments (0)

Software development - finally into the 21st century?

I've been thinking lately about the changes I see in the programming landscape. Partly it's a personal journey thing, but there are definitely some major shifts going on.


Firstly there's the growing acceptance of so called scripting languages like Ruby and Perl as legitimate for application development. There is certainly a shift from pre-compiled to just-in-time compiled and also from static (aka. strong) to dynamic (aka. weak) typing (excellently discussed by Steve Yegge).

Secondly there is a move away from the previously accepted wisdom that it's better to pick a language and stick to it. Domain specific languages have been around for a long time (think SQL, awk, Excel macros) but are now being accepted in less traditional areas. Although some people are still confused about how to decide what language/environment to use, many are starting to see the wisdom in choosing a language that allows for the most natural description of the real world problem.

Vista Smalltalk
changes everything...


I have been enamoured with Smalltalk for some time. I have yet to use it in a commercial project for many reasons but one is the difficulty of deploying it to what users might call a "normal environment" (eg. Apache/Linux for web apps, Windows for gui apps).

The lack of integration with "modern" gui operating systems is particularly frustrating because when it comes to rapid gui app development, nothing comes close to Smalltalk. Not even Cocoa. It' not just the language or the frameworks, it's the entire environment. And that is the problem, because it's not immediately obvious how you can mess with the smalltalk os environment and not lose some of the power.

Vista SmalltalkVista Smalltalk changes everything. I've been following this guys blog for some time, but I think this is the first screenshot. Just look at those Vista native windows. A corporate PC user won't realise that he or she is using an application that finally realises the power of 1970s computing, but the developer will. And for hosted applications - just see how identical the in-browser application is - with no web specific application code.

I'm no Microsoft fan, but I will give them some advice. Give this guy money now. Lot's of it. If the libraries were shipped with Vista, this would beat Cocoa hand over fist (excluding multimedia, OpenGl... ok in a whole bunch of non-corporate areas).

Sheesh - I might even need to own my first ever Windows machine. At least I can dual boot a MacBook ;)

Update: As pointed out by a reader in the comments, Dolphin Smalltalk achieves the same sort of platform integration for existing windows versions. I must confess to being ignorant about Dolphin Smalltalk since I had previously avoided it because I traditionally avoid windows. I promise to investigate it and report back! Certainly products such as Cincom Smalltalk use their own widgets rather than native OS ones which is another (perceived at least) issue, but I'll hold judgement on Dolphin until I have checked it out.

Update 2: I've been taken to task for my admittedly "hand waving" statement that Smalltalk has been traditionally difficult to delploy. Without stating it, I was really combining technical issues with human issues. Human issues being your client or manager saying something like "that deployment procedure looks a bit wierd - and the widgets are non-native. You'll never be allowed to use that".

What I am excited about (and unashamedly hoping to promote) is that now is a time when we have the chance to promote uncommon thinking when it comes to software development. This is why I specifically linked the changes in attitude to scripting languages with this new Smalltalk framework.

I apologise that some of my reasoning was not clearly spelt (or thought) out and that some people may have taken away the thought that there has never been a Smalltalk implementation useful for traditional application deployment.

Thanks to the commenters in the comments and via email.

03:29 AM, 07 Sep 2006 by Mark Aufflick Permalink | Comments (3)

Is RSS republishing stealing?

Pirate Flag

I blogged a while back about RSS republishing vs. plagiarism.

I asked the question about whether RSS republishing was plagiarism. I gave an example of a site that scrapes RSS feeds (including mine) and republishes the content on a different site where they hope to get clicks on their google ads from the traffic the content generates. It was a fairly benign discussion and I wasn't too annoyed. I am, however, going to build on it now so you might want to read it first for background (make sure you come back for the survey below though. You know you just can't help yourself with those online survey widget thing-a-me-bobs ;).

Today I found an altogether nastier version and I thought I would try to codify a set of tests for determining if an instance of RSS republishing is acceptable or not.

  1. Does the copier pretend that the content is their own original content?

    eg. in the first copy I found, my site was sort-of clearly cited as the source and linked. in the case of, no mention of my site is made. In fact the entry clearly says "posted by Vintage Computer Manuals"

  2. Is the primary or secondary aim of the copier to boost traffic to your site?

    eg. is clearly trying to get eyeballs for itself by republishing my rss, but ultimately the tool is designed to help people find my content. clearly adds no value and is solely using republished RSS in the hope that people will click their ad's

  3. Is the copier using your content in a way that would bring disrepute to you or your site

    People I know have had their content used in "adult themed" sites in order to gain search traffic. Someone who doesn't know how all this works (ie. most Internet users) are going to associate those people/brands with the content presented alongside

  4. Is the content copied presented unmodified and in context?

    eg. copying and rewriting someone else's blog to make it sound like yours is just plain bad - as well as sad

Having decided an instance is unacceptable, it's unclear what I should do about it. Certainly I'm considering writing a short set of terms under which I will license my RSS feed. I don't think creative commons will work because some aggregators who I would like to republish my feed are effectively using it for their own commercial gain.

One practise I will try and adopt from now on is to include a link to my own site (an old related post, etc.) in most blog entries. The only reason I became aware of the vintage computer example above was because it appeared in my referrer stats by virtue of having links to some old posts of mine (with fully qualified links). At least a reader might eventually find my site and realise that it is the source.

What do you think? Is the republishing of RSS ever justified? Is any publiscity good publicity? Is the RIAA right and shoudl all content reproduction be controlled by encryption and lawyers?

PS: Yes I am familiar with the term splogging (spam blogging), I just didn't want a buzzword to get in the way of the discussion.

Update: Read about one man's success and a (hopefully) reformed splogger on The head lemur

09:06 AM, 04 Sep 2006 by Mark Aufflick Permalink | Comments (1)

And I thought _I_ was taking vintage computing a bit far

Vintage Computing on Cassette

[Editors Note: This blog entry is also out of the archive of never-quite-published blogs of yesteryear. With DB of Tram Town donating some of his historical Mac hardware to an upcoming digital history exhibit at the Melbourne Museum, this entry I penned in January 2005 should see the light of day.]

I couldn't quite get my Apple //e card reading files off an AppleTalk server and couldn't find any reference material for the Apple //e Workstation card (which implemented localtalk and AFP network booting, printing etc).

But I did find this digest entry with a network that puts mine to shame:

I am sitting in my shop. Upstairs in the Library is a Mac 8500 that sports among other things a Sonnet Cressendo G3 450Mhz CPU upgrade and OS X running on a Conner 4 gig SCSI I recovered from a PeeCee, reformatted and installed in a 40 meg external case. That Mac is on my Network from Heck connected by way of a router to a LONG CAT5 wire and a hub to the basement shop. Down here I have a Quadra 950 running System 7.5.3 Appleshare 3.0.3 and Localtalk Bridge.

Also in the shop are 2 IIe(s) with Workstation cards a IIgs IIe upgrade ROM 1, and a ROM 3. Both IIe(s) are accelerated but the 2 IIgs(s) are running at standard speed. all IIs are hooked to a Localtalk network that also includes a IWII on a localtalk card, and a IWLQ also localtalk. Also in the shop are a Performa 6200CD (ethernet slot card), Performa 578 on an Assante EN/SC SCSI<>Ethernet box, a 8100 on standard 10BT, a 386 with a Appletalk ISA card, a Pentium II Pee Cee and a Laserwriter IIg hooked in to both the Ethernet AND the localtalk network (I found this far easier to print to via the IIs in that you don't need the LT Bridge that way)

Got all that?

At least Bart doesn't have any Un*x boxes, affording me one avenue of feeling superior ;)

PS: I made the cassette image with the awesome cassette virtual cassette generator

Update: It's worse than I thought. Looking back at the time I drafted this, I wrote a patch for an Apple ][ emulator, bought a Kinesis keyboard, read the Be developers guide for fun, upgraded a Color Classic. People might think I'm a nerd or something...

06:53 AM, 03 Sep 2006 by Mark Aufflick Permalink | Comments (0)

Good Sense vs. Hyperbole

[Editors note:I drafted this blog entry last December but never published it. The extra freedoms we recently re-gained (ie. tweezers and nail clippers) have been more than obliterated by the new war on moisture.]

Looks like I might be able to take tweezers on board my flight on Sunday after all as US Transportation Security Administration chief Edmund Hawley is expected to announce a relaxation of the post 9/11 ban on airline passengers carrying sharp objects.

Such common sense is generally applauded by the public and attacked (ie. made into a story) by the media, as witnessed in the frenzied response to Amanda Vanstones comments last month.

This time, however, the media seems to be taking a reasonable stance and it has fallen to the US Association of Flight Attendants to provide the silly response:

"When weapons are allowed back on board an aircraft, the pilots will be able to land the plane safely, but the aisles will be running with blood," said Corey Caldwell, a spokeswoman for the Association of Flight Attendants.

It just doesn't get much more hyperbolic than that!

02:28 AM, 03 Sep 2006 by Mark Aufflick Permalink | Comments (0)

Recent Links / feed

I've just noticed that my "Recent Links" feed has stopped updating. I've been posting quite a few interesting links recently (more than I've been blogging) so I'll have to fix it.

In the mean time you can go straight to - or if you subscribe to my rss feed (rather than reading my website directly) you're still getting the links fine.

Update: It seems that after running non-stop for months, this instance of AOLServer decided to stop running it's scheduled procs. I guess I should upgrade since the version running this site is over 6 years old!

07:40 AM, 20 Aug 2006 by Mark Aufflick Permalink | Comments (0)

WWDC keynote notes

As always, I enjoyed watching the recent WWDC keynote by Steve Jobs et. al.

The new workstations and servers are awesome, and cheaper than Dell. Also on the hardware side, Apple now commands 12% of the "retail" laptop market. I assume that therefore ignores direct corporate sales, but it's still a huge increase.

Now onto software.

[Steve Jobs shows slide of 5 major OSX releases] ... so this is what we've been doing for the last five years ... what has our competitor been doing for the past five years ...


Bertrand Serlet, Apple's SVP of Software Engineering, went on to compare OSX with Vista and pointing out where Vista appears to be a copy of OSX, with quotes like

... they even tried to copy the colour scheme ... but didn't quite get it right

There were also a huge number of serious OSX announcements, including full 64 bit framework support right up into the Cocoa and Carbon layers (previously 64 bit support was only available if you coded directly on the Unix layer).

Also, at last, a built in backup feature called Time Machine with the ability to do single file restores as well as a full restore of your hard drive (OS & Apps, not just your files) for any point in time, not just the most recent version. It can integrate directly with supported Apps at the data level, not just the file level. Oh and it has a UI that trekkies will die for!

A lesson for Microsoft (and everyone else) - Scott Forstall (VP Platform Experience) had a freeze during his demo. Ok, so it's beta software. But instead of being embarrasing, he simply flicked a switch, and the backup computer was instantly in use. Total embarrasment around 4 seconds.

Steve subbed in from Scott to introduce Spaces aka. virtual desktops. Very cool. Of course I have been using virtual desktops on MacOS since even before OSX, but it's awesome to have it built into the OS. A great feature I don't have right now is that when you switch to an app the OS will switch to the most appropriate desktop. Seeya later Exposé.

Major upgrades, while overdue, are welcome (thanks Bruce ;). While some people will hate the slick stationary feature the average punter will love it. I will love the notes and todo features since I seem to use mail in the same way as Steve. Beating Outlook at it's own game, multiple todo items can come from one email message or in fact from any application, and will appear in and iCal via a system wide "todo server".
Other highlights for me

  • JavaScript Debugger
  • Full Multi-user iCal
  • Spotlight searching for network file stores
  • Core Animation (sounds like an advanced Lingo but for Cocoa)
  • really high quality text to speech (even better than the new Vista text to speech)
  • WebClip (lets regular users make live auto-updating widgets from web page clippings)
  • Too bad I wasn't actually there to get the developer preview.

09:45 PM, 07 Aug 2006 by Mark Aufflick Permalink | Comments (0)

Go Russ!!

My good mate Russell Davies has just jumped into the top 10 chip holders one day into the world series poker champs in Las Vegas.

You can watch his performance on his blog Tales from the Felt and also on Poker Stars Blog

11:53 PM, 30 Jul 2006 by Mark Aufflick Permalink | Comments (0)

More cool audio gear

Here's some more random stuff in line with my last cool audio blog/links like the retro analog synth clips and the totally hummable Stevie Wonder on Sesame Street clips:

  • The coolest 25 key midi controllerever - the Line6 Toneport. I mean it has real analog VU meters - how cool is that!
  • Korg have come good with an affordable and very feature-full 49 key midi controller - the imaginatively named Korg K49. It even comes with bundled Korg synth software emulation that can run standalone or as a plugin (Mac and PC).
  • You'll note that I didn't count Dwight Yoakam's Chicken Lickin's Chicken Rings as a music related posting ;)

03:05 AM, 17 Jul 2006 by Mark Aufflick Permalink | Comments (0)

Microsoft Fined 280.5 Million Euro by EU Commission: "No Company is Above the Law"

As reported on GrokLaw, the EU antitrust investigations have followed up their earlier decision to fine with the amount. Ouch. As much as I dream of the day that Microsoft competes fairly (and thus will be forced to actually innovate), just thinking about being fined that amount makes me wince. Thank goodness for limited liability companies!

But seriously, this is a very good thing. Microsoft can no longer be under any illusion that they can get away with behaving illegally and unfairly forever. Being the largest employer in California and having the ear of US Congressmen doesn't help you in the rest of the world. And Microsoft needs the rest of the world - even if just to protect their dominance of the US market against foreign competitors.

09:56 PM, 12 Jul 2006 by Mark Aufflick Permalink | Comments (2)

Dwight Yoakam's Chicken Lickin's Chicken Rings

I'm surprised TramTown haven't linked to Dwight Yoakam's Chicken Lickin's Chicken Rings , especially given the once removed relationship that Tram Town's DB and I share with Dwight Yoakam's dog.

09:57 PM, 11 Jul 2006 by Mark Aufflick Permalink | Comments (0)

Managing your brand requires calm pragmatism

Anyone in Australia will be done to death with the John Howard v. Peter Costello saga. I like both men, and would vote for either. In fact I have a particular fondness for Costello (as wierd as that might seem) and would love to see him as the PM one day. Unfortunately for him, I think that Jeff Kennet's erudite words are very accurate:

The former Victorian premier says Peter Costello would jeopardise the federal Liberal Party's re-election chances if he tried to force a leadership showdown.

Mr Kennett said Mr Costello did not have the support of the public and was not "owed" the prime ministership.

"What I think this does is damage Peter's brand. Peter will one day potentially be the successor," Mr Kennett said. (SMH)

Of course Kennett knows a thing or two about being ousted from leadership, and then coming back. He also knows a thing or two about shooting yourself in both feet. Costello could do worse than to look to Jeff for advice, rather than the more obvious parallel of the Hawke/Keating dustup.

03:22 AM, 11 Jul 2006 by Mark Aufflick Permalink | Comments (0)

I didn't know you could do that on an Etch-A-Sketch!

George Vlosich III has been creating serious art on his Etch-A-Sketch&tm; since 1989.

If you ever need to find someone with supreme patience - George III is your man!

11:47 PM, 09 Jul 2006 by Mark Aufflick Permalink | Comments (0)

The beginning of the end for F1 supremacy?

Or is it the end of the end. I have had many long and rambling discussions with friends about F1's move to single tyre races (then back) or to v8 engines etc., with the theme that I love F1 because it is the most technically innovative form of motor racing. I know I'm not alone. With the v8 it looked like F1 engines would start losing their power supremacy to CART or Nascar. In fact, the result seems to be increased cornering speed - which is good for racing.

The upcoming changes are the single tyre manufacturer (in some ways a pity, but not that big a deal really) and the single reference ECU provided for all teams.

The second is more of a concern to me. Over the past few years, Renault's launch control system really made for interesting races - without it, their previously weak engine power would have meant they were not competitive.

If we are going to have a single ECU supply, then at least one thing we should get from it is higher reliability. The design should change less, which means that a bad ECU shouldn't end someone's race. And since the ECU will be supplied for the team, not by them, imagine how angry they would be if the externally provided ECU ended their race.

That is why it is so incredibly scary that is reporting that the chosen ECU supplier is Microsoft. Now hopefully that is either a joke or a misunderstanding on the behalf of Microsoft knows nothing about ECU design and little about embedded real time systems (some would say they know little about software design at all...). In search of official information, I did a google search for Microsoft. The only result I got was one page showing:

Are you trying to go a level in the directory without having the base directory present?
Invalid use of Null
Microsoft VBScript runtime error

I'd hate to get that error while heading towards a corner at over 300kph - it's not even gramatically correct!

09:35 PM, 06 Jul 2006 by Mark Aufflick Permalink | Comments (0)

At last a screen to replace my 22" SGI Trinitron

The Dell 24" LCD looks like a real winner. It's 1920 x 1200 resolution is enough pixels for me, and it's the same as the Apple 23" cinema display, just physically bigger (less squinting) and $900 AUD cheaper! It's slightly slower (16ms vs 14ms) but almost twice as bright and it has even higher contrast than Apple's flagship 30" display. Viewing andle is the same. Oh, did I mention that the Dell is $900 cheaper and includes S/Video and composite inputs?!

It also has a black bezel which I think is a must. I really can't stand screens with a light bezel (like white or beige), and the silver bezels of Apple's cinema displays would really send me batty.

08:32 PM, 03 Jul 2006 by Mark Aufflick Permalink | Comments (0)

Australian TV cover of international sport makes me angry

So the TV guide said that coverage of today's US F1 GP started at 3:45am. North American F1 always bites for the Australian timezone, but I dutifully set my alarm and get up. Often the F1 coverage starts up to 20 minutes later than scheduled, but F1 viewers here are used to that sort of abuse.

So here I am, 3:51am, and there is only 38/73 laps left.

11 cars are off the track already - and I missed it all.

Words cannot describe my frustration.

And why is the Wimbledon coverage delayed by so many hours?

Is SBS the only channel who understands the importance of sports that are not Rugby or AFL?


01:51 PM, 02 Jul 2006 by Mark Aufflick Permalink | Comments (1)

Stevie Wonder on Sesame Street

Courtesy of BoingBoing I came across this totally mad set performed by Stevie Wonder on Sesame Street - two of my favourite things in one!

First, a funky take on the sesame street theme (link):

Second, the sweetest "Superstition" jam ever (link):

So that makes me think about copyright and fair use (remembering, of course, that there is no such concept of "fair use" here in Australia). Even the world's richest man has admitted to viewing copyrighted works illegally uploaded to youtube (Bill Gates' piracy confession). In this case, there is no obvious financial damage caused - there's nowhere I can go and buy a DVD of Stevie Wonder on Sesame Street. In fact without this person uploading these videos I would probably go to my grave never having enjoyed this. Now I will probably get to enjoy this articular Wonder magic a number of times, which I am honestly sure would make Stevie Wonder happy. In addition, after browsing a few more "lost" Stevie Wonder videos, I'm sure I'll end up buying some more tracks on iTunes that I don't yet have.

Of course just because the outcome is good for the copyright holders doesn't make the original act any less illegal, but it really does make the position of the medial labels and the lawmakers look quite foolish and untenable in the long term.

09:43 PM, 01 Jul 2006 by Mark Aufflick Permalink | Comments (0)

Link for readers of RSS feed

It seems that FeedBurner goobles up embedded youtube videos. Here is the footage of the Italian football training camp:

Update: As pointed out by the comment below from the friendly FeedBurner staffer, the embedded youtube vide appears fine in the feedburner web rendering of my rss feed. If I view that post in Google Reader, however, the embedded youtube video doesn't appear. Strangely, I have seen other feeds in my Google Reader that successfully embed youtube videos.

I will have to investigate further.

08:58 PM, 28 Jun 2006 by Mark Aufflick Permalink | Comments (1)

Worst penalty ... ever

I was down in Leichardt (Sydney Italian quarter) for the world cup last night. I am so disappointed I can't even talk about it.

Well done to the Italians though. It looks like all their training paid off:

(via WorldCupBlog)

09:08 PM, 26 Jun 2006 by Mark Aufflick Permalink | Comments (0)

IE CSS - gah

You may have noticed that I have put some nice styling on my blockquotes. Well, it won't really look that nice if you're using MS Internet Explorer. Something about the tags or the styles is pushing the bottom of the div down too far. It must be a bug, because if the block actually was being grown by some content or by styles, then the following block would be lower too - but they overlap.

I've played a bit with it, but I don't have time to drill all the way down to see if there is a way to work around this quirk.

So for now, sorry IE users. I hope it doesn't annoy you too much.

Oh, and here's a nickel - go buy yourself a real browser:

02:19 AM, 26 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Adult supervision with Guy Kawasaki

I'm having a lot of epiphanic moments lately.

The technical side of my brain has been getting a workout learning, and getting excited by, new languages and frameworks. Ruby on Rails. Smalltalk and Seaside.

Now Guy Kawasaki has whammo'd the business side of my brain with a presentation based on his book Art of the Start. You can watch a 39 minute Google video of the standup-ovation generating presentation at his blog

I know I've been pumping you all out to watch and read lots of content lately, but this is great - and it's not technical at all!

Hear Guy talk about the kind of "adult supervision" that your business needs, and how to avoid the "bozo explosion".

Guy Kawasaki somehow dropped out of my RSS reader, so thanks to Lars for mentioning the video.

02:38 AM, 23 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Memo to self : don't buy a Dell laptop

It might blow up!

08:52 PM, 21 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Simplicity is winning!

In the software development community, I am starting to feel like good is winning over evil ;)

Miguel de Icaza, lead developer for the Gnome and mono projects, seems to be considering replacing the heavy D-BUS and CORBA bonobo infrastructure with a simple http and REST protocol.

I remember when CORBA was just starting to get around and it seemed like the best thing since sliced bread. As with many things in life, time and experience teach us which things are important and which are distractions. Selecting the important concepts from CORBA and using them in a lighter framework feels like what I imagine wisdom feels like :)

11:22 PM, 20 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Jifty the Jilted framework

I just thought I'd share what really made me look into Seaside and Smalltalk.

I was reading about Jifty - an interesting new Perl based web framework. One author had this to say about the origins of Jifty:

Seaside is a somewhat heretical web framework. They generate their HTML. They don't embrace meaningful URLs. They use Smalltalk, of all things.

Of course, by making these crazy choices, they get insane amounts of power. When we were building Jifty, we stole liberally from everything that had good ideas. We dragged Rails down a dark alley and rifled through its pockets. We grabbed Catalyst's wallet.

But really, Seaside's killer features like Continuations and Halos...just stopped me in my tracks. Once we got them into our grubby little perlish hands, I realized: This is the way development is supposed to be.

Posts on other blogs confirm that I'm not the only impressed developer out there. I find it incredibly interesting though, since the approach is nearly identical to the one I took in the Optus internal framework I discussed a few entries ago. It's a real shame that I never spent the time to clean that up for public release since the employer had ok'd releasing it as open source in principle.

11:23 PM, 19 Jun 2006 by Mark Aufflick Permalink | Comments (1)

Smalltalk fun

I'm really loving working in the Smalltalk environment. The whole environment within an environment thing is bringing back fond memories of MPW (the Macintosh Programmers Workshop) :)

I love this quote from Alan Kay on the squeak web page:

"The real romance is out ahead and yet to come. The computer revolution hasn't started yet. Don't be misled by the enormous flow of money into bad defacto standards for unsophisticated buyers using poor adaptations of incomplete ideas."

- Alan Kay

07:02 PM, 19 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Web development - an epiphany

Ever since I got hooked on powerful interpreted/byte compiled languages (like Perl & Tcl), I've been using them for web development. But available templating toolkits have never provided a platform for serious development and debugging.

OpenACS was the first serious toolkit that I learnt, and is still one of the most amazing in terms of ready to bolt together functionality, but it lacks in development language expressiveness and debugging ability, and it's certainly not DRY (Don't Repeat Yourself).

So a few years ago I co-developed an in-house telco business modelling & web developement framework at Optus in Perl which enabled great reuse and relatively clean OO implementation of web based processes with cutom objects. I've been subsequently told it is not dissimilar to WebObjects.

Since then I have been working more on backend code, but I've really been enjoying becomming comfortable with Ruby and Rails. It's nowhere near as feature full as OpenACS, and it's not as expressive as the in-house framework I co-developed, but the cleanness of it's design is truly refreshing. It really does get out of your way and provide you a well balanced canvass on which to paint your web2.0 masterpiece.

But now that's all out the window. I've just seen the Seaside (which I do love to be beside ;).

First of all I started playing with Smalltalk because I just felt like it was something I needed to learn. Much like when I switched to emacs, I figured that so many smart people couldn't be wrong. Not that I was convinced it would be better, but I knew that I was missing out on some good ideas by ignoring it totally.

So smalltalk. How can I summarise it for you. It has the object-ness of Ruby, the great named calling syntax of Objective-C, garbage collection and bytecode compilation like Perl or Java, and the grammar simplicity of Tcl. They're all my favourite languages, so of course it makes sense that I should love the one language that inspired them all.

Like Ruby gave birth to Rails, the simplicity and clarity of Smalltalk has inspired the most amazing web framework I have ever seen. Seaside. With it's object and method based pageflow, components and debugging assistance, Seaside is like the perfect logical extension of that OO Perl framework I co-wrote. And the implementation of transactional sequences is simply brilliant.

Am I too Utopian? I probably am - I havent written a line of Seaside code yet, so I don't know it's frustrations. I'm sure that it's near total reliance on CSS for layout will bite at some stage. I will definately start a project site based on Seaside (or possibly Pier - a framework superset of Seaside).

In the meantime, do yourself a favour and watch the 55 minute presentation on Seaside that Marcus Denker gave, titled:

Seaside - Agile Development with Squeak: video, slides & demo code.

Seriously, you will love it. Really.

05:30 AM, 19 Jun 2006 by Mark Aufflick Permalink | Comments (0)

And minutes later - despair

I guess that's the way with Soccer.

01:48 PM, 18 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Nil all - Go Australia!

Well it's nill all at half time in the Australia v Brasil World Cup game, and what a game! By my reckoning, Australia is even up by 2 in the shots at goal stat. I have to say that with a team to follow, that I have emotional capital in, I finally *get* soccer.

And if a computer programmer who's only competitive in sports like skiing and canoe polo (and motorsport in my dreams ;) has caught the fever, the average sports mad Aussie must have caught it hook line and sinker!!

12:51 PM, 18 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Microsoft used to make real software

I loved reading Joel Spolsky's latest blog entry My First BillG Review. Not that I like VBA, but I do like the way Bill used to personally approve all important features and the way he kept questioning until he was sure that the people involved had a handle on the technical requirements.

I also thought that it was interesting that Joel (an ex-microsofty) likened Steve Ballmer's leadership of Microsoft to John Sculley's famously bad leadership at Apple.

Now before you all die from a heart attack that I might have anything good to say about Microsoft, I can be often quoted as saying that one of the very few truly innovative products that Microsoft released was Excel (the focus of the story). It was the first ever GUI spreadsheet, released on the first mass market GUI computer (the Mac). No one else saw the power that a mouse driven UI would bring to the number crunching spreadsheet.

Very few companies make even one truly innovative move, so don't think I think that Microsoft is all bad. Just mostly ;)

I wonder what Bill is thinking now that he has announced he is winding down with Microsoft over the next two years. I wonder if he fears for the future of his company. He must know only too well what happened to Apple when Steve left (using the word "left" here in it's lesser known pro-active form ;)

02:36 AM, 16 Jun 2006 by Mark Aufflick Permalink | Comments (0)

notepad.exe considered harmful

This is totally incredible. I knew that Microsoft rarely practised defensive programming (I guess they're too busy being defensive in front of EU tribunals), but this is just so incredibly amusing!

Thanks to the tipoff from The Inquirer, here is the fun:

Under Windows (I used an up to date XP, may apply to other versions), open Notepad and create a one line document with the text "this app can break". It is presumably "specially crafted" to exploit a particular issue (apparently a weakness in some sort of encoding guessing algorithm). Eg:

Save the document and quit Notepad. Now open the document you saved by double-clicking it, and you will be rewarded with a message that possibly contains the secrets of an ancient Japanese martial art:

Just incredible. And there are nuclear warships powered by software from this vendor? I sure won't be following that ancient Japanese master who entrusted his secrets to Windows! I don't think this one can be stamped as this is by design ;)

Update: Before anyone says "but I bet they don't use notepad.exe on the battelships (heh - I bet they do), Aftermarket Pipes has found that the "limitation" is not in notepad.exe, but in a Microsoft Windows API call that is used to determine what encoding the file uses. It turns out that a lot of Unicode files don't start with the BOM (byte order mark) required by the Unicode standard. So you can do one of two things: encourage software developers to adhere to the standard and everyone wins except for a few (possibly vocal) firms that have a poorly designed piece of custom Windows software. Or MS can include a hack like this in their standard API and encourage most developers (including ones at MS it seems) to ignore the standard and create yet more backward compatibility issues for future MS developers to have to deal with (and then ship Vista even later).

Of course another option would be to have a filesystem and OS that (properly) supported metadata for each file. Unfortunately the only mainstream OS that did that well was classic MacOS. Current OSX "best" practise is to not use the resource fork.

11:25 PM, 15 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Rails on Ruby on Java on AOLserver?

I've been thinking for a while about how to have ruby web applications running under AOLserver. <warning: opinions ahead> I think it would be a neat combination: the most elegent agile object language hosted on the fastest and most flexible threaded web server. </opinion>

I got started with embedding the ruby interpreter in an aolserver module. It turned out to be quite easy, but the Ruby interpreter is not thread safe, so it's never going to work.

Then today on the train I had a brainwave. I wasn't even thinking about anything remotely related (why do great ideas always come this way?). Why not use JRuby running under nsjava.

Think about it. JRuby maps Java method calls to Ruby calls and vice versa, nsjava maps all aolserver api calls to Java calls (native and tcl procs), and allows full introspection from Java. This should mean that with the thinnest of Java shims I can have fully threaded Ruby 1.8.2 hosted by AOLserver.

"You're all talk" I hear you say, "show us the money". Yeah, well it's ten o'clock at night and I have a cold, so it's going to have to wait my friends. If someone else feels like whipping up a configuration let me know!

PS: I know that there would be no point running all of the Rails framework, since AOLserver already has advanced "routing" functionality, but certainly all of the Active* classes would be great.

08:18 AM, 15 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Excerpt of a mysql/php rant

The rant Why the light has gone out on LAMP has been doing the rounds over the past few days. It generated so much feedback that the author posted a followup giving solid technical reasons for his stance on PHP.

What I think is more interesting though, is what he has to say about MySQL - the company as well as the product:

I learned databases on MySQL and used it for several years. Then I discovered PostgreSQL and realized that in fact, I'd learned nothing of databases. For years the MySQL developers were quite vocal that things like referential integrity, transactions, subselects, etc were little more than baggage that could be done better another way. They were after speed, pure and simple. Fair enough, in some respect, since the job MySQL was originally developed for didn't require any of those things. The problem is that a whole generation of database programmers believed them, despite the fact that their applications *did* require those things. Someone in authority told them they didn't and they bought it (and still buy it). Let me clue you in: you need these things or you need to let someone else handle your database work for you.

And that, I believe, is the biggest crime. MySQL has strengths and weaknesses. We all do! But the real crime is that MySQL AB and it's proponents try to cover up the weaknesses in MySQL by telling anyone who will listen that a quarter of a century of relational theory is irrelevant and that rdbms enforced data integrity is not needed. Because MySQL is such a popular poster child of the open source movement (although it's not "super open" ... see follow up post) that beginner (and not-so beginner) developers listen to them. They are using that position of respect to paper over the weakenesses in their product and harming the quality of a future generation of open source developers. Very similar things can be said about PHP although not nearly to the same extent.

Where the author says "(and still buy it)" he is referring to David Heinemeier Hansson of ruby on rails fame. ActiveRecord (the Object-RDBMS layer in rails) is most commonly used on MySQL and David is supposed to not care for referential integrity being implemented in the database. I have no idea if that is true being only barely on the edges of rails development. If it is true, then it's very sad that a programmer who so clearly "get's it" has succumbed to the MySQL cool-aid.

01:00 AM, 09 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Diving in rails first

I've been playing with ruby on rails on and off for over a year now. I've used it for one commercial project, but mostly just playing around.

I've decided I want to get more into it now. The current trunk version of rails (or EdgeRails) is really very feature full. It's a lot different to when I started using it a year or so ago so skip edition one of the rails book and go buy the beta version of edition 2 (yes, even books come in beta now!).

As a public test bed I've started a new blog monorails. To find out more you'll have to head on over there!

09:21 AM, 08 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Phantom phone ringing

According to this O'Reilly article (yes, there are some not about Web 2.0) phantom ring tones are an increasing phenomenon. Phantom ring tones being an audio illusion in your mind where you think you hear your phone ringing.

What's interesting is that that hasn't happened to me. What *does* happen to me is phantom vibrating-ring. I couldn't count how many times in a week I think I can feel my phone is vibrating in my pocket but it's not. At first it freaked me out because I thought it was the radio bursts stimulating my nerves or muscles, but sometimes I find that my phone isn't even in that pocket. Wierd.

A phenomenon that I do think is to do with the radio emissions is predicting calls. I've been using a digital cellular phone every day since about 1995 and many times I have absent-mindedly picked my phone out of my pocket, looked at it, and a split second *after* looking at it, it begins to ring. I think I'm somehow attuned to the radio bursts that come in before the phone rings (you know the ones - you can sometimes hear them on your car radio or unsheilded pc speakers).

Does anyone else experience this?

03:37 AM, 08 Jun 2006 by Mark Aufflick Permalink | Comments (3)

Kinesis-Ergo rock!

I've bored you all to tears about my beloved Kinesis-Ergo Essential keyboard, but this week I started to stress out because my t key started stticking (just like that).

I didn't want to go prising it apart without instructions since it's under warranty (and cost me a bomb by the time I had it shipped to Australia), so I emailed their tech support for advice. Here is the amazingly helpful email I recieved the following day:


Can you please provide the serial number on the back of the keyboard?

You can try removing the individual keycap (tip: use two paper clips- bend
them in the shape of a hook or "J" and pull the keycap straight up) and
spray compressed air inside the keyswitch to remove any possible

If the problem continues, it is likely that the individual keyswitch is
damaged and may require a repair.

Rather than shipping the keyboard to us, there are two options:

1). I can send you a replacement LEFT Keywell (the entire left side "qwert",
etc.). Once you have the new keywell you can take apart the keyboard
(Phillips screwdriver), remove the old keywell and insert the new.
Step-by-step instructions included. Because you're in Australia, we will
need to split the shipping cost.

2). I can send you a couple replacement Key Switches and you can replace the
individual "t" key switch. I ONLY recommend this if you're experienced with
a soldering iron. This option will not require any shipping charge.



Kinesis Corporation
Technical Support
So far so good after I blasted the keyswitch with a can of compressed air. But if the keyswitch is faulty I am totally blown away by a company that is willing to trust it's customers. This guy doesn't know that I have a soldering station and used to build discrete circuits for fun - I could be all thumbs with a soldering iron that I use for joining plumbing pipes which would cause him more support heartache. Even given the possibility for more work for Kinesis, they are willing to be flexible to save their overseas customer some money.

Now that's good customer relations :)

08:03 PM, 06 Jun 2006 by Mark Aufflick Permalink | Comments (3)

The new Tram Town?

Melbourne (Australia) is sometimes called Tram Town because of the trams (aka light rail) that still serve as a key form of public transport (as opposed to a tourist attraction). Once derided as well out of fashion, civic planners the world over are starting to recognise just how wonderful the tram is.

So why not Sydney? Press articles about trams in Sydney have been escalating recently - the latest in today's SMH: Forget the tunnel - all hail the tram.

One issue the article brings up is that of the steep grades found in Sydney - a problem Melbourne just doesn't have. The other problem, that of quarantining streets (or even just right hand turns) is, to me, an opportunity. Imagine a Sydney criss-crossed with pedestrian malls with trams running down them. Do we really need cars and trucks driving through the center of Sydney? The cross city tunnel (like it or loathe it) removes much of the necessity for the through-city traffic.

Maybe it's because I grew up in Melbourne, but bring on the tram I say! Subsidise the cross-city tunnell toll, block off major inner city streets to regular traffic (and busses) and flood the city with trams. We may as well get rid of that stupid monorail while we're at it (yes, even great Sydney once stooped to the monorailsales pitch!).

09:28 PM, 04 Jun 2006 by Mark Aufflick Permalink | Comments (0)

Peking to Paris

I just watched the final part of a really interesting ABC doco Peking to Paris where a group of 15 "- ten drivers and co-drivers and five support crew - set off in five 100 year-old cars on a 14,000 kilometre journey. It was to be a daring recreation of the Peking to Paris Raid and a journey that took them more than a third of the way around the globe."

In 1907, French newspaper Le Matin challenged drivers to prove that the era of the automobile had arrived by entering into a race from Peking to Paris. Remember this was in 1907. You can read more about the original in the Wikipedia article Peking to Paris.

It would have been a great time to be alive! I mean, in today's era, who would take the role of the Italian Prince who, being 14 days ahead of the rest of the racers, detoured 1,500 km to St Petersburg to attend a ball (and therefore dance with chicks) and still finished the race first!

07:16 AM, 04 Jun 2006 by Mark Aufflick Permalink | Comments (0)

The Future of Theoretical Computer Science

Last week I attended a fascinating lecture by John Hopcroft, renowned theoretical computer scientist and all round genius. The title of the lecture was The Future of Theoretical Computer Science.

I'm not going to bore you all with the nine (9) pages of notes that I took, but he had a lot of incredibly interesting things to say.

His basic premise was that there is a fundamental revolution going on in the world of information, driven largely by advances in computer systems, and that those who recognise the changes early will benefit. But what do you do if you recognise the changes - how do you adapt (and therefore what should Universities be teaching their students in order to prepare them for the changes that will come).

He briefly discussed the problems that computer science has been dealing with for the past 30 years : programming languages, compilers, OSs, network protocols, algorithms, etc.

And also what he thinks will categorise the next 30 years : large network structures, large data sets, huge dimensional data sets, etc.; and then how to search and access these data sets.

Hopcroft then discussed how we need new theories to deal with these large, noisy, highly dimensional data sets with extreme outlying values.

He spoke briefly about the expressive way that a search engine of the future would need to operate, eg. Instead of searching for graph theory, we want to enter a query like construct an annotated bibliography on graph theory.

To collapse a few points that he made, he talked about both dimension reduction and dimension enlargement. In the context of searching, dimension enlargement could mean analysing your previous queries in order to qualify future queries. He gave an example of searching for shingles which for him would mean the new scientific theory, not roofing material (or worse!).

In the case of huge dimensions, that is an issue because we are now talking about data sets with billions of nodes and tens of thousands of dimensions - current (1950s) graph theory just doesn't work in that space. Instead we need techniques like spectral analysis, dimension reduction and collaborative analysis.

Then there is the issues surrounding human task augmentation - if we are going to deal with even the search results from such huge datasets, we are going to need intelligent methods to cluster documents such as by content (where we can use a simple vector summary of the document word count) or by genre (where we can't). Other solutions to this general problem include collaborative filtering eg. what Amazon use in order to detect changes in buying habits.

Phew! And Hopcroft discussed all these issues with examples, mathematical equations, etc. So, the computer science theories of the next 30 years need to be extended to cover the next 30 years.

In response to an audience question, he did concede that few people actually directly use many of the theories that they learn in University, but a theme throughout his lecture was that of adjusting our intuition. For instance, our intuition is naturally tuned to 2 and 3 dimensional problems - the next generation of computer scientists (and us, if we want to keep up) need to be able to intuitively see problems and solutions in massive dimensions and other non-intuitive spaces (although he doesn't believe that quantum computing will happen in his lifetime).

I might try and post some of his equations and examples later, but then again I may not be bothered!

01:28 AM, 04 Jun 2006 by Mark Aufflick Permalink | Comments (0)

This weekends Monaco F1 was an absolute ripper. I missed a little as I drifted in and out of consciosness (damn Australian timezone), but my favourite move of the whole race has to be this one, when Fisi unlapped himself from Coulthard.

If he can do this, why did he wait for the shame of being lapped by his teammate to pull it off?

It's a little reminiscent of some of Sato's old moves, but Fisi actually has the skill to pull it off. Of course if you're going to try a move like this, do it on someone as skilled as Coulthard (who you know will see you) and when it's not for position (so he would rather save his car than fight for the position). I'm not sure that it would have stuck against Schumi...

10:29 PM, 30 May 2006 by Mark Aufflick Permalink | Comments (0)

Software Framework Design Redux

Partly because I've been reading Domain Driven Design, but also for other reasons, I've been thinking a bit about framework design lately. Specifically, what is it that I do naturally that I should/could codify, and what are the design traits of code frameworks I have been involved with that have been successfull?

This is going to be a little bit of a stream of consciousness, but I will probably build on it later.

First, two preconditions

  1. understand the business needs. kinda obvious, but you need to plan for it to be iterative, especially if the business needs are not fully known yet. (even if you think they are they probably aren't)

  2. understand the mindset and capability of your developers—what are their strengths/weaknesses, what conceptual models do they click with or struggle with

The interesting thing I realise about these points is that they define your two main points of interest, which are also your two "clients": the business; and the developers. Even if you are in exactly the same team as the developers who will be using your frameworks they are really your clients in the sense that your job is to enable them to be productive.

Goals when designing & implementing a code framework

  1. end result should allow the natural expression of the real world model such that it's easier to accidentally do the right thing than to make a mistake. this goal is symbiotic with the general goal of hiding complexity where possible.

  2. build in enough flexibility for accidental reuse without increasing the complexity of the mental model required to put the objects to use. (more on accidental reuse to come in a later blog entry).

  3. design for free improvement of end functionality via upgrades to the framework.

  4. extend goal (A) such that simply using the framework should result in expressive self documenting code. an aid to achieving this is to think of objects/methods in terms of their use rather than their implementation.

  5. internally design the classes/methods to allow for a change in the implementation of their own properties. eg. an identifier changing from an integer to an alphanum or a property being replaced by a method. these changes should be possible without resorting to an automated refactoring tool (although sed, awk and perl are perfectly respectable refactoring tools ;)

Observation: (D) & (E) are much easier to achieve with an OO agile language such as Ruby or even OO Perl than with traditional compiled languages. Objective-C and the core NS/Cocoa classes do a good job at bridging this gap.

Update: There's a useful article on API design just been posted on perlmonks On Interfaces and APIs. While not as concise as it could be, the referenced material is very good. Two that I would heartily recommend you read are:

11:02 PM, 29 May 2006 by Mark Aufflick Permalink | Comments (0)

The new world order of finance

I just caught a line in the U2 song The Playboy Mansion on POP () Get POP from that I hadn't noticed before:

Banks feel like cathedrals, I guess casinos took their place
Interesting thought. 10 years later it's almost a credible concept with the extremely fungible nature of online poker chips.

PS: Also noticed that there is no affiliates program for iTunes in Australia wheras there is for the US and UK - what's with that? I can link to iTunes for free, or I can give you a commission paying Amazon link to the Album...

10:40 PM, 29 May 2006 by Mark Aufflick Permalink | Comments (0)

The Cool and the unCool

I don't normally do a link roundup (that's what my feed is for), but there are a few links I've been storing up to discuss that deserve a few words.

The Cool

  1. IBM z9 mid-size mainframe (links: IBM, El Reg)
    Some people are desperate for cost effective scaling + reliability, but getting all three of these with some (small a) applications is actually an incredibly difficult problem. Exhibit A is the brain power that it takes to make a serious search engine scale. The rule of thumb is that you can pick any two. If you're less cost sensitive than the average bear and you have very serious scale and reliability requirements then you could do much worse than look at mainframe hardware. Especially now that virtualised linux environments on mainframes are so de riguer. For people used to the constraints of Intel hardware, the difference is really outstanding - imagine being able to suffer a cpu failure then physically install a new one - all while your servers keep running. I wasn't aware that IBM offered a co-processing module targetted specifically at J2EE - that's pretty cool.
  2. Reverse-capable C/C++ debugger for Linux (Links: Undo Software, LinuxPR)
    Speaks for itself. What's really great is that they chose to use gdb as the front end. Not only does that reduce the barrier to learning how to use it, all the traditional front ends will likely work with little change. Now on Intel, it should also take very little effort for Undo Software to make a MacOS X version that would work seamlessly with XCode (which uses gdb already)
  3. Google Maps Geography Quiz
    Test your knowledge of the globe with this trés cool mashup
  4. Tofu : Multi-column web browser for MacOS X
    Newspapers use multiple narrow columns for a reason. Now you can enjoy your electronic reading experience in the same form-factor with this free (alpha) viewer. I've tested it on PDF and html files, I assume it just subclasses an NS class of some sort.

And now for something completely different

From the recent exellent PCWorld article The 25 Worst Tech Products of All Time:
  1. Microsoft Bob
    This links to a separate article about Bob including screenshots and discussion of the performance on modern hardware! I think Microsoft had stolen too much of the Sculley Kool Aid!!
  2. Apple Bandai Pippin
    I saw a mad demo of some prototype set top box software from Apple which seemed like a good idea that went nowhere. The Pippin on the other hand - that never seemed like a good idea to me!

07:00 AM, 29 May 2006 by Mark Aufflick Permalink | Comments (0)

Lunchtime Theatre in Melbourne

It's one of the things I really miss about Melbourne winters - lunchtime theatre. To quote tramtown,
"$10 gets you some bread, soup and a bit of theatre. That's gotta be good!"

This year it seems to be in the Victorian Horticultural Society Hall with a piece called Treading Water.

09:32 PM, 28 May 2006 by Mark Aufflick Permalink | Comments (0)

Forcing to resynchronise an IMAP folder

I just had a problem where got hopelessly confused about one of my mail folders.

The cause was me force quitting while it was in the middle of trying to make sense of the multiple huge imap copy/move requests I had given it.

The symptom was that when I clicked on an email title in that folder, a totally different message would open up.

Since all the other folders were fine and each folder in is represented on disk as an mbox file, I figured that just that mbox file (and associated index) was corrupted. I didn't want to recreate the whole account in since resynching my 3Gb email account would result in a lot of bandwidth (even though it is going over a compressed ssh tunnel).

A bit of poking around the ~/Library/Mail directory shows that each account has a directory named something like "imapUsername@imapHost", which may or may not be the same as your email. Inside that directory, there is a simple folder structure. An imap folder in your account named "FolderName" has a directory called "FolderName.imapmbox". If the imap folder also contains sub folders, there is an additional directory just named "FolderName" that follows the same directory structure. The "FolderName.imapmbox" directory contains an mbox file and a small plist file.

What I hoped would work, and in fact did, is that you can remove any given .imapmbox file (while is NOT running) and it will be recreated and synchronised the next time you open and visit that folder.

Sweet. It's just a pity that Apple doesn't provide a context menu item called "force re-sync" or something like that. Of course fixing the sorces of crashes that cause corruption would be even better, but you'll never get rid of all bugs, so a re-sync option would be usefull for the advanced punter who doesn't want to go typing rm -fr too often (did you get that Bruce?).

keywords for my American searching friends: resynchronize synchronized

09:16 AM, 15 May 2006 by Mark Aufflick Permalink | Comments (0)

Test Driven Development with Ruby []

These are great presentation notes from a presentation on "Test Driven Development with Ruby" given to the the Rails Recipes Meetup in Stockholm on the 9th of May 2006 by a great guy I have worked with Peter Marklund.

Unfortunately I was nowhere near Stockholm (or even the northern hemisphere) at the time, so I'll have to make do with the notes ;)

09:05 PM, 11 May 2006 by Mark Aufflick Permalink | Comments (0)

Judge slaps SCO council in SCO vs IBM

Well, that's my interpretation! It's well documented that I find great amusement in following the SCO vs IBM case (and much amusement it has been since it has been before the courts for 3 years now). It's been a while since I blogged entries such as:

  • SCO vs. The World2003 Including the original code analysis by Bruce Perens
  • WE URGENTLY REQUIRE YOUR ASSISTANCE SCO parody of a Nigerian scam 2003
  • Amusements from the SCO Group's latest filing2004 with whoppers such as SCO claiming that IBM had little or no expertise on Intel processors.
  • SCO Asserts Its Rights to Almost Nothing2005
  • In the latest hearing, which included a motion to dissallow a surrebuttal to a rebuttal to a motion to dismiss based on ... sorry, I don't remember past that bit ... the action focussed on whether SCO had complied with the court orders and therefore whether it should be allowed to proceed with the parts of the case related to those court orders.

    Throughout the morning the SCO council weathers some pretty heavy times - both from the IBM council and the Judge - but just put yourself in the shoes of the SCO council for a moment, and imagine the shiver run down your spine as this particular conversation with the Judge plays out (italics mine):

    THE COURT: Let me ask you this: Is SCO in possession of -- can SCO provide additional specificity with regard to any of these items?

    MR. SINGER [council for SCO]: We have had a couple months of additional work since December 22. It may be that on a handful of these items something has come up during that time period which would allow a more specific reference in
    one place or another. But, in general, with what we're talking about here on methods and concepts, no.

    THE COURT: Well, I guess what I'm asking you, basically: Is this all you've got?

    Well, Mr Singer, is that all you've got? Of course the answer is yes - they don't have jack, but the keep on plugging away with the case, lest their share price fall when the investors realise that the emperor has no clothes.

    Let the merriment continue (albeit at great expense to the plaintif IBM...).

    Original court procedings via Groklaw as always. This quote from pages 75/76.

08:55 PM, 11 May 2006 by Mark Aufflick Permalink | Comments (0)

The evolution of programming languages (COBOL -> Ruby/Perl)

This O'Reilly article is interesting: How to Love a Framework You've Never Used

The gist of the conclusion of the article is this:

The dynamic languages make programmers so much more productive that even conservative business types are forced to sit up and notice. That's why I love Ruby on Rails, despite having not used it.

David Hansson, love him or hate, has created a killer app which is turning even diehard Java enthusiests to dynamic languages. There's a reason why Amazon, LiveJournal and Slashdot rely so heavily on Perl. There's a reason why Yahoo! decided to start using PHP. There's a reason why Rails is written in Ruby and not Java. I think we've finally hit the turning point where the economic forces at work are too great too ignore. Of course, Java will be around for a long time to come &#8212; COBOL is still widely used, for example &#8212; but it's simply math. The faster your programmers can turn out good applications, the more money you save (and can therefore earn).

I also love this quote from Randall Schwartz:

This power can be summed up in a response noted Perl guru Randal Schwartz made in response to a Java enthusiest (a student, I believe) asking him how he dealt with Perl's lack of "strong" typing. He replied "I just smile and move my program into production before the Java programmer has his first compile."

Truly smugness deserving of a Unix user ;)

12:39 AM, 11 May 2006 by Mark Aufflick Permalink | Comments (0)

Possibly the earliest record of me on the Interweb thingy

It was on Fri July 2nd, 1993 - a "request for discussion" (RFD) for, which is (was?) the formal way to request a new official usenet group. You could always start an alt.* group whenever you felt like it, but the official groups were more likely to be carried on usenet servers and their content had greater legitimacy than that on your average alt.* newsgroup.

You'll notice my old university email address and remember, this was before the first graphical web browser (that was late 1993 if I remember correctly) and the main way of using the net back then (aside from email) was telnet, ftp, usenet and gopher (plus the occasional talk/ytalk and nethack session ;)

Ah, memories :) I can distinctly remember how excited I was when the engineering lab installed Sun IPX workstations that had floppy drives, so I could download Apple software and updates from (their main ftp server back then) and take them home on a floppy...

Update: The oldest actual content of mine comes a few months later in September 2nd 1993, with this post to comp.sys.mac.system where I reply to someone asking a question about the ohh-so-new System 7, pointing them to a utility called PowerSwitcher. One of the good things about PowerSwitcher, apparently, was that it only used about 2k of memory. Not even viruses are that small these days!

05:11 AM, 10 May 2006 by Mark Aufflick Permalink | Comments (0)

Where RSS republishing meets plagiarism

There's been a lot of talk about online plagiarism lately.

Taking someone's personal blog entries, changing the names, and then inserting the stories into your own blog is kinda sad. The comparison made in that story to a 6 year old exaggerating their playground exploits is probably a fair one.

It is obviously wrong though.

Less clear, is the validity of republishing someone's RSS feed. For example, my RSS feed (and others) are republished wholesale on sites like - obviously with the aim of creating bulk content in the hope of driving clicks to their Google ads. (the original content on my site as racked up $50 worth of clicks since 2003, so I don't see how it will work for them ;). It seems wrong, but is it? That page attributes my site and provides a link. It says "reported by" which implies that I have submitted the content to them, but in a way I have - I provide an RSS feed and effectively say "subscribe to this feed - I have things to say just like AP does".

Another analogy might be that it's not really that much different to cable tv distribution companies retransmitting the free to air channels on their cable without paying a fee (which has been upheld in the courts here in Australia).

In this case, my branding is getting a hammering by having my content identified with such a shonky website (which has even worse colour schemes than mine!), but what about a more "legitimate" site, like [redacted]*, where my content becomes part of one of their feeds. It's not linking, it's actual digital duplication of my (copyrighted) content. But in the case of feedster, it's being duplicated by a service that is designed to help people find my content, so that's a good thing right? Before you assume the answer is no, think about how different that is to a Library, or Google books.

For a fascinating, in depth and really interesting read about Libraries and DRM (Digital Rights Management) check out the recent Groklaw post "The British Library - "The world's knowledge" DRM'd and for a price".

Any feedback on this? Semi? DB? Lars?

* NB: I removed the link and name of the site at the request of the new-owners of the URL who run an entirely different site. Glad to see the old one is gone, but the problem still remains - I defy anyone to count the number of websites that re-publish Stack Overflow! -- 2014-10021

04:48 AM, 10 May 2006 by Mark Aufflick Permalink | Comments (1)

Service Oriented Architecture (or is it?)

This old (2003) article on about SOA (What Is Service-Oriented Architecture) is one of the more sensible descriptions of the term that I have come across - except that I don't see the value in a comparison of SOA and OOP (Object Oriented Programming - not to be confused with the fictional piece of software named OOP built by the team in Microserfs...)

To me SOA is mostly standard common sense of system interoperability and work distribution (using distribution as a non-technical term here). The whole business of building "SOA enabling software" to me totally misses the point. There is no SOA stack. Using SOA principles in designing some systems will dictate the use of some sort of messaging server or similar, but I don't quite understand how using millions of dollars worth of software from Fujitsu or the like is going to enable me to "do SOA". Remember that the "A" is for Architecture - it's a way of designing something, not a thing in itself.

I like the article's description of Loose Coupling but the failed CD OOP analogy is yet another example of letting a new buzzword get away from you. The whole SOA concept is a nice encapsulation of some common sense ideas, and it is also a good thing that this buzz is encouraging vendors to open up internal functionality to allow better code and logic reuse. But the reality is that the reason noone has been doing that consistantly is because it appears (on the surface) to be good for business to isolate your systems from everyone else. These days you only do that if you want to cop some stick from the EU.

Ah - rambling this is. Thus I have diluted the comprehesibility of the term SOA a little bit more!

Check out this little doozy in the Wikipedia page for SOA:

One area where SOA has been gaining ground is in its power as a mechanism for defining business services and operating models and thus provide a structure for IT to deliver against the actual business requirements and adapt in a similar way to the business.

12:58 AM, 10 May 2006 by Mark Aufflick Permalink | Comments (0)

A little bit of AJAX (scrub scrub scrub)

I have rolled my experimental home page into place. It should look the same, but it has some slightly different smarts.

Photo widget ajaxified

First of all the photo widget is dynammically written by a javascript ajax callback, based on a list of 23hq photo ids that come from a script on my server (which in turn caches a list of ids that it gets via the 23hq REST api).

The main driver for doing this is that the photo widget was adding a significant delay to page rendering - especially if you were the first visitor to arrive after the cache timed out at the server end. Now if you are that lucky person, you will see a spinning wheel in place of the photos until the data is ready (and even that is quicker as well). The widget is built dynamically from 3 randomly chosen photos out of the full list of ids so that you will get a fresh set on reload even if you're sitting behind a hugely aggressive proxy named Roger.

Google ad box optimised

The other slight change to the front page is that the rendering of the Google ads is left to the bottom of the page, again to stop any delay in rendering the main content. Once the ads have downloaded and rendered (into a div with display:none) the rendered html content is copied up into the usual place.

Comments form buffed

I have also played with making the comment submission ajax-based like in typo. Yes I know I've made disparaging comments about the typo ajax comments interface. I still think it's totally unnecessary. This was really just a simple exercise for me rather than something I think is actually beneficial. You'll only see the new interface when you use the add comments link at the bottom of a blog entry which already has at least one comment. The normal add comment links are untouched.


Ajax type jazz is remarkably easy with fantastic libraries like prototype. The prototype library not only makes the asynchronous fetching and form processing easy, it has a whole load of really useful javascript helper classes. I want to play with next, so don't be surprised to see some reflections under the photo widget next time you visit.

07:20 AM, 08 May 2006 by Mark Aufflick Permalink | Comments (0)

Postgresql Array types []

I have just been reading about the array types in Postgres - boy do I wish I was using Postgres right now.

Using the SQL99 standard syntax, they can only be single dimensional and you have to specify a fixed dimension. The utility of fixed arrays seems to me as mostly a nice to have - you could, of course - emulate the same behaviour with columns.

Using the Postgres custom syntax however, you can specify multiple dimensions and leave the dimension unspecified. This seems to be a really useful extension that would suit many commen needs. I'm first thinking of a flag or parameter type of column.

Lets say that you are writing a more advanced job scheduler (think cron) and you have a db table where you're storing commandline arguments for the timed program executions. You could store that as a plain string to be parsed by the executing shell, but then you're losing information (and have to be insanely careful with quoting) and don't make the char limit too short. You could store the individual arguments as comma separated values in a string or text/clob field (how many times have you seen that little doozy in legacy code). Or you could have a seperate table for command line arguments, link it to the command table with a shared id, plus you would need an ordering integer so as not to lose the order of the arguments.

Or ... using Postgres array syntax, you could define a single column arguments as a variable dimensioned array of strings:

create table commands (
    id integer primary key,
    command    varchar,
    arguments  varchar[]
You can then get all the command details with a simple select command, arguments (assuming appropriate array support from your database driver), you can find the number of arguments:
select array_dims(arguments)
commands where ...
You can find every command that is called with both the argumets --ignore-errors and --destructive:
select *
from commands
where '--ignore-errors' = any (arguments)
  and '--destructuve' = any (arguments)
Another neat thing is that you can cast a resultset into an array, so you could eg. very easily denormalize a complex one to many lookup relationship into an array column with a trigger.

This is an example of why I love the Postgres project so much - they are way ahead of the curve on innovation (being behind only Oracle - but even then only in some areas) and yet more standards compliant than any commercial or open source RDBMS I have come across. They understand that the power of of an SQL database is in the relational database concepts and pursue being a good RDBMS - rather than trying to be a database that "you won't get fired for using" a la MySQL or MSSQL.

12:33 AM, 08 May 2006 by Mark Aufflick Permalink | Comments (0)

Friendly blog links

Not that they were grumpy before, but it's another step in coercing my old website software into a world where 1.0 < web <= 2.0

So now instead of getting a permalink along the lines of /blog/one-entry?entry_id=1234 you'll get something like /blog/2006/05/05/mark-is-a-good-bloke (told you they were friendly).

This is going to play havoc with my Google analytics results. At least it's nearly the start of a month.

Shout out to Vinod Kurup who's code snippet I plundered and modified.

Next up, compile tDom into aolserver 3.

Sheesh - I should just upgrade to OpenACS 5.x, but hacking is much more fun ;)

Update: Since I have also changed the urls presented via my RSS feed, those of you following in feed readers will probably find that the last 10 entries are now duplicated. Sorry about that, but there's nothing I can do since RSS readers treat the url as a primary key of sorts.

07:49 AM, 05 May 2006 by Mark Aufflick Permalink | Comments (1)

Domain Driven Design

I recently bought Domain Driven Design by Eric Evans. See my initial review for some background. I have to say that this is the best software development book I have found in, well probably forever. I've barely started this 500 page monster and I'm already pumping my fist in the air in excitement ;o) Highlights so far: (headings, typos and spelling mistakes are mine)

1. How design fits into the Agile process

Preface p.xxiv

"In fact [Agile processes work] best for developers with a sharp design sense. The [Agile] process assumes that you can improve a design by refactoring, and that you will do this often and rapidly. But past design choices make refactoring either easier or harder. The [Agile] process attempts to increase team communication, but model and design choices clarify or confuse communication."

And that is one reason why I would take a handful of handpicked developers I trust over a huge (possibly outsourced) mass of development teams. It's not even about education - it's some mix of intuition, aesthetics, a desire to learn and committment without stubbornness. One of the top 3 developers I have ever worked with from around the world has no formal tertiary education at all.

This next quote is a gem that I think applies to many iterative processes as well as software design. Preface p.xxv

"Exploration is inherently open-ended, but it does not have to be random."

2. A bad model (or no model) will bite you in the bum

Page 4

"... Using a model in these ways can support the development of software with rich functionality that would otherwise take a massive investment of ad hoc development".

And there's the win. You just can't break through some ceilings of software complexity without a good model. Sometimes you can bludgeon your way through with a mass of ad hoc development. Other times your development team, number of lines of code, timeline and budget will scale beyond all reasonable proportions, such that no-one understands the problem any more, let alone the code, and you don't even have a language sufficiently powerful to discuss the problems.

I'll discuss the positive side of this equation in highlight (5) below.

3. Ingredients of Effective Modelling

Page 12

  1. Binding the model & the implementation [early]
  2. Cultivating a language based on the model
  3. Developing a knowledge rich model
  4. Distilling the model
  5. Brainstorming & experimenting

YES YES YES! (pumps fist wildly in air) On reflection, every successful project I have been involved with has had all or nearly all of these points as strong elements of the design & implementation process. I have just never distilled them so clearly or heard anyone else succeed to that end. Fantastic!

4. The fundamental problem with the waterfall process

Page 14

"In the old waterfall method, the business experts talk to the analysts, and analysts digest and abstract and pass the result along to the programmers ... This approach fails because it completely lacks feedback."

Evans again gets to the nub of the problem with the waterfall process - there's no feedback loop. Take a look at nature, there are feedback loops everywhere. Where there is no feedback, or the loop is too slow, there is brittleness and failure.

5. The problem with simplistic iterative process / Benefits of building a good model

There are problems with simple iterative approaches as well.

"Other projects use an iterative process, but they fail to build up knowledge because they don't abstract. Developers get the experts to describe a desired feature and then they go build it. They show the experts the result and ask what to do next. If the programmers practice refactoring, they can keep the software clean enough to continue extending it, but if programmers are not interested in the domain, they learn only what the application should do, not the principles behind it. Useful software can be built that way, but the project will never arrive at a point where powerful new features unfold as corollaries to older features."

And that my friends, is when a designer/developer really earns his dough - when powerful & valuable features, that are easy to implement on the codebase, become obvious out of the very nature of the model itself - often to the astonishment of the domain experts & users, who say "why didn't I see that... I never even realised that that is what our process was doing".


I'd better stop quoting now before I start running into copyright and fair use issues! I'll come back to you when I've digested the suggested processes and give feedback on that. Normally I would be very suspicious of any purported 'procedural approach' to software modelling, but I am so impressed with what I have read so far that I'm happy to believe that Evans can come up with the goods.

In the mean time if software development and/or design is your thing, you *really* need to buy this book.

Domain Driven Design
Eric Evans
ISBN 0-321-12521-5

10:43 PM, 04 May 2006 by Mark Aufflick Permalink | Comments (0)

I knew I liked Paul Graham, but quoting Richard Feynman truly confirms that I like his way of thinking!

One very interesting footnote is an important lesson for any old-school technology and business people to learn. The populace in general have begun to "get" this web thing - and it's not like distributing shrink-wrapped software or a broom, it's much more like real life or perhaps a reflection of it:

[3] A web site is different from a book or movie or desktop application in this respect. Users judge a site not as a single snapshot, but as an animation with multiple frames. Of the two, I'd say the rate of improvement is more important to users than where you currently are.

I don't like the title of lesson #7 (Don't get your hopes up) but I have learn't the value of this part of the lesson:

Startup founders are naturally optimistic. They wouldn't do it otherwise. But you should treat your optimism the way you'd treat the core of a nuclear reactor: as a source of power that's also very dangerous. You have to build a shield around it, or it will fry you.

The shielding of a reactor is not uniform; the reactor would be useless if it were. It's pierced in a few places to let pipes in. An optimism shield has to be pierced too. I think the place to draw the line is between what you expect of yourself, and what you expect of other people.

And not only in the context of being let down, but in the context that if you have extremely high standards you just can't expect everyone to be the same. If you find some people the same, happy days, but if you expect people to be who are not - well that's just an exercise in frustration and will reduce your productivity and theirs.

Paul continues with:

Shielding your optimism is nowhere more important than with deals. If your startup is doing a deal, just assume it's not going to happen. The VCs who say they're going to invest in you aren't. The company that says they're going to buy you isn't. The big customer who wants to use your system in their whole company won't. Then if things work out you can be pleasantly surprised.

Which I also know something about ;) It is especially important in that latter context of customers - when you're new and naive to business you can spend a lot of time on a few big customers who end up not being what you thought and in the mean time you have passed up the 50 annoyingly small customers who would have paid your rent, leaving you with nothing (sob).

The only way a startup can have any leverage in a deal is genuinely not to need it. And if you don't believe in a deal, you'll be less likely to depend on it.

So true. It works.

09:05 PM, 03 May 2006 by Mark Aufflick Permalink | Comments (0)

Safari crashes if you eval() a "really long string"

I'm doing some playing around with AJAXian goodness and was cooking up a really easy way to make the 23hq photo widget on my home page a bit more web2.0. I was cheating, really, by slurping up the javascript url 23hq provide that creates a js array of all your photo id's and associated metadata.

When you use the evalScript: option in the Ajax.Updater class ofprototype, all that is really happening is that eval() is getting called on the content returned by the http get. In Firefox that was working fine. In Safari it was crashing. I eventually discovered that in Safari it worked fine, as long as I only had a few photos in the javascript source (about 50 lines of js code). As soon as it was much more than that, Safari crashed.

Something to keep in mind.

So I guess I have to do it the proper way and use the REST api at 23hq.

04:37 AM, 03 May 2006 by Mark Aufflick Permalink | Comments (0)

Freud pities the fool

I'm not normally one to give a lot of space to Freud, but today's article in the SMH Last link to Freud reveals how he saved her is quite interesting. It is the 150th anniversary of Freud's birth, and Margarethe Walter, 88, is the last known living patient of Dr Freud. I love what Freud said to her (and I can see why she remembers it):

Being an adult entails overcoming the difficulties and implementations of that which forms a personality. Fostering your desires. Putting up resistance. Asking why and not silently accepting everything. It is about standing up for that which is really important, with quiet determination.
Holding perhaps an equal amount of insight is another article in today's SMH:

The TV Land network in the US announced that it will start I Pity the Fool, a series where The A-Team star travels across the country dispensing inspiration and advice.

"The 't' stands for talking," Mr T said.


"My show ain't no Dr Phil, with people sitting around crying," he said.

"You're a fool - that's what's wrong with you. You're a fool if you don't take my advice."

04:32 AM, 03 May 2006 by Mark Aufflick Permalink | Comments (0)

Blog merger

No, I haven't been bought out by global conglomerate, I have merged my developer blog back into my regular blog. Keeping them seperate just didn't make sense.

The only thing you might notice is that if you subscrive to BOTH my regular blog and developer blog (dev-blog) in a news reader, you will get two copies of each new posting (including this one). If you do, just unsubscribe one of them.

03:24 AM, 02 May 2006 by Mark Aufflick Permalink | Comments (0)

Deep C Secrets

I was browsing the programming books in Borders (as you do), looking for something a bit out of the ordinary.

What I found was Expert C Programming (Deep C Secrets) by Peter van der Linden.

It's a book on C that a Perl programmer could love! It's at times amusing, contains good anecdotes and puzzles to solve. What's more it contains the C code for a complete BASIC interpreter. No code contained in a book has been as cool since a UNIX book I bought in the early 90s had the MINIX source inside.

I didn't buy it since the inflated Australian tech book pricing meant that it exceeded this weeks discretionary budget, but I'll be back to buy it one day.

The editorial sounds about right:

Defying the stereotypical notion that technical books tend to be boring, Expert C Programming offers a lively and often humorous look at many aspects of C--from how memory is laid out to the details of pointers and arrays. The author reveals his points through invaluable anecdotes, such as stories of costly bugs, and through folklore, such as the contents of Donald Knuth's first publication. Each chapter ends with a section entitled "Some Light Relief," which discusses topics (topics that some may consider to be "recreational"), such as programming contests. A fabulous appendix on job interview questions finishes the book.

01:24 AM, 01 May 2006 by Mark Aufflick Permalink | Comments (0)

Beware of RSI []

Not usually a source of serious journalism, the register highlights the risks of RSI in their article Beware of RSI.

I'm not sure what their scientific backing for their fact is, but they claim that touch typing is less likely to cause injury which I found interesting.

I also had a friend get very serious RSI. She got it from playing musical instruments, not typing, but the injury is basically the same. For many years she couldn't write and had to pay an assistant to go with her to lectures and take notes. Thankfully she recovered fully, but then she was only 20 at the time - our bodies don't recover quite so easily at 30 and 40.

Avoiding RSI is why I bring my own Kinesis Ergo keyboard to work. Sure it cost me about $300 USD by the time I had it shipped to Australia, but I figure it's worth it to avoid crippling pain in my 40s. I have never replaced my old trackball though, I just try not to use the mouse much.

As an added bonus, once you become proficient at touch typing on the Kinesis contour keyboard you will probably be able to type faster as well as in much more comfort. It has an optimised layout (still qwerty) that reduces the distances your fingers have to reach (especially your pinkies) and makes better use of your strongest digits (those thumbs that are normally wasted on the spacebar). In addition, the keyswitches require less pressure (to reduce fatigue) and the key activation point is halfway down the travel so you don't need to pound the key all the way down (reducing impact).

PS: Eternal thanks to Lars for putting me onto the best keyboard ever.

10:00 PM, 27 Apr 2006 by Mark Aufflick Permalink | Comments (0)

Get well Bob!

My good friend Bob (not his real name - he has an anonymous blog...) has been in hospital with a pneumonia-like condition. We're thinking of you and praying for you Bob (I *know* you'll have found a way to get net access in hospital ;)

And hey, blancmange is a tasty desert, a "moderately successful" 1980s synthpop band (but I'm sure you already knew that) and a type of fractal curve!

08:18 PM, 27 Apr 2006 by Mark Aufflick Permalink | Comments (0)

The Student magazine of ACM (Association for Computing Machinery - the US equivalent of Australia's ACS but more relevant) has interviewedPaul Graham.

The interview ranges from the future of programming, problem solving strategies and international outsourcing.

Interestingly Paul subscribes to the same problem solving strategy as I do, simply to get to know enough information about the problem so as to be able to "rotate and rearrange them in my head [like a mathematical problem]".

An extension that he applies that I really like is that once you take a mathematical-esque approach to the information, you can then run "thought experiments" or test hypotheses. His two hypothetical examples aren't particularly enlightening but the idea is otherwise a very useful tool.

12:58 AM, 27 Apr 2006 by Mark Aufflick Permalink | Comments (0)

Family []

Jeffrey Zeldman (of A List Apart fame) has written a very moving article about his mum: Hi Mom!

Don't read where you will be embarrased to tear up. Thanks to Lars for the link. It's posts like this that build community and help us all. I love it. Thank's Jeff.

11:06 PM, 26 Apr 2006 by Mark Aufflick Permalink | Comments (0)

Happy Birthday Elizabeth

Happy 80th birthday to the Queen for today (or is it yesterday? This timezone thing can get confusing). Even the Queen gets oversized novelty birthday cards.

09:42 PM, 20 Apr 2006 by Mark Aufflick Permalink | Comments (0)

I feel like I'm making progress

It's taken me nearly 3 years, but I've finally come to terms with leaving the 80s behind and gotten rid of the ASCII art page headers on my website.

It was a bit of an impulsive move last night - I did the artwork and html/css last night (took about 40 minutes) so I'm sure it's not perfect in all browsers, and the other colours used in the site clash with the blue.

So I reckon I'm probably about web 1.5 now. The header image works at all window sizes but to be really web 2.0 I need fat (or is that phat) borders that waste 30% of your expensive 20" lcd screen. I'm also using inneficient circa 2001 code (OpenACS 4.something) and of course to get to web 2.0 I'll need to start using typo and Ruby.

Still, it's a start ;)

09:17 PM, 20 Apr 2006 by Mark Aufflick Permalink | Comments (1)

Air travel should be more exciting

Kath and I arrived back in Sydney this morning after our bus ride from Singapore. Excellent, uneventful, but slightly boring Qantas flight as always. This particular 747 didn't even have the upgraded on-demand entertainment system.

I'm always hoping to get to use those inflateable slides one day but nothing ever happens on my flights.

Unlike last Friday's BA10 to London. I flew to London on BA a few weeks ago, but I didn't have the excitement of diverting to Uralsk, Kazakhstan. You can read the SMH article for yourself (A bumpy surprise halfway to London) but the highlight moments would have been landing a 747 on a runway "not suitable for 747s" and that one pilot called "probably one of the bumpiest in living memory".

The airport had no stairs tall enough, so to transfer to some smaller planes for their onward journey, "the passengers boarded by stepping onto the roof of an airport vehicle and then onto a stairway". That was, however, after enjoying some local cuisine - suggested to have been horse sausage.

It turned out there was no fault with the 747, just a false alert from afire warning light. I have had many flights delayed by faulty warning lights. Pesky things - they should just get rid of them. That would make things a bit more exciting ;)

Update:Here is the airport on Google Earth. I don't seem to be able to find any photos of the event itself :(

08:17 PM, 17 Apr 2006 by Mark Aufflick Permalink | Comments (3)

Thawing to Java

Just as the mainstream IT world is getting over it's honeymoon with Java I figure it might be worth getting better acquainted!

My previous experience with Java has always been awt and swing gui applications - the most tedious and verbose coding to be had anywhere.

I have spent a little time focussing only on the language and test-driven development (using Junit) within the eclipse IDE (set to emacs keys of course). I have to say I am pleasantly surprised.

Maybe it's because I'm browsing through Agile Java which seems like quite a good book. Maybe it's because I've done a fair bit of C and Objective-C programming lately and I've grown more accepting of less-than-flexible languages.

Anyway I'm quite enjoying it. After all, I'm running out of new languages to learn - I'll have to write my own soon!

03:12 AM, 10 Apr 2006 by Mark Aufflick Permalink | Comments (0)

Artful Sentences - Virginia Tufte []

To write is to bring structure to ideas, information, feelings. Here are many creative strategies, in a unique book that is informed, affirming, lively, and of lasting value.

This looks like a real winner. Can anyone say "birthday present" ;)

08:36 PM, 09 Apr 2006 by Mark Aufflick Permalink | Comments (0)

This is quite a good analysis (imo) of the latest Davinci-Code-esque news story. To the great credit of Google News, I found it linked there.

The gospel of ignorance &#8212; []

07:42 PM, 09 Apr 2006 by Mark Aufflick Permalink | Comments (0)

(With apologies to Brian May for the title).

I quite enjoyed this ValleyWag deconstruction of Business Week's latest Steve Jobs "puff piece".

As much as you all know that I love most things Steve and Apple, I think the popular press's love for Steve Jobs is getting a bit out of hand.

If I didn't know better, I'd call it the Reality distortion bubble.

Let's see if that catches on ;)

03:12 AM, 07 Apr 2006 by Mark Aufflick Permalink | Comments (0)

Kick your Mac screaming into the world of Windows with Boot Camp

It boots Windows and it's a little bit camp - it's Apple Boot Camp!

Apple have released a beta version of a tool that allows owners of Intel Macs to partition their hard drive and install Windows XP with all the appropriate drivers (it even includes a driver for the eject and brightness keys :). You need a single disc installer for Windows XP. Apple won't sell you that!

Mac firmware already includes a boot manager so it's easy to choose MacOS X or Windows XP on startup.

Apparently it's planned as a regular feature in Leopard (MacOS X 10.5) and the current version is beta. I think it will be almost all positive but it's an interesting move from Apple. It will be fun to see what the overall outcome is. One reason I can imagine that Apple has gone this route is to remove one of the reasons why people would want to run MacOS X on generic Intel hardware.

Something that strikes me looking at the screenshot is that Windows people who try it out will wonder why things like disk partitioning and boot switching have been such an ugly pain on Wintel machines when it can be so smooth and easy as this process seems to be.

Press release: Apple Introduces Boot Camp Public Beta Software Enables Intel-based Macs to Run Windows XP.

Main page: Boot Camp Public Beta Macs do Windows, too.

Setup documentation: Boot Camp Beta Installation & Setup Guide.

Om Malik's commentary: MacXP.

It wouldn't be Apple if they didn't stick the boot into a competitor's misfortune/stupidity:

Macs use an ultra-modern industry standard technology called EFI to handle booting. Sadly, Windows XP, and even the upcoming Vista, are stuck in the 1980s with old-fashioned BIOS. But with Boot Camp, the Mac can operate smoothly in both centuries.

One problem they haven't worked around smoothly is the hardware clock - Windows expects the hardware clock to be the time where you are right now whereas MacOS X (like other Unix OSs) expects the hardware clock to be in UTC (aka GMT) time and the OS takes care of timezone related issues. Hard to see a way around that unless you provided OS context sensitive code in the EFI firmware (which could be nasty).

10:40 PM, 05 Apr 2006 by Mark Aufflick Permalink | Comments (0)

Amusing parody video - worth the 2min 54s to watch.

10:10 PM, 03 Apr 2006 by Mark Aufflick Permalink | Comments (0)

I cannot believe that I will be flying while the Melbourne GP is racing. That is bad planning right there. To rub salt in the wound, Jenson Button has scored a rare pole and is (I believe) well placed to win at Albert Park. To think I might miss his first win - maybe I can get Kath to tape it for me...

02:44 PM, 01 Apr 2006 by Mark Aufflick Permalink | Comments (0)

Happy Birthday Apple (had to do it...)

It's only Friday afternoon where I am at the moment (London), but between opening my editor and committing the previous blog entry, Sydney time clicked over to midnight, making it April 1.

I thus feel duty bound to congratulate Steve, Woz, Mike and Ron on the company that I am most happy to have been associated with for such large portion of my life (albeit in different ways). May there be at least 30 more.

09:24 AM, 31 Mar 2006 by Mark Aufflick Permalink | Comments (0)

I remember Computerland very well, but I never knew anything about it's history. Luckily for me, even Australia's traditionally anti-Apple press is getting into the fun of Apple's 30th anniversary.

How Rudie brought Apple to Australia [].

Computerland founder Rudie Hoess was importing programmable calculators into Australia until he fell in love with the Apple ][ and started importing them in 1977 only one year after it started shipping. That's quicker than Australia has received plenty of more modern devices!

And how about those sideburns - the 70s were a very good era for facial hair :)

My how times have changed. The Sydney Morning Herald is even running:

  • an Apple Computer flashback slideshow(I've used all the computers pictured. Wish I had attended the computer familiarisation course at Club Med Noumea though ;)
  • an Apple Trivia Quiz(I scored a shameful 8/10)
  • and asking us to give thanks to the two Steves in a poorly concevied and written blog (successfully) designed to provoke stupid discussion in the comments.
  • As much as everyone knows how much I love Apple, I just can't wait for all this madness to stop!

09:16 AM, 31 Mar 2006 by Mark Aufflick Permalink | Comments (0)

The 30th anniversary of Apple Computer this weekend, combined with the recently positive media attention to all things Apple and Steve, you just know there's a load of bad articles on their way. I've read two already.

One thing I have just finished reading that really didn't suck, is this Apple Heroes and Villains on Wired.

I remarkably agree with basically all of their decisions and the comments are pretty accurate. Even to the level of pointing out that the only truly unreliable hardware produced under Steve Jobs has been the Apple III.

It's an entertaining read with short pieces of text and photos - it would actually make a great coffee table book!

Another nice short piece I found is by long time Silicon Valley journo Evelyn Richards: Change is as comfortable as a black turtleneck.

On a related note and almost as if to celebrate their shared history in recognition of Apple Computer's achievments, Beatles label Apple Corps are back at sueing Apple Computer over the use of the Apple name in the music business. Nothing would be more remeniscent of the old days except perhaps a look and feel suit :)

12:07 PM, 29 Mar 2006 by Mark Aufflick Permalink | Comments (0)

Now this is an interesting rumour. It makes a lot of sense to me. Apple has been quietly building market share and making quite a lot of money in the server and storage hardware markets.

If Apple could ship an XServe + XSan combo that out of the box ran efficient virtualized MacOS X, Windows, Linux, Solaris, etc. boxes it would be a real seller and make Apple a serious name in the business market.

It also opens the way to make money in the Windows market without having to beat windows. Imagine a small business who need an email server and web server. They really want to use Exchange (kindof like how children always want to grab boiling hot pans off the stove) but they've heard that Unix based web servers are better. They buy and install an XServe from Apple, ideally with both OS's pre-installed (yeah, like MS will license that...) and they get the best of both worlds. Then when spam get's too much for them they hire a consultant (me :) to configure spamassasin on another un*x virtual machine to pre-filter their inbound internet email before it gets to the MS Exchange virtual machine.

Makes sense to me.

07:19 AM, 28 Mar 2006 by Mark Aufflick Permalink | Comments (0)

Sybase, it's Californian for ****

In my inbox I found a quite useful sybase-specific blog:

It contains actually useful info and discussion (unlike 99% of the other Sybase sites on the net). Unsurprisingly, the first page already contains info on two blatant mysql-esque violations of the ANSI standard that make your code more dangerous and less portable:

Yes, Sybase silently truncates if you try to insert a string that is too long for the field. Handy.

A NULL is a NULL, unless it's a Sybase NULL (or a mysql NULL for that matter). NULL = NULL should be false right? Well in a Sybase where clause, it's true. As if that weren't bad enough, Sybase is not even self-consistent: In join clauses NULL = NULL will not match ie. is false. GAH!

In both cases there are runtime options you can specify to trigger more ANSI-ish behaviour. If I was designing coding standards for a team I would enforce these settings in all code at the point of instantiating a db connection.

08:48 AM, 26 Mar 2006 by Mark Aufflick Permalink | Comments (0)

The pointy end of the plane

By happy circumstance (and a fantastic special offer from BA) I am currently flying to London the way God surely intended - in first class.

I know some readers will be eager to hear how it compares with the woeful rating that I gave to United business. Well that just wouldn't be fair. BA is, after all, competently run - at least they make enough money to buy new seats from time to time. So I will try to resist comparison.

The one similarity is that I have further confirmation of my theory that the toilet seat gets murkier the higher the class. Thankfully there were baby wipes (in a polished walnut dispenser) on hand to clean it down. In this case, however, I believe I was the first male user of the toilet (as soon as the seatbelt light went off). I just think it was very poorly cleaned. The rest of the bathroom was similarly not that great. I gave some of the chrome a polish while I was, you know, sitting there. I'm sure it is a generic airport supplied crew who clean all the toilets, but this is supposed to be first. If I was in charge of the cabin I would have someone on my team personally check the first toilets. Oh, and the toilet paper is terrible.

Speaking of attention to detail - why did the steward ask me if I needed an arrival card for Singapore? One look at the flight manifest would have told him that I'm travelling to London - there's only 14 seats in first, it wouldn't have killed him.

But putting aside my anal tendencies, it really is pretty nice. There is a smidgen more legroom than I remember from flying first a few times in the 90s. The cabin size is the same, but the seats are intelligently angled to use some of the available width to make room for a horizontal foot rest. The nibbles (sorry, canapés) were really nice, and the bourbon is good quality (not sure of the brand - I didn't see the bottle) The TV screen is big and I have 3 crystal clear windows :)

The seat is strangly lacking in little pockets to stow all the bits and pieces that you end up with (toilet bag from airline, noise cancelling headphones for in-seat entertainment, my noise cancelling headphones for laptop/ipod, drink glass, dry ginger ale can, ipod, water bottle, book, f1 racing magazine, first class pyjamas (aka. "sleeper suit"), wallet, passports (x2), mobile phone (off), pda... I don't actually have a pda, but you get the picture! I really miss the little vertical storage cabinets you used to get when you are upstairs in business - do they still have them now that there are beds? I didn't get to fly upstairs with United, and my return business flight is currently positioned downstairs - must see if I can change that.

Oh right - you want to know *why* I'm flying to London. Does there have to be a reason? Having seen the Queen once already this week it can't be to visit Her Majesty... I'm actually doing some training for my new work in the exciting world of international banking - in Royal Mint Place no less (see if you can work out the company from that).

Looks like dinner is on it's way - must pack away now. Oh nearly forgot - for those of you who have never travelled first but might some day, look out for the tremendously loud noise when the nose wheel retracts - it's funny seeing the face of those sho have never heard it before!

03:45 AM, 20 Mar 2006 by Mark Aufflick Permalink | Comments (0)

An architectural legend in his own lifetime, Harry Seidler has passed away. I will always regret missing my chance to hear him speak two years ago (by leaving registration too late) but thankfully his art will live to tell his story.

Rose Seidler House
Cove Apartments
Capita Centre

Update: Todays SMH contains a very basic article about the man and his work - worth a read if you are unfamiliar with Seidler: When Harry met Sydney

12:23 AM, 09 Mar 2006 by Mark Aufflick Permalink | Comments (0)

Dealing with random Sybase client on Cygwin problems

For some random reason, all my cygwin software that links with the Sybase client started failing. I determined that when the Sybase dll's were being linked in the SYBASE environment variable is somehow being unset (or ignored) and the default value of c:/sql10 is being used. The tell tale error is:

The context allocation routine failed when it tried to load localization files!! One or more following problems may caused the failure

Your sybase home directory is c:\sql10. Check the environment variable SYBASE if it is not the one you want!
Cannot access file c:\sql10\ini\objectid.dat

I reall have no idea why this is, why it changed or how to fix it. After much searching I decided to use a hacky workaround instead, so here's what I did.

  • I made an empty directory c:\sql10
  • I copied the directories $SYBASE/locales and $SYBASE/charsets into c:\sql10 (these are static lookup data, so they never change unless you upgrade your client software).
  • I created an empty directory c:\sql10\ini
  • I added a line to my .bashrc to copy over the up to date ini data:
    rsync -r /cygdrive/c/SYBASE/ini/ /cygdrive/c/sql10/ini/
  • Pretty bogus but it works.

10:07 PM, 07 Mar 2006 by Mark Aufflick Permalink | Comments (1)

You know you've become a cultural icon when...

People sell clothes in a collection to look just like you :

People are so fascinated with your clothes that you can dress up your own doll (virtual or otherwise) : Joy of Tech (cf. Similar web pages for pop idols which won't be linked here)

Cartoons deride you and your products, while still enhancing your enigma : VG Cats (cf. Genuinely derogotary Newton reference in The Simpsons episode "Lisa on ice")

People talk about people talking about you : Valleywag

07:09 PM, 01 Mar 2006 by Mark Aufflick Permalink | Comments (0)

More RSS changes

I have set my main blog rss to redirect to a FeedBurner optimised rss feed. I haven't changed dev-blog or my software blog.

Please let me know if you notice any problems.

12:06 AM, 01 Mar 2006 by Mark Aufflick Permalink | Comments (0)

"Smart" Advertising and conflicts of interest

If I was paying for this banner ad placement I'd be asking for my money back!

09:17 PM, 28 Feb 2006 by Mark Aufflick Permalink | Comments (0)

It's true - a balanced diet includes chocolate!

Over a 15 year study,

...the biggest cocoa eaters were at half the risk of dying compared to men who did not eat it. (Reuters - Cocoa consumers have lower risk of disease in study)

"Before we can say cocoa can save your life, a larger study would need to be done" - I volunteer for the test group! To eliminate the psychological effects you would need a control group - but what would the control group be given as a chocolate placebo, Laxette?!

09:01 PM, 28 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Apple, you make me so happy!

Last night's media event is everything I was hoping for - yes and more.

For about the last 12 months I've been telling anyone who would listen that I was going to make a home entertainment unit out of a Mac mini. Then it became the Intel Mac mini with Front Row. I was really hoping that this release would include said item, and it did. Mac per square inch

The hard drive interface has been upgraded to Serial ATA which is great for recording video. It uses shared memory for the video however. Normally this would be a kiss of death, but with all these new Intel chips I don't know what's what any more!

Perfect for home entertainment. In the words of Larry Magid, "If I were Sony CEO Sir Howard Stringer, I'd be keeping a very close eye on Steve Jobs." (CBS News)

The other great thing Apple has done is publish a Ruby on Rails tutorial on their developer site:

Sure it's nothing that you couldn't read elsewhere, but it is going to be seen as an endorsement of RoR by Apple - and that's nothing to sneeze at. Expect to see New York Times articles about how RoR is legitimised by Apple and.

07:15 PM, 28 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Change to RSS feed

I have hacked my old and decrepit weblog code to generate html in it's rss content (as opposed to a single chunk of ascii as previously).

This should be in a paragraph by itself.

And this should be a link to Gumby and Friends.

Please let me know if you notice anything wierd.

07:55 PM, 27 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Cross-language development []

Fun code that compiles/executes in 8 languages!

It mostly just relies on the fact that different languages have conveniently different comment characters (eg. #define would be a comment in shell or perl), but it's still kinda cute!

07:45 PM, 26 Feb 2006 by Mark Aufflick Permalink | Comments (1)

meebo meebo meebo

meebo totally rocks. It's an in-browser instant messenger that works really well. It's design is nice and clean (compare the horrible AIM Express client from AOL).

For maximum pleasure, I suggest the following:

  • Install a greasemonkey script to automatically log you in. I modified this script from to actually do the login. See my comment on that page for more details.
  • Also install this secure meebo greasemonkey script from
  • Then make a bookmark to the link:'', '', 'menubar=no,height=400,width=400, resizable=yes,toolbar=no,location=no,status=no')
  • (You might need to remove the spaces from that link)

02:11 AM, 20 Feb 2006 by Mark Aufflick Permalink | Comments (0)

60th anniversary of ENIAC - Great interview with one of the co-inventors Presper Eckert.

I had the privilege of seeing UNIVAC when I was at the Melbourne UniversityComputer Science Department (gotta love that they're sticking with their domain :) Apparently they powered it up sometimes and it worked, but due to lack of spare tubes they didn't do it very often.

08:15 PM, 16 Feb 2006 by Mark Aufflick Permalink | Comments (2)

Opensource server software will ultimately be better than "enterprise" options

I'm currently working out how to extract some historical information from Computer Associates autosys. For those who don't know, autosys is an "enterprise" job scheduling system. Think a multi-machine cron on steroids with depedency management.

I'm sure it's not worth nearly what we pay for it, but for all my complaints it's quite a capable system.

I'm not that familiar with autosys yet, so I went to look for documentation from the vendor.

That was mistake number one. The Computer associates website is confusing to start with. Many clicks later I was able to find the link to access the pdf manuals for autosys but I had to register. So register I did, but the link that was emailed to me to verify my registration didn't work in firefox! Luckily (for sufficiently small values of luck) I am on a windows machine so I could open the link in MS internet explorer and validate my account. The whole process was futile however, as CA only allow you to download the documentation for the most recent version. This site is running a major version behind, so the manuals that were there were no use.

I managed to track down the relevant version of manual by searching for 'autosys' on our internal wiki - a victory for collaborative distribution of knowledge over the company who should be trying to help me 'leverage our investment in job scheduling infrastructure', whatever that means.

The manual, however, is woeful. It's badly written, verbose in the fluff and disturbingly lacking in detail. I have been unable to find much of the information I need and will have to resort to poking around the database (which thankfully is Sybase not proprietory to the product). If that doesn't answer my questions I'm kinda stuck. I can't read the source code (obviously) and the (non-authorised) mailing lists haven't had any traffic in the one week I've been monitoring them.

Speaking of Sybase, it is also hard to get good documentation on that as well, but let's not get into that here.

The problem is that job scheduling is incredibly boring. Why would CA bother to soend time and money producing good documentation since the people who actually use it don't make the purchasing decisions.

Compare this to a (hypothetical) open source job scheduling project. The people who write the code would be actual users of the system. It will be valuable for them to document it becuase that will help them and their co-workers. A mailing list would have developers and users swapping problems and solutions. If the original authors got bored or went out of business or whatever there would be no problem because the other users can continue the development (or hire someone to do it if they don't have the skills). For the licensing and management costs of these sorts of "enterprise" software products, it would be very viable to hire a developer or two to keep an opensource alternative humming. And when your boss wants you to implement some sort of job schedule not supported, you can add that feature and fold it back in for everyone else.

I know that this is all obvious stuff, and most people in the opensource community knows that it is true, but it is still often thought that the major benefit of opensource is cost and that if you've got money to burn you are probably better off buying a commercial product that will come with support and documentation (and someone to blame).

My experience is that exactly the opposite is true. Now if I can just get some budget to implement an open source job sceheduling tool...

08:35 PM, 15 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Mysql stupidity and overriding ruby methods

I *knew* I would regret using mysql for this project instead of postgresql. "But it's only got 3 tables" I said to myself...

Who knew that by default mysql selects were case insensitive?! I'm not talking about LIKE being case insensitive (although they are case insensitive too, just like in my nemesis Sybase), I'm talking about select * from foo where bar = 'aaa' finding a record where bar = 'AAA'. That's cruel and unusual.

The solution, in this particular incarnation of mysql anyway, is to make the column a "binary varchar" column. I'm not sure how that differs to a normal varchar (perhaps normal varchars are stored as analog vector data instead of binary data) but it works just like a normal varchar, and select matching is case sensitive. Phew, off the hook.

Except... Active Record (from Ruby on Rails) says "aha - it's a binary column, so it must be a blob. I'll pack the data in using some mysql binary quoting syntax that your particular version of mysql doesn't support." And you get this:

.../active_record/connection_adapters/ abstract_adapter.rb:88:in `log': Mysql::Error: You have an error in your SQL syntax near ''333630204465677265657320466f637573' WHERE id = 1' at line 1: UPDATE customers SET `username` = NULL, `password` = NULL, `name` = x'333630204465677265657320466f637573' WHERE id = 1 (ActiveRecord::StatementInvalid)

Right... :(

Thankfully, overriding a method in the symbol table (or whatever the ruby runtime nomenclature for the Ruby equivalent is) is just as easy as in Perl. In the model ruby file in question, I just added:

module ActiveRecord
  module ConnectionAdapters
    class MysqlAdapter
      def quote(value, column = nil)
and all is well. Sigh.

08:54 AM, 13 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Doing autosys / autorep searches in an emacs buffer

I'm going to need to start an emacs code page - It's actually quite easy once you get the hang of lisp. I'm surprised it took me so long to realise that if you think like TCL then you're half way there!

(defun arep (arep-job)
  "Lookup a JOB with autorep"
  (interactive "sJob: ")
  (setq arep-query (concat "%" arep-job "%"))
  (setq arep-buffer-name (concat "*autorep " arep-query "*"))
  (pop-to-buffer arep-buffer-name)
  (setq buffer-read-only nil)

  (call-process "autorep" nil arep-buffer-name t "-j" arep-query)

  (highlight-regexp "__+" 'hi-red-b)

  (call-process "autorep" nil arep-buffer-name t "-j" arep-query "-q")

  (highlight-regexp "----+" 'hi-red-b)
  (highlight-regexp "^ *[^#: ]+:" 'font-lock-builtin-face)
  (highlight-regexp "#.*$" 'font-lock-comment-face)
  (goto-line 1)
  (setq buffer-read-only t)
  (set-buffer-modified-p nil)
Update: If you like the above, you'll love jil-mode.el - I should be able to replace the bodgy highlight-regexp with it. I had to make the following change to correctly highlight lines preceded with spaces:
(defconst jil-font-lock-keywords
  '(("^[ \t]*\\(\\(\\sw\\|\\s_\\)+\\)\\>:" (1 font-lock-constant-face))
    ("<\\([^>\t ]+\\)\\([\t ]*\\([^=>]+\\)=\\([^>\t ]+\\)\\)*>"
     (1 font-lock-builtin-face)
     (3 font-lock-type-face nil t)
     (4 font-lock-variable-name-face nil t))
    ("\\<\\(SUCCESS\\|FAIL\\|AND\\|EXITCODE\\)\\>" (1 font-lock-function-name-face)))
  "Additional expressions to highlight in Assembler mode.")

08:54 PM, 12 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Search ruby docs (ri) in emacs

It's far from perfect, but it's a start and it applies ansi colors. My emacs lisp is pretty bad, so please feel free to provide enhancements.

Note one MAJOR bug is that if you have a buffer called *shell* it will switch there instead of your docs (so rename your shell buffers to something else). What I really need to do is figure out how to use ansi-color.el outside the interactive shell.

(defun ri (ruby-class-name)
  "Lookup a class in ri and put it into a buffer"
  (interactive "sClass: ")
  (let* ((explicit-shell-file-name "ri")
         (explicit-ri-args '("-T" "-f" "ansi"))
         (rishell-buffer-name (concat "*ri " ruby-class-name "*")))
    (comint-check-proc rishell-buffer-name) ; see shell.el
    (if (not (get-buffer rishell-buffer-name))
          (setq ansi-color-for-comint-mode t)
          (add-to-list 'explicit-ri-args ruby-class-name)
          (rename-buffer rishell-buffer-name)
    (pop-to-buffer (get-buffer rishell-buffer-name))
    (setq buffer-read-only t)
    (setq buffer-modified-p nil)
    (goto-line '1)

09:45 AM, 12 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Language translation software

I am often surprised by how readable automatically translated web pages are. They are, howver, never without humour. Take for example this german article on file monitoring and replication.

The acronym FAM is supposed to stand for File Alteration Monitor but I can only assume that the author mistakenly thought it stood for File Ancestor Monitor, because whatever the German was ended up translated as file old person ration monitor although I have no idea where the ration came from!

Then the author talks about the complicated configuration files for the changedfiles program. Obviously the English phrase "that sucks" is fairly common across nationalities because there is a single word sentance Suction. I Must remember to use that in my writing! Sybase has no support for sequences. Suction. I love it :)

04:22 AM, 12 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Aerogel that you can buy! []

Small pieces from $USD30!

For those who have no idea what I'm raving about, Aerogel is composed of 99.8% air - it's density is just 3 milligrams per cubic centimeter and weighs only three times that of air. Aerogel can support thousands of times its own weight and its melting point is 2,200 degrees F (1,200 degrees C).

It's just plain cool. Or hot, depending on how you look at it.

03:25 AM, 07 Feb 2006 by Mark Aufflick Permalink | Comments (0)

George Bush was there, so was King Abdullah and many others.

In a truly awesome and refreshingly puncchy speech, Bono talked about God and justice. Here's a little taster, but go read the whole thing - you won't be disappointed.

That's why I say there's the law of the land... and then there is a higher standard. There's the law of the land, and we can hire experts to write them so they benefit us, so the laws say it's OK to protect our agriculture but it's not OK for African farmers to do the same, to earn a living?

As the laws of man are written, that's what they say.

God will not accept that.

Mine won't, at least. Will yours?

11:14 PM, 05 Feb 2006 by Mark Aufflick Permalink | Comments (0)

The Mythbusters crew all used to work at ILM (George Lucas's Industrial Light and Magic special effects company) - who knew!

This is a cool interview on the starwars site - now can we see C3PO replace buster ? :)

05:27 PM, 02 Feb 2006 by Mark Aufflick Permalink | Comments (0)

PS: I bought the Pick Axe book

Programming Ruby (Second Edition) . It's like the Camel book for Ruby.

09:34 PM, 01 Feb 2006 by Mark Aufflick Permalink | Comments (0)

The Apple Way?

I just saw The Apple Way in a local bookstore.

From the back cover:

The Apple Way reveals the secrets and management principles that keep Apple ahead of the curve--including innovative product development, cutting-edge marketing strategies, sleek design and packaging, and a high-performance corporate culture. You'll discover how Apple combines consistency with continuity and follow-through, and balances vision with practicality.

I have read way too many Apple/Steve Jobs books than is healthy, worked in the management of an Apple reseller here in Australia and basically ingested as much Apple as possible. I can tell you that the book is lying! There has been no contiguous strategy at Apple, other than letting smart people do stuff under the influence of the reality distortion field. Unless you count Steve swearing at his staff, there is no "high performance corporate culture". Apple has worked when it has embraced it's geek culture - design geekiness as well as technical geekiness.

I like Apple. There are a lot of good and bad lessons that can be learnt from Apple. I even like what I know about Steve Jobs. Given the chance to work in a Steve Jobs company, I would jump at it.

Having said that, it is precisely by not following reasonable, responsible rules that Apple beats the curve. Be very wary of any book that pupports to tell you "how Apple does it".

09:30 PM, 01 Feb 2006 by Mark Aufflick Permalink | Comments (0)

User login in 5 minutes flat

Thanks to LoginGenerator my rails app now has barebones (but funtional) user authentication.


Lars always said it was going to be this good :)

09:08 AM, 01 Feb 2006 by Mark Aufflick Permalink | Comments (0) is down!

It sure is going to be hard to learn ruby and rails (from scratch) plus rewrite a client's website in one night without documenation! I have emailed the admin, hopefully he is in a different timezone and will be up soon :)

07:38 AM, 01 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Web file uploading the EASY way

Yes why, Ruby is indeed poignant. Uploading files with cgi/perl/mason/aolserver is a pain in the butt. With ruby, it's:

def upload_customers
file_content = @params["customers_prn_file"].read

It's almost too easy!

06:37 AM, 01 Feb 2006 by Mark Aufflick Permalink | Comments (3)

Getting Ruby on Rails up on Mac OS X

So to add some spice, I'm not even going to use my trusty Linux workstations (yes, I have two) - It's my lovely shiny Powerbook all the way baby.

Here's all it took:

  1. Have Darwinports already installed (you know you should)
  2. install a reasonable version of ruby sudo port install ruby
    wait a while
  3. install MySQL (I told you we all need some grit) sudo port install mysql4
    wait another while
    Well, that was the plan, but the port is refusing to compile, so I have used a MacOS X mysql package
  4. install ruby gems sudo port install rb-rubygems
  5. install the mysql ruby driver sudo gem install mysql -- --with-mysql-dir=/opt (or supply /usr/local/mysql if you are using the package installed mysql like me)
  6. install rails sudo gem install rails --include-dependencies

MacOS X has an older version of ruby installed, so make sure that your path has /opt/bin first, so that you get to use the Darwinports version first.

I thought I would *really* get into the whole Rails vibe and I started downloading the TextMate demo. But thankfully it's a sizeably package and during the download I came to my senses and kept using GNU Emacs under X11.

For the pleasure of emacs users out there, here are the ruby related portions of my .emacs (which could do with some tweaking I'm sure) can be found in my cvs repository: You can get the .el files from the ruby cvs repository

03:21 AM, 01 Feb 2006 by Mark Aufflick Permalink | Comments (0)

Ruby on Rails to the Rescue!! (Or to my demise... we shall see)

Well, I've played around before, but always retreated to my trusty friends Postgres, OpenACS and Perl.

Ok, so I also have to deal with Sybase, but everyone needs a little grit in their life (otherwise we wouldn't appreciate the pearls!)

But I need to finally release some code that's been stewing in my CVS for 10 months and I don't like how I did it. So I'm going to rewrite the whole stinking thing in Ruby on Rails tonight. You heard me - in one night.

I'll keep you posted :)

02:59 AM, 01 Feb 2006 by Mark Aufflick Permalink | Comments (0)

The issue I'm interested in is:

  • Apple is only providing Java 1.4 and newer for Intel Mac's. Fair enough.
  • NeoOffice/J has components that rely on Java 1.3
  • It's not easy to port between Java versions
  • Java is closed-source so it's not possible for the public to port Java 1.3 to Intel Macs (as opposed to Perl, Python or Ruby - other portable languages that need a native runtime)
  • Java: Write many times, run in a few places™

12:52 AM, 17 Jan 2006 by Mark Aufflick Permalink | Comments (0)

You gotta love Paul Otellini

Apparently it was Apple's idea to have Paul Otellini appear in the bunny suit during Steve Jobs' recent keynote address. I really admire that he can be the CEO of such a globally serious company and still be able to enjoy some self-deprecating humour.

I've long been a fan of Paul's work and this just confirms that he's a good bloke. Who would have thought that Intel could be a company that we would grow to love. I don't think the world yet realises how much of a coup this is - having Apple move to Intel - but Paul Otellini sure does.

Update: Of course the fact that Intel now sponsorBMW/Sauber F1 just makes me happier that I'm allowed to love them now!

06:00 PM, 16 Jan 2006 by Mark Aufflick Permalink | Comments (0)

Cool Tunes []

Listen to your favourite tunes while enjoying cold beverages and hanging out with your friends.

Your ipod plugs in, it holds 8 cans of drink, INSTANT PARTY!.

From the mad people at

01:08 AM, 16 Jan 2006 by Mark Aufflick Permalink | Comments (0)

mozex + cygwin to edit Firefox textareas in X11 emacs

I may be a bit extreme, but if anyone else wants to do this, it's remarkably easy.

Assuming you already use emacs under cygwin, first make a batch file to abstract the wierdness. I use the dtemacs wrapper for gnuserv, but you can substitute any cygwin X11 editor in for dtemacs below (or xterm -e 'ed' if you are so inclined).


@echo off

SET RUN="C:\Program Files\Cygwin\bin\run" -p /usr/X11R6/bin

%RUN% bash -wait -c "/usr/local/bin/dtemacs `/bin/cygpath -u '%1'`"

The call to cygpath in the backticks converts the path supplied by mozex from something like c:\temp\asdfhasdfjh into /cygdrive/c/temp/asdfasdfdsf that emacs can understand.

Then install mozex into Firefox. Mozex works fine under firefox 1.0 and later, but you can't seem to access the config gui anywhere. You can, however, easily add the following lines to your prefs.js:

user_pref("mozex.command.textarea", "C:\\Progra~1\\Cygwin\\usr\\local\\bin\\dtemacs.bat %t");
user_pref("mozex.general.tmpdir", "c:\\temp");

Adjust the above as per your cygwin directory and note that you have to use the 8.3 form of pathname in the mozex userpref.

Now I can edit twiki pages in X11 emacs via my windows firefox - smashing!

Update: The above link for mozex now directs you to a new development version of mozex that has a preferences UI that works with Firefox 1.5. I haven't tried upgrading my Windows Firefox yet, but it works a treat on MacOS X. It has even fixed the issue where you had to click in the textarea to update the content :)

09:33 PM, 15 Jan 2006 by Mark Aufflick Permalink | Comments (0)

RSS feeds now with full content

Due to popular demand (from Lars), I have hacked my ancient blog software to provide the full conent of the blog in the feed. It should be formatted reasonably since the content is being run through ns_adp_parse, but please let me know if you notice any anomolies.

11:45 PM, 12 Jan 2006 by Mark Aufflick Permalink | Comments (0)

RSS feeds now with full content

Due to popular demand (from Lars), I have hacked my ancient blog software to provide the full conent of the blog in the feed. It should be formatted reasonably since the content is being run through ns_adp_parse, but please let me know if you notice any anomolies.

11:45 PM, 12 Jan 2006 by Mark Aufflick Permalink | Comments (0)

The Dosfish that sails upon the Pea Sea

(I happened across this on Sun Solaris Humor who in turn happened across it in a 1995 rec.humor.funny post that in turn happened across it on the NANET Comedy Conference).

Long ago, in the days when all disks flopped in the breeze and the writing of words was on a star, the Blue Giant dug for the people the Pea Sea. But he needed a creature who could sail the waters, and would need for support but few rams.

So the Gatekeeper, who was said to be both micro and soft, fashioned a Dosfish, who was small and spry, and could swim the narrow sixteen-bit channel. But the Dosfish was not bright, and could be taught few new tricks. His alphabet had no A's, B's, or Q's, but a mere 640 K's, and the size of his file cabinet was limited by his own fat.

At first the people loved the Dosfish, for he was the only one who could swim the Pea Sea. But the people soon grew tired of commanding his line, and complained that he could be neither dragged nor dropped. "Forsooth," they cried. "the Dosfish can only do one job at a time, and of names, he knows only eight and three." And many of them left the Pea Sea for good, and went off in search of the Magic Apple.

Although many went, far more stayed, because admittance to the Pea Sea was cheap. So the Gateskeeper studied the Magic Apple, and rested awhile in the Parc of Xer-Ox, and he made a Window that could ride on the Dosfish and do its thinking for it. But the Window was slow, and it would break when the Dosfish got confused. So most people contented themselves with the Dosfish.

Now it came to pass that the Blue Giant came upon the Gateskeeper, and spoke thus: "Come, let us make of ourselves something greater than the Dosfish." The Blue Giant seemed like a humbug, so they called the new creature OZ II.

Now Oz II was smarter than the Dosfish, as most things are. It could drag and drop, and could keep files without becoming fat. But the people cared for it not. So the Blue Giant and the Gateskeeper promised another OZ II, to be called Oz II Too, that could swim the fast new 32-bit wide Pea Sea.

Then lo, a strange miracle occurred. Although the Window that rode on the Dosfish was slow, it was pretty, and the third Window was the prettiest of all. And the people began to like the third Window, and to use it. So the Gateskeeper turned to the Blue Giant and said, "Fie on thee, for I need thee not. Keep thy OZ II Too, and I shall make of my Window an Entity that will not need the Dosfish, and will swim in the 32-bit Pea Sea."

Years passed, and the workshops of the Gateskeeper and the Blue Giant were overrun by insects. And the people went on using their Dosfish with a Window; even though the Dosfish would from time to time become confused and die, it could always be revived with three fingers.

Then there came a day when the Blue Giant let forth his OZ II Too onto the world. The Oz II Too was indeed mighty, and awesome, and required a great ram, and the world was changed not a whit. For the people said, "It is indeed great, but we see little application for it." And they were doubtful, because the Blue Giant had met with the Magic Apple, and together they were fashioning a Taligent, and the Taligent was made of objects, and was most pink.

Now the Gateskeeper had grown ambitious, and as he had been ambitious before he grew, he was now more ambitious still. So he protected his Window Entity with great security, and made its net work both in serving and with peers. And the Entity would swim, not only in the Pea Sea, but in the Oceans of Great Risk. "Yea," the Gateskeeper declared, "though my entity will require a greater ram than Oz II Too, it will be more powerful than a world of Eunuchs.

And so the Gateskeeper prepared to unleash his Entity to the world, in all but two cities. For he promised that a greater Window, a greater Entity, and even a greater Dosfish would appear one day in Chicago and Cairo, and it too would be built of objects.

Now the Eunuchs who lived in the Oceans of Great Risk, and who scorned the Pea Sea, began to look upon their world with fear. For the Pea Sea had grown, and great ships were sailing in it, the Entity was about to invade their oceans, and it was rumored that files would be named in letters greater than eight. And the Eunuchs looked upon the Pea Sea, and many of them thought to immigrate.

Within the Oceans of Great Risk were many Sun Worshippers, and they wanted to excel, and make their words perfect, and do their jobs as easy as one-two-three. And what's more, many of them no longer wanted to pay for the Risk. So the Sun Lord went to the Pea Sea, and got himself eighty-sixed.

And taking the next step was He of the NextStep, who had given up building his boxes of black. And he proclaimed loudly that he could help anyone make wondrous soft wares, then admitted meekly that only those who know him could use those wares, and he was made of objects, and required the biggest ram of all.

And the people looked out upon the Pea Sea, and they were sore amazed. And sore confused. And sore sore. And that is why, to this day, Ozes, Entities, and Eunuchs battle on the shores of the Pea Sea, but the people still travel on the simple Dosfish.

10:07 PM, 12 Jan 2006 by Mark Aufflick Permalink | Comments (0)

My agreement with the writings of Joel Spolsky waxes and wanes, but the forward he wrote for a new book "Micro-ISV: From Vision to Reality" (by Bob Walsh) contains two nuggets of incredibly true advice:

Number One. Don't start a business if you can't explain what pain it solves, for whom, and why your product will eliminate this pain, and how the customer will pay to solve this pain. The other day I went to a presentation of six high tech startups and not one of them had a clear idea for what pain they were proposing to solve. I saw a startup that was building a way to set a time to meet your friends for coffee, a startup that wanted you to install a plug-in in your browser to track your every movement online in exchange for being able to delete things from that history, and a startup that wanted you to be able to leave text messages for your friend that were tied to a particular location (so if they ever walked past the same bar they could get a message you had left for them there). What they all had in common was that none of them solved a problem, and all of them were as doomed as a long-tailed cat in a room full of rocking chairs.

Number Two. Don't start a business by yourself. I know, there are lots of successful one-person startups, but there are even more failed one-person startups. If you can't even convince one friend that your idea has merit, um, maybe it doesn't? Besides, it's lonely and depressing and you won't have anyone to bounce ideas off of. And when the going gets tough, which it will, as a one-person operation, you'll just fold up shop. With two people, you'll feel an obligation to your partner to push on through. P.S., cats do not count.

Of course following this advice doesn't guarantee success, but not following it makes it extremely difficult to succeed.

08:37 PM, 11 Jan 2006 by Mark Aufflick Permalink | Comments (0)

How to be a Programmer []

Estimation takes practice. It also takes labor. It takes so much labor it may be a good idea to estimate the time it will take to make the estimate, especially if you are asked to estimate something big.

And a lot of other useful discussion in this essay

11:52 PM, 10 Jan 2006 by Mark Aufflick Permalink | Comments (0)

Emacs Keybindings *everywhere*

Well, world domination might be hard, but at least getting emacs keybindings working (nearly) everywhere doesn't have to be. Let's see how we're going:

  • Well, you can use emacs for starters!
  • Shell - bash uses emacs keybindings
  • Many GNU apps default to emacs keybindings
  • Gnome apps (includes Firefox) used to default to emacs keybindings. These days you need to change your user config to tell all Gnome apps to use emacs keybindings (see this freebsd gnome list message)
  • Windows

      Surprisingly Windows is really easy to convert to emacs keybindings in every application. That's right, you can use emacs keybindings in Microsoft Word!! All you need is XKeymacs. It's very configurable per-application.

    MacOS X

      Conveniently, MacOS doesn't use the control key much, so MacOS X is able to offer emacs keybindings without breaking the standard keybindings in other applications.
    • All Cocoa applications support simple emacs keybindings by default (C-a, C-e, C-k etc.). You can get even more advanced bindings (including multi-key C-x bindings). See here, here and here.
    • Firefox on MacOS X is unfortunately designed to be Mac Friendly, which means if you're a Unix/Emacs person you're left out. It doesn't even support the basic emacs bindings that Mac Cocoa applications do. Fortunately Firefox is such a dynamic runtime it's easy to rectify. See This mozillazine article for simple instructions.
    • And yes, I do use all these operating systems every day (including usually at least two brands of Unix)! I don't have any information on emacs keybindings for either BeOS or AmigaOS ;)

07:30 PM, 10 Jan 2006 by Mark Aufflick Permalink | Comments (0)

Very interesting article - in depth explanation of the C type system. Mostly stuff I already knew, but it is all so much clearer in my head. Excellent read if you're into that sort of stuff!

Cross posted from my feed.

12:27 AM, 06 Jan 2006 by Mark Aufflick Permalink | Comments (0)

This stuff is freakin fantastic. If Motorolla can make Mobile/WiFi/Voip as seamless as they are promising, we might finally have the products we all saw on Beyond 2000!

(For non-Australian readers, Beyond 2000 was a Science/Tech TV show focussing on cool new science and tech. It aired on TV in the late 80s, early 90s. It has recently re-emerged in a similar format: )

01:42 AM, 04 Jan 2006 by Mark Aufflick Permalink | Comments (0)

Get emacs to set your xterm title

I very rarely have an xterm open that's not running emacs (I run my shells inside emacs, except on production logins), so an xterm title of 'xterm' doesn't really help distinguish between windows).

First you need xterm-frobs.el from Noah Friedman's emacs lisp code. Place it in your site-lisp directory or wherever you keep custom lisp.

Then add the following code in whatever block your .emacs executes when you're in an xterm:

(require 'xterm-frobs)
(defun my-set-xterm-title ()
(concat (getenv "HOSTNAME") "- emacs - " (buffer-name))))

(let ((term (getenv "TERM")))
(when (and (not window-system)
(or (string= term "xterm")
(string= term "rxvt")))
(require 'xterm-frobs)
(add-hook 'window-configuration-change-hook 'my-set-xterm-title)
(add-hook 'emacs-startup-hook 'my-set-xterm-title)))

(I came up with this code based on the following urls:

11:31 PM, 03 Jan 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