Begin main content

Book Review: iPhone SDK 3 Visual Quickstart Guide

CocoaHeads Sydney member Duncan Campbell has just published a book with PeachPit press titled "iPhone SDK 3 Visual Quickstart Guide".

Like all of Peachpit's "Visual Quickstart Guides", the book is mostly broken into two columns - text and images. At first I thought it would suck! As soon as I got into it though, I quite liked the thin column. It has readability like a newspaper, although it did make following inline code a little tedious.

The book covered all the basics you need for making a great app, and made some tricky tasks simple - like custom cells and multi-touch.

It avoids a common approach of many intro books where they continually build into an ever evolving single app. Instead, each example is short and entirely standalone. I have to say it was refreshing - it avoided wasting time in frivolities and allowed the author to introduce concepts at the time he chose, rather than the time it was needed to continue building the app.

I also appreciated the time spent on one of the most important rools - the Xcode interface. Even I learned a handy Xcode shortcut!

The choice to use code for UI layout instead of interface builder makes the writing easier to follow, no enless 'click here, control click and drag here...' and also avoids those madenning bugs where you've missed a step but can't easily compare the compound result. Similarly, the continual tweaks to IB won't invalidate the examples.

I also appreciated how each example was standalone - building and running an interesting looking example didn't rely on carefully building examples stretching back through previous chapters.

Two extra chapters can be downloaded as PDFs from the Peachpit press website once you have the book covering the Address Book api and the Media apis. The latter is very useful - covering saved images, using the camera and playing audio and video.

While this is a book for people starting out with iPhone programming, it's not for people who have never programmed before. If you have programmed before but don't know at least the bare basics of one of C, C++, Objective-C then I would suggest completing an introduction to Objective-C first. Apple has one and there are lots of great books.

One of the positives above is that the use of code to create UI controls is repeatable, easy to error check and shows how it all works. Once you start building apps, though, you'll use Interface Builder a lot. You'll need to brush up on that after completing this book. Again, Apple has one and there are lots of great books! Aaron Hillegass's Cocoa Programming for Mac OS X will cover both Objective-C and Interface Builder really well - and you'll learn how to write MacOS X apps to boot!

So in summary, it's a great book. I enjoyed it and you hopefully will too! Available at Amazon and all good bookstores :)

04:33 AM, 25 Oct 2009 by Mark Aufflick Permalink | Comments (2)

Problem compiling Erlang 13B02 on MacOS

I was getting the following error compiling erlang 13B02 on MacOS Leopard:

Thanks to the Google translation of a page in Japanese on (link) I figured out I had to rebuild wxWidgets (even though version 2.8 already seems installed in Leopard). Here's the nub of it:

  • Download wxWidgets 2.8.x, untar to a directory of your choice
  • cd into the un-tarred directory and make a build dir (eg. mkdir MYBUILD)
  • cd into that new directory and build a static install into a destination of your choice (I put it in /opt/wxWidgets28):
    ../configure --with-opengl --enable-unicode --enable-graphics_ctx --enable-gnomeprint --disable-shared --prefix=/opt/wxWidgets28
    sudo make install
    cd contrib/src/stc
    sudo make install
  • Now you can build OTP/Erlang properly, but make sure the new wx-config is first in your path, eg:
    PATH=/opt/wxWidgets28/bin:$PATH ./configure ....

04:53 AM, 30 Sep 2009 by Mark Aufflick Permalink | Comments (2)

Higher Order Perl now available as a *free* PDF

I've reviewed "Higher Order Perl" by Mark Jason Dominus before - it's a great book for people who know Perl and want to master topics such as parsing or memoisation or who want to incorporate more functional approaches such as currying into their code.

It's worth buying, but now you can also get a free PDF thanks to the generosity of the author, Mark Jason Dominus:

12:37 AM, 17 Sep 2009 by Mark Aufflick Permalink | Comments (0)

CocoaHeads Sydney October Meetup - Thursday October 1st - Blocks and Beer!

Hooray - it's that time of month again!

Chris Suter will be giving a talk on Blocks and perhaps some other shiny things he learnt at WWDC. It promises to be a great topic so come and heckle! There are a few new people coming so please be welcoming :)

As always, bring along any Mac related projects you want to show off
or ask for advice on.

IMPORTANT! Room has changed.

It will now be in CB02.05.32.

That's Building 2, Level 5, Room 32. You can access building 2 via the main entrance. This will be our room for the rest of the year.

You might find the UTS Broadway campus map useful:

Thanks to David Morrison for sorting this out.

A gleaming pile of laptops will surely guide you.

The Australian CocoaHeads mailing list is at

08:49 AM, 16 Sep 2009 by Mark Aufflick Permalink | Comments (0)

BT's ADSL setup experience

I just set up my Uncle's British Telecom (BT) ADSL and as someone intimately familiar with the various back and front ends of an ADSL network I can't believe how well it was done.

Firstly, no username and password were necessary. The supplied ADSL wireless router was stock issue from their warehouse with a default PPP username and password - the authentication is done via the copper pair/termination point.

So that was internet up and running - plug in the phone and power.

The router includes wireless, but no generic security issues here - the stock issue router has wireless turned on, but with a randomly generated network name and WPA2 Personal encryption/authentication. No need to change these as the BT box included a card with the details that you could hand to a visitor to allow them to connect.

I literally spent 60 seconds setting the whole thing up and 5 minutes reading the FAQ because I was *sure* there had to be more to it!

06:06 PM, 13 Aug 2009 by Mark Aufflick Permalink | Comments (0)

CocoaHeads Sydney - room change for tonight (August)

It will now be in CB04.02.33.

Thats Building 4, Level 2, Room 33. Its the new refurbished Science
building, corner of Thomas and Harris st, diagonally opposite ABC.

You might find the UTS campus map useful:

Thanks to David Morrison for sorting this out.


02:47 AM, 06 Aug 2009 by Mark Aufflick Permalink | Comments (0)

CocoaHeads Sydney - Meetup This Thursday August 4th

After last month's shemozzle we're back on track with our usual moderate level of organisation for CocoaHeads.

The August meet is this coming Thursday (we always meet the first Thursday). Venue is the same as the last three months: UTS Broadway CB10.07.114 ie. Building 10, Level 7, Room 114

Google map:
UTS Broadway campus map:

Time: 6:30pm or whenever

We have a couple of short/lightning talks in planning - one is confirmed that I am excited to share with you. Continuing our great tradition of cross-pollonating with fpsyd, Alan Rogers is going to give us a lightning talk about Objective-J and Cappacino. Objective-J is a language inspired by Objective-C and implemented on top of JavaScript. Cappacino is a framework based on that. Alan met up with the guys behind Objective-J at WWDC this year.

As always we will be retiring for beers once the formal part of proceedings has finished.

Look forward to seeing you all there!

09:25 AM, 04 Aug 2009 by Mark Aufflick Permalink | Comments (0)

Safari 4.0.2

Unfortunately the recent Safari 4.0.2 update doesn't seem to have fixed the cpu usage runaway with Google Apps email. Basically after some time (say 10 minutes) of having Google Apps email open, Safari 4 goes to 20% cpu usage and stays there.

It's a bug in either Google's Javascript or in Safari because the cpu utilisation is minimal in the first 10 minutes, and drops back to zero again as soon as you close the tab with Google Apps email.

I was *really* hoping that the "Nitro stabilisation" improvements would resolve that.

06:22 PM, 12 Jul 2009 by Mark Aufflick Permalink | Comments (0)

Congratulations Mark Webber!

Mark Webber's first F1 victory - awesome!

I can't remember the last time we saw a drive through penalty, must be a few years surely, and he still had a 9.2 second lead at the finish.


10:23 AM, 12 Jul 2009 by Mark Aufflick Permalink | Comments (0)

GingerTea == flu--;

What with all the flu around at the moment you might be feeling a bit under the weather like I was a few weeks ago. Don't worry, it wasn't swine flu :) Although with the high rate that's going around in Victoria it's not really a smiling matter...

Anyhoo, I just want to give a shout out to my friend Lars for his awesome ginger tea recipe/instructions. I'm sure it helped me get better but even if it didn't, it makes you feel nicer on a cold day!

His video blog CoachTV is normally about business and life coaching, but I have to say the ginger tea is my favourite!

02:54 AM, 18 Jun 2009 by Mark Aufflick Permalink | Comments (0)

MasterChef: Snapper en pappillotte with chunky chips

For all my overseas readers (as if there is anyone in Australia *not* watching MasterChef), here is an awesome simple way to make Snapper en pappillotte with amazing chunky chips.

04:12 AM, 30 May 2009 by Mark Aufflick Permalink | Comments (1)

Cookie Monster interviewed

Nice to see someone other than Elmo getting some media attention :)

03:24 AM, 19 May 2009 by Mark Aufflick Permalink | Comments (0)

ruby 1.9 issue on Mac (MacPorts) : [BUG] unknown type 0x22 (oxc given)

From reading internet threads about the error, [BUG] unknown type 0x22 (oxc given), it seems to occur when C code compiled against ruby 1.8 is loaded into ruby 1.9.

At least using the MacPorts ruby 1.9 install there is a very odd issue related to this. You get a crash, under some circumstances, when a gem loads into ruby 1.9 and the MacOS linker decides it's a good idea to link against the standard OS installed version 1.8 libruby.

What's especially odd is that the stack trace doesn't show it, but i did track it down by running lsof in a while /bin/true loop as I caused the crash:

ruby1.9 41978 aufflick txt REG 14,2 3148976 67264 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib
ruby1.9 41978 aufflick txt REG 14,2 1906476 3915360 /opt/local/lib/libruby1.

Now to find a way around it!

Update: I may have found the culprit. The ruby core .dylib files (the Mac equivalent of .so files) are correctly linked to the ruby1.9 library, but the thin library (installed via gem1.9) is not:

bash-3.2$ otool -L /opt/local/lib/ruby1.9/gems/1.9.1/gems/thin-1.2.1/lib/thin_parser.bundle
/usr/local/lib/libruby.dylib (compatibility version 1.8.0, current version 1.8.6)

Now I can manually tweak this with install_name_tool, but the gem build process must be broken somehow...

Update 2: That wasn't the problem. I fixed the linking path in the thin_parser.bundle:

sudo install_name_tool -change /usr/local/lib/libruby.dylib /opt/local/lib/libruby1.9.dylib /opt/local/lib/ruby1.9/gems/1.9.1/gems/thin-1.2.1/lib/thin_parser.bundle

but it still crashes...

Update 3: It's something to do with the MacPorts build. I did a compile from source of runby 1.9.1 into a new prefix and ruby/rack/thin work fine. Sweet!

03:19 AM, 10 May 2009 by Mark Aufflick Permalink | Comments (0)

Functional map_each method for Ruby Hash

I prefer to use functional style programming wherever possible. In many popular dynamic languages such as Perl, Python or Ruby there is quite good support for functional programming with arrays such as Perl and Ruby's map and Python's even better list comprehensions.

With hashes (or dictionaries or whatever you call them) you're usually stuck to sequential programming. Since in Ruby hashes are objects we can inject a nice map_each method into the Hash class which will process each key value pair and the resultant list will have one result for each pair.

    ret = []
    self.each do |key, val|
      ret.push yield(key, val)

12:53 AM, 09 May 2009 by Mark Aufflick Permalink | Comments (0)

Opportunistically streaming html output with Ruby lambdas

In my last post (Ruby, HTML, s-expressions, lambdas?) I said I would show how we can modify the html generation to allow streaming.

Of course I was making it out to be a lot more complicated in my head than it really is - all the hard work is done already by the lambdas enforcing correct execution order. All we need to do is add a few judicious STDOUT.flush calls before anything that might take some time (ie. evaluating the tag content which could include a database lookup etc.)

I've done that in the new htm.rb below, but first, here's some demo code with some delays:

engines = [["", "Google"],
           ["", "Yahoo!"],
           ["", "Showing my age"]]

Htm.htm(:ul, \
        { |e| Htm.htm(:li,
                      [:a, :href, e[0], [:b, lambda { sleep 3; Htm.str(e[1])}]])}).call

Notice also how we can use a lambda anywhere we can put content. Instead of a sleep, perhaps it's an external ImageMagick command. Or perhaps instead of the map iterator our loop is iterating over results being streamed from a slow database query.

Our output will look the same, but I've indicated with !!! where the output pauses for 3 seconds:

<ul><li><ahref=""><b> !!! Google</b></a></li><li><ahref=""><b> !!! Yahoo!</b></a></li><li><ahref=""><b> !!! Showing my age</b></a></li></ul>

You can see that the http stream will receive all the output it possibly can while waiting for the expensive operation, and the tags are still automagically closed. Job done!

Here's the up to date htm.rb:

require 'cgi'moduleHtmdefHtm.str(content)
    lambda { print CGI.escapeHTML(content.to_s) }
  enddefHtm._build_tag(tag, args)

    # open the tag
    print '<' + tag.to_s

    tok = args.shift

    # find any tag attribute key/value pairs
while tok.kind_of? Symbol
      print ' ' + tok.to_s + '="' +
        CGI.escapeHTML(args.shift.to_s) + '"'
      tok = args.shift
    endif tok.nil?
      # self-close tag if no content
      print ' />'else# finish open tag
      print '>'# output tag content
                        tok.kind_of?(Symbol) ? Htm.htm(tok, args) : tok )

      # close tag
      print '</' + tag.to_s + '>'endenddefHtm._eval_content(content)
    while content.kind_of? ProcSTDOUT.flush
      content =
    endif content.kind_of? ArrayHtm._eval_content(Htm.htm( *content ))
    elsif ! content.nil?
      print content
    endenddefHtm.htm( *args )
    lambda do

      tok = args.shift

      while ! tok.nil?
        if tok.kind_of? SymbolHtm._build_tag(tok, args)
        tok = args.shift

08:02 PM, 08 May 2009 by Mark Aufflick Permalink | Comments (0)

Ruby, HTML, s-expressions, lambdas? Oh my!

I've been noodling around with various lisps lately, and one of the sources of lisp's elegance is the lack of separation between data and code. A practical example of that is the cl-who library which creates html from an s-expression representation, ensuring all tags are correctly closed. For example:

(with-html-output (*http-stream*)
  (loop for (link . title) in '(("" . "Frank Zappa")
                                ("" . "Marcus Miller")
                                ("" . "Miles Davis"))
        do (htm (:a:href link
                  (:b (str title)))

There are a number of ways to replicate this style in other languages. You can do it by building up a big string, but I want to print to a stream like the example above. Using lambdas we can make a pretty good approximation in Ruby. Here's some Ruby code using a simple module I whipped up (see below) to achieve the same output as the cl-who lisp code above:

engines = [["", "Google"],
           ["", "Yahoo!"],
           ["", "Showing my age"]]

Htm.htm( { |e| Htm.htm(:a, :href, e[0], [:b, Htm.str(e[1])],
                                :br, nil)}).call

Lets say we realise that the br tags are nasty and want to put the list of links into a list:

Htm.htm(:ul, \
        { |e| Htm.htm(:li,
                      [:a, :href, e[0], [:b, Htm.str(e[1])]])}).call

It's not quite as elegant as the lisp equivalent because we are mixing lambdas and arrays - both as nesting constructs. Here is the final output (indented for clarity - the Htm module below does no indenting):

  <li><ahref=""><b>Showing my age</b></a></li>

Now even though we are controlling the order of execution such that the various parts will be printed to the stream in the right order, we still can't print until we have closed our outermost tag (usually html). To be able to stream output while also auto-closing the tags we're going to need to use continuations - I'll cook up an example of that for a later blog. There's also other neat ways we can have self-closing tags that will allow streaming - I'll post about that later also.

Here is the Htm module in full:

require 'cgi'moduleHtmdefHtm.str(content)
    lambda { print CGI.escapeHTML(content.to_s) }
  enddefHtm._build_tag(tag, args)

    # open the tag
    print '<' + tag.to_s

    tok = args.shift

    # find any tag attribute key/value pairs
while tok.kind_of? Symbol
      print ' ' + tok.to_s + '="' +
        CGI.escapeHTML(args.shift.to_s) + '"'
      tok = args.shift
    endif tok.nil?
      # self-close tag if no content
      print ' />'else# finish open tag
      print '>'# output tag content
                        tok.kind_of?(Symbol) ? Htm.htm(tok, args) : tok )

      # close tag
      print '</' + tag.to_s + '>'endenddefHtm._eval_content(content)
    while content.kind_of? Proc
      content =
    endif content.kind_of? ArrayHtm._eval_content(Htm.htm( *content ))
    elsif ! content.nil?
      print content
    endenddefHtm.htm( *args )
    lambda do

      tok = args.shift

      while ! tok.nil?
        if tok.kind_of? SymbolHtm._build_tag(tok, args)
        tok = args.shift

07:13 AM, 06 May 2009 by Mark Aufflick Permalink | Comments (0)

Adding Apple Remote Support to your Cocoa App

Here is the presentation I gave at last month's CocoaHeads:

Or you can download the pdf from the CocoaHeads AU Google group: apple_remote.pdf.

08:24 PM, 04 May 2009 by Mark Aufflick Permalink | Comments (0)

CocoaHeads Sydney - May 7th 2009

CocoaHeads Sydney is steaming along with our fourth monthly meeting on the trot this Thursday.

Last month at CocoaHeads Sydney I gave a lightning talk showing how to add Apple IR support to your Cocoa app. I have uploaded the slides to the files section of the google group. In the presentation I also showed how I used the LaTeX beamer class to make pdf slides, and I used the open source SplitShow application to give the presentation (using my Apple IR support of course!) You can get SplitShow from the google code project but you'll have to build from the trunk to get the IR support which has not yet been included in a release.

We also had Ben Hill show us the impressive prototype of an OpenGL iPhone game he put together using cocos2d.

This month our very own Jude Sutton will be giving us a presentation on the Authorisation Services and related APIs.

This month's details:

When: Thursday May 7th, 6:30pm
Where: UTS Broadway CB10.07.114. ie. Building 10, Level 7, Room 114

All details are published monthly on the CocoaHeads AU google group.

Hope to see you there!

08:12 AM, 03 May 2009 by Mark Aufflick Permalink | Comments (0)

Wow - Oracle actually bought Sun

Today, Oracle bought Sun. This leads to a lot of interesting things - some good, some bad. For instance, Sun provides commercial support for the Postgres database and owns the MySql company, while Oracle owns, as you would know, the Oracle database.

It could also mean the end of Sun's sexy(ish) hardware. Certainly the heydays of Sun or SGI unix workstations are gone.

08:43 AM, 20 Apr 2009 by Mark Aufflick Permalink | Comments (0)

CocoaHeads Sydney - March 5th 2009

I'm excited our Sydney CocoaHeads meetup next week, looking forward to expanding on our great start of 20 odd people (that is 20 or so people, although many of us may also be odd...).

André's talk last month was an interesting delve into Objective-C internals and creative ways to make use of that knowledge. (slides).

This month I am pleased to announce that Nathan Day, who was in our meeting last month, will be presenting something that instead saves you from having to know about some of the nastier internals of the Cocoa framework&#8212his extensive collection of public frameworks.

Nathan was guest speaker at Brisbane CocoaHeads last Thursday and has agreed to make a repeat performance for us.

The location will again be UTS although the room may be different as the semester is approaching, stay tuned for details.

There are details about subscribing to the google calendar on a page in our group:

Or you can use this link to add the March meeting to your own calendar:

I'll update the calendar meeting with the room details etc. when I have them and will also email the cocoadev list etc. closer to the day. Looking forward to seeing you all there!

06:59 AM, 24 Feb 2009 by Mark Aufflick Permalink | Comments (0)

Native MacOS Umbrello in KDE4

One of the consistently popular pages on this website is my blog entry about building Umbrello on MacOS. Umbrello is the KDE UML modelling program. UML modelling programs are mostly surprisingly rubbish, so Umbrello being not rubbish is one of the better ones and it's open source to boot.

It has, though, been tough to build on MacOS even just under X11 (as witnessed by the long list of comments on my earlier blog with various configure recipies). KDE4 promises to resolve that with the native MacOS Qt support allowing Mac native applications.

The Mac KDE project has beta downloads of the (nearly) full KDE environment for Mac. All the bits you need are at but note they are hosted on an ftp server that allows you to only download one file at a time, so let one finish before you start the next. No compilation or commandline trickery needed - just installing normal MacOS packages.

After installing the various bits you will find a KDE4 folder in your Applications folder. Here's Umbrello running on my Mac:

There are a few oddities - I could maximise the window, but not drag the window size to anything other than the original or the maximum, but otherwise it seems quite solid.

06:38 AM, 17 Feb 2009 by Mark Aufflick Permalink | Comments (5)

The most awesome case mod ever

Such an awesome idea. You could shoe-horn all sorts of awesome things into a Disk ][ case. The working In Use light is a nice touch, but I bet it doesn't make the right sound :)

Disk II Mac with DVD

Via: Cult of Mac.

11:24 PM, 16 Feb 2009 by Mark Aufflick Permalink | Comments (0)

OMG - Lego Turing Machine

If this isn't the coolest thing you've ever seen in 2009 I'll eat my hat:

11:05 PM, 29 Jan 2009 by Mark Aufflick Permalink | Comments (0)

25 years of Macintosh--illustrated timeline

I have owned or used every item in this picture except for the Lisa and Macintosh Portable (though I have seen both of them at one stage). I even have the eWorld disks still and DB has a copy of the (pictured) MacWorld edition 1.

Via @guykawasaki

04:28 AM, 27 Jan 2009 by Mark Aufflick Permalink | Comments (2)

MacBook (Nvidia) video flicker or "tearing" on scroll/video

My new MacBook has an annoying issue. Especially after sleep, the GPU goes a bit mental and has issues with high bandwidth data - eg. fast scrolling or video (eg. YouTube) playback. It seems basically that it just can't ship the bits to the display fast enough because if you scroll slow enough there is no flickering.

After sleep/wake it is really bad&#8212;to the point that it distracts. It is in multiple applications (Safari, Xcode) so I assume it is a video driver issue. Some 'net reports for MacBook Pro users say that it is not an issue if you choose the faster GPU on that laptop (the GeForce 9600M GT) suggesting that it is a driver/chipset issue with the Nvidia GeForce 9400M.

I found one tip that improved the situation, when you get the problem you can force some sort of vido reset by pressing Control-Shift-Eject (you might need to hit a key or wiggle the mouse to wake the screen back up again).

It doesn't completely eliminate it, but at least in normal non-video use you don't notice it so much.

Since a reset of some sort improves it, I assume it is something to do with the way the chipset is brought up after sleep so hopefully either a driver or firmware update should be able to either resolve it or if it is a chipset issue at least work around it.

06:25 AM, 25 Jan 2009 by Mark Aufflick Permalink | Comments (2)

Barack Obama Inauguration photos

07:57 PM, 21 Jan 2009 by Mark Aufflick Permalink | Comments (0)

CocoaHeads Sydney - February 5th 2009

After the very successful, and inaugural, Christmas beers event held by Sydney CocoaHeads in December, our first meetup for 2009 will occur on Thrusday February 5th.

What is CocoaHeads?

CocoaHeads is a global collection of groups devoted to discussion of Apple Computer's Cocoa Framework for programming on MacOS X. During monthly meetings, members present on their projects and offer tutorials on various programming topics.

February, the ever interesting André Pang will be speaking. You can find more details about the Sydney meetup by joining our Google Group: Sydney CocoaHeads.

There is also a calendar you can subscribe to:


Or add just this upcoming meeting to your calendar:

09:06 AM, 21 Jan 2009 by Mark Aufflick Permalink | Comments (0)

heads up 'tunes featured on

James Powell has featured heads up 'tunes on his and also has some neat feature suggestions.

I'm not sure where the slowdown he is seeing is coming from so I'll quiz him on that, but clicking the song and hiding the dock icon are good ideas.

He has a pretty eclectic playlist :)

06:51 PM, 19 Jan 2009 by Mark Aufflick Permalink | Comments (0)

Apple I with 6502 cpu on an FPGA board

No pretty pictures, but the idea of a 6502 running Woz's monitor completely running inside an FPGA is pretty sexy.

Trust a Japanese person to think of it :)

06:18 AM, 19 Jan 2009 by Mark Aufflick Permalink | Comments (0)


As a software developer I consider myself aligned with creative workers like designers and architects. As such we have similar goals of solving problems with beauty and order (with a little randomness thrown in).

Perhaps as programmers we feel a little inferior or less developed as creative people because we (or I anyway) feel just ever so jealous each time we see a photo of a designer's desk&#8212;it's so beautifully neat, tidy, organised, and usually white (or perhaps light wood grain).

But most (not just a few) developers' desks are horrendously messy. Few dress *really* well and who wouldn't admit to a half empty coffee cup/coke can under their desk.

So that got me to thinking, perhaps there is a reason for this disparity.

The working representation of a designer's or architect's work is visual&#8212;something you can see, hold, spread out. Your eyes take it in and you form new ideas. Visual cleanliness and neutrality of their surroundings is probably essential.

The working representation of a developer, however, is the code. Occasionally the UI on the screen, but mostly the code. When a programmer is working hard, he is lost in the code itself&#8212;the stream of tokens (words), the imaginary mental model of associated objects, structures, relationships. Without getting all Matrix-y, the developer genuinely *sees* the program, and it is cleanliness and order in the code, the structure and these relationships in the program that are essential and the developer is temporarily oblivious to their surroundings (visual and auditory).

If you're not a developer yourself, just ask the spouse of one and you will find that the above is true (at least the being lost in something other than the world around them part :)

So if a good designer or architect may be respected for the way they refuse to give in to clutter, then good programmers should be respected for the way they insist on the right structure, or continually refactor, even when there might seem to be a quicker or cheaper way. Sometimes they may seem to be anal-retentive, but you will be grateful in the future when their creations stand the test of time.

Einstein Image via swissmiss.

08:27 AM, 16 Jan 2009 by Mark Aufflick Permalink | Comments (2)

Photo taken from ferry helping crashed US Airways plane

The crash was this morning - this is an amazing photo:

08:07 PM, 15 Jan 2009 by Mark Aufflick Permalink | Comments (0)

Unibody MacBook VGA = sucky

Last week I bought a new Unibody MacBook. Nice and fast, perfect size, so far so good.

Then I connected it to my venerable (but still awesome) Silicon Graphics 22" CRT monitor with the mini displayport -> VGA adapter.

I knew the maximum resolution supported via VGA was going to be 1600 x 1200 from the manual (p66) which was fine with me since that is the resolution I usually use.

What the manual and tech specs page gives no mention of is that the highest refresh frequency you can run at 1600 x 1200 over VGA is 60 Hz. That's enough flicker to drive you mental immediately (and give you a headache in about a quarter hour).

The next resolution down offered is 1400 x 1050 at 85 Hz. Plenty fast enough, but that's 450,000 less pixels. No thank you.

Thankfully, with the magic of DisplayConfigX you can change the refresh/resolution combinations MacOS X will offer you. You can't squeeze any more bandwidth than the hardware maximum, but you can make different compromises. I figured I can run 1600 x 1200 at 65 Hz (too flickery), 1536 x 1228 at 67 Hz (still too flickery) or 1472 x 1177 at 69 Hz. This last combo is just about palatable as long as I boost the brightness a little (to increase phosphor persistence) and degauss regularly.

DisplayConfigX is $12 USD, but that's easily worth the 26,2544 pixels I have reclaimed thanks to its flexibility.

Of course Apple's tech specs and docs should have provided the relevant detail. Not that that would have changed anything (other than a frustrating discovery) since to my mind the 15" laptops are just a shade too big and heavy (I am upgrading from a PowerBook 12" remember...).

02:11 AM, 12 Jan 2009 by Mark Aufflick Permalink | Comments (5)

What? No new Mac Mini?

I was ready to buy one today :(

No mention of Snow Leopard either - I guess the new hardware and Snow Leopard go hand in hand, so look for a "special event" at 1 infinite loop sometime this quarter I guess...

Now what do I do? I need to replace my broken 15" PowerBook media centre, but I'll die if a new mac mini comes out after I buy the current one :(

05:04 PM, 06 Jan 2009 by Mark Aufflick Permalink | Comments (0)

"Half a billion bucks of UI"

I don't usually just post a link (that's what is for), but I like a good exposé of horrible and expensive software.

Take a look at this software screen from a US Defense system:

Here's my comments:

Not to defend the UI, which admittedly seems poor, most people will look at it and think "yuk what a horrible UI" because of the colour and simplicity. That is, however, what you should be doing because when under poor conditions (ie. battlefield) you want very high contrast.

That aside, here's what strikes me about the interface. The cryptic F I P R O A etc. down the bottom right are stupid - what do they mean? Is the progression red, orange, amber, green an indication of severity or just different colours? If the former, then it's awkward that a change in the black number on red will be less easy to notice than against the yellow or white. And what's with the two slightly different clip boards at bottom right?

The black on brown tab is impossible to read.

Source (of the image and the title):

10:17 PM, 04 Jan 2009 by Mark Aufflick Permalink | Comments (0)

Royal North Shore Hospital - not that bad!

Well I hope you have all enjoyed your Summer break more than I have. I've had over a week suffering from food poisoning/gastro/something nasty since just after Christmas.

I wouldn't bother blogging about that (and I'll certainly keep the symptom descriptions and my friends jokes thereof offline...) but I feel compelled to report on my experience with the Royal North Shore emergency department.

For those outside New South Wales, the Royal North Shore vies for hospital most often in the news (in a negative way) with Campbeltown.

My experience was anything but negative. The triage nurse was polite (actually nice - not just for a triage nurse) and sent me right through after the requisite paperwork (which in hindsight probably means I looked like death).

The two doctors I saw were fine and gave me reasonable time, but the nurses (including one male nurse) were just fantastic. Gave me feedback on what they were doing etc. and were very good at checking in on me and having helpful suggestions when the oral liquid they tried to get me onto failed painfully. Oh, and being ready with the panadeine forte was nice ;)

To be fair the treatment mostly consisted of pumping saline into me (stat) along with some other stuff (mainly buscopan) and giving me pain relief if I threatened to cry, but for a 1am hospital visit I really couldn't have asked for better treatment.

It would have been much less bearable without Kath there&#8212;where would us tough men be without our ladies :)

04:37 AM, 04 Jan 2009 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