<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6541479885845327365</id><updated>2011-04-22T08:25:17.473+10:00</updated><category term='ruby'/><category term='story'/><category term='scheme'/><category term='recipe'/><category term='sydney'/><category term='fish'/><category term='law'/><category term='books'/><category term='rails'/><category term='maths'/><category term='politics'/><category term='comp. sci.'/><category term='career'/><category term='cats'/><category term='architecture'/><category term='girl geek'/><category term='photos'/><category term='blogging'/><category term='writing'/><category term='work'/><category term='canberra'/><category term='pretention'/><category term='rant'/><category term='shrew'/><title type='text'>overwatering</title><subtitle type='html'>Random musings on fish, life in Sydney, computer science and cats.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default?start-index=101&amp;max-results=100'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>114</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3219390709668512819</id><published>2009-03-27T00:55:00.001+11:00</published><updated>2009-03-27T00:55:06.671+11:00</updated><title type='text'>Moving Home</title><content type='html'>&lt;p&gt;Yet another long period of silence from me. A lot has been going
on. Most of it not anything I'm planning on blogging about. But, I am
here to say that as a supposedly all Web 2.0 type person, I finally
have a proper blog on a proper domain where I can host my own proper
applications:&lt;/p&gt;

&lt;h3&gt;&lt;a href="http://overwatering.org"&gt;overwatering.org&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;And with that, this blog is now closed. All my posts have been
migrated over, and I am  now posting new writing over there. Please
update your subscriptions.&lt;/p&gt;

&lt;p&gt;As a teaser, I've got an application running there now:
&lt;a href="http://mutual.overwatering.org"&gt;mutual&lt;/a&gt;. What does it do? Have a
&lt;a href="http://www.overwatering.org/blog/2009/03/find-mutual-follows-redux/"&gt;read&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3219390709668512819?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3219390709668512819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3219390709668512819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3219390709668512819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3219390709668512819'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2009/03/moving-home.html' title='Moving Home'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-7641309665407397197</id><published>2009-01-25T22:26:00.001+11:00</published><updated>2009-01-25T22:26:28.322+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Review Catch-up</title><content type='html'>&lt;p&gt;I've been falling very far behind on my book reviews. I have actually
been reading, I just haven't been reviewing. And, well, once the
backlog of books gets more than about four high it's pretty hard to
write proper reviews.&lt;/p&gt;

&lt;p&gt;I'm cheating. I'm going to catch up by writing short reviews of all
the books I've read in the last six months or so. And from there I
should be able write real reviews for books again.&lt;/p&gt;

&lt;p&gt;Without further ado, here's six months worth of books in three
sentences, or less.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;On Her Majesty's Secret Service&lt;/em&gt;, &lt;strong&gt;Ian Fleming&lt;/strong&gt;. Part of the book
club, I wanted to get a feel for actual Ian Fleming Bond books, before
reading Faulks'. Fun, enjoyable, if you can avoid hurling the book
across the room in the first 20 pages out of frustration over the
blatant misogyny. I managed - just - and found it got better.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Devil May Care&lt;/em&gt;, &lt;strong&gt;Sebastian Faulks&lt;/strong&gt;. The actual book club book - a
Bond story, set in the '60s, but written just last year by Faulks, in
the style of Ian Fleming. Less misogynistic and generally offensive,
but a lot less enjoyable. I frequently got bored and would put the
book down, forgetting to pick it up again for a little while.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Road&lt;/em&gt;, &lt;strong&gt;Cormac McCarthy&lt;/strong&gt;. Another book club book - this one was
brilliant, some thought it was depressing, but I found it
uplifting. The ash and the grey bleakness practically leaches onto
your fingers out of the page, which is nothing on the handful of
images in this book that you will probably never forget. It's a
fantastic book, but be warned.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The End of Mr Y&lt;/em&gt;, &lt;strong&gt;Scarlett Thomas&lt;/strong&gt;. A potential contender for most
pretentious book I've ever read, possibly even beating Virginia
Woolf's &lt;em&gt;&lt;a href="http://overwatering.blogspot.com/2008/04/orlando.html"&gt;Orlando&lt;/a&gt;&lt;/em&gt;, but don't let that put you off, it's actually
pretty good. It a tour through literary criticism and modern physics
with a significant dash of metaphysics tossed in - it felt inspired by
&lt;a href="http://overwatering.blogspot.com/2007/08/against-day.html"&gt;Pynchon&lt;/a&gt;. Quite original though, and recommended.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One Day in the Life of Ivan Denisovich&lt;/em&gt;, &lt;strong&gt;Aleksandr
Solzhenitsyn&lt;/strong&gt;. Another book club book - chosen because, well, he'd
just died. An absolutely great book, and a deserved classic, I have
essentially no complaints and instruct you all to read it - it's
short, funny and a very easy read. However, apparently this book
inspired many in the west to embrace communism, and that I just can't
see.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A Clockwork Orange&lt;/em&gt;, &lt;strong&gt;Anthony Burgess&lt;/strong&gt;. A book club companion book,
for &lt;em&gt;One Day In the Life...&lt;/em&gt;, chosen because it was a banned book, and
coincidentally it features a lot of Slavic inspired slang, without any
explanation - which was actually surprisingly cool. Unfortunately, I
haven't seen the famous movie. The book was a good, but a little weak.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Seize the Day&lt;/em&gt;, &lt;strong&gt;Saul Bellow&lt;/strong&gt;. Because of all the short books, I
went for another companion book - this one was a 'day in the life'
story. Fellow book clubbers felt that our last two books (&lt;em&gt;The Road&lt;/em&gt;
and &lt;em&gt;One Day in the Life of Ivan Denisovich&lt;/em&gt;) were very depressing -
but this, this is depressing. Every single character is deeply
detestable, not just in nature and behaviour but also in past: this is
a book to attack your opinion of your life and make you doubt
everything. Be warned.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Stranger in a Strange Land&lt;/em&gt;, &lt;strong&gt;Robert Heinlein&lt;/strong&gt;. A monster sci-fi
classic from the golden age of science fiction, regarded as serious,
deep and important. Also, utterly hilarious, and quite irritating. The
funny comes from Heinlein's sexism: he simply could not conceive of
any kind of female equality that wasn't some kind of weird submissive
promiscuouity. That and the long discourses on various aspects of
science are also very irritating: please don't put incidental
exposition in dialogue, it's trite.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Twilight&lt;/em&gt;, **Stephenie Meyer"". Book club again - vampire chick-lit
was the required genre and this hit it. Very readable, but I was
hoping that something would happen. I guess I was never a teenage
girl.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Graveyard Book&lt;/em&gt;, &lt;strong&gt;Neil Gaiman&lt;/strong&gt;. Excellent: just the right line
between a fun story and something that felt just a little darker and
deeper. It's a re-writing of Kipling's &lt;em&gt;The Jungle Book&lt;/em&gt;, though this
is subtle. While it is a 'young adult' novel, read it and enjoy it, a
very good book.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Odd and the Frost Giants&lt;/em&gt;, &lt;strong&gt;Neil Gaiman&lt;/strong&gt;. A very short $2.50 novel
that I read in 45 minutes. Cute.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Virgin Suicides&lt;/em&gt;, &lt;strong&gt;Jeffrey Eugenides&lt;/strong&gt;. Wow, one of the best
books I've read in a very, very long time. It's different, it draws
you in, you become part of the story; in a very engaging way. Shortly
after reading I saw the movie: and also wow, a very faithful to the
spirit rendering.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Still Life&lt;/em&gt;, &lt;strong&gt;Louise Penny&lt;/strong&gt;. Wow, one of the worst books I've ever
read. Seriously, this is absolutely abysmal. Murder-mystery in genre,
but pure rubbish in execution. All the way through the book I had to
keep putting it down to avoid the hurl-across-the-room feeling. For
example, first chapter identifies the murder victim; second chapter
goes back in time a couple of days, to the victim talking to a friend
in a café, she reveals that she saw a crime. And then without any
pretense, the description the crime is skipped. I mean, come on! Gee,
do you think that could have something to do with her death? But then,
in a few pages you find out what happened anyway. And! In the end,
that crime has nothing to do with the murder. Christ. After this and
&lt;em&gt;&lt;a href="http://overwatering.blogspot.com/2008/02/blind-assassin.html"&gt;The Blind Assassin&lt;/a&gt;&lt;/em&gt; Canadian literature is dead to me. Oh, and
this was a book club book as well.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Altered Carbon&lt;/em&gt;, &lt;strong&gt;Richard Morgan&lt;/strong&gt;. A tip: if you read something
really bad, read something light that you know you'll enjoy very
quickly afterwards or your brain will start to tell you that the hours
you have to put into a book are a bad investment. This was a good
counter: a really cool sci-fi noir story. Most interestingly, this was
a novel centred around a highly socially disruptive technology, but
in the window before the tech becomes ubiquitous and available to
all. That window is interesting. There are also some Banks-ian
characters, without quite the same detail in the characterisation,
please read if you like sci-fi.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pomegranate Soup&lt;/em&gt;, &lt;strong&gt;Marsha Mehran&lt;/strong&gt;. Again, thanks to the book club, this was a simple story, and
just plain nice. It wasn't particularly well written, there wasn't a
great deal that happened and the characterisation was just plain
atrocious, but in the end I enjoyed reading it and I found the story
was... nice. Apart from the transparently good vs evil characters, a
major criticism is the lack of direction: there are frequent,
unexpected changes in direction. She almost redeems herself with a
glimpse into the past of the main villain, but it just doesn't seem to
go anywhere. Still, ... nice.&lt;/p&gt;

&lt;p&gt;And the funny thing about all that? It seems to be much easier to
write something about bad books than good books. That would say
something the reviewer, I think. I shall work on that.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-7641309665407397197?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/7641309665407397197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=7641309665407397197' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7641309665407397197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7641309665407397197'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2009/01/review-catch-up.html' title='Review Catch-up'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4550053907899464481</id><published>2009-01-19T21:52:00.001+11:00</published><updated>2009-01-19T22:13:29.981+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Finding Mutual Follows</title><content type='html'>&lt;p&gt;When you're a &lt;a href="http://twitter.com/gga"&gt;Twitter'er&lt;/a&gt; you will often be
in a situation where someone follows you, and you're wondering, 'Who
is this person? Do I know them?' Well, I can't answer that question
for you. But, I have found that one thing that tells you about your
new follower is who they follow that you also follow. Follow?&lt;/p&gt;

&lt;p&gt;I want to be able to ask the question 'Who do we know in common?', in
short. A useful question, but one that can take quite a while to
answer using the web site. I
&lt;a href="http://twitter.com/gga/status/1122570805"&gt;asked&lt;/a&gt; the lazy
twitterverse if there was already an app for this, but my twitterverse is too small to get an answer. So, I
wrote my own script. I don't have any handy web space to run this
from, so you'll have to grab it and run it yourself. You will need to
install the &lt;code&gt;twitter4r&lt;/code&gt; gem first:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install twitter4r
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then paste the following code into a Ruby file, and run. It takes two
parameters, the names of the two users for who you want to find common
ground.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require 'rubygems'
require 'open-uri'
require 'rexml/document'
require 'twitter'
class Twitter::User
  def all_friends
    users = friends.map { |f| f.screen_name }
    # If there's more than one page of users, we've already got the
    # first one
    page = 2
    found_users = friends.length
    while found_users &amp;gt;= 100
      found_users = 0
      open("http://twitter.com/statuses/friends/#{screen_name}.xml?page=#{page}") do |f|
        users_doc = REXML::Document.new(f.readlines.join(''))
        users_doc.elements.each('/users/user/screen_name') do |friend_name|
          users &amp;lt;&amp;lt; friend_name.text
          found_users += 1
        end
      end
      page += 1
    end
    users
  end
end
def in_common(my_friends, other_friends)
  my_friends.select { |m_n| m_n if other_friends.member? m_n }
end
def main(me, other)
  c = Twitter::Client.new
  me_friends = c.user(me).all_friends
  other_friends = c.user(other).all_friends
  in_common(me_friends, other_friends).each do |f|
    puts "  #{f}"
  end
end
main(ARGV.shift, ARGV.shift)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Enjoy, and please let me know how it works out for you, or if you make
any changes. And by the way, *this* is why RESTful APIs rock.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4550053907899464481?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4550053907899464481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4550053907899464481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4550053907899464481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4550053907899464481'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2009/01/finding-mutual-followers.html' title='Finding Mutual Follows'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4711292973185025604</id><published>2009-01-18T21:13:00.001+11:00</published><updated>2009-01-18T21:13:09.513+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Kite Runner</title><content type='html'>&lt;p&gt;&lt;em&gt;The Kite Runner&lt;/em&gt;&lt;br /&gt;
Khaled Hosseini&lt;/p&gt;

&lt;p&gt;You would have heard of the movie for this one. It achieved some fame
when the two Afghani child actors had to be smuggled out of
Afghanistan for their own protection. Apparently, acting in a rape
scene put their lives at risk. I haven't seen the movie, I'd be
interested to hear what people thought of it.&lt;/p&gt;

&lt;p&gt;This book is in two parts. The first part is a child's impression of
living in a relatively stable and developed third-world, feudal
country before the rest of the world decided to use that particular
patch of ground as a World War-by-proxy. The first part continues with
a story of poor outsiders attempting to make a new life in a very
different world. This part of the novel is very, very good: it's a
charming view into a destroyed world that we don't hear much about it,
and certainly nothing good. Continued with a very real feeling tale of
making the best of a potentially unpleasant world, and building a new
life there.&lt;/p&gt;

&lt;p&gt;My recommendation is to read this first part and then stop. I'll tell
you what, send me your copy of the book, I'll remove the second part
and then it back to you. Because the second part is just plain
terrible.&lt;/p&gt;

&lt;p&gt;The second part is a long sermon on how damaged Afghanistan is now. I
don't have a problem with being told this. I do actually think us
cozy, safe residents in front of our TVs need more confrontation of
the destruction done on our behalf. And I'm not uncomfortable with
placing blame: the entire first world and all the individual citizens
therein, are responsible. But, oh my God! Is this ever preaching! Yes,
Afghanistan is in a very bad state. We see that, we know that. The
real effect and impression of the damage done comes not from
preaching, but from the contrast of what we hear and see with what we
read in the first part of this book. Beyond the preaching, there is
also a monotonous tone and freaky coincidences to wear you.&lt;/p&gt;

&lt;p&gt;My advice again, read the first part and then stop. Pretend the book
is over. You'll enjoy it better that way, trust me.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4711292973185025604?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4711292973185025604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4711292973185025604' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4711292973185025604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4711292973185025604'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2009/01/kite-runner.html' title='The Kite Runner'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8222341346822102169</id><published>2009-01-03T00:39:00.001+11:00</published><updated>2009-01-03T00:39:40.630+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Perhaps You Shouldn't Get Involved in Free Software</title><content type='html'>&lt;p&gt;Say you're a bright young kid at Univeristy and you've decided that
computer science is what you want to do with your life. What should
you start doing with yourself to live that dream? One piece of advice
you will frequently hear is 'Get involved with an open source/free
software project.' Should you?&lt;/p&gt;

&lt;p&gt;Short answer: yes, with an if. Long answer: no, with a but.&lt;/p&gt;

&lt;p&gt;If you want to be working in computer science, you'll probably be
programming. A lot. And in fact, this is probably what you want to
do. Like all professional skills, programming takes a large amount of
practice before you become truly proficient. The commonly cited
figure is 10,000 hours of practice to become proficient in your chosen
profession. The sooner you get started on those 10,000 hours, the
sooner they'll be over.&lt;/p&gt;

&lt;p&gt;Becoming involved with an open source project is a great way of
getting your practice in. You could also practice on your own project
of course. But, you'll get more satisfaction from contributing to an
open source project that others use. To become involved though, you'll
need some level of proficiency. So hack around with your own projects;
write a game; then start reading the mailing lists of an open source
project you use and pick a simple bug from the tracker. There's lots
of advice out there on how to become involved, I'll leave that up to
you.&lt;/p&gt;

&lt;p&gt;That's a pretty good reason to become involved with an open source
project. And if that is your reason, head on out there kid, you'll
do great.&lt;/p&gt;

&lt;p&gt;That's the 'if'. Now for the 'but'.&lt;/p&gt;

&lt;p&gt;Notice above that I referred to getting involved with an open source
project? Not the open source &lt;em&gt;community&lt;/em&gt;? If you're a particularly
bright kid in your class, then please let me beg you to think deep and
long before becoming involved in the community.&lt;/p&gt;

&lt;p&gt;Why are computers important? Step outside of your beloved field for a
moment and ask yourself, why do you think computers have been an
important and interesting invention? Why is writing software for
expensive, abstract machines to be used by the middle-class of the
first world a noble endeavour? How can better computer science help
people? I mean &lt;em&gt;really&lt;/em&gt; help people. Not allow them to quickly find a
cheaper price on that expensive gadget they don't need, but do the
really important things: cure malaria, educate the third world,
connect with strangers, fall in love. Whatever it is you think needs
solving.&lt;/p&gt;

&lt;p&gt;Personally, I do think computer science has the potential to make the
world a better place. And I believe you don't need to be working in
some research lab to achieve that. My definition of making the
world a better place is simple: find someone with a problem, solve it,
and leave them to find other problems in need of solutions. As an
organic, growing, network every individual has the ability to change
the world for the better by focusing on this question: where do I see
problems that my expertise can help solve?&lt;/p&gt;

&lt;p&gt;And here lies my issue with the open source and free software
communities: being able to recompile the kernel to your operating
system is a problem that only other programmers have. The rest of the
world see computers and software as tools to solve their own sets of
problems. Anytime a computer or program does not do what they want, a
problem goes partially unsolved. And that particular unsolved problem
is a problem you're simply unqualified to solve. You, as a programmer,
can only ever indirectly help with those problems.&lt;/p&gt;

&lt;p&gt;Lifting our heads outside of our insular worlds of programmers and
computer scientists, we can see that the rest of the world has a
problem with computers. These supposedly powerful devices, that the
first world has invested a huge amount of resources in improving over
the last 20 or 30 years just don't seem to have reached their
potential. Instead, rather than constant improvement with the goal of
improving the lives of real people, computing has become
insular. Insanely insular. Programmers either solve problems only
other programmers have, or they simply duplicate the work of other
projects, poorly. Very poorly. And this is most obvious in the free
software communities. In my opinion, the world does not need another
poor implementation of a 38 year old operating system. The world does
not need another poor duplicate of photo editing software. The world
does not need another poor duplicate of office productivity software.&lt;/p&gt;

&lt;p&gt;The world needs the potential of computers applied to new
problems. Or, at the least, original solutions to already solved
problems. And in my opinion the free software community, in its
current incarnation, will never deliver on either of those. The free
software community is tackling what they see as a moral and ethical
problem: source code wants to be free. Their current solution to this
problem is to duplicate every popular piece of software with a
suitably free license. So entrance into the free software community
requires accepting this, and then duplicating existing commercial
software. To me, that sounds like a complete waste of my brain.&lt;/p&gt;

&lt;p&gt;And if you're as bright as I think you are, then it sounds like a
complete waste of your brain as well. Please, choose to advance our
industry, take it in new and interesting directions. Start your own
company, work for a large company. These are not immoral
decisions. You will be advancing the sum total of human knowledge, you
will be solving real problems of other people. People without the
expertise to solve these problems. Expertise you have.&lt;/p&gt;

&lt;p&gt;And this is without even getting into the ethics of duplicating
someone else's work.&lt;/p&gt;

&lt;p&gt;The free software rhetoric can also damage both computing and free
software. Personally, I found the moral aim of the One Laptop Per
Child program repugnant. But, their efforts to re-imagine what
computers could be was exciting and full of potential. But, eventually
all for naught as the program has been tried, found guilty and
executed in the court of free software. Why? Because they chose to use
a non-free (gasp!) wireless network driver and because they chose to
allow Windows to run on the device. The project was found wanting, and
abandoned. Why does the choice of underlying operating system matter
that much? If the project believes their new approaches were of value,
why not try to improve Windows? It's not as if these computers would
be powerful enough to re-compile Windows anyway, even if the code was
available.&lt;/p&gt;

&lt;p&gt;You're young, you have brains, you have energy. Please think about it
before deciding that the free software community is where you want to
devote your energy. Do not write off working for Google, &lt;a href="http://silverbrookresearch.com/l-en/employment.html"&gt;Silverbrook
Research&lt;/a&gt;, ThoughtWorks, or even Microsoft. There is nobility
there, I dare say more than there is to be found in holding back our
industry.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8222341346822102169?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8222341346822102169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8222341346822102169' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8222341346822102169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8222341346822102169'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2009/01/perhaps-you-shouldn-get-involved-in.html' title='Perhaps You Shouldn&amp;#39;t Get Involved in Free Software'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3392058178410751485</id><published>2008-12-28T18:35:00.001+11:00</published><updated>2008-12-28T18:35:23.696+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='career'/><title type='text'>Satisfaction</title><content type='html'>&lt;p&gt;Working on projects or working products? Which is for you? Both
provide for interesting, stimulating work with difficult problems to
solve. Which are you personally going to derive the most satisfaction
from? Well, I have a theory, or, a way of phrasing the question that
has helped others in the past and might help you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When you are working on projects you will sit down with someone with a
problem. You'll get to know that person and their problem intimately
and personally. Hopefully you'll then solve their problem and leave
them in happier and better place. All thanks to the expertise you have
imparted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you are working on products you will not have this personal
connection with your customers. Instead you will attempt to imagine
how all the possible customers in the world could potentially want to
use your product. You'll try to place yourself in an enormous range of
situations and attempt to make each of those a bit better. Hopefully,
if your product is completed and a success in the market then you will
have made the world a better place for a huge range of people. None of
whom you'll ever know.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So... satisfaction from helping just a few people you know well, or
satisfaction from helping a huge range of people you'll never know? Of
course, if you do choose to work on projects then you're guaranteed to
help people, whereas products succeed far less often.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3392058178410751485?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3392058178410751485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3392058178410751485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3392058178410751485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3392058178410751485'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/12/satisfaction.html' title='Satisfaction'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3248156780929997492</id><published>2008-12-28T18:15:00.001+11:00</published><updated>2008-12-28T18:15:17.578+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Neverwhere</title><content type='html'>&lt;p&gt;&lt;em&gt;Neverwhere&lt;/em&gt;&lt;br /&gt;
Neil Gaiman&lt;/p&gt;

&lt;p&gt;Like &lt;em&gt;&lt;a href="http://overwatering.blogspot.com/2008/11/wrath-of-mad-god.html"&gt;Wrath of a Mad God&lt;/a&gt;&lt;/em&gt; this is fantasy too: but this is
a completely different proposition. This is good, very, very
good. Good enough that I will recommend this to non-fantasy reading
friends. Ahhh... A breakout hit - the dream of fantasy authors the
world over. Well, here's a tip: instead of sucking, try writing high
quality, original, funny and genuninely moving stories, like, say,
this.&lt;/p&gt;

&lt;p&gt;The poignancy. It's not cloying, there's no preaching. Not even any
condescension, patronisation or pity. This is a tale of those who fall
through the cracks. Those you don't notice around you; the other
nation outside, in the words of Billy Bragg, sleeping in the street. A
tale of the disenfranchised, the dispossessed. told so well. So
clearly, so directly, with no pathetic efforts to tug at the heart
strings that, for me, this became the most moving story since Greene's
&lt;em&gt;The Quiet American&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But it's fantasy. How can a fantasy novel seriously be mentioned in
the same breath as Graham Greene? Well, I'm going to have to try to
justify that. On the surface, and the back cover, &lt;em&gt;Neverwhere&lt;/em&gt; is a
fantasy adventure set in a strange, fantastical world at once beneath
and entwined within everyday London. This world intersects with London
through the streets and the homeless. Richard Mayhew is pulled from
our world into this other place. Forced onto a quest all he really
wants is to be able to return home.&lt;/p&gt;

&lt;p&gt;Viewed as a fantasy creation, this other world is a joy. Full of
magic, grand quests and the most imaginative etymologies for major
London landmarks: I certainly wished I knew London better. To get the
right feeling I was able to transplant Sydney in place of
London. Enough wandering in the City, Surry Hills, Pyrmont and Balmain
and you have the feeling that there is history, and history on history
here. And beyond that, it's dark. Frighteningly, unexpectedly dark.&lt;/p&gt;

&lt;p&gt;Like &lt;em&gt;&lt;a href="http://overwatering.blogspot.com/2008/07/midnight-children.html"&gt;Midnight's Children&lt;/a&gt;&lt;/em&gt; though, I read &lt;em&gt;Neverwhere&lt;/em&gt; in two
ways. As well as the straight forward fantasy interpretation, you
could also see this as a story told by an unreliable narrator. What if
the weird, fantastical world beneath London's streets doesn't exist? I
mean, not even within the world of the book? What if that entire world
is inside of Richard Mayhew's mind and he just doesn't know it? And
for me, that possibility made this a touching, poignant story. A story
genuinely of those who fall through the cracks; into a world that is
both magical, frightening and very dangerous.&lt;/p&gt;

&lt;p&gt;Unfortunately, to make you believe I'll have to cite
specifics. Without spoiling, I'd point at the third quest for the
Blackfriars. When you read that scene think about alternate
explanations.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3248156780929997492?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3248156780929997492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3248156780929997492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3248156780929997492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3248156780929997492'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/12/neverwhere.html' title='Neverwhere'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8933204514094422033</id><published>2008-12-07T22:31:00.001+11:00</published><updated>2008-12-07T22:31:00.978+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>Automatic Deployment for Rails</title><content type='html'>&lt;p&gt;For the Rails applications we're building at work, as well as all the
standard continuous integration features, we also automatically deploy
our applications. That is, every time we submit code a central server
is automatically updated with a new release. Before running tests.&lt;/p&gt;

&lt;p&gt;We're pretty happy with this set up. It's already found a couple of
bugs in some plugins we're using. More on that in an upcoming
post. Here's how we made our automatic deployment work. We're using
Capistrano for our deployment scripts, we're deploying to Phusion
Passenger running under Apache on FreeBSD and our continuous
integration server runs an Ant script.&lt;/p&gt;

&lt;p&gt;These instructions describe how to set up a Apache 2.2 web server with
Phusion Passenger on FreeBSD; the Ant script to automatically deploy
and how to configure a Rails app to be deployed like this.&lt;/p&gt;

&lt;p&gt;This will give you two new environments for your apps: DEVTEST and
UAT. UAT is a user acceptance testing environment, our system testers
and analysts use and own this environment. We don't automatically
deploy to here, we release to here. DEVTEST is the environment we
automatically deploy to.&lt;/p&gt;

&lt;h3&gt;Setting up Your Server&lt;/h3&gt;

&lt;h4&gt;Installing Phusion Passenger&lt;/h4&gt;

&lt;p&gt;Installing Phusion Passenger on a FreeBSD server is no different to
installing anywhere else:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudo gem install passenger
$ sudo passenger-install-apache2-module
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Configuring Apache&lt;/h4&gt;

&lt;p&gt;At the end of the second step, the installer tells you to add some
config to the end of your Apache config. On FreeBSD, edit this with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudoedit /usr/local/etc/apache22/httpd.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And then add the following at the end:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.0.3
PassengerRuby /usr/local/bin/ruby18
NameVirtualHost *:80
&amp;lt;VirtualHost *:80&amp;gt;
    ServerName devtest.example.com
    ServerAlias devtest
    DocumentRoot /usr/local/www/rails/devtest
    &amp;lt;Directory "/usr/local/www/rails/devtest"&amp;gt;
        Options FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    &amp;lt;/Directory&amp;gt;
    RailsEnv "devtest"
&amp;lt;/VirtualHost&amp;gt;
&amp;lt;VirtualHost *:80&amp;gt;
    ServerName uat.example.com
    ServerAlias uat
    DocumentRoot /usr/local/www/rails/uat
    &amp;lt;Directory "/usr/local/www/rails/uat"&amp;gt;
        Options FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    &amp;lt;/Directory&amp;gt;
    RailsEnv "uat"
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Unless you want to use two different servers for the two environments,
you'll need to use named virtual hosts, and ask your friendly
administrator to add CNAME records to your DNS server pointing devtest
and uat at the same physical server. They'll know what you mean.&lt;/p&gt;

&lt;h4&gt;Create a Local User&lt;/h4&gt;

&lt;p&gt;You'll need a local user on your server. This is the user that will
run the automatic deployments.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudo adduser
Username: deploy-robot
Full name: Deployment Robot
Uid (Leave empty for default):
Login group [deploy-robot]:
Login group is deploy-robot. Invite deploy-robot into other groups? []: www
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: 
Home directory [/home/deploy-robot]:
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : deploy-robot
Password   : ****
Full Name  : Deployment Robot
Uid        : 1001
Class      :
Groups     : 
Home       : /home/deploy-robot
Shell      : /usr/local/bin/sh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (deploy-robot) to the user database.
Add another user? (yes/no): no
Goodbye!
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Deployment Directories&lt;/h4&gt;

&lt;p&gt;Set up the directories to hold your applications.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudo mkdir -p /usr/local/www/rails/devtest
$ sudo mkdir -p /usr/local/www/rails/uat
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;These are the web roots for each of the environments, but applications
will not be deployed here. Instead, symlinks will be created from here
to where the applications are actually deployed.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudo mkdir -p /usr/local/app/rails/devtest
$ sudo mkdir -p /usr/local/app/rails/uat
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;These last two directories, and everything under them should be owned
by the deployment user you created above.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudo chown -R deploy-robot:www devtest uat
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Gems&lt;/h4&gt;

&lt;p&gt;Finally, there are some gems you'll need installed on the target
deployment server. Some of these depend on FreeBSD ports.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cd /usr/ports/comms/ruby-termios
$ sudo make install clean
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And then just a couple of gems.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudo gem install termios
$ sudo gem install capistrano
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And that's it for initial server configuration. There will be some
more configuration when first deploying an application.&lt;/p&gt;

&lt;h3&gt;Preparing Your Application&lt;/h3&gt;

&lt;h4&gt;Capistrano Config&lt;/h4&gt;

&lt;p&gt;Capify your application:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cd app
$ capify .
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Edit your capistrano rules in &lt;code&gt;deploy.rb&lt;/code&gt;. You'll want them to look
something like the following. These rules use no source control
system to get the code. Our continuous integration server takes care
of checking out the code, so it's easier to deploy from the local code
copy. And, this way we can be sure each deployment only contains one
changelist.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Overall config
set :use_sudo, false
# Application config
set :application, "app-name"
set :default_env, "production"
set :rails_env, ENV['RAILS_ENV'] || default_env
# Deployment source and strategy
set :deploy_to, "/usr/local/app/rails/#{rails_env}/#{application}"
set :deploy_via, :copy
set :scm, :none
set :repository,  "."
# Target servers
set :default_server, "localhost"
set :dest_server, ENV['SERVER'] || default_server
role :app, dest_server
role :web, dest_server
role :db,  dest_server, :primary =&amp;gt; true
# Phusion Passenger specific restart task
namespace :deploy do
    desc "Restart Application"
    task :restart, :roles =&amp;gt; :app do
        run "touch #{current_path}/tmp/restart.txt"
    end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Environment Configuration&lt;/h4&gt;

&lt;p&gt;Set up the two new environments for your application.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cp config/environments/production.rb config/environments/devtest.rb
$ cp config/environments/production.rb config/environments/uat.rb
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Somewhere inside both those files you'll need to set the
&lt;code&gt;RAILS_RELATIVE_URL_ROOT&lt;/code&gt; as the application will be running at a
sub-URI on your server and Rails needs to know that. Something like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ENV['RAILS_RELATIVE_URL_ROOT'] = "/app-name"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The two new environments will also need to be described in your
&lt;code&gt;database.yml&lt;/code&gt; file. This of course depends on your specific database
server setup, so I'll leave that bit to you.&lt;/p&gt;

&lt;h4&gt;Server-side Application Setup&lt;/h4&gt;

&lt;p&gt;Apache needs to know about the applications, and there needs to be
symlinks from the web root to the application deployment folder. This
setup only needs to be done once for each application.&lt;/p&gt;

&lt;p&gt;To add the application to Apache, edit
&lt;code&gt;/usr/local/etc/apache22/httpd.conf&lt;/code&gt; again, and in the &lt;code&gt;VirtualHost&lt;/code&gt;
section for the devtest environment, add a line like the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;RailsBaseURI /app-name
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now, set up the symlink:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ln -s /usr/local/app/rails/devtest/app-name/current/public /usr/local/www/rails/devtest/app-name
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And you're done with the application configuration.&lt;/p&gt;

&lt;h3&gt;Ant Deployment Scripts&lt;/h3&gt;

&lt;p&gt;Our company has an in-house continuous integration server. We'd be too
embarrassed at cocktail parties if we didn't have our own. Yes, yes, I
know this is completely ridiculous. And to make it even worse, it only
runs Ant scripts. Sigh. Anyway, here's how you make Ant automatically
deploy an application to devtest.&lt;/p&gt;

&lt;p&gt;In a file called &lt;code&gt;definitions.xml&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;project name="definitions_rake"&amp;gt;
    &amp;lt;macrodef name="rake"&amp;gt;
        &amp;lt;attribute name="app" /&amp;gt;
        &amp;lt;attribute name="target" /&amp;gt;
        &amp;lt;element name="variables" optional="true" /&amp;gt;
        &amp;lt;sequential&amp;gt;
            &amp;lt;exec executable="rake" dir="@{app}" failonerror="true"&amp;gt;
                &amp;lt;arg value="@{target}" /&amp;gt;
                &amp;lt;variables /&amp;gt;
            &amp;lt;/exec&amp;gt;
        &amp;lt;/sequential&amp;gt;
    &amp;lt;/macrodef&amp;gt;
    &amp;lt;macrodef name="capistrano"&amp;gt;
            &amp;lt;attribute name="app" /&amp;gt;
            &amp;lt;attribute name="environment" /&amp;gt;
            &amp;lt;attribute name="task" /&amp;gt;
            &amp;lt;sequential&amp;gt;
                &amp;lt;exec executable="cap" dir="@{app}" failonerror="true"&amp;gt;
                    &amp;lt;env key="RAILS_ENV" value="@{environment}" /&amp;gt;
                    &amp;lt;env key="SERVER" value="${project.server}" /&amp;gt;
                    &amp;lt;arg value="@{task}" /&amp;gt;
                    &amp;lt;arg value="-s" /&amp;gt;
                    &amp;lt;arg value="user=${project.user}" /&amp;gt;
                    &amp;lt;arg value="-s" /&amp;gt;
                    &amp;lt;arg value="password=${project.password}" /&amp;gt;
                &amp;lt;/exec&amp;gt;
            &amp;lt;/sequential&amp;gt;
    &amp;lt;/macrodef&amp;gt;
    &amp;lt;macrodef name="deploy"&amp;gt;
        &amp;lt;attribute name="app" /&amp;gt;
        &amp;lt;attribute name="environment" /&amp;gt;
        &amp;lt;sequential&amp;gt;
            &amp;lt;capistrano app="@{app}" environment="@{environment}" task="deploy:setup" /&amp;gt;
            &amp;lt;capistrano app="@{app}" environment="@{environment}" task="deploy:migrations" /&amp;gt;
        &amp;lt;/sequential&amp;gt;
    &amp;lt;/macrodef&amp;gt;
    &amp;lt;macrodef name="test"&amp;gt;
        &amp;lt;attribute name="app" /&amp;gt;
        &amp;lt;sequential&amp;gt;
            &amp;lt;rake app="@{app}" target="db:migrate" /&amp;gt;
            &amp;lt;rake app="@{app}" target="test" /&amp;gt;
            &amp;lt;rake app="@{app}" target="spec" /&amp;gt;
        &amp;lt;/sequential&amp;gt;
    &amp;lt;/macrodef&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ant macros, while quite insane, are generally a better way to define
new tasks than the complete insanity of trying to write a whole Ant
plugin in Java. These macros define low-level tasks to run &lt;code&gt;rake&lt;/code&gt; and
&lt;code&gt;capistrano&lt;/code&gt; tasks, and then use these to build up higher level tasks
like test and deploy. All these tasks assume that Ant has been run
from the directory immediately above your Rails app directory.&lt;/p&gt;

&lt;p&gt;In a file called &lt;code&gt;project.properties&lt;/code&gt;, set your server, user name and
password. Having the password here is unfortunate, but it is a local
account, with limited privileges on an internal server. Your call.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;user=deploy-robot
password=deploy-robot-password
server=deployment-server
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In a file called &lt;code&gt;build.xml&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;project name="aegean" default="build"&amp;gt;
    &amp;lt;import file="./definitions.xml" /&amp;gt;
    &amp;lt;property file="project.properties" prefix="project" /&amp;gt;
    &amp;lt;!-- Sample application.
         To add a new application:
         1. Copy the following targets.
         2. Replace 'depot' with your Rails app name.
         3. Add the 'app name' target as a dependency of the target 'build'.
    &amp;lt;target name="depot.deploy.devtest"&amp;gt;
           &amp;lt;deploy app="depot" environment="devtest" /&amp;gt;
    &amp;lt;/target&amp;gt;
    &amp;lt;target name="depot.test"&amp;gt;
           &amp;lt;test app="depot" /&amp;gt;
    &amp;lt;/target&amp;gt;
    &amp;lt;target name="depot" depends="depot.deploy.devtest, depot.test" /&amp;gt;
    --&amp;gt;
    &amp;lt;target name="example.deploy.devtest"&amp;gt;
           &amp;lt;deploy app="example" environment="devtest" /&amp;gt;
    &amp;lt;/target&amp;gt;
    &amp;lt;target name="example.test"&amp;gt;
           &amp;lt;test app="example" /&amp;gt;
    &amp;lt;/target&amp;gt;
    &amp;lt;target name="example" depends="example.deploy.devtest, example.test" /&amp;gt;
    &amp;lt;target name="build" depends="example" /&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The large comment block is just helpful for other developers trying to
add another application. From here, to try this out:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ant
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It should run the deployment, and then run the test suites. If that works as you expect, then just configure your continuous integration server to run Ant over that file on every submit.&lt;/p&gt;

&lt;p&gt;Hopefully this is of use to someone. Though this is how our
environment is configured, I have written this all from memory, so I
might have missed a critical step somewhere. Please let me know if
there's anything that needs to be changed.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8933204514094422033?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8933204514094422033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8933204514094422033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8933204514094422033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8933204514094422033'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/12/automatic-deployment-for-rails.html' title='Automatic Deployment for Rails'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-74940145028078691</id><published>2008-12-02T21:23:00.001+11:00</published><updated>2008-12-02T21:23:24.586+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Reading News</title><content type='html'>&lt;p&gt;Previously, I've been a &lt;a href="http://www.google.com/reader"&gt;Google Reader&lt;/a&gt; fan for my RSS news
reading needs. Now that I'm a proper Apple fan boi with an iPhone and
a MacBook Pro, I've switched to &lt;a href="http://www.newsgator.com/INDIVIDUALS/NETNEWSWIRE/"&gt;NetNewsWire&lt;/a&gt;. Waaay better. The
Google Reader iPhone app was what really drove me away. I'm probably
going to have to turn off my blog for this, but desktop applications
are frequently better than web applications. Heresy, I know. Google's
iPhone Reader app has two specific problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It refreshes the page after you close a tab. This is pretty
irritating. Particularly if, like me, you only show unread
items. Things disappear while I'm still reading them. Aargh!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The big one: they 'mobilize' web pages. That is, instead of linking
to the original version of every item Google has decided to link to a
rewritten version of the item. Supposedly this version will be more
readable on the iPhone. Well, the iPhone actually has a really good
browser. But they've actually significantly broken something: the
iPhone web browser recognises YouTube URLs and opens them in the
built-in YouTube app. Because the iPhone web browser can't play
YouTube movies. The rewriting means that this doesn't work. Thank you
Google, thank you.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Anyway, there is one feature that I miss from Google Reader: sharing
items. But there's the whole desktop application thing going on. I'm
now posting items I would have shared to my Twitter feed:
&lt;a href="http://twitter.com/gga"&gt;gga&lt;/a&gt;, look for items tagged &lt;code&gt;#feed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So how do I this? A pretty simple piece of AppleScript:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;tell application "NetNewsWire"
        set t to title of selectedHeadline
        set u to URL of selectedHeadline
end tell
tell application "Twitterrific"
        post update t &amp;amp; ": " &amp;amp; u &amp;amp; " (#feed)"
end tell
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A single click from NetNewsWire and I've posted an item to Twitter. If
you think you might be interested in items I've previously shared,
follow me on Twitter.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-74940145028078691?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/74940145028078691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=74940145028078691' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/74940145028078691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/74940145028078691'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/12/reading-news.html' title='Reading News'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-7216993942202417282</id><published>2008-11-26T21:24:00.001+11:00</published><updated>2008-11-26T21:24:33.566+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Dealing with Bot Nets</title><content type='html'>&lt;p&gt;Currently at work I'm designing a large-scale system that will be
susceptible to a certain kind of &lt;a href="http://en.wikipedia.org/wiki/Denial_of_service"&gt;denial-of-service&lt;/a&gt;
attack. By way of analogy, imagine that Gmail didn't bother to prevent
robots from creating accounts. By the time the first human went to
create an account all the reasonable combinations of the top 10,000
human names would have had already been taken, by robots. This would
be very irritating to all actual human users.&lt;/p&gt;

&lt;p&gt;Our problem is much more serious than simply losing human-preferred
free email addresses. But, it is a case of preventing robots from
soaking up a finite resource and depriving real humans of using
resource.&lt;/p&gt;

&lt;p&gt;My approach to large system design is to always get security right
first: you can never effectively retrofit it later. And the central
question we keep coming back to on security is how to defend ourselves
against robots. Our thinking has typically followed certain lines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To acquire a resource, a user must prove they are human.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;All users must have a registered account, so we can identify who is
consuming the resource and only have to verify their humanity once: on
registration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The user's account must be protected with a password to avoid a bot
misusing a real human's account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Each account has a threshold of resource acquisition. If the
threshold is exceeded than that account is temporarily blocked in some
way.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At this point in our thinking we're pretty confident that we've dealt
with the risk of a robot creating an account and using that single
account to soak up all our resources. We're also pretty certain we've
dealt with the issue of a robot creating many, many accounts, using
those accounts to soak up resources while staying under the threshold
for each.&lt;/p&gt;

&lt;p&gt;But. What about bot nets? And by restricting single accounts like
this, haven't we just forced attackers to use a bot net? Attackers
would want to distribute a bot across the Internet. Each bot would not
use its own account, instead it would use the account of the human
owning the computer the bot had infected. Once the bot is on the
human's computer it can easily grab the credentials, as a key logger
or by sniffing around in the browser cookies. In this situation our
threshold control hasn't really stopped the attacker, but it has hurt
the human. The effective threshold for the human is now much lower.&lt;/p&gt;

&lt;p&gt;And it is on this point that our discussions tend to go around and
around. How can we prevent bots (who may have acquired a human's
account) without negatively affecting the human's experience and
without placing prohibitive barriers to use in place?&lt;/p&gt;

&lt;p&gt;Thinking about this issue tonight, I wonder if we're not completely
wrong in this argument? If a user's computer has been compromised and
is now part of a bot net, should we be trying to give that user a
smooth experience at all? They've been compromised, shouldn't we
identify that, inform the user and then attempt to lock them out
completely? There's a question there about when we can let them back
in, but I'll leave that now.&lt;/p&gt;

&lt;p&gt;My central question is, should web applications actually aggressively
make the experience worse for user's who have been compromised? In the
case of a bank the answer seems obvious. I suspect we're actually
similar.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-7216993942202417282?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/7216993942202417282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=7216993942202417282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7216993942202417282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7216993942202417282'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/11/dealing-with-bot-nets.html' title='Dealing with Bot Nets'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4526690101943719163</id><published>2008-11-26T20:44:00.001+11:00</published><updated>2008-11-26T20:44:07.252+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Wrath of a Mad God</title><content type='html'>&lt;p&gt;&lt;em&gt;Wrath of a Mad God&lt;/em&gt;&lt;br /&gt;
Raymond E. Feist&lt;/p&gt;

&lt;p&gt;Pure crack for fantasy geeks and about as high quality. I've been
reading Feist since a friend recommended &lt;em&gt;Magician&lt;/em&gt; to me when I was
nine years old; in grade four, back in 1988. My friend's name was Paul
Reid and that was 20 years ago now. It's also long since I realised
that I'm pretty much only reading Feist because reading Feist is what
I do.&lt;/p&gt;

&lt;p&gt;As his books get steadily worse that becomes a weaker and weaker
reason. He does have some redeeming features: he doesn't forget where
he put the plot; his sagas actually finish; he manages to avoid
appearing a total right-wing fascist. After the disappointment of
Martin and the betrayal of Jordan those are very good things to a
recovering fantasy geek. He is still one of the reasons that I haven't
completely given up on fantasy. And of course, Gaiman.&lt;/p&gt;

&lt;p&gt;Why am I now so disappointed? His first three books (&lt;em&gt;Magician&lt;/em&gt;,
&lt;em&gt;Silverthorn&lt;/em&gt; and &lt;em&gt;A Darkness at Sethanon&lt;/em&gt;) were really great fantasy
epics. &lt;em&gt;Magician&lt;/em&gt; even managed that rarest of fantasy firsts: a
self-contained, single, enjoyable novel. What was so enjoyable? A
rich, consistent, well-thought through world, with a deep and
fascinating history. The sort of thing that makes Tolkein so
popular. Those books sold well, Feist proceeded to mine that world and
his characters in countless sequels. And like the fools we are, us
fantasy fans lapped those sequels up.&lt;/p&gt;

&lt;p&gt;You may think you want the blank spots in the story filled in, you may
think that those tantalising glimpses are only a fraction of the glory
that is fully formed, but hidden, in the author's mind. But. You are
wrong. The back story you build, the worlds you imagine around the
glimpses? Those are the real joy in fantasy. Do not burn those worlds
to the ground by demanding ad reading endless prequels and
sequels. Let the great stories stand alone.&lt;/p&gt;

&lt;p&gt;Feist is a great example of this. It turns out that he didn't really
have anything to surround those brief histories and as he writes more
and more he's starting to change things. Sometimes for the better, but
many times the things I've loved have died.&lt;/p&gt;

&lt;p&gt;I see two things here: the world is not meant to change, even if it
does make things easier for someone; and, you don't want to know your
heroes too well. Even if they are only characters in a book.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4526690101943719163?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4526690101943719163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4526690101943719163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4526690101943719163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4526690101943719163'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/11/wrath-of-mad-god.html' title='Wrath of a Mad God'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-2373996699978153544</id><published>2008-11-23T22:35:00.001+11:00</published><updated>2008-11-27T10:17:57.346+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>The Worst Desktop Operating System. Evar.</title><content type='html'>&lt;p&gt;I complain a lot about &lt;a href="http://overwatering.blogspot.com/2008/05/time-for-new-desktop.html"&gt;FreeBSD&lt;/a&gt; here and on &lt;a href="http://twitter.com/gga"&gt;Twitter&lt;/a&gt; and,
thankfully, I am now about to stop using that horror on my
desktop. But why horror?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In the world of desktop computers, anything that is not
Windows, is niche.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In that niche, anything that is not Mac OS X is niche.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In that niche, anything that is not Ubuntu Linux is niche.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In that niche, anything that is not Red Hat or SUSE Linux is niche.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In that niche, anything that is not one of the commercial
workstation UNIX operating systems, like Solaris, or AIX, or HP/UX is
niche.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And down there, in that niche, in that fraction of a fraction of a
fraction of a fraction of a percent of the world of desktop computers,
FreeBSD is niche.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From a technical point of view it actually has quite a lot to
recommend it. The kernel is very well tested and reliable. For a UNIX,
it has generally made decisions for correctness over
performance. Something Linux certainly can't match. The user land is a
consistent space, harking back through over 20 years of tradition. The
ports system is a pretty good way to install and manage software.&lt;/p&gt;

&lt;p&gt;But. In the whole world there are perhaps 15 people using it (no, not
really). Anytime you Google for any problems or issues, you'll find
Linux, and just have to hope that you can figure out to translate the
instructions.&lt;/p&gt;

&lt;p&gt;And this is to say nothing of the complete dearth of available
software. To use FreeBSD is to always be several versions behind in
Firefox. To have to compile Emacs from CVS source. To have to tweak
the source code to your video driver.&lt;/p&gt;

&lt;p&gt;FreeBSD may once have had the One True Filesystem layout, but not
anymore. Linux is now nearly the king of that hill. Don't use FreeBSD
as your desktop. You really don't care about how good the kernel
is. You really &lt;strong&gt;do&lt;/strong&gt; care about not having to compile video
drivers. Worst &lt;em&gt;Desktop&lt;/em&gt; Operating System Evar.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-2373996699978153544?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/2373996699978153544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=2373996699978153544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2373996699978153544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2373996699978153544'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/11/worst-desktop-operating-system-evar.html' title='The Worst Desktop Operating System. Evar.'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1303634950815449775</id><published>2008-11-20T23:09:00.001+11:00</published><updated>2008-11-20T23:09:14.300+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pretention'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='fish'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Still Alive</title><content type='html'>&lt;p&gt;Yes, this is one of those irritating posts. Where a blog that you
thought had quietly retired suddenly reappears with a post. A post
that says basically nothing. A very self-indulgent post just promising
that there will actually be real work worth reading reappearing soon.&lt;/p&gt;

&lt;p&gt;Why couldn't the blogger just leave us all in peace? Why this attempt
to appear that he hasn't just gotten bored or too lazy to update? Why
this empty post tantalising and teasing with a promise; only to
disappoint with more deathly silence.&lt;/p&gt;

&lt;p&gt;Yep, this is one of &lt;strong&gt;those&lt;/strong&gt; posts.&lt;/p&gt;

&lt;p&gt;But! I actually do promise to post something real soon. No! Really!&lt;/p&gt;

&lt;p&gt;And, in a desperate attempt to appear trustworthy, here's a short
overview of what's been going on.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Switched from the horror of
&lt;a href="http://overwatering.blogspot.com/2008/05/time-for-new-desktop.html"&gt;FreeBSD&lt;/a&gt;
I now have a brand new &lt;a href="http://www.apple.com/au/macbookpro/"&gt;MacBook
Pro&lt;/a&gt; as my primary
computer. After nine years I'm finally being paid to use the platform
I stayed loyal to throughout the dark years. Hopefully the new
computer, well set up, will actually help me write more here. It got
me writing this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New project. Can't talk about it. Cool though. Has inspired some
general problem solving that I can talk about though. There will be
some technical recipes on here for the first time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Briefly had a fish tank on my desk at work. It was very nice. The
tank did well, but then I had to move desks. Probably worth doing, but
you'd want to be more sure of where you were sitting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Joined a book club. Read quite a few books. And yep, that means
reviews. There will be some of those coming soon.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Still annoyed at various parts of my industry, enough to rant.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hopefully, all that and more to be posted.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1303634950815449775?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1303634950815449775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1303634950815449775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1303634950815449775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1303634950815449775'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/11/still-alive.html' title='Still Alive'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1651164087702080169</id><published>2008-09-01T22:19:00.001+10:00</published><updated>2008-09-01T22:19:18.471+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>On the Nature of my Damage</title><content type='html'>&lt;p&gt;Recently I have realised that at a very early age my attitudes towards
and interactions with computers were permanently damaged. Like all
geeks, I first started programming in primary school. And like many
geeks my age, the first computer I had to program was an &lt;a href="http://en.wikipedia.org/wiki/Apple_//e"&gt;Apple
//e&lt;/a&gt;. My Dad had lots of books for the Apple //e, so I had a lot
to work through. But once he got a &lt;a href="http://en.wikipedia.org/wiki/Macintosh_SE/30"&gt;Mac&lt;/a&gt;, I wanted to program
that as well.&lt;/p&gt;

&lt;p&gt;The seduction of more power, I guess.&lt;/p&gt;

&lt;p&gt;Well, times were tough in the &lt;a href="http://en.wikipedia.org/wiki/Northern_Territory"&gt;Northern Territory&lt;/a&gt;: the only book
I could find even vaguely on programming the Mac was &lt;em&gt;&lt;a href="http://www.amazon.com/Apple-Human-Interface-Guidelines-Desktop/dp/0201177536/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1220271314&amp;amp;sr=1-1"&gt;The Apple Human
Interface Guidelines&lt;/a&gt;&lt;/em&gt;. The original edition, by &lt;a href="http://www.asktog.com/"&gt;Tog&lt;/a&gt;, from
the mid-1980's. That was it. And this was, of course, long before
general Internet availability.&lt;/p&gt;

&lt;p&gt;What was I going to do? That was all I had, so that's what I
read. Cover to cover. Twice.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Apple HIG&lt;/em&gt; is a somewhat unusual technical manual. Instead of just
documenting all the available possibilities, dispassionately and
exhaustively, this book took a very firm position. There was a right
way to do things and things must be done the right way. The &lt;em&gt;HIG&lt;/em&gt; then
set out to list the right ways and the wrong ways, with
justifications.&lt;/p&gt;

&lt;p&gt;This preaching about the true path was both low-level and high-level:
as well as detailed instructions on how to place and label buttons, it
was also about how to design whole programs for the smoothest and most
consistent interaction with the user.&lt;/p&gt;

&lt;p&gt;And there was installed my damage. That book didn't just encourage
good UIs, it &lt;strong&gt;demanded&lt;/strong&gt; them. And now it seems that I demand a lot
from computers. Computers shouldn't be hard to use, in fact we
shouldn't even notice that we're using them at all.&lt;/p&gt;

&lt;p&gt;Now every time I have to do something just so the computer knows
what's going on (like 'Save') or I have to jump through a hoop because
it's easier for me to jump then the programmer to write their software
well, I feel a deep sense of annoyance. It doesn't have to be this
way, dammit! Computers are meant to free us from drudgery to allow us
more time to do the things we enjoy. Or, more cynically, the jobs
we're more efficient at. Either way, doesn't matter to me. But, most
of all, computers don't have to be this way. It isn't that much harder
to do the right thing. We could do the right thing in the 1980's; we
can do the right thing now.&lt;/p&gt;

&lt;p&gt;As a programmer I could be frustrated and demoralised by the state of
my industry. Maybe later. For now I choose to rant and rail against
this, and fight. Much to the endless delight of my highly fortunate
colleagues.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1651164087702080169?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1651164087702080169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1651164087702080169' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1651164087702080169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1651164087702080169'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/09/on-nature-of-my-damage.html' title='On the Nature of my Damage'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-7730077208258808889</id><published>2008-09-01T21:33:00.001+10:00</published><updated>2008-09-01T21:52:35.919+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Where have all the photos gone?</title><content type='html'>&lt;p&gt;I've stopped posting my photos on my blog, they go straight to my Flickr.com feed now. It's just easier to post to and have the photos look reasonable. Sorry Google, but Picasa just isn't there yet!&lt;/p&gt;

&lt;p&gt;Anyway, here's my feed: &lt;a href="http://www.flickr.com/photos/overwatering/"&gt;overwatering&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And here some recent sets of photos that I kind of liked. Follow the photos for larger sizes and the rest of the sets.&lt;/p&gt;

&lt;a href="http://www.flickr.com/photos/overwatering/sets/72157605897322669/" title="View 'Tasmania, 2008' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://farm4.static.flickr.com/3040/2623586427_7448e46a3a.jpg" alt="boatshed (side)" border="0" width="400" height="267" /&gt;&lt;/div&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;a href="http://www.flickr.com/photos/overwatering/sets/72157605745606266/" title="View 'sunsets' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://farm4.static.flickr.com/3171/2638779460_85d170650b.jpg" alt="farm cove sunset" border="0" width="400" height="267" /&gt;&lt;/div&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;a href="http://www.flickr.com/photos/overwatering/sets/72157607039040977/" title="View 'flowers' on Flickr.com"&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://static.flickr.com/3200/2814961359_d494f45759.jpg" alt="dinosaur orchid" border="0" width="400" height="267" /&gt;&lt;/div&gt;&lt;/a&gt;
&lt;br/&gt;

&lt;p&gt;I will post other links to some other photos I like in the future, but if you're interested, probably best to &lt;a href="http://api.flickr.com/services/feeds/photos_public.gne?id=21818828@N00&amp;lang=en-us&amp;format=rss_200"&gt;subscribe&lt;/a&gt; to my Flickr feed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-7730077208258808889?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/7730077208258808889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=7730077208258808889' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7730077208258808889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7730077208258808889'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/09/where-have-all-photos-gone.html' title='Where have all the photos gone?'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3040/2623586427_7448e46a3a_t.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1271461193521401751</id><published>2008-07-13T19:11:00.001+10:00</published><updated>2008-07-13T19:11:44.466+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>after the quake</title><content type='html'>&lt;p&gt;&lt;em&gt;after the quake&lt;/em&gt;&lt;br /&gt;
Haruki Murakami&lt;/p&gt;

&lt;p&gt;I'm in a book group again and this is our first book. Funnily enough
when we all brought our picks to the first gathering there were two
Murakami suggestions - the other being &lt;em&gt;A Wild Sheep Chase&lt;/em&gt;. We chose
&lt;em&gt;after the quake&lt;/em&gt; as our first book (it was short and a short story
collection - a slightly commitment-phobic book group) and &lt;em&gt;A Wild
Sheep Chase&lt;/em&gt; was pushed to the end of the list with a strong
suggestion to find a substitute. And now the suggester has left the
group! Oooh - scandal!&lt;/p&gt;

&lt;p&gt;For all that &lt;em&gt;after the quake&lt;/em&gt; was fantastic. It's a collection of
short stories each following a single person's life after the Kobe
earthquake. None of the characters lives were directly affected by the
quake: they didn't live in Kobe, they apparently didn't lose anyone
from their lives - but for each of them the quake was there, this huge
background event that has shuddered through them all.&lt;/p&gt;

&lt;p&gt;The writing is spare, brief, highly evocative and, ultimately,
beautiful. Reading this very short collection was an unusual reading
experience: it was relaxing, peaceful. There was no urge to understand
what was going on, to read deeper - there was just a peaceful
journey. Apparently Murakami is to be read very literally and that's
how I saw this. It seems to be full of allegory and deeper intent, but
I don't think that's what we're supposed to read. It felt like a
series of beautifully told stories about ordinary people. People whose
lives had been massively disrupted - even though nothing actually
happened to them. And thinking on that, there is a strange
undercurrent of guilt: as if they should not be feeling pain while
there is so much suffering on TV.&lt;/p&gt;

&lt;p&gt;I have a theory that there is something that connects together all the
stories told in this book. An earthquake is a sudden event following a
long build-up of pressure, after the quake the seismic fault lines
settle into a new state, one that is hopefully more
stable. Unfortunately, for us, it requires this sudden release to jump
to the new state. This is reflected in all the stories: the
characters' lives were flowing along and suddenly the earthquake kicks
them into a new state. With an upheaval of their life. The book as a
whole is tied together by the final story, where the characters end up
living the life they had always intended. It may sound corny, but hope
from the change. And, as it is told quite subtlely, both in message and
style, you don't feel the urge to cringe.&lt;/p&gt;

&lt;p&gt;Some final comments: I read this immediately after &lt;em&gt;&lt;a href="http://overwatering.blogspot.com/2008/07/midnight-children.html"&gt;Midnight's
Children&lt;/a&gt;&lt;/em&gt;, the difference in style was very striking. Throughout
the book group this was a hit. Even those who initially skeptical (due
to cat torture, or overly trendy covers) were won over. I'd recommend
it, but don't expect to be grabbed by the collar and hauled on a
ride. This is a slow, contemplative book. Read for the enduring
feeling of peace.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1271461193521401751?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1271461193521401751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1271461193521401751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1271461193521401751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1271461193521401751'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/07/after-quake.html' title='after the quake'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1472135917312766235</id><published>2008-07-10T23:18:00.001+10:00</published><updated>2008-07-10T23:18:34.009+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Blink</title><content type='html'>&lt;p&gt;&lt;em&gt;Blink&lt;/em&gt;&lt;br /&gt;
Malcolm Gladwell&lt;/p&gt;

&lt;p&gt;This book is just plain cool and it's actually hard to say precisely
why. Humans think and make decisions very quickly without knowing we
do this, or even understanding how we can do it.&lt;/p&gt;

&lt;p&gt;There are two immediate rammifications:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;If you know a field well, and I mean very well. If you've studied
it, trained in it, worked and lived in it, then your snap thought
process, your 'Blink' is very valuable. You should trust it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If this isn't your field of expertise though, your brain will find
something to react to, some stereotype you aren't even aware of and
react to that. Frequently, that stereotype will be "I don't like that
because it's different." In these cases your 'Blink' will lead you
wildly astray. Don't trust it - it's hard, but dig deeper and take time.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A major flaw may have occurred to you: if you can't understand these
instant reactions, how do you know which one you're having? Well, if
you're honest with yourself, of course you know. Either you have
studied something, or you haven't.&lt;/p&gt;

&lt;p&gt;But that doesn't work well for the softer skills like reading
people. Every thinks they're good at reading people.&lt;/p&gt;

&lt;p&gt;And there's the &lt;a href="http://en.wikipedia.org/wiki/Dunning-Kruger_effect"&gt;Dunning-Kruger Effect&lt;/a&gt; waiting to bite.&lt;/p&gt;

&lt;p&gt;So what can you do? Well to start, read this. It's a truely
fascinating study of people and how we think. And, being aware of the
decisions you make without thinking is actually a pretty powerful
antidote to those times it leads you astray.&lt;/p&gt;

&lt;p&gt;You've just met someone. He seems like a pretty good guy and you like
him. Your powers of rationalisation will tell you that you like him
because he seems confident but easy-going. You also liked his mildly
self-deprecating introduction. And if this is social, great! Just go
with it! But, if this is an interview and you're on either side of the
table, stop and ask yourself. Is that all true, or do I just like him
because he's tall?&lt;/p&gt;

&lt;p&gt;Seriously. Read the book. Gladwell also wrote &lt;em&gt;The Tipping Point&lt;/em&gt;
which I will be definitely be reading.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1472135917312766235?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1472135917312766235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1472135917312766235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1472135917312766235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1472135917312766235'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/07/blink.html' title='Blink'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4994773493540455931</id><published>2008-07-10T23:06:00.001+10:00</published><updated>2008-07-10T23:06:08.088+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Steve Jobs &amp; the JesusPhone Will Save Us</title><content type='html'>&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 80%; background-color: rgb(255, 255, 153); font-size: 65%; padding-bottom: 10px; padding-left: 10px; padding-right: 10px;"&gt;
Clearly Steve Jobs and the JesusPhones is the ultimate name for a
band.
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;We've had mobile phones in our lives for quite awhile now. First they
were enormous, and only tradesmen had them. Then they started to get
small, really small. So small you couldn't use them. And then they got
bigger again: now swelling with countless features. Torches, cameras,
pedometers. Some of the features stayed, but not many. Next was email,
and that's been pretty popular. The Internet made its way onto our
phones as well, but like video calls didn't really go anywhere.&lt;/p&gt;

&lt;p&gt;This Friday the &lt;a href="http://www.apple.com/au/iphone/"&gt;iPhone&lt;/a&gt; will launch in Australia. And predictably
people are going crazy. When was the last time you knew the launch
date of a mobile phone ahead of time? Sure, most of the hype is
because it's Apple and everyone loves Apple and isn't it so gorgeous
and stylish and Oh My God I've just got to have one. Deep breath. But
is there something else going on here?&lt;/p&gt;

&lt;p&gt;The core function of a mobile phone is making phone calls. Well,
yeah. But there have been countless other features rammmed into
them. Haven't some of these taken off as well? Yes. There is one that
is on every phone in Australia, most of the phones in the world and
used by the overwhelming majority of mobile owners; in some
demographics more than phone calls: SMS. But SMS is just a very
limited single-person to single-person version of online chat. AOL
first released Instant Messenger back in 1997 and it's been huge ever
since. IM, with presence, blocking, buddy lists, group chat, location
mobility is a far richer chat experience than SMS. So why don't you,
yes, you reading this post, have an IM client pre-installed on your
phone? Why hasn't SMS gone the way of SIM card addressbooks (remember
those?) and been completely replaced by IM?&lt;/p&gt;

&lt;p&gt;Firstly though, why is that an interesting question? As I said, we've
been carrying mobile phones for a long time. And in that time phones
have progressively become more and more powerful. Sure, they've lagged
in the power stakes behind standard computers, but I think you'd be
surprised by how little. The original iPhone was equivalent at release
to a four year old Mac laptop. Four years! I was writing interesting
software (including a chat system) on 18 year old Macs! So clearly
phones are powerful enough. How come then, given that we have these
mini-computers with us more than our real computers there aren't
interesting applications for them? How come it's still phone calls and
SMS? This is expecially frustrating as these powerful devices have
permanent connections to the Internet, everywhere! Something I could
only dream of when I was first writing software 15 years ago!&lt;/p&gt;

&lt;p&gt;People have tried. Shrinkwrapped application developers, vertical
integrators, shareware developers have all tried to make a living
writing software for phones. And one by one they've given up. And
after much thinking the industry as a whole has come up with a batch
of reasons why there has been no success. And a lot these reasons boil
down to there is no killer app. There isn't one thing that people want
to do with their phones other than make calls or send texts. And I
bought that line too. Until I thought of SMS and IM.&lt;/p&gt;

&lt;p&gt;So why no IM? Well firstly, you are not Nokia's or Ericsson's
customer. You are their product. Telstra is their customer and you are
being delivered to Telstra so Telstra will buy mobile network gear off
Nokia. Interesting. It may not be true any longer, but Nokia used to
make more off that gear than their phones. The phones were a
loss-leader to drive sales of equipment.&lt;/p&gt;

&lt;p&gt;Why the 160 character limit on SMS? Because SMS messages are squeezed
into a gap in the control sequences that phones exchange with the
towers to remain connected to the network. In other words, SMS
messages are sent anyway, all the time, even if you haven't put
anything in them. They are just part of the network! So why do the
telcos charge 25c per message? Because they can. Oligopolies are cute
like that.&lt;/p&gt;

&lt;p&gt;Imagine how many text messages are sent every day. Think about how
much is charged per-text. All of that income is pure profit for
Telstra and the other telcos. That is an enormous, uncontaminated by
overheads revenue stream. That kind of revenue is addictive. And here
is the crux of the problem with mobile phones: the telcos became
addicted to their existing revenue streams and then, with the handset
manufacturers as their willing accomplices, set to work on completely
controlling and stifling mobile phones as a platform.&lt;/p&gt;

&lt;p&gt;Writing applications for phones is incredibly difficult. I don't want
to go into the problems here but the two main issues are the half a
dozen different platforms with inconsistent implementations of the
same platform across devices and end-user distribution and
installation are essentially impossible. This situation did not happen
by accident though. The telcos strongly encouraged this situation to
emerge. Why? Because they are terrified of just becoming a utility
that can only charge for data flowing down the pipe. It may be too
late, but this was a very short-sighted fear.&lt;/p&gt;

&lt;p&gt;Apple and the iPhone are changing this world. Not because Apple are
out to save the world, not because they only care about the user
experience, not because their phone is pretty. Nope, that's all
hype. The iPhone changes things because for the first time, you the
phone buyer are actually the customer of the handset
manufacturer. Apple is not trying to sell network equipment, Apple is
trying to sell phones. And they decided that to sell phones the phone
has got to have a great browser. And the ability to install other
applications. And somewhere to buy those apps from.&lt;/p&gt;

&lt;p&gt;You are buying the iPhone and you're liking it. Or you're not buying
it, but those particular features sound pretty good. Why can't my
Nokia have those? And pretty soon the telco's worst fear is realised:
they are just a pipe through which we ship packets. And I can
guarantee when that happens that 160 characters worth of IM
conversation will cost a lot less than 25 cents. Try 0.03
cents. That's 833 times less! At today's rate, no demand discount
applied!&lt;/p&gt;

&lt;p&gt;So, relegated from giants of the economy to the likes of water and
sewage for the telcos. But, it didn't have to be this way. As well as
providing the network, telcos had something else: a billing
relationship with the consumer.&lt;/p&gt;

&lt;p&gt;What if when browsing Amazon on your phone when you bought something
you didn't have to enter any credit card details? Instead the web site
communicated directly with your phone, used a rolling key from there
to sign the invoice and then billed it straight to your phone bill?
Gee, sounds pretty convenient to me. And a hell of a lot more secure
than handing out credit card details. This can only work with phones,
and telcos have only a short window remaining to make this happen
before something else comes along. They had their chance to replace
the credit card companies. But because of their addiction to their
immediate (but ultimately doomed) revenues, their willingness to screw
their customers and stifle an entire world of technology for almost
two decades they appear to have done themselves out of a future.&lt;/p&gt;

&lt;p&gt;I, for one, shall not mourn their passing. And do not mourn for Nokia
either. Brainless henchman is not a noble calling.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4994773493540455931?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4994773493540455931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4994773493540455931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4994773493540455931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4994773493540455931'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/07/steve-jobs-jesusphone-will-save-us.html' title='Steve Jobs &amp;amp; the JesusPhone Will Save Us'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-94254720934483007</id><published>2008-07-06T22:39:00.001+10:00</published><updated>2008-07-06T22:39:23.802+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Midnight's Children</title><content type='html'>&lt;p&gt;&lt;em&gt;Midnight's Children&lt;/em&gt;&lt;br /&gt;
Salman Rushdie&lt;/p&gt;

&lt;p&gt;Dense, detailed, loud, intense and, in a way, unrelenting. The world
is swirling around you and you've got no idea where to look but you
want to look everywhere right now! I've never been there, but this
book is what I imagine India is like. I don't think that's
unreasonable either as Rushdie seems to be wanting to tell the story
of India's birth as a country.&lt;/p&gt;

&lt;p&gt;This is another of those literary 'magical realism' novels that I find
much easier to describe as fantasy. There is definitely a lot of
apparent fantasy in here, but the story has much more to it than those
parts.&lt;/p&gt;

&lt;p&gt;For me, possibly the most interesting aspect was the realisation that
Saleem Sinai was an unreliable narrator. This was just a suspicion at
first, he was so desperate to defend everything as true that I started
thinking he doth protest too much. And once that seed was planted it
became easy to read everything too ways: all the fantasy that Saleem
claimed could be explained entirely prosaically.&lt;/p&gt;

&lt;p&gt;So I read the book with two interpretations. I don't know which is
true, but I do know that for all his transparency Saleem is one of the
more intensely realised and interesting characters in fiction.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-94254720934483007?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/94254720934483007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=94254720934483007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/94254720934483007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/94254720934483007'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/07/midnight-children.html' title='Midnight&amp;#39;s Children'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8377927145448490255</id><published>2008-07-06T20:28:00.001+10:00</published><updated>2008-07-06T20:29:04.354+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='maths'/><title type='text'>Ahh, audiophiles</title><content type='html'>&lt;p&gt;I've always enjoyed &lt;a href="http://en.wikipedia.org/wiki/Audiophile"&gt;audiophiles&lt;/a&gt;; it's pretty hard to find a
single group with so much rich potential for &lt;a href="http://www.cyclesoft.com/Audiophile.html"&gt;mockery&lt;/a&gt;. But,
through all my laughter at their talk of high quality digital cables
(they haven't heard of &lt;a href="http://en.wikipedia.org/wiki/Error_detection_and_correction"&gt;error correction&lt;/a&gt; perhaps?); through all
the sniggering over their detailed discussions about bit rates when
the &lt;a href="http://en.wikipedia.org/wiki/Nyquist-Shannon_sampling_theorem"&gt;Nyquist-Shannon sampling theorem&lt;/a&gt; is a mystery unto them (What? Perhaps the CD sound frequency of 44.1kHz being
approximately twice the typical highest human-audible frequency is
a coincidence?)&lt;/p&gt;

&lt;p&gt;Anyway, for all that I've always just thought it was funny: Ahh,
aren't they cute? No knowledge of information theory at all, but here
they are arguing about transmitting bits. Still cute though. Just a geeky hobby, kind of like theology. Theologians and audiophiles arguing about things that aren't really
going to have any effect on their lives, that they don't understand,
and in the end are all indistinguishable.&lt;/p&gt;

&lt;p&gt;And I've always assumed that on some level audiophiles knew just how
ridiculous they were. They'd never admit it, but there was always
something in there that would prevent them from doing something really
stupid. But, no!&lt;/p&gt;

&lt;p&gt;Behold! The &lt;a href="http://www.amazon.com/Denon-AKDL1-Dedicated-Link-Cable/dp/B000I1X6PM"&gt;$500 Ethernet Cat-5 cable&lt;/a&gt;! And it's not even
blue, like a &lt;a href="http://en.wikipedia.org/wiki/Image:Cat5.jpg"&gt;proper one!&lt;/a&gt; And they're available used! Some idiot actually bought one of these!&lt;/p&gt;

&lt;p&gt;Oh, and please, please, please can an audiophile attempt to defend
this? I won't respond, but it's always amusing to listen to.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8377927145448490255?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8377927145448490255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8377927145448490255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8377927145448490255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8377927145448490255'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/07/ahh-audiophiles.html' title='Ahh, audiophiles'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6969618636142244576</id><published>2008-05-24T11:45:00.001+10:00</published><updated>2008-05-24T15:26:13.412+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Time for a New Desktop</title><content type='html'>&lt;p&gt;I'm now in the process of switching my main desktop from Windows XP to
FreeBSD. And man, all I can say is that if you're &lt;a href="http://www.russellbeattie.com/blog/upgraded-to-hardy-heron-beta"&gt;still on Windows or
a Mac, now's the time to go Free baby!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My Windows desktop has two DVI LCD displays, and a Microsoft (hiss!)
Natural Keyboard. I'll still be using Windows reasonably often but I
don't want to be rearranging keyboards, mice and monitors on my desk
constantly. An extra monitor on my desk, and a USB-DVI KVM switch, and
all that's nicely arranged. Sure, when I switch to FreeBSD sometimes
the mouse is all messed up: moves the wrong direction, won't send
clicks, buttons confused. But this doesn't happen often, and if I just
switch back to Windows a couple of times, it sorts itself out.&lt;/p&gt;

&lt;p&gt;After I'd recompiled and installed my editor, and installed some fonts
from source, the next thing to get right were having the two screens
display a different image: they were defaulting to clone mode (same
image on both screens.) That was pretty easy to fix up in the end.&lt;/p&gt;

&lt;p&gt;Oh, but before I did that there was also the kernel that needed to be
recompiled, because I needed to be able to run Java. Sure, I've only
got JDK1.5, but that's pretty close to up-to-date, and I really don't
know why you'd need anything more recent.&lt;/p&gt;

&lt;p&gt;Somewhere in here I had to get some assistance from the
sysadmin. While installing those fonts up above, one of the packages
had complained that an existing package hadn't been installed
correctly, it very helpfully told me how to de-install and re-install
it. Nice. That package had a 'delete' dependency on KDM, the login
window for KDE, and then on re-install KDM didn't come back, so I had
to get the sysadmin to reinstall KDE. It hardly took him anytime at
all. People who design packages really should get their dependencies
correct.&lt;/p&gt;

&lt;p&gt;So, I've got my desktop working again, my editor running, and some
nice TrueType fonts available. Emacs can't see any of those TrueType
fonts, but I'm sure with a few more recompiles with different
configure options it will all come right. The one remaining problem
was getting FreeBSD to use both screens in something other than clone.&lt;/p&gt;

&lt;p&gt;Configuring Xinerama wasn't the right way to go: the web recommended
that and a colleague already had that working. But it wasn't right for
me. I had to download the source code for my video card driver from
nVidia (after I found someone with the same machine as me, running
Windows, and asked them what video card they had.) I hacked the source
to the driver, as it complained that FreeBSD 7.0-CURRENT wasn't
supported, although I was running FreeBSD 7.0-STABLE. A few small
changes to the source and it compiled straight away. Then I ran the
nVidia config tool, and restarted. That very nicely controlled both
monitors by turning one off and the other on. But right there on the
nVidia site were instructions on how to enable TwinView. Perfect!
After I'd rewritten &lt;code&gt;/etc/X11/Xorg.conf&lt;/code&gt; based on their instructions
and what I knew about my video card and monitors, I restarted again.&lt;/p&gt;

&lt;p&gt;And... perfect! Two independent monitors that I can arrange windows on
to my heart's content!&lt;/p&gt;

&lt;p&gt;So, I really don't know what you're waiting for, you really should
dump those Macs and Windows computers and switch straight to
FreeBSD! You have no idea how good the kernel is. Sure, it isn't as
good as Solaris, but it's miles better than Linux.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6969618636142244576?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6969618636142244576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6969618636142244576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6969618636142244576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6969618636142244576'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/05/time-for-new-desktop.html' title='Time for a New Desktop'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6520389517686767177</id><published>2008-05-12T20:53:00.001+10:00</published><updated>2008-05-12T20:53:37.865+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Mythical Man-Month</title><content type='html'>&lt;p&gt;&lt;em&gt;The Mythical Man-Month&lt;/em&gt;&lt;br /&gt;
Fred Brooks&lt;/p&gt;

&lt;p&gt;Everyone knows this book; everyone knows the core points and Brooks'
recommendations and laws, even if not everyone has read it. This is
one of the few true classics of computing. I'm not going to waste
anyone's time repeating those assertions.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Mythical Man-Month&lt;/em&gt; is now, unfortunately, hilariously
anachronistic. And, the anachronisms are starting to damage the book:
the core ideas are getting buried beneath 40 years of development
technology advances. Engineers each get their own computer (or even
two!) now, we don't need to share debugging time
anymore. Surprisingly, I'm a little hesitant to recommend this book
now. Beneath the anachronisms there is plenty of good advice: the
point he tries to make about planning your debugging time and keeping
track of what happened afterwards still applies, for example. But, you
have to be prepared to dig, to see through all that to what he's
really trying to say. If you do choose to read, skim the original
parts and dwell more on his 20&lt;sup&gt;th&lt;/sup&gt; anniversary additions:&lt;/p&gt;

&lt;p&gt;There are two things I will say:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;'Build one to throw away' is wrong. Brooks comes out very clearly
against that, even though he originally popularised it. Don't do it,
plan to prototype and grow organically. This suits me just &lt;a href="http://overwatering.blogspot.com/2008/02/prototypes-and-real-applications.html"&gt;fine&lt;/a&gt;
and leads to:&lt;/li&gt;
&lt;li&gt;Brooks is the original agilist. Time and time again the things he
values are competent, pro-active people and high-visibility,
high-efficiency, fast-turnaround development processes. The corner
stones for the agile family of methodologies.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6520389517686767177?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6520389517686767177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6520389517686767177' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6520389517686767177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6520389517686767177'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/05/mythical-man-month.html' title='The Mythical Man-Month'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-86955469422140460</id><published>2008-04-09T22:44:00.001+10:00</published><updated>2008-04-09T22:51:35.032+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Dreaming in Code</title><content type='html'>&lt;p&gt;&lt;em&gt;&lt;a href="http://www.amazon.com/Dreaming-Code-Programmers-Transcendent-Software/dp/1400082471/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1207744542&amp;amp;sr=1-1"&gt;Dreaming in Code&lt;/a&gt;&lt;/em&gt;

Scott Rosenberg&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wordyard.com/"&gt;Rosenberg&lt;/a&gt; is one of the co-founders of the online
magazine &lt;a href="http://www.salon.com/"&gt;Salon.com&lt;/a&gt;, a magazine I've been reading on and off
since 2000. After having a bad experience with internal software
development, he became interested in how, after more than 50 years
experience, we still find, in the words of Donald Knuth, that
'software is hard.'&lt;/p&gt;

&lt;p&gt;In the interests of disclosure, I will point out that I got a copy of
this book for free from the author after he &lt;a href="http://www.wordyard.com/2008/02/25/free-paperbacks/"&gt;offered copies to
bloggers&lt;/a&gt; if they agreed to mention the book. So, this is me
(gratefully, happily) fulfilling my end of the deal.&lt;/p&gt;

&lt;p&gt;This book is a story, a story of a collection of great developers
attempting to write an amazing piece of software. It is not a
retrospective story either. It begins shortly after the project has
started, but unfortunately couldn't follow the project to completion:
the project still isn't done yet.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://www.osafoundation.org/"&gt;Open Source Applications Foundation&lt;/a&gt; (OSAF) was formed by
&lt;a href="http://en.wikipedia.org/wiki/Mitch_Kapor"&gt;Mitch Kapor&lt;/a&gt; (of &lt;a href="http://en.wikipedia.org/wiki/Lotus_1-2-3"&gt;Lotus 1-2-3&lt;/a&gt; fame) to build a new form of
personal information management software: &lt;a href="http://chandlerproject.org/"&gt;Chandler&lt;/a&gt;. &lt;em&gt;Dreaming in
Code&lt;/em&gt; tells the story of how they tried and (so far) failed. With many
informative diversions into the theory of software engineering in an
effort to discover why software seems to so consistently be delivered
late (if at all) and buggy (if it even gets close to meeting the
original vision.)&lt;/p&gt;

&lt;p&gt;Rosenberg does an impressinve amount of research into the theory. No
appropriately read professional software engineer will find any
revelations here: this is all stuff you should already know. But
Rosenberg is not claiming to invent or discover anything new. In fact,
he goes out of his way to disclaim that there is any original research
contained in this book. He is a journalist, and as a journalist he has
produced a detailed literature survey. The summary in two well-written
chapters is useful even for experienced software engineers. I'm sure
non-software engineers will find this all very interesting; assuming
they are interested in how software gets written.&lt;/p&gt;

&lt;p&gt;For software engineers, there is something very interesting here. The
internal mechanics of a a team building a piece of software is a very
secret thing. Companies are secretive and companies and open source
projects want to protect their reputations. Most software engineers
only ever see how a project they are working on proceeds, and then
they're too close, plus there's no nice summary of what
happened. &lt;em&gt;Dreaming in Code&lt;/em&gt; is something very valuable to our field:
an accurate story of the human side of a software development
project. With both the clarity of distance and the accuracy of events
recorded at the time they happened.&lt;/p&gt;

&lt;p&gt;It was simply astounding how familiar this story was. OSAF and
Chandler get some things spectacularly wrong, but then in other cases
they do things very right. It's easy to point at the things they
stuffed up and claim that you would never make those mistakes, but
it's a little too easy to ignore the things that were done right. The
good decisions end up forgotten and never noticed.&lt;/p&gt;

&lt;p&gt;So what did I think that got wrong? Firstly, and by far the biggest:
&lt;a href="http://c2.com/cgi/wiki?AnalysisParalysis"&gt;Analysis Paralysis&lt;/a&gt;. This is a mistake that I've seen projects
make over and over again. In fact, I'd go as far as to say that it's
more common to see this affliction than not. Projects just can't seem
to make a decision, stick to it and then start building. The fear of
the future locks them solid: what if we make the wrong decision? What
if someone blames me for the wrong decision? In the end, ikf the
decision wsas so egregiously wrong that it can be traced back to just
one person, then everyone else around at the same time is just as
culpable for allowing that decision to happen. Everyone, please just
get in the habit of making decisions. Rely on those around you to spot
a bad direction: that's what they're there for.&lt;/p&gt;

&lt;p&gt;Second big mistake for Chandler? People. No surprises there, it's the
big and obvious disaster. If you believe that software is hard and you
care about your software then clearly you should only work with the
best. That's easy to say, but pretty hard to achieve. And in
Chandler's case the people problem exhibited in a couple of
interesting ways. Before I talk about the people problems that I saw
Chandler as having I need to say that any attempt to judge is based
solely on what is described in this book. I (obviously) didn't work on
this project, I don't know the people, there's only so much I can
say. Having said that, I'd also like to say that people problems kill
most projects and if we hope to advance we need to get over this fear
of talking about the problems with people. Maybe then we can find some
solutions. Or maybe that's just an overly analytical geek talking. Why
can't everyone just be a nice reducable puzzle, dammit?&lt;/p&gt;

&lt;p&gt;There was a permanent employee of the OSAF who was hired quite early
and ended up in quite a senior technical position, and this employee
was unfortunately the very soul of Analysis Paralysis. Any story about
some interminable technical discussion has this particular employee at
its heart. He was extraordinarily conservative and wary of making
decisions, but ultimately many of the technical decisions came down to
him. After a few of these stories, I was left shouting 'Do something
about him!' at the book. And I've seen precisely this problem
face-to-face too many times to ignore. Once again people, make
decisions! You probably won't get it too far wrong. In fact, in this
case, the inability to make a decision led to one of their few
definite cases of over-engineering.&lt;/p&gt;

&lt;p&gt;The second people problem: OSAF planned to run themselves as an open
source project that encouraged volunteers. Predictably enough, the
only people who could volunteer for any extended period tended to be
ex-Apple and -Netscape employees who had already made their fortune
and no longer needed to work for an income. From the outside these
volunteers presented an interesting problem. They were all brilliant
and had done amazing work in the past, but they didn't see this
project as any kind of meal ticket. There was no drive for them to get
this project finished and out the door. In the end, they come across
as people partially on the side-lines, commenting endlessly but never
really pushing the project forward. Instead, they were offering
endless advice on how things could be done better. Software projects
are always cursed with people like this; encouraging volunteers just
seems to guarantee it.&lt;/p&gt;

&lt;p&gt;But back to the book, I think I've already made clear that I really
enjoyed it. I also think the opportunity to see inside another project
is infinitely valuable for software engineers and software
engineering. Aside from all that, I will say that sometimes the brief
newspaper style of the book was a little irritating. On occasion I
felt a topic or anecdote could have done with some more depth before
moving on.&lt;/p&gt;

&lt;p&gt;Software engineers will get a lot out of this; non-software engineers
who care about how software (upon which, our civilisation is built) is
written will get even more out of this. Oh, and as a professional
programmer and wannabe-amateur writer-slash-blogger, software is
definitely written - then organically edited into shape.&lt;/p&gt;

&lt;p&gt;To finish on a positive note, something Chandler got right?
Python. Choosing to write their software in an expressive high level
language was clearly a win. There is no question now that Python is
fast enough for desktop software, and that's really the only
doubt. Hopefully Chandler can be used as an example of choosing better
languages.&lt;/p&gt;

&lt;p&gt;If you choose to read this, or not, in the end people! Make a decision!&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-86955469422140460?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/86955469422140460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=86955469422140460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/86955469422140460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/86955469422140460'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/04/dreaming-in-code.html' title='Dreaming in Code'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6035124054609908144</id><published>2008-04-07T20:32:00.001+10:00</published><updated>2008-04-07T20:32:49.175+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Atonement</title><content type='html'>&lt;p&gt;&lt;em&gt;Atonement&lt;/em&gt;&lt;br /&gt;
Ian McEwan&lt;/p&gt;

&lt;p&gt;This is simply an excellent book. It doesn't go in for any special
literary tricks, there's no special effort to make some obvious point:
it's a really good story, told very well. There's some intimations of
other layers, but feel free to ignore those. One thing that this book
does pull off is an unsympathetic main character who I actually
managed to not hate in the end. I didn't want to hurl the book across
the room; always a worthwhile achievement.&lt;/p&gt;

&lt;p&gt;A couple of points: I always find it vaguely amusing to see novelist
characters in books written by professional novelists; even the best
write what they know. The characterisation and the imagery are what
really grabbed me. I was there on that hot, summer day in 1935. I
knew Robbie Turner, and I knew Cecilia?Tallis.&lt;/p&gt;

&lt;p&gt;There is much that could be said about the effect of fantasy and the
blurry line between a clearly seen artificial vision and reality,
especially in relation to the powerful imagery that provides this
story.&lt;/p&gt;

&lt;p&gt;But instead, I'll just say this is a great novel, read.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6035124054609908144?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6035124054609908144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6035124054609908144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6035124054609908144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6035124054609908144'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/04/atonement.html' title='Atonement'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6536698937770671189</id><published>2008-04-06T21:12:00.001+10:00</published><updated>2008-04-06T21:12:01.840+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='story'/><title type='text'>Computers Hate Me</title><content type='html'>&lt;p&gt;It's true, they do. Possibly something of a disadvantage in my chosen
career, but I get by, carefully. Don't believe me? Hear my tales of
woe, come cry with poor, poor me.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;April, 1997&lt;/b&gt; - Still at University, just started my second year of a
computer science degree. I save up the cash and buy the first computer
of my very own: a &lt;a href="?http://en.wikipedia.org/wiki/Performa_6360"&gt;Performa 6360&lt;/a&gt;. I get it home; I set it up,
including copying all my work off the family computer: there must have
been 80 &lt;em&gt;megs&lt;/em&gt; of data! I'm about to go downstairs and delete
everything off that shared computer, whe I stop. Nah, I'll do that
tomorrow. I shut my brand new Mac down, I go to sleep. I wake up in
the morning and one of the first things I do is turn my new Mac on. To
be confronted with the &lt;a href="http://www.wap.org/journal/flashingquest/default.html"&gt;dreaded flashing disk icon&lt;/a&gt;. My Mac couldn't
find a disk to start from. Uh oh... Even booting from a system CD
showed nothing. In the end this wasn't even a disk crash, there was a
bug in the disk driver. It completely lost everything meaningful off
the disk. Nice. Good thing I hadn't deleted my backup. Words to live
by.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;July, 1998&lt;/b&gt; - For our third year project we decided to write a TCP
peer-to-peer IM system for Apple's up coming new OS:
&lt;a href="http://en.wikipedia.org/wiki/Rhapsody_%28operating_system%29"&gt;Rhapsody&lt;/a&gt;. The beta didn't run on my 6360, so I sold that and
bought a &lt;a href="http://en.wikipedia.org/wiki/Power_Mac_G3"&gt;Power Mac G3&lt;/a&gt;, one of the original (or so I thought)
beige ones. Turns out it wasn't quite 'original' enough: I scored a
motherboard rev that wouldn't boot the developer seed of Rhapsody that
I had access to. Argh! We still got our IM system working: we wrote it
using the cross-platform environment Apple released for Windows
NT. Everyone else in the class wrote Access databases.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;March, 2004&lt;/b&gt; - Time to finally upgrade the now ancient G3, so I order
an &lt;a href="http://en.wikipedia.org/wiki/IMac_G4"&gt;iLamp&lt;/a&gt; G4. It arrives, complete with a nice line of purple
pixels all the way down the screen. Fortunately, it was declared DOA
and a complete replacement was sent.&lt;/p&gt;

&lt;p&gt;Hmmm... all Macs so far. Why do I keep buying these?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;July, 2005&lt;/b&gt; - We've now started a startup. We know &lt;a href="http://en.wikipedia.org/wiki/.NET_Framework"&gt;.NET&lt;/a&gt;, so
that's what we're writing it in. I buy my first Windows PC - a Compaq
Presario. It came with XP Home, so I buy an upgrade to XP Pro at the
same time. At home that night, running the upgrade - and it just
stops. No upgrade for me. And even better, it deleted the old XP Home
installation, leaving me with an unbootable PC. Sound familiar? I got
my computer back with a clean installation of XP Pro. Except that
didn't include any hardware drivers at all. Instead of just using VGA
640x480 resolution on my 19in LCD monitor, I spent the evening
finding, downloading and installing all the right drivers. That is
also my only experience of trying to convince someone I had willingly
bought software from that I was not a criminal. Thanks, Microsoft
Software Activation. This computer lasted barely two years before a
very fatal disk crashed, ended that incarnation.&lt;/p&gt;

&lt;p&gt;So, it's not the computers, it really seems to be me. Those are the
only computers that I've bought. Seriously, no other computers were
hidden away in there. I've also had zip drives inexplicably and
suddenly give the click of death, lamps leave scorch marks on my desk,
monitors catch fire (really! there was smoke), printers refuse to
power on and USB devices make my machine reboot right &lt;em&gt;now&lt;/em&gt;. Maybe I
just have a special relationship with hardware? I've definitely got a
reputation for it... But, I'm a software guy, and there are
uncountable software disasters tucked away in there.&lt;/p&gt;

&lt;p&gt;Now, it's that time again: I need to replace my four year old
iMac. I'm planning on getting a laptop, hopefully a MacBook
Pro. Doesn't sound dangerous to me, what could possibly go wrong?&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6536698937770671189?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6536698937770671189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6536698937770671189' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6536698937770671189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6536698937770671189'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/04/computers-hate-me.html' title='Computers Hate Me'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-7490087984755253526</id><published>2008-04-04T23:57:00.001+11:00</published><updated>2008-04-05T00:36:58.112+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Player of Games</title><content type='html'>&lt;p&gt;&lt;em&gt;The Player of Games&lt;/em&gt;

Iain M. Banks&lt;/p&gt;

&lt;p&gt;That 'M' is important and very distinctive. This is a completely
different author to &lt;a href="http://overwatering.blogspot.com/2008/03/espedair-street.html"&gt;Espedair Street&lt;/a&gt;; even though both books list
all Iain Banks and Iain M. Banks books. No? Don't believe me? Well,
yeah. His fiction is published as Iain Banks and his sci-fi as Iain
M. Banks. Strange, but that's the way he does it.&lt;/p&gt;

&lt;p&gt;His sci-fi is some of the best I've read since Philip K. Dick. And as
he doesn't produce anywhere near as much as Dick, it averages a lot
better. Though without some of the crazed inventiveness. But that
sounds like damning Banks with faint praise: his sci-fi really is that
good. There are fantastic ideas and a very plausible feel to
everything. He doesn't shoot himself in the foot by trying to explain
how everything works: the technology is just there and it works.&lt;/p&gt;

&lt;p&gt;But his strongest points are actually his characterisations and
story. You get involved, you believe, and most importantly, you
care. And on top of that, the story is usually about the growth and
life of a character - sometimes a descending spiral with no
apparent way out; sometimes a broadening and opening of a character
you initially dislike.&lt;/p&gt;

&lt;p&gt;This book is fascinating for the first real peek inside the Culture,
instead of the view of a mercenary looking from the outside, in.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-7490087984755253526?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/7490087984755253526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=7490087984755253526' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7490087984755253526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7490087984755253526'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/04/player-of-games.html' title='The Player of Games'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-787420138862166314</id><published>2008-04-01T22:48:00.001+11:00</published><updated>2008-04-01T22:48:27.201+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Orlando</title><content type='html'>&lt;p&gt;&lt;em&gt;Orlando&lt;/em&gt;&lt;br /&gt;
Virginia Woolf&lt;/p&gt;

&lt;p&gt;Another literary fantasy novel. AFter the disappointments of
&lt;a href="http://en.wikipedia.org/wiki/Robert_Jordan"&gt;Jordan&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/George_R._R._Martin"&gt;Martin&lt;/a&gt; and, most of all, &lt;a href="http://en.wikipedia.org/wiki/Raymond_E._Feist"&gt;Feist&lt;/a&gt;, I'm happy
to be looking to &lt;a href="http://en.wikipedia.org/wiki/Gabriel_Garcia_Marquez"&gt;Marquez&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/John_Updike"&gt;Updike&lt;/a&gt; and now &lt;a href="http://en.wikipedia.org/wiki/Virginia_Woolf"&gt;Woolf&lt;/a&gt; for
my fantasy fix. As I've said before, any story is by definition a
fantasy, so why restrict your scope to only the events that can take
place in this prosaic world we are trapped in? Sure, there's a place
for the great everyday; but fantasy can be so much fun!&lt;/p&gt;

&lt;p&gt;And given how dry Woolf is, it's surprising to see how fun &lt;em&gt;Orlando&lt;/em&gt;
can be. There are two key elements of fantasy here: Orlando (the
character) lives for a very long time, and there's a second question
of gender... The age question is handled interestingly. There's never
a discussion of this, Orlando just keeps on living, aging at a
different rate to everyone else around.&lt;/p&gt;

&lt;p&gt;This disconnect from reality creates a dreamy, flowing world: the
story reads like a lyric poem: drifting from image to image guided by
your narrator, Orlando. And then towards the end it starts to coalesce
on but two points. But slowly, like a willow emerging from the
mist. Left wondering if those were always there, you float past.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-787420138862166314?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/787420138862166314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=787420138862166314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/787420138862166314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/787420138862166314'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/04/orlando.html' title='Orlando'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5598695599278668274</id><published>2008-03-31T00:08:00.001+11:00</published><updated>2008-04-01T20:09:29.636+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Startups as the Future of Technology</title><content type='html'>&lt;p&gt;It's very fashionable in geek circles to attack &lt;a href="http://www.paulgraham.com/"&gt;Paul Graham&lt;/a&gt; at
the moment, particularly after his essay &lt;a href="http://www.paulgraham.com/boss.html"&gt;You Weren't Meant to Have a
Boss&lt;/a&gt;. I've been reading his essays for a few years now and I've
wavered between agreement and an undefinable sense of unease. Now I
believe I can finally pin this down.&lt;/p&gt;

&lt;p&gt;The central point of Graham's &lt;em&gt;Boss&lt;/em&gt; essay seems to be that over a
certain size organisations become rigidly hierarchical and once the
hierarchy sets in the creativity of programmers is significantly and
fatally constrained: over a certain size an organisation will be
incapable of producing original software. This is a continuation of a
theme through much of Graham's writing. Startups do interesting work
and software development will migrate exclusively to startups.&lt;/p&gt;

&lt;p&gt;Well, I think that's something I can disagree with. Of course, it's
pretty obvious that I have a vested interest. An
&lt;a href="http://en.wikipedia.org/wiki/Iconoclasm"&gt;iconoclast&lt;/a&gt; like Paul Graham
will always get the most vicious response from those he seeks to
help. Allow me to give my personal background, in the interests of
disclosure.&lt;/p&gt;

&lt;p&gt;My entire career has been in software development. In my first job out
of Uni I fell into the 'hero' programmer archetype. In every job after
that I've been in some form of senior position: tech lead, architect,
team lead. I've also been an independent consultant, co-founded my own
startup (we failed; be very careful about selecting your co-founders)
and now I'm working for a startup. Yep, as an employee with a boss and
all.&lt;/p&gt;

&lt;p&gt;I spent sometime this morning going through all the startups listed on
the &lt;a href="http://ycombinator.com/"&gt;Y Combinator&lt;/a&gt; website. For each startup I've tried to
classify them according to the current big themes in web sites.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Social Networking:&lt;/b&gt;

&lt;a href="http://reddit.com"&gt;Reddit&lt;/a&gt;, &lt;a href="http://loopt.com/"&gt;Loopt&lt;/a&gt;,
&lt;a href="http://flagr.com/"&gt;Flagr&lt;/a&gt;, &lt;a href="http://likebetter.com/"&gt;LikeBetter&lt;/a&gt;,
&lt;a href="http://jamglue.com/"&gt;JamGlue&lt;/a&gt;, &lt;a href="http://scribd.com/"&gt;Scribd&lt;/a&gt;, &lt;a href="http://iminlikewithyou.com/"&gt;I'm In
Like With You&lt;/a&gt;,
&lt;a href="http://socialmoth.com/"&gt;SocialMoth&lt;/a&gt;,
&lt;a href="http://anywhere.fm/"&gt;Anywhere.FM&lt;/a&gt;, &lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt;,
&lt;a href="http://reble.fm/"&gt;Reble&lt;/a&gt;,
&lt;a href="http://addher.com/"&gt;AddHer&lt;/a&gt;, &lt;a href="http://inklingmarkets.com/"&gt;Inkling&lt;/a&gt;,
&lt;a href="http://draftmix.com/"&gt;Draftmix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Advertising &amp;amp; Sales:&lt;/b&gt;

&lt;a href="http://clickfacts.com/"&gt;ClickFacts&lt;/a&gt;,
&lt;a href="http://adpinion.com/"&gt;Adpinion&lt;/a&gt;, &lt;a href="http://bountii.com/"&gt;Bountii&lt;/a&gt;,
&lt;a href="http://octopart.com/"&gt;Octopart&lt;/a&gt;,
&lt;a href="http://auctomatic.com/"&gt;Auctomatic&lt;/a&gt;,
&lt;a href="http://textpayme.com/"&gt;TextPayMe&lt;/a&gt;, &lt;a href="http://tipjoy.com/"&gt;TipJoy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Apps on the Web:&lt;/b&gt;

&lt;a href="http://snipshot.com/"&gt;Snipshot&lt;/a&gt;, &lt;a href="http://wufoo.com/"&gt;Wufoo&lt;/a&gt;,
&lt;a href="http://youos.com/"&gt;YouOS&lt;/a&gt;, &lt;a href="http://thinkature.com/"&gt;Thinkature&lt;/a&gt;,
&lt;a href="http://weebly.com/"&gt;Weebly&lt;/a&gt;, &lt;a href="http://buxfer.com/"&gt;Buxfer&lt;/a&gt;,
&lt;a href="http://heysan.com/"&gt;Heysan&lt;/a&gt;, &lt;a href="http://versionate.com/"&gt;Versionate&lt;/a&gt;,
&lt;a href="http://fuzzwich.com/"&gt;Fuzzwich&lt;/a&gt;,
&lt;a href="http://rescuetime.com/"&gt;RescueTime&lt;/a&gt;, &lt;a href="http://8aweek.com/"&gt;8AWeek&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Other:&lt;/b&gt;

&lt;a href="http://virtualmin.com/"&gt;Virtualmin&lt;/a&gt;,
&lt;a href="http://justin.tv/"&gt;Justin.TV&lt;/a&gt;,
&lt;a href="http://xobni.com/"&gt;Xobni&lt;/a&gt;, &lt;a href="http://webmynd.com/"&gt;Webmynd&lt;/a&gt;, &lt;a href="http://heroku.com/"&gt;Heroku&lt;/a&gt;,&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Dead:&lt;/b&gt;

&lt;a href="http://shoutfit.com/"&gt;Shoutfit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The 'other' category is the interesting one: into that bucket falls a
server admin dashboard, a web-based TV channel and a plugin for
searching Outlook email. But, there are a lot less of those than the
social networking and web-based desktop application startups.&lt;/p&gt;

&lt;p&gt;I'm sure many, particularly the founders, will disagree with my
classifications. But, these are mainly right, especially if you read
'Social Networking' as 'Social Networking around Common Interest &lt;em&gt;X&lt;/em&gt;.'
And in the end you'll find the exact classification is not important.&lt;/p&gt;

&lt;p&gt;All of these startups share a few things in common. They were all
launched quickly and they're all pure software development, often
running on someone else's eco-system. There is a place for development
like this, but if this is the future for computer science I believe
the field will be significantly poorer for it.&lt;/p&gt;

&lt;p&gt;I am working for a company that by pretty much every definition is a
startup. By the time we left stealth mode in March last year the
company had been around for 13 years and had grown from a core group
of computer scientists to a company of over 300, including chemists
and physicists. Oh, and we invented a new type of printer. A startup
like ours simply doesn't fit into the Y Combinator model. We also
don't fit into the small company with no bosses model: building
hardware takes time and a lot of people, you simply can't avoid
either.&lt;/p&gt;

&lt;p&gt;This is my concern. Is all future computer science productisation
and development really going to be latest and cool ad-funded mobile
social networking site for parrots? Because, excuse me if I'm not
excited by that future. I am still excited by the potential for
computing and the Internet in particular, but that potential is better
served by longer-term thinking and grander plans than refinements of
what everyone else is doing.&lt;/p&gt;

&lt;p&gt;This criticism may actually run deeper. A continuing trend in
computing is to make programming easier for all. This has had the
effect of pushing some tasks out of the realm of the programmer and
back to expert users. This has been a good thing. Users have more
control and programmers are free to work on interesting problems. The
web has also been fantastic at improving human to human
communication. Recently, the potential of the web as a mechanism for
computer to computer communication is becoming more apparent. Many of
the Y Combinator startups very effectively exploit this: improved
experiences and convenience by combining the information on eBay with
the blogosphere. It also appears that these startups are surfing a
wave. The gap between technology becoming easy to use and becoming
easy to program. In other words, I suspect this style of startup is
not long for this industry. An historical aberration, automatic
arbitrage for company startup, as it were.&lt;/p&gt;

&lt;p&gt;This is not the end of startups of course. There will always be
startups, however there will have to be some interesting, risky and
difficult technology behind the curtain. Originality will once more be
prized. In this world, &lt;a href="http://www.paulgraham.com/boss.html"&gt;You Weren't Meant to Have a Boss&lt;/a&gt; will
make a lot less sense.&lt;/p&gt;

&lt;p&gt;Personally, I fully expect to do the startup ride at least once
more. And I'm looking forward to doing that in a world that once more
demands innovation rather than just another social network. After all,
I really do want to add something to the world and I just don't see
that happening with late noughties startups.&lt;/p&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 80%; background-color: rgb(255,
        255, 153); font-size: 65%; padding-top: 5px; padding-bottom: 5px;
        padding-left: 10px; padding-right: 10px;"&gt;
Oh, and if you also want to work on world changing, original
technology, my company is hiring. Love web technologies, think you
have what it takes to work for Google, but aren't excited about
working for a company of 10,000? Want to work in Sydney, Australia?
&lt;a href="http://en.wikipedia.org/wiki/Bondi_Beach"&gt;Beautiful&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Coogee%2C_New_South_Wales"&gt;beaches&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Sydney#Climate"&gt;summer&lt;/a&gt;
all year long... Send me an email, giles dot alexander at
Google's-free-webmail dot com.
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5598695599278668274?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5598695599278668274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5598695599278668274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5598695599278668274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5598695599278668274'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/03/startups-as-future-of-technology.html' title='Startups as the Future of Technology'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6069594590201512594</id><published>2008-03-23T19:23:00.001+11:00</published><updated>2008-03-23T19:23:43.832+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Espedair Street</title><content type='html'>&lt;p&gt;&lt;em&gt;Espedair Street&lt;/em&gt;&lt;br /&gt;
Iain Banks&lt;/p&gt;

&lt;p&gt;A very good writer, his sci-fi (under the name Iain &lt;u&gt;M.&lt;/u&gt; Banks) is
consistently original, but his non-genre fiction is also very
good. &lt;em&gt;Dead Air&lt;/em&gt; is worth reading for the head-butting alone and &lt;em&gt;The
Wasp Factory&lt;/em&gt; is bizarre, unexpected and simply amazing.&lt;/p&gt;

&lt;p&gt;The strength in his fiction is the characterisation. Danny Weir, in
&lt;em&gt;Espedair Street&lt;/em&gt;, is a great example. A washed-up 70's rock star who
has managed to annoy and drive off all his friends. He's now brooding
self-pityingly in a stony mansion in Glasgow. But, you're introduced
to him, you hang out with him, you drink with him and you get to know
him, know him well. Though he spends the book going over everything
that's gone wrong in his life and though most of that is down to his
amazingly ability to always make the wrong choice and though it may be
hard to listen to an hyper-rich rock star complain about his past it
doesn't matter because you know him and, ultimately, like him. Enough
to hope he finds some way out.&lt;/p&gt;

&lt;p&gt;Oh, and the book manages to frequently be damn funny, as well.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6069594590201512594?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6069594590201512594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6069594590201512594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6069594590201512594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6069594590201512594'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/03/espedair-street.html' title='Espedair Street'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4966436876058529870</id><published>2008-03-18T21:20:00.001+11:00</published><updated>2008-03-18T21:20:54.641+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Timeless Way of Building</title><content type='html'>&lt;p&gt;&lt;em&gt;The Timeless Way of Building&lt;/em&gt;&lt;br /&gt;
Christopher Alexander&lt;/p&gt;

&lt;p&gt;For the past year or so, this was my bus book. That's a
surprisingly long time, and it probably shouldn't have taken me that
long to read. Late last year, about 50 pages from the end, I paused in
my reading; and then took several months to pick it up again. This
seems unfair to the book: it deserved a much more coherent read than
that. Though, the ideas are different enough to also benefit from a
considered read. I'll pick this up again sometime, and I promise to
read much faster that time. Anyway.&lt;/p&gt;

&lt;p&gt;One sentence summary: this book will forever change the way you
look at and think about buildings, towns and architecture.&lt;/p&gt;

&lt;p&gt;Alexander firmly believes that modern planning and building
practices are bankrupt and can only result in inhospitable,
unwelcoming cities and homes. A belief that seems to be firmly born
out by most urban planning since the Second World War: just look at
the damage Harry Seidler has wrought on Sydney for an example close to
home. This book is a polemic, a grand rant against the current state
of his own industry and art. A work in the tradition of many a genius'
(and quite a few
looney's) &lt;a href="http://c2.com/cgi/wiki?LetsBlowUpTheUniverse"&gt;Let's
Blow Up the Universe&lt;/a&gt; screed. So, genius or looney? I've probably
already given away my opinion on that matter...&lt;/p&gt;

&lt;p&gt;Ultimately, it would not do this book any justice to attempt to
briefly summarise what it has to say.&lt;/p&gt;

&lt;p&gt;But what the hell, I'll give it a shot anyway. Alexander's central
thesis is that there is a shared quality amongst those towns and
buildings where people feel most at home; a quality independent of
culture, climate and history. He also believes that this quality can
be easily achieved, by any person who chooses to build. It is a matter
of recognising the forces within the people who will use the building
or site and then balancing those forces with the forces intrinsic to
the specific location and society. He even outlines a prescription for
achieving this balance: a collection of patterns to duplicate in
design, planning and construction, with instructions on how to combine
these. A language of patterns to construct our built environment.&lt;/p&gt;

&lt;p&gt;Unlike many other polemics, this is highly detailed and
descriptive: it describes the quality to achieve and then gives
instructions on how to achieve it.&lt;/p&gt;

&lt;p&gt;If you live in a large city in Australia, it'll be pretty obvious
while reading this book that this is not how building is done. First,
Australian building practices place the car as king of all. Any
building or neighbourhood must be designed for the maximum convenience
of the car: people are a distant second. Second, Australian building
practices harken back to some long forgotten European past: everyone
wants a little brick English cottage, though nothing could be more
generally inappropriate for our climate. The
&lt;a href="http://en.wikipedia.org/wiki/Queenslander_%28architecture%29"&gt;Queenslander&lt;/a&gt;
is not the standard archetype for Australian residential building
unfortunately.&lt;/p&gt;

&lt;p&gt;The current popular obsession with being 'green' is driving people
to a certain superficial realisation about the car. But that is only a
symptom of a far deeper problem. Loudly proclaiming that cars are evil
and must be disposed of is never really going to achieve anything. And
that sort of unbalanced (in the forces sense) thinking will inevitably
lead to other problems. As much as I'm a fan of the specific remedies
proposed in Jan Gehl's research paper into Sydney's CBD, I do feel
some uneasiness.&lt;/p&gt;

&lt;p&gt;The pattern approach that Alexander talks about is intended to
completely avoid unbalanced forces. He regularly uses cars in his
discussion of patterns. They are real, they are valuable and they're
not going to just disappear. A central point of these patterns is that
they're not something Alexander has devised as a new architectural
'-ism' to imprint his vision on the world. These patterns are things
that arise naturally, given the way all humans want to live. Growing
organically out of a combination of the people and their
surrounds. There is a sequel to &lt;em&gt;The Timeless Way of Building&lt;/em&gt;, &lt;em&gt;A
Pattern Language&lt;/em&gt;, that acts as a catalogue of the most important
patterns that Alexander and his colleagues have observed in
successful towns and buildings.&lt;/p&gt;

&lt;p&gt;In the US there is a growing style of design
called &lt;a href="http://en.wikipedia.org/wiki/New_Urbanism"&gt;'New
Urbanism'&lt;/a&gt; that attempts to encourage the buildings and towns that
Alexander commends so highly. It is interesting to note that in Europe
that name is largely unused, people preferring to use 'The Way Towns
are Designed' instead. It is also interesting to note that in
Australia, we have neither.&lt;/p&gt;

&lt;p&gt;Finally, why did I, a software engineer, read this book? To the
surprise of many architects, Christopher Alexander is very well known
in the field of computer science. In the 1960's his work was
discovered and his concept of patterns was co-opted. No serious
software engineer can possibly not be familiar with the world of
design patterns: named rules for particular structures of code to
solve certain problems. It's my opinion that while initially off to a
good start the modern Design Patterns movement has completely missed
the point of Alexander's original teaching.&lt;/p&gt;

&lt;p&gt;His intent was not to catalogue an exhaustive set of patterns that
may be thrown at a problem until a solution emerges. His intent was to
define an interlocking language from which you can select appropriate
terms to grow a solution. In his case a building or town, in my case a
software system. Modern design patterns seems to ignore the essential
organic growth aspect of a pattern language, and instead seems to
focus on cataloguing. An unbalanced approach.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4966436876058529870?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4966436876058529870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4966436876058529870' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4966436876058529870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4966436876058529870'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/03/timeless-way-of-building.html' title='The Timeless Way of Building'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5152424688282117206</id><published>2008-03-17T21:53:00.001+11:00</published><updated>2008-03-17T21:53:25.197+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maths'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>What is this Property?</title><content type='html'>&lt;p&gt;I'm not a mathematician, just a computer scientist with an interest in
maths, so please excuse the simplifications and inaccurarcies in
this. I'm going to describe this with some rigour, but I'm bound to
get things slightly wrong, please bear with me.&lt;/p&gt;

&lt;p&gt;In maths, a function is defined as a relation between the members of
two sets, &lt;code&gt;S&lt;/code&gt; and &lt;code&gt;R&lt;/code&gt;, that produces members of the third set &lt;code&gt;T&lt;/code&gt;. Looking
at it another way, the set &lt;code&gt;T&lt;/code&gt; is defined by the function. Some
functions, taking two arguments from the same set &lt;code&gt;S&lt;/code&gt;, always produce
members of that set &lt;code&gt;S&lt;/code&gt;. Addition across the natural numbers is an
example of that: for any two numbers greater than 0, the sum will
always be a number greater than 0. There are many functions that
behave like this.&lt;/p&gt;

&lt;p&gt;Functions have properties. A property describes a rule that a function
obeys for given sets of parameters. From a mathematics perspective, these
properties are interesting. For example, addition across the natural
numbers is &lt;a href="http://en.wikipedia.org/wiki/Associative"&gt;associative&lt;/a&gt;. This means that no matter what order the
parameters to the addition function are arranged, the answer will be
the same: &lt;code&gt;2 + 3 = 3 + 2&lt;/code&gt;. Fairly simple and obvious, right? But from
the same property we can also say &lt;code&gt;2 + (5 + (6 + 11)) = (2 + (5 + 6) +
11)&lt;/code&gt;. This is interesting because once we know that a function has the
associative property we can arrange the parameters of the function
without changing the meaning: this is useful in proofs.&lt;/p&gt;

&lt;p&gt;There are many, many of these properties, and most of the interesting
ones have names: &lt;a href="http://en.wikipedia.org/wiki/Associative"&gt;associative&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Commutative"&gt;commutative&lt;/a&gt;,
&lt;a href="http://en.wikipedia.org/wiki/Distributivity"&gt;distributive&lt;/a&gt;. For the last year I've been trying to find out if
another property I've noticed also has a name.&lt;/p&gt;

&lt;p&gt;Take the function &lt;code&gt;minimum&lt;/code&gt; across the natural numbers. Given the sets
&lt;code&gt;{4, 6, 100, 1, 43}&lt;/code&gt; and &lt;code&gt;{1}&lt;/code&gt; &lt;code&gt;minimum&lt;/code&gt; gives the same answer: &lt;code&gt;1&lt;/code&gt;. The
result of the function minimum is determined by only a single member
of the set, no matter how large the set.&lt;/p&gt;

&lt;p&gt;Take the function &lt;code&gt;and&lt;/code&gt; across the booleans. Given the set &lt;code&gt;{true,
true, true, false, true}&lt;/code&gt; the answer is &lt;code&gt;false&lt;/code&gt;. It doesn't matter how
many true's are in the set, the answer will always be false.&lt;/p&gt;

&lt;p&gt;And I'm sure you can imagine other functions that behave like this. My
question is: does this property have a name, and if it does, what?&lt;/p&gt;

&lt;p&gt;If I was more of a mathematician, I'm sure I could actually describe
this property a lot more accurately. In fact, I'm not entirely sure
there is a consistent property here, and I have no idea if it's
interesting if it does exist. But I notice this often, and it sure
feels like it should have a name.&lt;/p&gt;

&lt;p&gt;Functions whose result is determined by a single member of the
parameter set, irrespective of the size of that set: do these have a
common property?&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5152424688282117206?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5152424688282117206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5152424688282117206' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5152424688282117206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5152424688282117206'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/03/what-is-this-property.html' title='What is this Property?'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8020361986725589260</id><published>2008-03-14T00:13:00.001+11:00</published><updated>2008-03-14T00:13:46.593+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><title type='text'>Midsummer Night's Dream</title><content type='html'>&lt;p&gt;We went to see &lt;em&gt;&lt;a href="http://www.sydneytheatre.org.au/event.asp?pID=190"&gt;Midsummer Night's
Dream&lt;/a&gt;&lt;/em&gt; at the
Sydney Theatre tonight. A friend bought the tickets, we were just told
it was &lt;em&gt;Midsummer Night's Dream&lt;/em&gt;. I really should have found something
more out about the performance.&lt;/p&gt;

&lt;p&gt;I like fairly challenging books: I believe that the reader should
occasionally be made to work for it. I love Pynchon and I enjoy
Woolf. I am a huge fan of Shakespeare and I've enjoyed pretty much
every production I've seen, even when I didn't know the play, both
traditional and modern interpretations.&lt;/p&gt;

&lt;p&gt;We left this play at intermission, along with a pretty significant
proportion of the audience. I have never done that before. I won't
even walk out of a bad movie.&lt;/p&gt;

&lt;p&gt;This was plain awful. Absolutely, completely unwatchable. Why? It's
about 60% performed in Hindi, with no sub- or sur-titles. If you don't
speak fluent Hindi you won't be able to understand what the characters
are saying most of the time. I know that's obvious when I say that
it's performed in Hindi, but the Sydney Theatre really didn't make
this obvious enough. I was also handicapped here as I didn't know the
play. I've seen parts of it before, and remember some scenes but I
don't know the overall plot and characters. I certainly couldn't
imagine what was happening when I couldn't understand the dialogue.&lt;/p&gt;

&lt;p&gt;The opening scene to establish the plot was entirely in Hindi, and
from then on I had absolutely no idea what was going on. Mana tried to
help out by whispering brief explanations as she has previously
studied and performed this play. But she couldn't keep this up, and by
this stage it was pretty much too late: I already had no idea who any
of the characters were.&lt;/p&gt;

&lt;p&gt;What do I know of &lt;em&gt;Midsummer Night's Dream&lt;/em&gt;? Well, there's one of my
favourite Shakespearian lines:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If we spirits have offended,
  Think but this and all is mended:
  You have but slumbered here
  While these visions have appeared.
  - Puck&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's from memory, so excuse any mistakes. I also remember the
sarcasm, wit and lyricism of Puck. And I missed all that in this
performance. Surprisingly enough, the play would have been better if
it was entirely performed in Hindi: when they were speaking English I
could follow what was happening and start to get involved. Then they
would switch back to Hindi, kicking me out of any involvement, and
leaving me bored and disconnected in my seat. But, then I would try to
get involved again in the dance and acting, only to be booted again
when they switched back to English.&lt;/p&gt;

&lt;p&gt;Shakespeare is entertainment, especially his comedies. These were
great works meant to illuminate the human condition, while also highly
engaging and entertaining. Anyone should be able to watch a production
and enjoy it. The only people who could enjoy this production were
those who spoke fluent Hindi, and those who already knew the play
intimately. And while I fully support the production of entertainment
for specific languages, this should not be promoted to a larger
audience as something for everyone. Because is it's not: this is an
exclusive production only meant to be enjoyed by those who have
already studied the play.&lt;/p&gt;

&lt;p&gt;And I don't like this artificial, constructed exclusivity in the arts.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8020361986725589260?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8020361986725589260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8020361986725589260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8020361986725589260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8020361986725589260'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/03/midsummer-night-dream.html' title='Midsummer Night&amp;#39;s Dream'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-2537478069835501404</id><published>2008-03-06T21:55:00.001+11:00</published><updated>2008-03-06T21:55:47.828+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Three Stigmata of Palmer Eldritch</title><content type='html'>&lt;p&gt;&lt;em&gt;The Three Stigmata of Palmer Eldritch&lt;/em&gt;&lt;br /&gt;
Philip K. Dick&lt;/p&gt;

&lt;p&gt;Did you end up finding it, Philip? What it means to be human? Religion
didn't seem to provide your answer. Did drugs? &lt;em&gt;A Scanner Darkly&lt;/em&gt; is
famous for your search, but this appears to be some sort of transition
between those two searches.&lt;/p&gt;

&lt;p&gt;Like Graham Greene, Dick is one of my favourite authors. Over time I'm
steadily trying to read all of his novels. I prefer his later ones, so
that's generally what I choose. Unlike Greene, not each of Dick's is
better than the last: &lt;em&gt;A Scanner Darkly&lt;/em&gt; is still my favourite, and
one of my favourite sci-fi novels. Sci-fi is typically a pretty pulpy
genre: cheap enjoyment, with very little challenge to the reader. Even
the best sci-fi with a great idea at it's heart will present that idea
in a pretty straightforward form.&lt;/p&gt;

&lt;p&gt;Not Philip K. Dick. He did not shy from challenging the reader with
unusual ideas, often in outright confusing forms. This book felt like
some sort of mental trap that the reader is drawn into. Only with the
hope that all will become clear by the end. The confusion is why I
read this book now. How hard can you push the reader? How difficult
can you make the story to follow? How many tricks can you pull? And
still end up with a populist, enjoyable story.&lt;/p&gt;

&lt;p&gt;There's a lot to connect Dick and Pynchon. But, Dick just didn't have
Pynchon's talent. Sometimes you are left wondering if this was meant
to be confusing, or did he just write it a bit too quick. His later
work does show that yes, he was aiming to confuse.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-2537478069835501404?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/2537478069835501404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=2537478069835501404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2537478069835501404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2537478069835501404'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/03/three-stigmata-of-palmer-eldritch.html' title='The Three Stigmata of Palmer Eldritch'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1503114268498883227</id><published>2008-03-05T21:52:00.001+11:00</published><updated>2008-03-05T22:13:36.918+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='scheme'/><category scheme='http://www.blogger.com/atom/ns#' term='shrew'/><title type='text'>The Ultimate Development Environment</title><content type='html'>&lt;p&gt;An enormous claim, I know. But this is not about processes, tools or
working conditions. This is about something quite different.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://overwatering.blogspot.com/search/label/shrew"&gt;Shrew&lt;/a&gt; is
progressing, it now sports an s-expr to XML evaluator; I'm reading
&lt;em&gt;RESTful Web Services&lt;/em&gt; to gain a better idea of how it should expose
resources. And I'm also working through &lt;em&gt;The Seasoned Schemer&lt;/em&gt;. And
therein lies the most interesting aspect to Shrew. I am a reasonably
experienced, quite competent polyglot software engineer, but learning
Scheme has forever changed how I think about programming. And through
example crystallised the ultimate development environment that I have
been drifting towards.&lt;/p&gt;

&lt;p&gt;When I'm working on Shrew, my editor looks something like this:&lt;/p&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2312302048" title="View 'i-scheme-emacs' on Flickr.com"&gt;&lt;img src="http://farm4.static.flickr.com/3214/2312302048_65651591d0.jpg" alt="i-scheme-emacs" border="0" width="400" height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;In the top-left is the module I am currently working on: writing,
expanding or fixing - as I'll try to show there isn't really any
difference between those three. In the top-right is a scratch file
that contains a bunch of ad-hoc tests for the module I'm working on:
nothing structured, just calls of the functions that I'm
writing. Across the bottom is the output from a Scheme process running
in the background.&lt;/p&gt;

&lt;p&gt;Before I go on there's one detail of Scheme I should explain. To write
a new function you call a built-in function called &lt;code&gt;define&lt;/code&gt;, passing
the name of the new function and its body. &lt;code&gt;define&lt;/code&gt; is smart enough to
simply replace the body if a function of that name already exists.&lt;/p&gt;

&lt;p&gt;It sounds like a pretty simple development environment: a plain text
editor with three windows on screen. Why so special?&lt;/p&gt;

&lt;p&gt;I write a function - not a test, sample or prototype, but the real
code I'm planning to commit - I jump to the end of the &lt;code&gt;define&lt;/code&gt; and
run a command in my editor to evaluate it. That function is then
inserted into the running Scheme process and available to be used by
anything else that is run in that Scheme process. Or, I'm immediately
informed of a syntax error in my code.&lt;/p&gt;

&lt;p&gt;I switch over to the scratch file and write some code to call the
function I just implemented: typically just one expression, but it can
be as many as I need. I evaluate that new code. And immediately see
the output in the window at the bottom; the window reflecting the
running state of the background Scheme process.&lt;/p&gt;

&lt;p&gt;And of course, there's a bug in my function. I switch back to the
window containing the module, fix the bug and re-evaluate. I switch
back to the test code, re-evaluate that, and see that my change has
fixed the bug.&lt;/p&gt;

&lt;p&gt;Elapsed time from writing the function through debugging and verifying
the fix: 45 seconds.&lt;/p&gt;

&lt;p&gt;Instead of having to write a complete library, compile it, write a
test harness, compile that and link it to the library and only then
run the code to see if it works, I have a Scheme process running in
the background that I can just keep adding code to. New code, or code
to replace existing code. And at any point I can execute any sub-part
of that process and immediately see the output. No delays, no pauses,
no backtracking to find which line of code is wrong.&lt;/p&gt;

&lt;p&gt;Scheme could be regarded as a fairly direct implementation of a
theoretical model of computation: the lambda calculus. Most texts that
teach Scheme emphasise this; they encourage you to think of your
programs in terms of this theory, in quite some detail. That may sound
fairly esoteric, but once you've spent sometime working in this
environment you reach this unique state. You are inside your program,
reaching around moving code as fast as you can think. There is
essentially nothing between your thought and code: no defining
boilerplate, no compiling, no creating test harnesses, no waiting for
test runs to complete. Your solution simply unfolds before you.&lt;/p&gt;

&lt;p&gt;But that's not to say your code is of lower quality. In fact, because
you're concentrating more fully, with no distractions and the
flexibility to easily push your code in any way you want, the code is
of much higher quality. There's no idle thought 'I should test that'
which is forgotten in the edit-compile-run-debug cycle: think it, try
it. This is flow as
&lt;em&gt;&lt;a href="http://overwatering.blogspot.com/2007/04/peopleware.html"&gt;Peopleware&lt;/a&gt;&lt;/em&gt;
could only dream.&lt;/p&gt;

&lt;p&gt;And once you break out of this magical flow, you're left with complete
code; code you lived and breathed for a few hours, code you understand
deeply and will have a hard time forgetting. Plus, a comprehensive set
of tests to commit alongside.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1503114268498883227?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1503114268498883227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1503114268498883227' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1503114268498883227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1503114268498883227'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/03/interactive-development.html' title='The Ultimate Development Environment'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3214/2312302048_65651591d0_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1542415772624564024</id><published>2008-02-25T21:44:00.001+11:00</published><updated>2008-02-26T18:43:15.244+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Blind Assassin</title><content type='html'>&lt;p&gt;&lt;em&gt;The Blind Assassin&lt;/em&gt;&lt;br /&gt;
Margaret Atwood&lt;/p&gt;

&lt;p&gt;Continuing on my plan to expand the types of books I'm reading:
this was from &lt;a href="http://aussieinparis.blogspot.com/"&gt;Annabel&lt;/a&gt;
several years ago. A Booker prize winner, and I've enjoyed some of the
others I've read, it's also Canadian and a female author. I just
haven't been reading enough female authors recently; though Zadie
Smith is one of my favourite authors.&lt;/p&gt;

&lt;p&gt;It's an interesting story for a number of reasons. It's structured as
a story within a story within a story; it's told backwards and
forwards, alternatively; it appears to be centred around a mystery,
but really isn't; and, perhaps most interestingly, for a large part of
the novel the main character is quite unsympathetic. And though
unsympathetic, she still manages to maintain your influence and carry
the story.&lt;/p&gt;

&lt;p&gt;And stopping for a pause... when I first wrote this review immediately
after reading the book over a month ago, I enjoyed the novel but
wasn't taken by it. However, it's a novel I haven't stopped thinking
about. It just keeps cropping up in my mind over and over again. At
the time, I put it down as one of those typical, slightly over-wrought
Booker prize winners, but now my opinion is going to have to change.&lt;/p&gt;

&lt;p&gt;Slow, deliberate, difficult for not liking the main character, but in
the end, memorable and worth it. I will be going back to read more
Atwood: and I've found myself browsing her shelf in book stores.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1542415772624564024?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1542415772624564024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1542415772624564024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1542415772624564024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1542415772624564024'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/02/blind-assassin.html' title='The Blind Assassin'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5737959870100969554</id><published>2008-02-24T22:52:00.001+11:00</published><updated>2008-02-24T22:52:45.385+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='girl geek'/><title type='text'>Girl Geek Dinner 0</title><content type='html'>&lt;p&gt;The first &lt;a href="http://girlgeekdinnerssydney.blogspot.com/2008/01/dinner-zero.html"&gt;Girl Geek Dinner, Sydney&lt;/a&gt; was held on Thursday, at
Chinta Ria. For those of you who haven't heard of this: women working
in computing/IT get together, have dinner, discuss technical topics
and generally network. &lt;a href="http://damana.blogspot.com/"&gt;Damana&lt;/a&gt; has been organising this over
the last month and a half or so. While the events are intended for
women, each woman can escort one man. I was there as Damana's escort,
acting in a supporting role. But, I will pause and make very clear
here that independently of any personal connections in this particular
instance, I fully support this idea. It's a great idea and I'd like to
see more of this sort of thing.&lt;/p&gt;

&lt;p&gt;So, as a guy at a Girl Geek Dinner, what did I think of it? To be
completely honest, it was unusual. There are few enough gatherings of
outgoing geeks and when there are the demographics are depressingly
predictable. The Girl Geek Dinner was different but not
dramatically. The overall mood and atmosphere of the group was what
you'd expect from a crowd of people who don't know each other but
share an interest. There was a lot of loud, friendly talking. People
generally moved around and talked to others they hadn't met. Just like
a bunch of strangers socialising.&lt;/p&gt;

&lt;p&gt;But there were still differences. Differences that only exhibited on
individual scales. Ultimately, this is an issue of gender, oppression
and hostile environments. Please bear with me. Try to take this in the
spirit that it is intended and above all remember that I am a major
proponent of diversity in all its forms in all environments. I don't
subscribe to any 'fundamentally different' hypotheses; in my view
we're all the largely the same after individual and cultural
differences are accounted for.&lt;/p&gt;

&lt;p&gt;Onto the differences. Firstly, the women seemed significantly more
relaxed in a work-type social setting than I have seen before. There
was a lot of very loud talking, joking, laughing; a lot of alcohol was
drunk (thanks Google!), the food was enjoyed (thanks ThoughtWorks!)
and there were no more moments of self-conscious reflection than you'd
expect when there are introverts around. This was particularly
noticeable later in the night when some sleazy sales guy from another
group tried to attach himself to us. It was a pretty clear reminder of
what normally confronts women when they socialise together.&lt;/p&gt;

&lt;p&gt;But that's all external observation; me theorising about motivations
and feelings in a group to which I do not belong. I can be more
certain about my own feelings. Several times, early in the night I
mentally gave a start and felt that I had to move seats. I didn't
though when I realised where that sense was coming from. I was one guy
sitting at a table, laughing and talking with a bunch of women. And in
Australia, at least, you just don't do that. I can't be certain where
this was coming from. Either, it is not appropriate for a guy to be
showing that much attention to a group of women (cf. sleazy sales
guy), without also talking to some men occasionally; or, that men
would regard other men who spend all night talking only to women
poorly. So, was it fear of a negative reaction from men or fear of a
negative reaction from women? Because I can say that it was not an
inability to relate, not a lack of common interests: once I identified
and ignored the feeling, it quickly disappeared, and I had a great
night. Either way, this is the sort of thing that needs to be
identified and disposed of before the inherent sexism in computing can
be fixed.&lt;/p&gt;

&lt;p&gt;But, apart form all that serious discussion of gender interaction, I
had a great night and it seemed that so did pretty much everyone
else. Thank you very much to &lt;a href="http://damana.blogspot.com/"&gt;Damana&lt;/a&gt; for organising this,
&lt;a href="http://www.thoughtworks.com/"&gt;ThoughtWorks&lt;/a&gt; for paying for the food and &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt; for
providing the drinks. It was very interesting to get a real chance to
talk to women in computing and about computing when I was the minority
and I hope these sorts of events can do something to make computing a
more balanced, realistic and enjoyable environment. Any geek guys out
there, I'd recommend trying to get a date to the next one!&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5737959870100969554?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5737959870100969554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5737959870100969554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5737959870100969554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5737959870100969554'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/02/girl-geek-dinner-0.html' title='Girl Geek Dinner 0'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6583749602958905363</id><published>2008-02-19T22:41:00.001+11:00</published><updated>2008-02-19T22:41:29.752+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>A Burnt-out Case</title><content type='html'>&lt;p&gt;&lt;em&gt;A Burnt-out Case&lt;/em&gt;&lt;br /&gt;
Graham Greene&lt;/p&gt;

&lt;p&gt;I read this book many, many years ago: way back in year nine
English. It was the first of the Greene novels we read, followed by
&lt;em&gt;Our Man in Havanna&lt;/em&gt; and then &lt;em&gt;The Quiet American&lt;/em&gt;. I remember really
enjoying the latter two, but just not getting &lt;em&gt;A Burnt-out
Case&lt;/em&gt;. Thinking back on it now this might have been the first serious
piece of literature I read. Wow. I had to get over fantasy at some
point.&lt;/p&gt;

&lt;p&gt;Of the three, this is the most adult and serious. At the core this
story is about how you derive your meaning for life. What happens when
instead of just accepting your life, you can't help question. Why you?
Do you deserve your successes? Your failures? Your happiness? Your
sadness? At some level, it's very easy to know that we don't deserve
the bad things that happen. We move on, ignore those and wait for
something good. But if you're going to scratch the surface of your
life and ask 'What did I do to deserve this?' of the good things that
happen, what answer do you get back? Are we set up to accept and enjoy
success? Wuerry has scratched and examined; questioned and dug deep at
the heart of who he thinks he is, until there was nothing left to
scratch. And then he is on a small boat to a leprosarium in the heart
of Belgian colonial Africa.&lt;/p&gt;

&lt;p&gt;I'm very glad that I've finally re-read this book. Greene remains one
of my favourite authors. Every book I read of his seems to be better
than the last. Of course that can't be true - but it sure feels like
it. Now, as I look through his list of books, there aren't many more
that I've heard about that I am yet to read. This makes me sad. I'll
be re-reading &lt;em&gt;Our Man in Havanna&lt;/em&gt; at some point, and that gives me
hope. I'd have never heard of that one if I hadn't already read
it. There's no reason not to randomly try others then!&lt;/p&gt;

&lt;p&gt;It is a pity that the Nobel Prize committee could never look past
Greene's devout Catholicism. Though with Catholic themes and
characters, his books are always much more than that. If there is
anyone who deserved the Nobel Prize for Literature, it's Graham Greene.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6583749602958905363?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6583749602958905363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6583749602958905363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6583749602958905363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6583749602958905363'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/02/burnt-out-case.html' title='A Burnt-out Case'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8376857421210290153</id><published>2008-02-17T23:23:00.001+11:00</published><updated>2008-02-17T23:24:31.978+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='pretention'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>On Reading and Writing</title><content type='html'>&lt;p&gt;You may have noticed a pattern in my posting over the last few
months. There was a lengthy quiet period at the end of last year,
followed by many posts so far this year. You may also have noticed
that I've been clearing a large backlog of book reviews, but with each
separated by a non-book review post.&lt;/p&gt;

&lt;p&gt;Well, of course the dry spell was caused by complaints. Apparently I
was posting too many book reviews, my blog had become too much of a
book-blog. It's funny the effect that complaints and criticism can
have. When you have to work out if everything you write is something
that someone else will want to read, the effort of making that
decision on top of the effort of writing can very quickly become
pretty expensive.&lt;/p&gt;

&lt;p&gt;It's stupid to complain about this though. That kind of complaint is
something everyone has to go through as soon as their output is
read. If you want readers, then expect that, and if you're not after
readers, then don't publish. Pretty simple. At first I kept writing my
reviews without publishing, but that wasn't enough, so they're now
back. But it doesn't really work to say I want to publish this and
readers be damned. So, a compromise. I'm interspersing my book reviews
with other posts, like this one. Stories, photos and good old
rants. The backlog of reviews will eventually clear. I'm not sure what
will happen then...&lt;/p&gt;

&lt;p&gt;But I also wanted this post to be some sort of explanation for why I
have continued the book reviews. Originally, I said that I just wanted
to keep track of what I'd read and any first impressions. But, I've
found that planning to write a review changed the way I read and, for
me, in a good way.&lt;/p&gt;

&lt;p&gt;I found I was reading books a lot deeper. I was predicting plot
twists, noticing intentional coincidences and becoming more involved
and aware of the atmosphere the author was trying to create. I also
started to notice the techniques the author may have used to achieve
this. Turns of phrase, pacing with a description at a well-timed
juncture to set the mood. The language they use and how it might
affect your impressions. I found that this closer reading managed to
significantly increase my enjoyment of a book - even a not
particularly good one. I can't promise it's for everyone, but I've got
a lot out of it and it will continue.&lt;/p&gt;

&lt;p&gt;Everything that appears on this blog is written twice. Well, most
things, like longer posts such as this and all my book reviews. The
first writing is done in long hand using a fountain pen in a journal
of some sort (currently, an unruled, leather wrapped Corban + Blair
given to me by a couple of friends.) Then I type the entry out using
Emacs and post from MarsEdit. A combination of old and new technology
that I like. So why do I have this involved writing process? Why not
just type directly into Blogger's text edit field?&lt;/p&gt;

&lt;p&gt;Well, there's a couple of reasons. Some apply to everyone, and others
apply only to me. Firstly, Blogger's (and all web app) text fields
suck. You're just far to exposed too exposed to bugs in too many
different pieces of software. If I'm going to write a long post, I
want some more confidence that it's going to survive to be
published. Secondly, I live inside Emacs and I'm officially
Emacs-retarded; I want my reflexive editing keystrokes to do what I
expect.&lt;/p&gt;

&lt;p&gt;But those are just technical reasons and only apply to the
MarsEdit/Emacs parts of my process. Why the long-hand? The fountain
pen?&lt;/p&gt;

&lt;p&gt;In truth, I don't really know. And to be honest, 'affectation' would
be the biggest part of the answer. It's hard to justify a fountain pen
and a leather-bound journal any other way.&lt;/p&gt;

&lt;p&gt;But, but, but... a blank computer screen has never been a very
creatively inspirational sight for me. Even when programming. I just
can't start thinking when I'm staring at a blank text window. I need
to get away from a computer and into a garden and then I can start to
think.&lt;/p&gt;

&lt;p&gt;That was without planning or thought. While living in Darwin, when
doing any programming I'd figure something out - and then find myself
in some part of the garden. I'd got up from the computer and walked
around the garden on auto-pilot.&lt;/p&gt;

&lt;p&gt;Anyway, a journal and a pen get me away from a computer. And once
you've written with a fountain pen, you'll never be able to write with
any other pen again. There's just something about the way the ink lays
down while the nib glides effortlessly across the page...&lt;/p&gt;

&lt;p&gt;But there's also something about the act of writing for me. It's just
a great way to crystallise and direct my thinking. Of course it
largely comes out as a mess on the first pass. Incoherent sentences,
the same word repeated over and over again. The typing it all out
again is a fantastic editing process. I can't help but fix up all
those little problems. In the end, I enjoy the writing process, much
as I enjoy reading. These are things that work for me, with how I want
to read and write. Always make sure you do what works for you.&lt;/p&gt;

&lt;p&gt;Finally, in all my talk about what I write in my blog you may have
noticed that there was no mention of the computer science that used to
be a staple of this blog. Well, there are a couple of reasons for
that. My new work project is intensely interesting and gives my a lot
of scope for thinking about comp. sci. and experimenting with ideas:
the sort of thing I used to do here. But the damn, freaky secrecy of
my work prevents me from talking about that. There is a slight
cracking of the paranoia though, and hopefully at some point I'll be
able to write about that here.&lt;/p&gt;

&lt;p&gt;Also, hang around on &lt;a href="http://reddit.com"&gt;reddit&lt;/a&gt; enough and you see a
veritable flood of badly written tutorials on the latest programming
feature to catch the eye of the blogosphere. I choose not to
contribute to that until I have something substantially interesting to
all. Surprisingly enough, my lament about &lt;a href="http://overwatering.blogspot.com/2008/02/prototypes-and-real-applications.html"&gt;protoypes&lt;/a&gt; fell into that
category. I believe &lt;a href="http://overwatering.blogspot.com/2007/08/what-is-shrew.html"&gt;Shrew&lt;/a&gt; also will; there will be more about that
at some point.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8376857421210290153?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8376857421210290153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8376857421210290153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8376857421210290153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8376857421210290153'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/02/on-reading-and-writing.html' title='On Reading and Writing'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1234923566311625180</id><published>2008-02-12T19:12:00.001+11:00</published><updated>2008-02-12T19:12:12.157+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>First Among Sequels</title><content type='html'>&lt;p&gt;&lt;em&gt;First Among Sequels&lt;/em&gt;&lt;br/&gt;
Jasper Fforde&lt;/p&gt;

&lt;p&gt;The latest Thursday Next novel and again a book for book and story
lovers. A brief introduction: Thursday Next is a literary detective in
an alternative reality where books are the single most popular form of
entertainment. And in this alternative reality the line between the
real world and a fictional world inside books is blurry. That probably
sounds confusing. I'll try to clear it up: In this work of fiction an
alternative reality is presented, in that alternative reality there is
a world within works of fiction. The line between the fictional
real world and the fictional fictional world is blurred. All clear
now? No? Better read the books then, starting with &lt;em&gt;The Eyre Affair&lt;/em&gt;;
you'll love them if you love books.&lt;/p&gt;

&lt;p&gt;This, the fifth book, is quite an independent story; as opposed to the
preceding three - really a single story. The break between books has
also been good for the world of the story. Fforde seems to have spent
a lot of time cementing down how the world works. There is none of the
drift and none of the continuity problems that the previous books
started to show. And of course, for fans of the series there are
plenty of cute little jokes. Fforde must remove dozens of these in
draft as he always manages to resist the temptation to turn to
gimmicks.&lt;/p&gt;

&lt;p&gt;As an aside, once you read this book, go read about &lt;a href="http://www.longnow.org/" title="The Long Now Foundation"&gt;The Long Now
Foundation&lt;/a&gt; the &lt;a href="http://www.longnow.org/projects/clock/#clockessay" title="The 10,000 Year Clock"&gt;10,000 Year Clock&lt;/a&gt;. Don't worry, I haven't
given anything away. In fact, go read those now even if you don't plan
on reading the book. The review's nearly over.&lt;/p&gt;

&lt;p&gt;If you were a little disappointed by &lt;em&gt;Lost in a Good Book&lt;/em&gt; or &lt;em&gt;Well of
Lost Plots&lt;/em&gt; then cast those fears aside. Thursday's back, and she's
back on track.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1234923566311625180?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1234923566311625180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1234923566311625180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1234923566311625180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1234923566311625180'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/02/first-among-sequels.html' title='First Among Sequels'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4738881949661459955</id><published>2008-02-09T12:24:00.001+11:00</published><updated>2008-02-09T12:24:14.671+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Apoise</title><content type='html'>&lt;p&gt;This mega-yacht, &lt;a href="http://yachts.monacoeye.com/yachtsbysize/pages/apoise01.html"&gt;Apoise&lt;/a&gt; was moored in front of the Park Hyatt at
Circular Quay over New Year's; they would have had a pretty good view
of the fireworks.&lt;/p&gt;

&lt;p&gt;Apoise is 67m long, which just pushes it out of the &lt;a href="http://en.wikipedia.org/wiki/List_of_motor_yachts_by_length"&gt;top 50
yachts&lt;/a&gt;
in the world; the shortest yacht on that list is 72m. It's impossible
to tell who owns Apoise. The owners are listed as some Cayman Island
company called Apoise Holding, Pty Ltd. Which tells you nothing.&lt;/p&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2250972177" title="View 'IMG_3063' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2011/2250972177_8224462cd9.jpg" alt="IMG_3063" border="0" width="400" height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2251767512" title="View 'IMG_3066' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2016/2251767512_3c6bc60338.jpg" alt="IMG_3066" border="0" width="400" height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2250972905" title="View 'IMG_3071' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2115/2250972905_90a0d55d8d.jpg" alt="IMG_3071" border="0" width="400" height="300" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4738881949661459955?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4738881949661459955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4738881949661459955' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4738881949661459955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4738881949661459955'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/02/apoise.html' title='Apoise'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2011/2250972177_8224462cd9_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6412660920857807161</id><published>2008-02-02T17:35:00.001+11:00</published><updated>2008-02-02T17:35:47.648+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Stardust</title><content type='html'>&lt;p&gt;&lt;em&gt;Stardust&lt;/em&gt;&lt;br /&gt;
Neil Gaiman&lt;/p&gt;

&lt;p&gt;A very cute, very enjoyable fantasy fairy tale. There really isn't a
lot more to it than that: it's simple, plain, well-written escapist
fun. Like all of Gaiman's work that I've read (which is nearly all of
it) it's very well written, and hell of a lot of fun. Highly
recommended.&lt;/p&gt;

&lt;p&gt;I was inspired to read this by the movie. It's very similar, the movie
was generally pretty faithful. Most of the plot changes were pretty
minor: just to streamline and shorten things, largely. The movie
expanded the minor characters; they became bigger, more memorable
roles. This was probably to attract the big names they got, but wasn't
actually a bad thing. Gaiman was very clearly attempting to create a
rich supporting cast.&lt;/p&gt;

&lt;p&gt;The movie did make one very substantial change. And, with the benefit
of reading the book, it was very clearly for the worse; and quite
forced. I won't say what that was, except to say the book is better
without and the movie would have been equally so.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6412660920857807161?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6412660920857807161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6412660920857807161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6412660920857807161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6412660920857807161'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/02/stardust.html' title='Stardust'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5338878003307614140</id><published>2008-02-01T23:46:00.001+11:00</published><updated>2008-02-01T23:48:05.662+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Prototypes and Real Applications</title><content type='html'>&lt;p&gt;There is an essay, &lt;em&gt;&lt;a href="http://www.dreamsongs.com/ArtOfLisp.html"&gt;The Art of Lisp &amp;amp;
Writing&lt;/a&gt;&lt;/em&gt; by Richard
Gabriel. It's long, but like all of Gabriel's
&lt;a href="http://www.jwz.org/doc/worse-is-better.html"&gt;essays&lt;/a&gt; it is worth
reading if you're interested in exploring alternative views of the act
of writing programs.&lt;/p&gt;

&lt;p&gt;I am simply not qualified to do justice to Gabriel's central
point. Simply note, it was Brooks of &lt;em&gt;The Mythical Man Month&lt;/em&gt;, that
bible of solid, empirical, meticulous software engineering planning
who first drew the connection between the work of programmers and
poets.&lt;/p&gt;

&lt;p&gt;Instead, there is a minor point in Gabriel's essay that caused me to
think about a brief chat in a recent interview. We'd worked our way
through the questions, the candidate had done well, there was enough
time left to just chat about his work. His two favourite languages
were C++ and Python, so we drilled a little there. How had he used
them? What did he think of them? Had he tried to combine them
together?&lt;/p&gt;

&lt;p&gt;Well, it turned out he had. Using &lt;code&gt;boost::python&lt;/code&gt; he had exposed some
of his C++ classes into Python. This was interesting. Why? It was so
he could quickly produce parts of the application; he'd become a fan
of this technique. All very well and good, had he tried that approach
elsewhere? Unfortunately, no he hadn't. His other use for Python was
as a prototyping language. So close. I drilled a bit on this
point. Had he made the obvious step from here? Turns out he
hadn't. But that did leave me thinking, and Gabriel's essay
crystallised this issue in my mind.&lt;/p&gt;

&lt;p&gt;Why did he just throw away his Python prototype and rewrite the whole
thing in C++? Why didn't he grab a profiler and start replacing the
slow Python parts with fast, small chunks of C++?&lt;/p&gt;

&lt;p&gt;Developers seem to see an enormous gulf between a prototype and a
'real' application. Something that is appropriate for a prototype must
be discarded for the real version. The basis for this act seems to be
that a prototype is a quick and dirty hack and can't be trusted to
work.&lt;/p&gt;

&lt;p&gt;Well, I don't know about you, but I can't help myself: every piece of
code I write, I write maintainably and flexibly. And these are issues
in prototypes. A prototype is meant to be an exploration, a journey to
see how an idea will play out once it's embodied in a program. It is
an idea that has not been seen before - this is when it needs to be
most flexible. When everyone who sees is thinks of an improvement,
when the sight of running program inspires completely new ideas. This
happens during the prototyping phase - and if you don't explore these
ideas, then what was the point of the prototype at all?&lt;/p&gt;

&lt;p&gt;Your prototype needs to be written quickly and then it needs to change
quickly. You'll only be able to do that with a maintainable, flexible
code base. In short, a well-written code base. You're a proficient
software engineer, you know how to do this. You probably do it without
even thinking.&lt;/p&gt;

&lt;p&gt;And at some level, everyone knows this. That's why prototypes are
created in languages like Python. A language that you can write
quickly, but also write well, quickly.&lt;/p&gt;

&lt;p&gt;So when it comes time to write the 'real' application, when all the
decisions have been made and the exploration has stopped, when we know
what the program will do, why do we throw away all that very carefully
engineered prototype code? It can't be because the code is no good,
because that code is better than you believe the 'real' program needs
to be.&lt;/p&gt;

&lt;p&gt;Most developers would say that it has to be rewritten for
performance. But when was the last time you profiled your code?
Because if you haven't profiled you simply can't know what your
performance is, and more importantly, where the trouble-spots are.&lt;/p&gt;

&lt;p&gt;I want to prototype. I want to explore my ideas in a running
program. I want to carefully engineer my program and then change it at
a moment's notice. And I want to be able to do that all the time, for
the entire life of the program. I don't want to kill my program just
when it's about to finally get some users.&lt;/p&gt;

&lt;p&gt;I want to express my ideas in a language that gives me all that.&lt;/p&gt;

&lt;p&gt;Oh, and that application the candidate had been working on? The one
that had Python embedded in the real, final version? It was a
massively multiplayer 3D game engine.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5338878003307614140?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5338878003307614140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5338878003307614140' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5338878003307614140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5338878003307614140'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/02/prototypes-and-real-applications.html' title='Prototypes and Real Applications'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6731731411367014871</id><published>2008-01-30T19:16:00.001+11:00</published><updated>2008-01-30T19:16:51.274+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Brazil</title><content type='html'>&lt;p&gt;&lt;em&gt;Brazil&lt;/em&gt;&lt;br/&gt;
John Updike&lt;/p&gt;

&lt;p&gt;The outline is a re-telling of the classic story of Tristan and
Isolde.  This is only a frame for a much larger story to be hung from,
though. Overall, I was reminded of Gabriel Garcia Marquez's &lt;em&gt;One
Hundred Years of Solitude&lt;/em&gt; - perhaps because I'm simple and both are
set in the wilds of South American jungle. But to be slightly fairer
on me, both are apparently non-genre modern classics, but they both
contain large elements of the fantastical. In other words, these
supposedly very serious, meaningful books turn into fantasy for at
least part of their story. Quite amusing: fantasy is typically regared
as barely writing at all.&lt;/p&gt;

&lt;p&gt;This drift is done unexpectedly, with a sudden jolt. This is something
I love. A novel is a depiction of another reality, why does that world
have to work exactly the same as our world? Why not answer some of
those questions that can't normally be answered?&lt;/p&gt;

&lt;p&gt;This is a story of fidelity, change and growth. The story follows the
two young lovers as they try to stay together against the weight of
society. It sounds very corny, but there is enough to this story such
that the apparently corny plot line becomes insignificant; or, it's
twisted just enough to become significant again.&lt;/p&gt;

&lt;p&gt;My big question while reading, was whether Updike had actually
travelled into the back country of Brazil. Beyond the story, fantasy
and societal commentary, this is one of the rare books where the
author has tried to get his head into another culture. Of course,
knowing nothing about the Brazilian back country myself, I can't judge
his success. Which makes an interesting point: if the readers can't
judge whether this is a real depiction of Brazilian society, does it
actually matter if it's accurate or not? Doesn't the society drawn
just become part of the fantasy world of the novel?&lt;/p&gt;

&lt;p&gt;This book also has 'grand experiment' written in its very pages. The
running and movement through the land of Brazil is also echoed as
movement through time. Slowly melting your sense of when this book is
set. Dates are not mentioned at all until near the end. Your sense of
the book's setting slowly comes into focus, emerging from a
cloud. There is also a great loop: starting with a world and a story
we know and can understand, as the characters run into the wilds of
the Amazon rainforest we move deeper into that fog. Until we're so far
in you have no idea what you're seeing, what's real, what's
imagined. And then the return begins, until you're back with
characters, settings and plots that are familiar. Ultimately leaving a
sense that nothing untoward has happened; nowhere strange was
visited. A genuinely disconcerting sense.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6731731411367014871?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6731731411367014871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6731731411367014871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6731731411367014871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6731731411367014871'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/brazil.html' title='Brazil'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-7212398950692314447</id><published>2008-01-27T23:38:00.001+11:00</published><updated>2008-01-27T23:38:17.494+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Darwin, December 2007</title><content type='html'>&lt;p&gt;Just a random set of photos from Darwin, while there over
  Christmas 2007&lt;/p&gt;

&lt;p&gt;First, three photos looking off the Dripstone cliffs at Casurina
  beach. This was not a particularly low tide.&lt;/p&gt;

&lt;div style="text-align:center"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2222268391" title="View 'IMG_2785' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2214/2222268391_925fb3533d.jpg" alt="IMG_2785" border="0" width="400" height="375" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br/&gt;

&lt;div style="text-align:center"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2222269061" title="View 'IMG_2791' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2035/2222269061_0e544fea3f.jpg" alt="IMG_2791" border="0" width="300" height="400" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br/&gt;

&lt;div style="text-align:center"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2223061246" title="View 'IMG_2788' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2165/2223061246_5ebe29fd6f.jpg" alt="IMG_2788" border="0" width="400" height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I was impressed by the growth in Darwin city; it feels like a very
  vibrant centre.&lt;/p&gt;

&lt;div style="text-align:center"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2223062024" title="View 'IMG_2808' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2035/2223062024_a59ffdb74e.jpg" alt="IMG_2808" border="0" width="300" height="400" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Darwin Wharf for a casual dinner of fish and chips with a great sunset.&lt;/p&gt;

&lt;div style="text-align:center"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2222269713" title="View 'IMG_2833' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2053/2222269713_e238e7f5dc.jpg" alt="IMG_2833" border="0" width="400" height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br/&gt;

&lt;div style="text-align:center"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2223062490" title="View 'IMG_2838' on Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2270/2223062490_0c1694ba50.jpg" alt="IMG_2838" border="0" width="300" height="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-7212398950692314447?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/7212398950692314447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=7212398950692314447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7212398950692314447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7212398950692314447'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/darwin-december-2007.html' title='Darwin, December 2007'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2214/2222268391_925fb3533d_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6391150503955061529</id><published>2008-01-26T21:52:00.001+11:00</published><updated>2008-01-26T21:52:54.947+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Maltese Falcon</title><content type='html'>&lt;p&gt;&lt;em&gt;The Maltese Falcon&lt;/em&gt;&lt;br/&gt;
Dashiell Hammett&lt;/p&gt;

&lt;p&gt;I don't normally read detective/mystery novels, but I was given a
recommendation to try reading outside of what I normally
read. Figuring that if I am to grab a book from another genre, I might
as well do that genre justice, I decided to read this.&lt;/p&gt;

&lt;p&gt;Ultimately though, I just don't have much to say and I probably won't
be going out of my way to read any more detective novels. That's not
to say it's not a good book, but the characterisation was just
bizarre. Sam Spade is the original hard-as-nails private eye - I'm
sure he's intended as a character to be admired; as something or
someone to aspire to. But that's just not something I could do. I'm
sure at some point in the past Spade's attitude to women was
admirable, but I could certainly never do that. Spade's interaction
with the police was fantastic though - a real sense of
reality. Hammett was clearly writing these scenes straight from
memory.&lt;/p&gt;

&lt;p&gt;The story and mystery was enjoyable, with plenty of twists, just as
you'd expect. Personally though, I just don't get deeply involved in
figuring out a mystery. Figuring out the people: for some reason
that's much more interesting; much more of a mystery.&lt;/p&gt;

&lt;p&gt;This is the original private eye novel: everything that came after is
just a refinement of the mould set in this book. As I was reading,
when I needed to visualise scenes, I was pulling images from &lt;em&gt;Who
Framed Roger Rabbit?&lt;/em&gt; of all places - not establishing the exact tough
tone required.&lt;/p&gt;

&lt;p&gt;Really what this came down to, is this kind of book is now just a
cliché and a parody. Even the twists are predictable from this point
of view: just expect the worse and you're about on track. And when
you're reading a cliché you can't help but do that.&lt;/p&gt;

&lt;p&gt;'If this is the kind of thing you like, you'll like this kind of
thing,' otherwise... Well, you can read it for the historical
value... No matter what you will almost certainly enjoy this story;
just try to forget the clichés and parodies. Wind yourself back to the
1930's, if you can, that might help.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6391150503955061529?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6391150503955061529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6391150503955061529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6391150503955061529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6391150503955061529'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/maltese-falcon.html' title='The Maltese Falcon'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1962387900192025291</id><published>2008-01-25T21:50:00.001+11:00</published><updated>2008-01-25T21:50:47.019+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Our Old Home</title><content type='html'>&lt;p&gt;Our family moved to Darwin in mid-1986, after migrating from
Wellington, NZ to Katherine in May of that year. Sometime between my
birthday (5th December) and Christmas we moved into &lt;a href="http://maps.google.com.au/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;time=&amp;amp;date=&amp;amp;ttype=&amp;amp;q=4+Cunjevoi+Cres,+Nightcliff,+NT+0810&amp;amp;sll=-25.335448,135.745076&amp;amp;sspn=43.569223,54.492188&amp;amp;ie=UTF8&amp;amp;ll=-12.380078,130.846653&amp;amp;spn=0.023432,0.040684&amp;amp;t=h&amp;amp;z=15&amp;amp;iwloc=addr&amp;amp;om=0"&gt;4 Cunjevoi Cres,
Nightcliff&lt;/a&gt;. I can't remember exactly when; I was young. From
then on, my Dad worked on improving the house and garden. Over the
next fourteen years the garden evolved into (in my opinion) one of the
better examples of a tropical garden you're likely to find in
Darwin. A couple of points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There was a noticeable difference in temperature when you walked
through the front gate: it was at least a couple of degrees
cooler. And in the middle of the Darwin wet season, you appreciated
that.&lt;/li&gt;
&lt;li&gt;No grass. The green cancer is woefully unsuitable for all Australian
climates, but tropical gardens with large expanses of lawn are
virtually uninhabitable.&lt;/li&gt;
&lt;li&gt;We had a continuous set of native residents: skinks, possums,
blue-tongue lizards, green-tree snakes, honey-eaters nesting
off the balcony: we had it all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I haven't been back to Darwin since sometime in 2003. My Dad finally
finished and sold the house at the end of 2004. I was the first of our
family back in the city since then, so I made sure to visit the old
house. The owners weren't home, but one of their tenants were. She
opened the gate; I circled the house and took some photos.&lt;/p&gt;

&lt;p&gt;Overall, Darwin was something of an experience after so many years. I
always knew I didn't quite fit in, but you need to live somewhere else
before you can really understand why. Fun fact: the local Darwin
dialect has no equivalent word for &lt;a href="http://en.wikipedia.org/wiki/Bogan"&gt;Bogan&lt;/a&gt;. Make of that what
&lt;em&gt;you&lt;/em&gt; will; I know what &lt;em&gt;I&lt;/em&gt; make of it.&lt;/p&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2217846765"
   title="View 'IMG_2753' on
      Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2021/2217846765_2b69ea8c34.jpg"
               alt="IMG_2753" border="0" width="400"
               height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;From the street.&lt;/span&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2218641274"
   title="View 'IMG_2757' on
      Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2330/2218641274_16a93292c6.jpg"
               alt="IMG_2757" border="0" width="400"
               height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;A pergoda,
    with a formal fish pond.&lt;/span&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2217847205"
   title="View 'IMG_2759' on
      Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2113/2217847205_51f612bd89.jpg"
               alt="IMG_2759" border="0" width="300"
               height="400" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;Old fig
    with a home-made aviary: they're using it now to care for injured possums.&lt;/span&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2218641676"
   title="View 'IMG_2764' on
      Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2355/2218641676_34905015b7.jpg"
               alt="IMG_2764" border="0" width="300"
               height="400" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;Looking
    across the pool.&lt;/span&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2218641844"
   title="View 'IMG_2769' on
      Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2101/2218641844_212c68f6b6.jpg"
               alt="IMG_2769" border="0" width="300"
               height="400" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;A
    variegated pandanus.&lt;/span&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2218642094"
   title="View 'IMG_2772' on
      Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2236/2218642094_e4e293f988.jpg"
               alt="IMG_2772" border="0" width="400"
               height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;The
    natural pond.&lt;/span&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2217848105"
   title="View 'IMG_2774' on
      Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2187/2217848105_30711b3efd.jpg"
               alt="IMG_2774" border="0" width="400"
               height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;The
    natural pond: closer.&lt;/span&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2217848245"
   title="View 'IMG_2775' on
      Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2407/2217848245_d51c014509.jpg"
               alt="IMG_2775" border="0" width="400"
               height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;Lilies and
    water plants run wild.&lt;/span&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2217848417"
   title="View 'IMG_2779' on
      Flickr.com"&gt;&lt;img src="http://farm3.static.flickr.com/2250/2217848417_bc4f5fcf5b.jpg"
               alt="IMG_2779" border="0" width="300"
               height="400" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;Front
    garden with Alexandria and Betel nut palms.&lt;/span&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1962387900192025291?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1962387900192025291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1962387900192025291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1962387900192025291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1962387900192025291'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/our-old-home.html' title='Our Old Home'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2021/2217846765_2b69ea8c34_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-587283643739669</id><published>2008-01-24T22:34:00.001+11:00</published><updated>2008-01-24T22:34:57.967+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Snow Crash</title><content type='html'>&lt;p&gt;&lt;em&gt;Snow Crash&lt;/em&gt;&lt;br/&gt;
Neal Stephenson&lt;/p&gt;

&lt;p&gt;My first cyber-punk novel; I haven't even read any William
Gibson. This was recommended to me over his other novels, including
&lt;em&gt;Cryptnomicon&lt;/em&gt;, which I already had. It's a very good sci-fi novel:
unlike much other sci-fi &lt;em&gt;Snow Crash&lt;/em&gt; is both written recently and set
in the quite near future. This book also has another advantage: Neal
Stephenson was a professional programmer and has chosen to write a
book about programming.&lt;/p&gt;

&lt;p&gt;As another professional programmer however, I do have to object
somewhat to the depiction of the profession. Stephenson elevates the
cowboy approach to mythical heights. Not something I agree with. But,
it's a bit of a ridiculous complaint. He gets the terminology right
(even the oft-misused word 'hacker'); he does understand actual
software engineering techniques; and he hints at software development
being a creative process.&lt;/p&gt;

&lt;p&gt;Ultimately, programming is not a spectator activity: there's a lot of
quiet thought, some esoteric arguments and a small amount of typing. I
can accept jazzing up programming for the sake of the story. Given the
reality.&lt;/p&gt;

&lt;p&gt;The future presented is very plausible. Including the interaction
between programmers, corporations and the vast majority of users. It
could very easily be regarded as overly dystopian. The alternative to
the future in this story is that improved technology creates more
engagement amongst the non-technological priesthood part of the
population. There is precedent for taking that view. The novel &lt;em&gt;1984&lt;/em&gt;
is unfortunately implausible as many technologies since have made the
techniques described impractical or impossible: the photocopier, for
one.&lt;/p&gt;

&lt;p&gt;Personally, I have seen blogs improving the literacy level of those
writing them. But, ultimately, the Stephenson's dystopian world is all
too imaginable. I still have fairly negative attitudes towards the
future of technology. It will &lt;em&gt;not&lt;/em&gt; save the world.&lt;/p&gt;

&lt;p&gt;Aside from the depiction of the future, this book has a fantastic idea
at its centre. It's an unusual idea, and very well-executed. There are
some distinct echoes of Philip K. Dick's &lt;em&gt;A Scanner Darkly&lt;/em&gt;, but only
towards the periphery.&lt;/p&gt;

&lt;p&gt;The plot is fairly hackneyed and predictable. The whole 'murdered
genius leaving behind a trail of clues to pieced together in time to
save the world' thing is pretty common in sci-fi/fantasy stories.?But
in the end this is not a disappointing novel: a great idea and
well-executed, that rarest of combinations.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-587283643739669?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/587283643739669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=587283643739669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/587283643739669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/587283643739669'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/snow-crash.html' title='Snow Crash'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3587734871126863770</id><published>2008-01-21T23:01:00.001+11:00</published><updated>2008-01-21T23:01:29.960+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><title type='text'>Two Tales from the Same Day</title><content type='html'>&lt;h3&gt;The Afternoon Bus Trip Home&lt;/h3&gt;

&lt;p&gt;It's a rainy day, there's three of us huddling under the balcony of
the Town Hall hotel. The rain drizzles down slowly; the ashphalt and
brick building glisten damply. We're chatting about garbage collection
in Scheme as the bus pulls up and everyone piles on. The three of us
take seats at the back and A, R and I keep talking.&lt;/p&gt;

&lt;p&gt;A little further down the road (maybe the West End hotel stop, but I
wasn't really paying attention) a guy gets on and takes the seat in
front of me. The bus continues; droning out of Balmain, onto the Anzac
bridge. The sun appears out of the clouds briefly - playing across the
bridge pylons and the last vestiges of the working harbour
beneath. Our discussion is getting animated - what can I say? Scheme
and garbage collection matter to us.&lt;/p&gt;

&lt;p&gt;And then suddenly, the guy sitting in front of us interrupts. 'Hey!'
You'll have to imagine the nasal, pinched drone for yourself - 'Does
any of youse guys has a mobile phone you could lends me?'
'Sorry mate; no.' We respond.&lt;/p&gt;

&lt;p&gt;And that was enough. 'Where's the fucking Australian spirit? Ya bunch
of fucking wankers. You're all just a bunch of fucking c*&amp;amp;ts. Fuck
youse.'&lt;/p&gt;

&lt;p&gt;We tried to go back to our conversation, but he wasn't having that.&lt;/p&gt;

&lt;p&gt;'Nah! I don't want to fucking hear it. Shut the fuck up, ya poofs.'&lt;/p&gt;

&lt;p&gt;Then his phone rang. Yes, he had his own phone. The guy on the other
end was told (loudly) about how this poor traveller was surrounded by
a bunch of un-Australian c*&amp;amp;ts.&lt;/p&gt;

&lt;p&gt;The bus continued along the Western Distributor, over Darling Harbour
and into the city. At the next stop, on Sussex St, A, R and I all
decide to get off.&lt;/p&gt;

&lt;p&gt;We're followed off the bus by more descriptions of our patriotism,
anatomy and sexuality. R blames my long hair for the last. Having a
look back at the bus we can see him screaming at us and pounding the
window. Wow.&lt;/p&gt;

&lt;h3&gt;The Morning Bus Trip to Work&lt;/h3&gt;

&lt;p&gt;I run into DC waiting for the bus. She's reading a book: 'Scaling
Software Agility.' It's about RUP and agile for big and growing
teams. We start talking about it, and continue talking after we're on
the bus.&lt;/p&gt;

&lt;p&gt;As our bus crosses the Anzac bridge, heading west, there's a lull in
our conversation. And into the pause, the old lady in the seat in
front of us turns around. 'Would you look at that? Evidence for global
warming if ever I saw it.' She gestures towards what appears to be a
cloud bank over North Sydney. 'All that smog and all those new cars
waiting to add more.'&lt;/p&gt;

&lt;p&gt;Below the Anzac bridge is the White Bay car wharves - just about every
new car in Australia has passed through there. They sit, gleaming,
sparkling cleanly. Waiting to be shipped off around the country to
their excitedly waiting owners.&lt;/p&gt;

&lt;p&gt;At first DC and I are a little taken aback - as you usually are when a
random person on the bus starts talking to you.&lt;/p&gt;

&lt;p&gt;'Well, actually, I think that's fog; not smog.' From DC, after a
pause.&lt;/p&gt;

&lt;p&gt;'Yeah, we've had quite a bit of rain recently, that would be fog, I
think.' Me, this time.&lt;/p&gt;

&lt;p&gt;'Oh? Are you a climatologist?' Now &lt;em&gt;that&lt;/em&gt; surprised me. Such a sweet
old lady, so confrontational! I had tried to be polite. There must
have been some shock or surprise in my face though, because she quickly
continued.&lt;/p&gt;

&lt;p&gt;'I'm sorry for interrupting, but I've just been waiting for a
chance. Listening in on your conversation has just made my year in
Sydney! It's sounded like such an intelligent conversation, especially
compared to the usual inanity I overhear on public transport. You
know, the usual he said then I said and she said. Just so inane!
Anyway, I thought you may have been scientists. Are you
climatologists?'&lt;/p&gt;

&lt;p&gt;'Close,' DC replies, 'we're both engineers.'&lt;/p&gt;

&lt;p&gt;And then, alluding to her experience in public health policy, she
regalled us with her very high opinion of engineers. All the way
through the narrow street up the side of the Balmain peninsula and to
our stop, opposite the Town Hall hotel.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3587734871126863770?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3587734871126863770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3587734871126863770' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3587734871126863770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3587734871126863770'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/two-tales-from-same-day.html' title='Two Tales from the Same Day'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8882273258275316429</id><published>2008-01-13T15:45:00.001+11:00</published><updated>2008-01-13T15:45:29.187+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Songlines</title><content type='html'>&lt;p&gt;&lt;span style="font-style: italic"&gt;The Songlines&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small"&gt;Bruce Chatwin&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;On the surface this may seem to be a travel novel, that is what
Chatwin's most famous for after all. You could read this as a book
about a trip through the red centre of Australia. But this is really a
book about travelling: it seems to be Chatwin's final attempt to get
at the wanderlust in his heart.&lt;/p&gt;

&lt;p&gt;What surprised me though was how well I know and remember this part of
Australia. His description of the Katherine Hotel-Motel; Katherine's
main street: Main St; the two kinds of roadside pub he stops at on his
way south down the Stuart Highway; and above all: the landscape, the
desert and the colour. With every one of these I could feel the heat,
the dust, see the flys. It was all still there.&lt;/p&gt;

&lt;p&gt;Ultimately, Chatwin is trying to get an understanding of the
Aboriginal Songlines: the tracks laid down by the ancestors during the
dreaming. And for this alone, every Australian has to read the book. I
will not try to summarise or explain the Songlines here. I am simply
not qualified.&lt;/p&gt;

&lt;p&gt;When I was growing up in New Zealand, part of our school education was
Maori culture: we learnt basic Maori language, Maori cultural
traditions and Maori society. Before our family moved to Australia,
our parents as conscientious school teachers tried to make sure we
were up to date with the Australian curriculum. English, maths,
science were all easy; basically the same things were taught. But we
didn't know much about Australian history. We were given books to
read, including an Aboriginal dreaming story, told for children, each.&lt;/p&gt;

&lt;p&gt;When I arrived at school in Katherine, a town with a significant
Aboriginal population, I discovered that I knew more about Aboriginal
culture, stories and history than any other white kid in my class. As
a seven year-old, I was stunned. To this day most Australians can't
name the traditional owners of the land they live on. And if you did
want to find out, it's hard: Australian society is not set up to share
knowledge of our Aboriginal heritage.&lt;/p&gt;

&lt;p&gt;This is a ringing indictment of Australia. Do your bit to counter,
read this book. We have this shared history of stories that haven't
been told and you haven't heard. Try them, you'll be surprised by how
enjoyable they are.&lt;/p&gt;

&lt;p&gt;Chatwin's book does wander a little towards the end. I wonder if any
of this is to do with some knowledge that this was his last travel
book? Did he know and wanted to say his final word on travel? Oh, and
by the way: this is it for me and Australian writers. I've long been
sick of stories about white farmers, and if an English guy can
actually say something about Aboriginal culture then I have no further
time for Australian writers. Hear that, Australian literary
establishment? Screw you guys, we're through.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8882273258275316429?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8882273258275316429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8882273258275316429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8882273258275316429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8882273258275316429'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/songlines.html' title='The Songlines'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1432627452543226655</id><published>2008-01-11T22:57:00.001+11:00</published><updated>2008-01-11T22:57:36.835+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Falling Pots</title><content type='html'>&lt;p&gt;As you walk around an inner city suburb with high apartment buildings,
you may see many balconies with pot plants sitting on the ledges. You
may also wander if those pots ever fall onto the street below.&lt;/p&gt;

&lt;p&gt;The answer is yes, yes they do.&lt;/p&gt;

&lt;div style="text-align:center;"&gt;
  &lt;a href="http://www.flickr.com/photos/21818828@N00/2184577129"
     title="View 'falling-pot' on Flickr.com"&gt;
    &lt;img src="http://farm3.static.flickr.com/2067/2184577129_4530fa6ea6.jpg"
     alt="falling-pot"
     border="0"
     width="300"
     height="400"
     /&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;This is another photo from the large ex-Mark Foy building across the
road. This ceramic pot fell from a balcony on the fifth floor, through
some trees while people were on their way to work.&lt;/p&gt;

&lt;p&gt;I was too slow with the camera to get a shot of the two terrified guys
who were walking past when the pot landed. The street was full of
fragments of pot for a couple of days.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1432627452543226655?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1432627452543226655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1432627452543226655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1432627452543226655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1432627452543226655'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/falling-pots.html' title='Falling Pots'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2067/2184577129_4530fa6ea6_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-340501108614809975</id><published>2008-01-09T19:50:00.001+11:00</published><updated>2008-01-09T19:50:06.222+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Y: The Last Man - Unmanned</title><content type='html'>&lt;p&gt;&lt;span style="font-style: italic;"&gt;Y: The Last Man - Unmanned&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-size: small;"&gt;Brian K. Vaughan, Pia Guerra, José
  Marzán, Jr.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;There was a long hesitation before I was willing to buy this comic,
the premise has immature male fantasy written all over: everything
that's bad about comics really. But, I was looking for something else,
and so far I'm happy with my experimentation. This first volume has a
very sci-fi feel. In particular, the conflict that establishes the
characters and series is very much a sci-fi idea. In fact, it now
appears that it's a pretty direct derivation of Frank
Herbert's &lt;a style="font-style:italic;"
         href="http://en.wikipedia.org/wiki/The_White_Plague"&gt;The
  White Plague&lt;/a&gt;, which &lt;a href="http://damana.blogspot.com"&gt;D&lt;/a&gt; is currently
reading.&lt;/p&gt;

&lt;p&gt;In brief, every male mammal suddenly and catastrophically dies. All
except for one guy. You can probably pick that up just from the title,
though. Unlike the other comics I've been reading, this one is written
and set quite recently: 2002. It does give it a more immediate, less
abstract feeling.&lt;/p&gt;

&lt;p&gt;I do have a criticism however. Yes, the sudden death of 50% (any 50%)
of the population would be pretty devastating, but I doubt the social
collapse would be quite as bad as depicted. Maybe I'm just disloyal to
my gender, and there is the post-Katrina, New Orleans melt-down to
consider.&lt;/p&gt;

&lt;p&gt;Anyway, I'm starting to understand why heavy comic book readers make
such a big deal about publishers. Just about every comic that has
looked interesting enough to buy has been published by Vertigo, an
imprint of D.C. Comics. I do now have one comic published by Marvel,
I'll be sure to let you know how that goes when I read it.&lt;/p&gt;

&lt;p&gt;Oh, and the obvious, juvenile male fantasy has not played
out. Fortunately. So I will be continuing with the series. At least
for now.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-340501108614809975?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/340501108614809975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=340501108614809975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/340501108614809975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/340501108614809975'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/y-last-man-unmanned.html' title='Y: The Last Man - Unmanned'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1015088814189619256</id><published>2008-01-08T19:37:00.001+11:00</published><updated>2008-01-08T19:38:15.841+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Fire</title><content type='html'>&lt;p&gt;Across the road from our building is another old warehouse converted
into apartments: one of the &lt;a href="http://en.wikipedia.org/wiki/Mark_Foys"&gt;Mark
Foys&lt;/a&gt; buildings. This is not
the original store, that's now the &lt;a href="http://en.wikipedia.org/wiki/Downing_Centre%2C_Sydney"&gt;Downing
Centre&lt;/a&gt;. This
is the brownstone Mark Foy warehouse.&lt;/p&gt;

&lt;p&gt;It's a very large building, with a lot of apartments in it. Lots of
apartments means lots of 'stuff' going on. A recent trick has been
triggering the fire alarm. It's loud, the whole building needs
to be evacuated and it requires two fire engines each time.&lt;/p&gt;

&lt;div style="text-align:center;"&gt;
  &lt;a href="http://www.flickr.com/photos/21818828@N00/2177693526"
     title="View 'engines' on Flickr.com"&gt;
    &lt;img src="http://farm3.static.flickr.com/2363/2177693526_008c663166.jpg"
     alt="engines"
     border="0"
     width="300"
     height="400" /&gt;
  &lt;/a&gt;
&lt;/div&gt;




&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;Two fire
    engines, just in case...&lt;/span&gt;&lt;/div&gt;




&lt;div style="text-align:center;"&gt;
  &lt;a href="http://www.flickr.com/photos/21818828@N00/2176902131"
     title="View 'crowds' on Flickr.com"&gt;
    &lt;img src="http://farm3.static.flickr.com/2163/2176902131_8e31b4bcb0.jpg"
	 alt="crowds"
	 border="0"
	 width="400"
	 height="300" /&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div style="text-align:center"&gt;&lt;span style="font-size:78%"&gt;Some
    evacuees, and a lot of people just trying to go home.&lt;/span&gt;&lt;/div&gt;




&lt;div style="text-align:center;"&gt;
  &lt;a href="http://www.flickr.com/photos/21818828@N00/2176901925"
     title="View 'firies' on Flickr.com"&gt;
    &lt;img src="http://farm3.static.flickr.com/2326/2176901925_92a43e521f.jpg"
	 alt="firies"
	 border="0"
	 width="400"
	 height="300" /&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1015088814189619256?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1015088814189619256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1015088814189619256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1015088814189619256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1015088814189619256'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/fire.html' title='Fire'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2363/2177693526_008c663166_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-7977658766552416541</id><published>2008-01-07T20:23:00.001+11:00</published><updated>2008-01-07T20:23:51.213+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The League of Extraordinary Gentlemen, Vols. I &amp; II</title><content type='html'>&lt;p&gt;&lt;span style="font-style: italic"&gt;The League of Extraordinary
  Gentlemen, Vols. I &amp;amp; II&lt;/span&gt;

&lt;span style="font-size: small"&gt;Alan Moore&lt;/span&gt;&lt;/p&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 80%; background-color: rgb(255,
        255, 153); font-size: 65%; padding-bottom: 10px;
        padding-left: 10px; padding-right: 10px;"&gt;
I read both of these a while ago, so am combining together two reviews
into one blog post.
&lt;/div&gt;
&lt;/div&gt;

&lt;h4&gt;Volume I&lt;/h4&gt;

&lt;p&gt;I'm still enjoying comics so I'm reading more and branching out;
unforunately this isn't branching our very far. D picked this one out
as she enjoyed the movie.&lt;/p&gt;

&lt;p&gt;The comic is pretty good - quite different in visual style to
&lt;span style="font-style: italic"&gt;The Sandman&lt;/span&gt;, with a more
straightforward mystery story line. But, good though it was, I didn't
like it as much as the other comics I've been reading. The most
interesting aspect is that this is actually a re-telling of Sherlock
Holmes, from the perspective of a group investigating a minor
storyline. This was entirely missing from my understanding of the
movie, so either I'm unusually dense, or... I can see why Alan Moore
objected so much to the movie.&lt;/p&gt;

&lt;p&gt;We have volume two of the series, so I will be going on to read
that. And also other comics. Definitely &lt;span style="font-style:
                             italic"&gt;The
  Sandman&lt;/span&gt;, but I'm also going to try branching out a bit more:
to works written by authors I haven't already read nor the originals
of fairly mainstream movies.&lt;/p&gt;

&lt;h4&gt;Volume II&lt;/h4&gt;

&lt;p&gt;This one was read straight after the first volume, which makes
comparison easier: unfortunately it just wasn't as good. Volume II is
a re-telling of H.G. Wells &lt;span style="font-style: italic"&gt;The War of
  the Worlds&lt;/span&gt;. This re-telling is much more straightforward:
it's obvious within the first few pages.&lt;/p&gt;

&lt;p&gt;This comic is also much darker than any of the other comics that I've
read. &lt;span style="font-style: italic"&gt;V for Vendetta&lt;/span&gt; was
probably darker in tone, but this is much darker in imagery. There is
actually some moderately gruesome stuff in this one. You have been
warned. Frank Miller's work (&lt;span style="font-style: italic"&gt;Sin
  City, The 300&lt;/span&gt;) has been been recommended to me: so I'm
guessing this is pretty good preparation.&lt;/p&gt;

&lt;p&gt;Volume III wasn't available when I went looking, so I'll be trying
some other stuff next. And to be honest, I'm no longer in any great
hurry to keep reading &lt;span style="font-style: italic"&gt;The League of
  Extraordinary Gentlemen&lt;/span&gt;.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-7977658766552416541?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/7977658766552416541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=7977658766552416541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7977658766552416541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7977658766552416541'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/league-of-extraordinary-gentlemen-vols.html' title='The League of Extraordinary Gentlemen, Vols. I &amp;amp; II'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3205921096256919299</id><published>2008-01-06T16:03:00.001+11:00</published><updated>2008-01-08T19:41:36.357+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>The Observatory</title><content type='html'>&lt;p&gt;Back in October last year, we spent a weekend at Sydney's &lt;a href="http://www.observatoryhotel.com.au/"&gt;Observatory
Hotel&lt;/a&gt; for our anniversary. A
very nice weekend; their restaurant (Galileo) is highly recommended.&lt;/p&gt;

&lt;p&gt;Here are just some random photos from spending time wandering around
Miller's Point, Walsh Bay and looking off the balcony of our room.&lt;/p&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2171053754" title="View 'walsh-bay-stairs' on Flickr.com"&gt;&lt;img src="http://static.flickr.com/2081/2171053754_c2bc33df9b.jpg" alt="walsh-bay-stairs" border="0" width="300" height="400" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2170268207" title="View 'view' on Flickr.com"&gt;&lt;img src="http://static.flickr.com/2202/2170268207_9c8cb79f10.jpg" alt="view" border="0" width="400" height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2171061900" title="View 'enclosed' on Flickr.com"&gt;&lt;img src="http://static.flickr.com/2079/2171061900_35609e6c94.jpg" alt="enclosed" border="0" width="300" height="400" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2171061476" title="View 'blank' on Flickr.com"&gt;&lt;img src="http://static.flickr.com/2244/2171061476_c86dbbf353.jpg" alt="blank" border="0" width="400" height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align:center;"&gt;&lt;a href="http://www.flickr.com/photos/21818828@N00/2170267869" title="View 'sunset' on Flickr.com"&gt;&lt;img src="http://static.flickr.com/2084/2170267869_7c9742ba6f.jpg" alt="sunset" border="0" width="400" height="300" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Funny story: the weekend was kind of a present from me, so I was in
charge of the organisation. I think you can see where this is
going. We were going to make a whole weekend of it, so we also bought
tickets to the play &lt;a href="http://en.wikipedia.org/wiki/Don's_Party"&gt;Don's
Party&lt;/a&gt; at the Sydney Opera
House. Come the Friday afternoon as we were about to leave for the
hotel and then the play, I went to check the booking for the hotel:
and found the booking was for a Wednesday and a Thursday about two
weeks later. Oh.&lt;/p&gt;

&lt;p&gt;I called the Observatory's reservations centre, and they managed to
change the booking to that Friday and Saturday night, in the same kind
of room. Fortunately for me. Weekend saved.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3205921096256919299?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3205921096256919299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3205921096256919299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3205921096256919299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3205921096256919299'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/observatory.html' title='The Observatory'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4673234293199623432</id><published>2008-01-05T17:35:00.001+11:00</published><updated>2008-01-05T17:38:20.263+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Princess Bride</title><content type='html'>&lt;p&gt;&lt;em&gt;The Princess Bride&lt;/em&gt;&lt;br/&gt;
&lt;span style="font-size: small;"&gt;S. Morgenstern&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-size: small;"&gt;'The Good Parts' Edition, Abridged by
  William Goldman&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;We all know the movie of course. And if you don't, go straight out and
see it right now. This is the version of the clasice tale that became
popular enough to get that movie made.&lt;/p&gt;

&lt;p&gt;It's most surprising to see how close to the abridgement the movie
managed to stay. I guess being abridged by the same guy as who wrote
the screenplay to 'Butch Cassidy and the Sundance Kid' would help.&lt;/p&gt;

&lt;p&gt;And that's something I didn't know before reading this book. Learning
the background is the best reason for reading this - did you know: the
legend about Goldman reading this to his daughters is not true? He
didn't have any daughters, just a son. Did you know: Morgenstern
actually wrote 'The Princess Bride' as a satire of royalty? By filling
the backstory of the the writing and the history of the original you
do begin to understand some of the controversy over the abridgement
and why Stephen King got involved in the abridgement of the sequel.&lt;/p&gt;

&lt;p&gt;I was particularly inspired to read this by seeing the movie
'Stardust' - also a fairly corny fantasy story, also adapted from a
novel. It has a very similar feel: a really traditional storyline, but
then told in this slightly mocking, ironic style. It even includes
some unusual and unexpected characters.&lt;/p&gt;

&lt;p&gt;Neil Gaiman (the author of 'Stardust') was inspired by something, I
suspect. Which  also brings me to: If you like fantasy, but are maybe
a little burned out on the genre, or if you just plain like fantasy,
then do yourself a favour and read something by Neil Gaiman.&lt;/p&gt;

&lt;p&gt;And of course 'The Princess Bride.' All will then become clear...&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4673234293199623432?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4673234293199623432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4673234293199623432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4673234293199623432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4673234293199623432'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/princess-bride.html' title='The Princess Bride'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5927001522698883274</id><published>2008-01-04T20:29:00.001+11:00</published><updated>2008-01-05T01:25:30.286+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>New Years Eve 2007</title><content type='html'>&lt;p&gt;
We moved to Sydney at the beginning of 2007. This city is quite
renowned for a reasonably good fireworks show on a pretty nice harbour
for New Year's Eve, and as everyone agreed that you need to spend your
first Sydney New Year's down on the harbour, that's where we went.
&lt;/p&gt;

&lt;p&gt;
We got to Milson's Point at about 9pm, but still managed to get a
pretty good spot right on the water with views of the bridge, the
Opera House and the city.
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
   href="http://lh4.google.com/giles.alexander/R33zcYLJU0I/AAAAAAAAAMI/o8D0j6n2MX4/IMG_3044.jpg"&gt;
  &lt;img style="display:block; margin:0px auto 10px;
	      text-align:center; cursor:hand;"
       src="http://lh4.google.com/giles.alexander/R33zcYLJU0I/AAAAAAAAAMI/o8D0j6n2MX4/IMG_3044.JPG?imgmax=400"
       alt="IMG_3044.JPG" border="0" /&gt;
&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
   href="http://lh4.google.com/giles.alexander/R33zpYLJU1I/AAAAAAAAAMQ/f9-MIuSZSmE/IMG_3039.JPG?imgmax=800"&gt;
  &lt;img style="display:block; margin:0px auto 10px;
	      text-align:center; cursor:hand;"
       src="http://lh4.google.com/giles.alexander/R33zpYLJU1I/AAAAAAAAAMQ/f9-MIuSZSmE/IMG_3039.JPG?imgmax=400"
       alt="IMG_3039.JPG" border="0" /&gt;
&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
   href="http://lh6.google.com/giles.alexander/R330I4LJU2I/AAAAAAAAAMY/BVjT0Hwq-mA/IMG_3051.JPG?imgmax=800"&gt;
  &lt;img style="display:block; margin:0px auto 10px;
	      text-align:center; cursor:hand;"
       src="http://lh6.google.com/giles.alexander/R330I4LJU2I/AAAAAAAAAMY/BVjT0Hwq-mA/IMG_3051.JPG?imgmax=400"
       alt="IMG_3051.JPG" border="0" /&gt;
&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch (e) {}"
   href="http://lh3.google.com/giles.alexander/R330OILJU3I/AAAAAAAAAMg/Z3vnAPknv8Y/IMG_3042.JPG?imgmax=800"&gt;
  &lt;img style="display:block; margin:0px auto 10px;
	      text-align:center; cursor:hand;"
       src="http://lh3.google.com/giles.alexander/R330OILJU3I/AAAAAAAAAMg/Z3vnAPknv8Y/IMG_3042.JPG?imgmax=400"
       alt="IMG_3042.JPG" border="0" /&gt;
&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch (e) {}"
   href="http://lh3.google.com/giles.alexander/R330WILJU4I/AAAAAAAAAMo/NH0m-HCXxnQ/IMG_3060.JPG?imgmax=800"&gt;
  &lt;img style="display:block; margin:0px auto 10px;
	      text-align:center; cursor:hand;"
       src="http://lh3.google.com/giles.alexander/R330WILJU4I/AAAAAAAAAMo/NH0m-HCXxnQ/IMG_3060.JPG?imgmax=400"
       alt="IMG_3060.JPG" border="0" /&gt;
&lt;/a&gt;

&lt;p&gt;
Getting back onto the train to get home was... interesting. Maybe a
rave at Bondi, next time?
&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5927001522698883274?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5927001522698883274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5927001522698883274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5927001522698883274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5927001522698883274'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2008/01/new-years-eve-2007.html' title='New Years Eve 2007'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3577561350823526735</id><published>2007-11-27T22:56:00.001+11:00</published><updated>2007-11-27T22:57:29.161+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>One Computer</title><content type='html'>&lt;blockquote&gt;
  &lt;p&gt;Thomas Watson from IBM said that he could foresee a need for perhaps
  five computers worldwide, and we now know that that figure was wrong,
  because he overestimated by four.
  - &lt;a href="http://www.shirky.com/writings/napster_speech2.html"&gt;Clay Shirky&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is only one computer in the world now, and that computer is the
World Wide Web. Developers must know that, understand that and believe
that.&lt;/p&gt;

&lt;p&gt;Software does not matter unless it is written to run on that one
computer. Know that too.&lt;/p&gt;

&lt;p&gt;I have been saying this for awhile now, and some people have had some
trouble understanding what I mean. I am not saying that the only thing
that is to be written must be web applications. What I am trying to
say is that if you are writing software it must be able to be used by
applications and software that does run on the Web.&lt;/p&gt;

&lt;p&gt;If your software does not, then it will simply be ignored. That's not
malicious or intended as a criticism of your code, I'm sure it's very
good. Think about it this way: as OS/2 faded away any software that
only ran on OS/2 simply stopped mattering. This is just happening
again, except all operating systems are fading away, replaced with
that one computer.&lt;/p&gt;

&lt;p&gt;So, if you have some amazing idea for writing some beautiful video
processing code in the current functional-language-of-the-moment, you
must have a plan for making that code useful to the web otherwise no
one will ever use your code.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3577561350823526735?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3577561350823526735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3577561350823526735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3577561350823526735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3577561350823526735'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/11/one-computer.html' title='One Computer'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-2037358292206293509</id><published>2007-11-27T22:27:00.001+11:00</published><updated>2007-11-28T10:34:25.530+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>Positive Change</title><content type='html'>&lt;p&gt;There was a federal election in Australia, just last weekend: the 24th
of November. This election went a lot better than the last few years
worth of elections. &lt;a href="http://en.wikipedia.org/wiki/John_Howard"&gt;John Howard&lt;/a&gt; finally lost. After 11
years in power and four election victories against either ineffective
or insane Labor opposition, the mean, evil little troll has finally
been ejected from power.&lt;/p&gt;

&lt;p&gt;It was very satisfying to also see him so thoroughly ejected from
power: only the second sitting prime minister to lose his seat. Ahhh...&lt;/p&gt;

&lt;p&gt;And Australia can now try to once again become a better place to live.&lt;/p&gt;

&lt;p&gt;There has been much discussion over why Howard deserved to lose. Many
have correctly pointed out that for all his claims he was not a
leader who championed much reform; that the continuous 11 years of
economic growth was really part of a longer 16 years of growth started
under the previous &lt;a href="http://en.wikipedia.org/wiki/Paul_Keating#Prime_Minister_1991-96"&gt;Labor government&lt;/a&gt; due to actual economic reforms;
that he no longer offered any kind of vision for the future of
Australia; that his threat to hand over to &lt;a href="http://en.wikipedia.org/wiki/Peter_Costello"&gt;Peter Costello&lt;/a&gt;
was seen as just that: a threat; that it was just his 'turn' to go.&lt;/p&gt;

&lt;p&gt;For me, while all of those (except the last) are true, none come close
to the real reason why I have always been adamantly against Howard,
and why I am particularly happy that he has now been voted out.&lt;/p&gt;

&lt;p&gt;Howard was a leader who created a government of isolation, selfishness
and meanness. And of course this sort of attitude at the level of the
federal government can't help but affect the entire shape and
direction of Australian society.&lt;/p&gt;

&lt;p&gt;Consider a handful of events under Howard's watch:

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Pauline_Hanson"&gt;Pauline Hanson&lt;/a&gt; spewed her racist, xenophobic vitriol
without any form of condemnation from the government, permanently
damaging our image and reputation throughout Asia.&lt;/li&gt;
&lt;li&gt;Refugees aboard the &lt;a href="http://en.wikipedia.org/wiki/MV_Tampa"&gt;MV Tampa&lt;/a&gt; were prevented from
entering the country, extending our damaged reputation to the entire
world.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://en.wikipedia.org/wiki/Goods_and_Services_Tax_%28Australia%29"&gt;GST&lt;/a&gt;, a fundamentally inequitable tax hated by both
small businesses and the poor alike, was introduced. When there was
apparently no need as all the earnings were returned as tax cuts.&lt;/li&gt;
&lt;li&gt;Children nearly &lt;a href="http://en.wikipedia.org/wiki/Children_Overboard_Affair"&gt;drowning&lt;/a&gt; while on their way to the
Australia was used as a wedge to further incite anger against
refugees.&lt;/li&gt;
&lt;li&gt;A deeply unpopular &lt;a href="http://en.wikipedia.org/wiki/Iraq_War"&gt;war&lt;/a&gt;
 was started with the sole
justification of supporting George W. Bush.&lt;/li&gt;
&lt;li&gt;Tax cuts were the sole mechanism of delivering benefits to the
population: a mechanism that always favours the rich over the poor.&lt;/li&gt;
&lt;li&gt;University educations became a mechanism to turn a profit.&lt;/li&gt;
&lt;li&gt;The enormous earnings from the global resources boom was squandered
without any investment in social services.&lt;/li&gt;
&lt;li&gt;The Australian republic movement was deeply damaged.&lt;/li&gt;
&lt;li&gt;There was absolutely zero progress on Aboriginal reconciliation:
capped with the 'intervention.' Itself worryingly reminiscent of the
Stolen Generation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, this was a government of the mean to benefit the
rich. Under Howard and his cronies Australia became a more selfish
country, a more racist country, a country of people who would not do
something just because it was the right thing to do.&lt;/p&gt;

&lt;p&gt;I was always against Howard because of the damage I thought his
ideaology was doing to the fabric of our society. In the end, my
theory is that he lost because people finally saw him for what he
was. [WorkChoices] showed that he didn't really care about his
'battlers.' And also, I believe that people didn't want to be selfish
and scared anymore. The country wanted a more positive view of the
future. You can only be terrified of your neighbour for so long before
you decide that it's enough.&lt;/p&gt;

&lt;p&gt;It is interesting to see that others are also coming to this
conclusion. My fervent hope is that his legacy is seen for what it
really is. In the end, the country will be a better place without
him. Hopefully, it won't take too long for the damage to be repaired.&lt;/p&gt;

&lt;p&gt;Good riddance Howard, we're better off without you.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-2037358292206293509?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/2037358292206293509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=2037358292206293509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2037358292206293509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2037358292206293509'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/11/positive-change.html' title='Positive Change'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-2218041220032106086</id><published>2007-11-19T23:44:00.000+11:00</published><updated>2007-11-20T19:20:09.778+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Currying</title><content type='html'>&lt;p&gt;As a lazy functional language &lt;a href="http://www.haskell.org"&gt;Haskell&lt;/a&gt; has to
provide automatic currying of all functions. But once you've tried to
use a functional language that doesn't automatically curry you realise
this isn't just an implementation detail, it's a useful technique for
concisely implementing programs.&lt;/p&gt;

&lt;p&gt;but before describing how currying helps, what is it? Currying is a
concept from the analysis of mathematical functions. Say, you have a
function &lt;code&gt;f(a, b)&lt;/code&gt;, that takes two parameters and returns a
value. Currying reduces this to two functions: one that takes the
other parameter and returns the original value.&lt;/p&gt;

&lt;p&gt;That is, currying reduces functions parameter-by-parameter into other
functions - these new functions each take one less parameter, but
return a function, instead of a value, that then takes the remaining
parameters.&lt;/p&gt;

&lt;p&gt;For example: &lt;code&gt;f(a, b) = a + 2b&lt;/code&gt;. If this were curried with respect to
&lt;code&gt;a = 5, b = 10&lt;/code&gt;, then the function would be reduced as follows:&lt;/p&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 90%; background-color: rgb(230,
	    230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;&lt;code&gt;f(5, b) = 5 + 2b
        = f(b)
f(10) = 5 + 2 x 10
      = 25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And hopefully you noticed that halfway through that evaluation we
found a function over &lt;code&gt;b&lt;/code&gt; which had already had a value substituted
in for &lt;code&gt;a&lt;/code&gt;. This, by the way, is also an example of partial
evaluation. In fact, it's more an example of partial evaluation than
currying, as currying does &lt;strong&gt;not&lt;/strong&gt; require values for function
parameters.&lt;/p&gt;

&lt;p&gt;Anyway, that's a brief introduction to currying in maths, but I'm not
a mathematician so for some more (accurate) information try reading up
on &lt;a href="http://en.wikipedia.org/wiki/Combinatory_Logic"&gt;combinatory
logic&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, how does currying exhibit in Haskell? Function application is
treated as a special operation, distinct from calling a
function. Functions are applied from left to right, to the first
parameter, producing a new function that is applied to the second
parameter and so on. A Haskell function call like:&lt;/p&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 90%; background-color: rgb(230,
	    230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;&lt;code&gt;f 1 10 "Hello"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;is evaluated as if it's parenthesised like:&lt;/p&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 90%; background-color: rgb(230,
	    230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;&lt;code&gt;((f 1) 10) "Hello"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;If working from left to right each additional expression produces a
new valid expression, then does that mean we can leave off an
arbitrary number of of expressions from the right and still have a
valid expression? Yes, that's precisely true. In fact that would
actually be a function which could then be given a name and provided
with any number of values.&lt;/p&gt;

&lt;p&gt;And this is where currying really comes in use for expressing
code. Using the right functions and operations you can typically
define your own functions without naming any parameters.&lt;/p&gt;

&lt;p&gt;In particular, this dramatically reduces the number of anonymous
functions you need to declare. As opposed to Scheme, they become quite
rare.&lt;/p&gt;

&lt;p&gt;A Scheme implementation of &lt;code&gt;reverse&lt;/code&gt; could look something like:&lt;/p&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 90%; background-color: rgb(230,
	    230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;&lt;code&gt;(define (reverse lst)
  (define (r lst)
    (if (null? (cdr lst))
        (lambda (t) (cons (car lst) t))
        (lambda (t) ((r (cdr lst)) (cons (car lst) t)))))
  ((r lst) null))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;While an equivalent Haskell implementation could look like:&lt;/p&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 90%; background-color: rgb(230,
	    230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;&lt;code&gt;reverse lst = r lst []
  where
    r (h:[]) = (:) h
    r (h:hs) = r hs . (:) h
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Of course, in the languages' standard libraries these functions are
defined quite differently (Haskell's is only one line...) But this is
useful as those are equivalent implementations - Haskell's is shorter
only because it automatically curries.&lt;/p&gt;

&lt;p&gt;Finally, currying is required in Haskell because it's a lazy
language. The currying produces a train of anonymous functions - each
retained as a value. Arriving at a result when required is simply
achieved by evaluating those retained anonymous function values. But
only the minimum set that are actually required.&lt;/p&gt;

&lt;p&gt;Understanding currying and being able to curry your own functions is
your head is a fundamental step to 'getting' functional programming.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-2218041220032106086?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/2218041220032106086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=2218041220032106086' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2218041220032106086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2218041220032106086'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/11/currying.html' title='Currying'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-2989272476005750926</id><published>2007-11-19T19:59:00.001+11:00</published><updated>2007-11-19T22:25:03.449+11:00</updated><title type='text'>Bear With Me...</title><content type='html'>&lt;p&gt;Now that I'm using some proper tools for my blog editing I'm going
back through my old posts making sure the formatting and HTML are
correct. In particular, I've turned off the Blogger setting to do
magic with line breaks, and instead I'm manually
inserting &lt;code&gt;&amp;lt;br/&amp;gt;&lt;/code&gt;'s where I want them to be.&lt;/p&gt;

&lt;p&gt;This is better for my general OCD nature regarding all forms of code
I write, and I hope my blog will look a bit better too. Please bear
with me as all my posts slowly get cleaned up...&lt;/p&gt;

&lt;p&gt;Oh, and if there are any other Mac Emacs users out there who are
interested in my little
&lt;a href="http://overwatering.blogspot.com/2007/11/local-editing.html"&gt;tool&lt;/a&gt;,
send me an email and I'll try to arrange to share it.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-2989272476005750926?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/2989272476005750926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=2989272476005750926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2989272476005750926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2989272476005750926'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/11/bear-with-me.html' title='Bear With Me...'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3360028748910222292</id><published>2007-11-18T19:36:00.001+11:00</published><updated>2007-11-19T22:24:26.583+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Local Editing</title><content type='html'>I was never entirely happy with using the Blogger editing box in a web
browser for an entire, long post. It's in a browser, where the
slightest click or accidental action could cause the post to be
lost. Plus, all my blog posts are now stored on Google's server. Call
me old-fashioned, but I like my work to be on my computer.

&lt;br/&gt;
&lt;br/&gt;

Plus, I'm an &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt;
user, I want to edit my work in that editor/operating
system/religion. Call me &lt;b&gt;very&lt;/b&gt; old-fashioned...

&lt;br/&gt;

Well, I've finally found a solution. The blog editing software from
Red
Sweater, &lt;a href="http://www.red-sweater.com/marsedit/"&gt;MarsEdit&lt;/a&gt;,
will quite happily deal with blogs on Blogger: downloading old posts
and uploading new ones, unlilke some other blogging clients I've
tried.

&lt;br/&gt;
&lt;br/&gt;

Though it has the ability to launch other editors, like TextMate, to
edit posts this does not work immediately with Emacs. MarsEdit doesn't
ever notice that Emacs eventually closes the file. The MarsEdit
developer was very helpful. He pointed me to a page describing what
MarsEdit is waiting for, and after a bit of Cocoa hacking I can now
edit my posts in Emacs. Woohoo!

&lt;br/&gt;
&lt;br/&gt;

Well, that's assuming this post appears OK...

&lt;br/&gt;
&lt;br/&gt;

And as an aside, I'm pretty impressed with Xcode 3.0. It's got some
pretty nice features: the purtiest were these colourful labels that
appear directly in your source marking compiler errors and warnings.

&lt;br/&gt;
&lt;br/&gt;

Any way, assuming this appears correctly, I'll be buying MarsEdit,
switching to that for blogging, and you should see a lot more posts
out of me in the future.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3360028748910222292?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3360028748910222292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3360028748910222292' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3360028748910222292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3360028748910222292'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/11/local-editing.html' title='Local Editing'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6178810083969969099</id><published>2007-09-22T17:24:00.000+10:00</published><updated>2007-11-19T22:23:03.868+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>I Don't Get Jeff Atwood</title><content type='html'>I read quite a few blogs, on different topics, but there is
(obviously) a whole bunch of computing ones in there. I read some of
the big name ones, like &lt;a href="http://www.joelonsoftware.com/"&gt;Joel
on Software&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/oldnewthing/"&gt;The
Old New Thing&lt;/a&gt;, as well as some that could possibly be regarded as
second-tier in the blagosphere
like &lt;a href="http://intertwingly.net/blog/"&gt;Intertwingly&lt;/a&gt;
and &lt;a href="http://steve-yegge.blogspot.com/"&gt;Steve Yegge&lt;/a&gt;.

&lt;br/&gt;
&lt;br/&gt;

But one big name blog I don't read
is &lt;a href="http://www.codinghorror.com/blog/"&gt;Coding Horror&lt;/a&gt;, by
Jeff Atwood.

&lt;br/&gt;
&lt;br/&gt;

His posts appear pretty often
on &lt;a href="http://programming.reddit.com"&gt;programming.reddit.com&lt;/a&gt;
or &lt;a href="http://digg.com"&gt;digg.com&lt;/a&gt;, friends (who I respect)
read him and recommend his articles, but I just can't figure him
out. Sometimes his articles manage to completely miss the point, and
other times he reasonably succinctly describes a simple concept.

&lt;br/&gt;
&lt;br/&gt;

For example, the
post &lt;a href="http://www.codinghorror.com/blog/archives/000814.html"&gt;&lt;span class="Apple-style-span"
style="font-style: italic;"&gt;Building a Computer the Google
Way&lt;/span&gt;&lt;/a&gt; contains an historically interesting photo of Google's
first server. This server is interesting because it is fairly clearly
a cobbled together set of home-built servers with
some &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;custom
designed&lt;/span&gt; hardware. These servers were built by Google from the
PCB under the motherboard on up. Sure, they used commodity parts, but
I can guarantee there are some unique pieces in there. Probably in the
vicinity of the interconnects.

&lt;br/&gt;
&lt;br/&gt;

This is an interesting example of how a successful company will
control everything that possibly relates to their business. You can't
afford to rely on the off-the-shelf components for anything that might
be technically critical. For Google, indexing and querying speed were
hyper-important. So they built their own hardware. Amazon did
something similar when they wrote their
own &lt;a href="http://en.wikipedia.org/wiki/Obidos_%28software%29"&gt;web
server&lt;/a&gt;. Always remember these example when you're railing
against &lt;a href="http://en.wikipedia.org/wiki/Not_Invented_Here"&gt;Not-Invented-Here
syndrome&lt;/a&gt;.

&lt;br/&gt;
&lt;br/&gt;

Unfortunately, Coding Horror proceeds to use the Google example as
justification for why every good programmer should build their own PC
instead of just buying one from Dell. I'm sorry, but I can't see how
reading specs on PCI slot counts on a motherboard are going to lead to
building the kind of server that could support Google's load, or
perform their proprietary indexing any faster.

&lt;br/&gt;
&lt;br/&gt;

However, on other occasions, Coding Horror does actually manage to
explain concepts accurately and clearly. Though I'm usually left
thinking, this only occurred to you now?
See &lt;a href="http://www.codinghorror.com/blog/archives/000957.html"&gt;&lt;span class="Apple-style-span"
style="font-style: italic;"&gt;Everything is Fast For Small
n&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://www.codinghorror.com/blog/archives/000953.html"&gt;&lt;span class="Apple-style-span"
style="font-style: italic;"&gt;You're Probably Storing Passwords
Incorrectly&lt;/span&gt;&lt;/a&gt;.

&lt;br/&gt;
&lt;br/&gt;

He does, however, write well. And there lies a real skill. If only he
could be brought up to speed on some actual modern computer science
and software engineering concepts, we might have something.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6178810083969969099?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6178810083969969099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6178810083969969099' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6178810083969969099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6178810083969969099'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/09/i-dont-get-jeff-atwood.html' title='I Don&amp;#39;t Get Jeff Atwood'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3706275437476567845</id><published>2007-09-03T17:03:00.000+10:00</published><updated>2007-11-19T22:20:33.574+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><title type='text'>An Effective Use of Limited Transport Infrastructure</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e)
{}"
href="http://2.bp.blogspot.com/_fhKywsFe6TU/RtuyLYuvYJI/AAAAAAAAAL8/_cplpw2UhKw/s1600-h/apec-bus.jpg"&gt;&lt;img style="display:block;
margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;"
src="http://2.bp.blogspot.com/_fhKywsFe6TU/RtuyLYuvYJI/AAAAAAAAAL8/_cplpw2UhKw/s400/apec-bus.jpg"
border="0" alt="" id="BLOGGER_PHOTO_ID_5105870511241388178" /&gt;&lt;/a&gt;

&lt;br/&gt;

I wonder if I'll be arrested as a subversive for posting this?
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3706275437476567845?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3706275437476567845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3706275437476567845' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3706275437476567845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3706275437476567845'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/09/effective-use-of-limited-transport.html' title='An Effective Use of Limited Transport Infrastructure'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fhKywsFe6TU/RtuyLYuvYJI/AAAAAAAAAL8/_cplpw2UhKw/s72-c/apec-bus.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-7255976277788571570</id><published>2007-09-03T14:45:00.000+10:00</published><updated>2007-11-19T22:19:32.359+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='scheme'/><title type='text'>Method Dispatch and Scheme</title><content type='html'>As I work
on &lt;a href="http://overwatering.blogspot.com/2007/08/what-is-shrew.html"&gt;Shrew&lt;/a&gt;
and attempt to learn more
about &lt;a href="http://overwatering.blogspot.com/2007/08/thoughts-on-scheme.html"&gt;Scheme&lt;/a&gt;,
I've been doing some reading. And in one of my books I had one of
those 'Aha!' moments where I really saw the benefit in the Scheme way
of doing things.

&lt;br/&gt;
&lt;br/&gt;

In object-oriented languages there are two approaches to dispatching
methods.

&lt;br/&gt;

&lt;ul&gt;

&lt;li&gt;&lt;span style="font-weight:
bold;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Message_passing#OOP"&gt;Message
Passing&lt;/a&gt;&lt;/span&gt;: Objects are regarded as actors. Method call is
treated as sending messages to those actors. Method dispatch is
therefore determined solely based upon the type of the receiver of the
method, the types of any arguments is immaterial. SmallTalk typifies
this style. C++, Java and most other OO languages have adopted this
style (badly.) This is also known as single-dispatch.&lt;/li&gt;

&lt;li&gt;&lt;span style="font-weight:
bold;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Multiple_dispatch"&gt;Multi-methods&lt;/a&gt;&lt;/span&gt;:
Methods and the objects to which they can be applied are regarded as a
cartesian product: objects don't own methods and methods don't own
objects. Method dispatch is therefore determined from the type of all
the arguments
equally. &lt;a href="http://en.wikipedia.org/wiki/CLOS"&gt;CLOS&lt;/a&gt; uses
this style. I am not aware of any other widely used languages that
also use multi-methods.
&lt;/li&gt;

&lt;/ul&gt;

The book I am currently reading laid out some Scheme code that showed
how to implement multi-methods, and then followed it up with some code
that implemented message passing. In both cases the code was extremely
simple and easy to understand: the basics for two object-oriented
approaches were right there on the page.

&lt;br/&gt;
&lt;br/&gt;

And most interestingly, there was no reason why both systems couldn't
be used on different objects in the same program.

&lt;br/&gt;
&lt;br/&gt;

The book is about general computer science concepts, so it doesn't
actually point out what it has just described, and nor does it provide
a complete implementation of an object system (&lt;span style="font-size:
small;"&gt;yet...&lt;/span&gt;) however it is interesting to see such a
fundamental part of a object system in so few lines of code. It is the
nature of Scheme that makes it possible to implement things that other
languages regard as 'part of the language' in your own programs.

&lt;br/&gt;
&lt;br/&gt;

It is not possible to do this in Java; it is not possible in C++, not
even
with &lt;a href="http://en.wikipedia.org/wiki/Template_metaprogramming"&gt;template
meta-programming&lt;/a&gt;; and it isn't even in possible in
Haskell&lt;a href="#method-dispatch-note1"&gt;*&lt;/a&gt;.

&lt;br/&gt;
&lt;br/&gt;

Now, that's not to say that having both multi-method and message
passing dispatch is itself such a killer feature. But it's going to be
kind of hard to beat a language to which both of these things can be
added so simply.

&lt;br/&gt;
&lt;br/&gt;

&lt;span style="font-size:
x-small;"&gt;&lt;a name="method-dispatch-note1"&gt;*&lt;/a&gt; Of course, via
differing mechanisms of varying degrees of pain, something like
multi-methods could be added to all of these languages. Here I am
talking about a simple, transparent at both caller and callee
technique for achieving multi-methods and message passing.&lt;/span&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-7255976277788571570?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/7255976277788571570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=7255976277788571570' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7255976277788571570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7255976277788571570'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/09/method-dispatch-and-scheme.html' title='Method Dispatch and Scheme'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4219961362544540503</id><published>2007-09-03T14:05:00.000+10:00</published><updated>2007-11-19T22:17:11.781+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><title type='text'>Original Policy</title><content type='html'>&lt;div&gt;Has a century
of &lt;a href="http://overwatering.blogspot.com/2007/02/compulsory-reading.html"&gt;compulsory
voting&lt;/a&gt; and a decade
of &lt;a href="http://overwatering.blogspot.com/2007/08/v-for-vendetta.html"&gt;international
neo-conservatism&lt;/a&gt; finally killed off the last vestiges of original
thought in governmental policy? It certainly feels that way.&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;As Australia approaches a federal election both major parties are
competing based almost exclusively on policies either of cutting taxes
in some form or giving money away in some other form. Is there no
other mechanism of directing society? Surely there must be.
&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;Look at the first home buyers grant. Instead of just cutting the
price of a home, how about some other means of encouraging saving that
isn't giving away the beginning of bank account? Where is the
inspirational leadership and original thinking that gave us
the &lt;a href="http://en.wikipedia.org/wiki/Australian_Industrial_Relations_Commission"&gt;Industrial
Relations Commission&lt;/a&gt;;
the &lt;a href="http://en.wikipedia.org/wiki/Truth_and_Reconciliation_Commission"&gt;Truth
and Reconciliation Commission&lt;/a&gt;;
the &lt;a href="http://en.wikipedia.org/wiki/Marshall_Plan"&gt;Marshall
Plan&lt;/a&gt;?&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;That's the sort of thing I'd like to vote for.&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;In my other world of software development, this 'just give money
away' approach is known informally
as &lt;a href="http://www.joelonsoftware.com/items/2006/08/09.html"&gt;Econ
101 Management&lt;/a&gt;; as in it follows an economic model informed by
only an introductory understanding of macro-economics.&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;I'd like to hope that our elected leaders knew a little more. Now
please go away and demonstrate that.&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4219961362544540503?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4219961362544540503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4219961362544540503' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4219961362544540503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4219961362544540503'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/09/original-policy.html' title='Original Policy'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5123753714400797661</id><published>2007-08-20T22:54:00.000+10:00</published><updated>2007-11-19T22:14:14.267+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Megadata?</title><content type='html'>So the big deal is mashups and the massive amounts of data collected
by the services being mashed. And this is becoming known as
'&lt;a href="http://bitworking.org/news/159/Megadata-Follow-up"&gt;Megadata&lt;/a&gt;'. Lots
and lots you can do when you have all this attention data, the
activities of your users, and then when you combine that with what
they do on other servers... Wow! The things you can do for your users
really is pretty damn impressive.

&lt;br/&gt;
&lt;br/&gt;

Well, I was thinking today that with access to data across the
activities of individual citizens accurate taxation suddenly becomes
really, really easy. I bet you all just shuddered at the idea of the
government (pretty much any government) having access to all that,
right?

&lt;br/&gt;
&lt;br/&gt;

So, why are we so cool with random companies knowing?
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5123753714400797661?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5123753714400797661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5123753714400797661' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5123753714400797661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5123753714400797661'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/megadata.html' title='Megadata?'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4793196021621574861</id><published>2007-08-20T20:20:00.000+10:00</published><updated>2007-11-19T22:13:20.083+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><title type='text'>Graining and Cities</title><content type='html'>In his book &lt;span style="font-style: italic"&gt;The Timeless Way of
Building&lt;/span&gt;, Christopher Alexander states that people should work
where they live. I had some trouble with this at first as it's pretty
difficult to achieve. There aren't all that many good jobs, and the
chances of already living in the same area as the job are pretty low;
what are you supposed to do? Move?

&lt;br/&gt;
&lt;br/&gt;

In spite of this, I did keep reading. And Alexander does expand on the
idea some more.

&lt;br/&gt;
&lt;br/&gt;

The point is not to live in the exact same area as where you work, but
to work in an area you could imagine living and, as important, live in
an area you could imagine working. When you walk down the street you
need to see all the parts of life happening: you need to dodge prams,
see people eating and drinking, watch people in their offices as they
watch people lounging around in a park. You need to see kids streaming
home from school in the afternoon, you need to see the retired out
doing their shopping during the day.

&lt;br/&gt;
&lt;br/&gt;

And you need all this both where you live, and where you work. You
need to feel when you're spending those 40 hours a week away from your
home that you are still in a place that is someone's home. Seeing
those people and all the disparate things they do forms a connection
between you and them. If the place you work and the place you live
both have this, then you can easily transplant the connection from
home to work and vice versa.

&lt;br/&gt;
&lt;br/&gt;

There is a name for all this: community. Community requires all parts
of life: babies through to the elderly; workers, shops, services. And
if you're hiding away at work for 40 hours a week you tend to forget
that not only this is all going on, but also that all these different
kinds of people share your world with you.

&lt;br/&gt;
&lt;br/&gt;

This all comes down to graining. Think of it in terms of zoning. The
zones of use form grains within an area. In older areas of a city,
this graining will typically very fine. That is, you can walk a short
distance down a single street and pass houses, offices, cafes,
libraries, shops. In newer areas, the graining becomes larger, until
you reach the 60's ideal of a city composed of satellite towns: rings
of suburbs with a shopping/office district at the centre.

&lt;br/&gt;
&lt;br/&gt;

And in there, a community dies. Communities need people to spend time
with them to grow, if a significant chunk of a community's demographic
disappears for a big chunk of the day then it can't really
survive. Look for the fine graining, try to live and work there if you
can, but always enjoy the graining.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4793196021621574861?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4793196021621574861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4793196021621574861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4793196021621574861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4793196021621574861'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/graining-and-cities.html' title='Graining and Cities'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8366959097256795307</id><published>2007-08-19T22:25:00.000+10:00</published><updated>2007-11-19T22:12:09.757+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>V for Vendetta</title><content type='html'>&lt;span style="font-style: italic;"&gt;V for Vendetta&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-size:small;"&gt;Alan Moore &amp; David Lloyd&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

Another comic, though this one would definitely fit well within the
hazy definition of
a &lt;a href="http://en.wikipedia.org/wiki/Graphic_novel"&gt;graphic
novel&lt;/a&gt;. And this is what I was hoping to get when I started reading
comics. On the surface, it's a fairly straightforward tale of a
downtrodden society inspired to rise up and throw off their oppressors
by an enigmatic leader. But, it's just told so well, and being a comic
adds something quite different to the story. There are also enough new
angles, and the refusal to go with the obvious pay-off adds interest.

&lt;br/&gt;
&lt;br/&gt;

Compared to &lt;span style="font-style: italic;"&gt;The
Sandman&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;V for
Vendetta&lt;/span&gt; is a much more traditionally drawn comic; the panels
are all regular shapes, with a regular left-to-right/top-to-bottom
flow. And it just ain't anywhere near as purty: the colouring and
graphic detail just don't match the amazing art
of &lt;span style="font-style: italic;"&gt;Sandman&lt;/span&gt;. It does have a
very nice dark, brooding atmosphere, however.

&lt;br/&gt;
&lt;br/&gt;

&lt;span style="font-style: italic;"&gt;V&lt;/span&gt; was first conceived back in
1981, and then written and published over the remainder of the decade,
finally finishing up in 1989. My edition includes a short introduction
by Alan Moore, written in 1988. And this is an interesting comment on
those times and these. The 80's were a decade of conservative
dominance, particularly in the UK and US. Moore writes about the
Thatcher government doing everything it could to outlaw
homosexuality. Moore was feeling deeply disaffected with his home
country: he wanted to take his family and leave.

&lt;br/&gt;
&lt;br/&gt;

Now, (hopefully) coming to the end of another decade of worldwide
conservative dominance, there is some hope to be had here. Sure,
rights have been eroded and the world in general is now a less
trusting and friendly place. You may look at leaders and policies and
see just a bleak descent into a well of fear and anger.

&lt;br/&gt;
&lt;br/&gt;

But, we haven't gone that far backwards. Australia now has an openly
gay senator: &lt;a href="http://en.wikipedia.org/wiki/Bob_Brown"&gt;Bob
Brown&lt;/a&gt;. Try though the conservatives and neocons might, the world
will move forwards, and inevitably open up. The conservative decade is
coming to a close, and just maybe the next decade will be a world
better fit for everyone to live in.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8366959097256795307?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8366959097256795307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8366959097256795307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8366959097256795307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8366959097256795307'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/v-for-vendetta.html' title='V for Vendetta'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-732491349996165507</id><published>2007-08-19T12:32:00.000+10:00</published><updated>2007-11-19T22:10:47.063+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Feersum Endjinn</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Feersum Endjinn&lt;/span&gt;&lt;br/&gt;
&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Iain M. Banks&lt;/span&gt;&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;That's Iain &lt;span class="Apple-style-span" style="font-weight:
bold;"&gt;M.&lt;/span&gt; Banks the sci-fi writer, not Iain Banks the modern
literary fiction writer. It's actually the same guy, but he publishes
his sci-fi with the middle initial. I'm working my way randomly
through all of his sci-fi and I will probably try to read most of his
literary fiction as well. I'm yet to hit one, sci-fi or otherwise,
that I haven't enjoyed.&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;A friend warned me just before starting that this one was a
little heavy going, due to the phonetic pidgin. In the end, it wasn't
that bad. Not as bad as &lt;span class="Apple-style-span"
style="font-style: italic;"&gt;Cloud Atlas&lt;/span&gt;, but personally I don't
find pidgin that hard to read, others might so be warned.&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;Imagine a future where nothing goes particularly wrong for the
Earth and humanity. There is no apocalypse to be post-; technology
keeps advancing, absorbing more of the little things we need to do,
gently wrapping a comforting, protective blanket around
everything.&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;Now, project that world and the people living in it forwards
several hundred thousand, or possibly million, years...&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;And then something does go wrong.&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;&lt;span class="Apple-style-span" style="font-style:
italic;"&gt;Feersum Endjinn&lt;/span&gt; was published in 1994: I'd say that
aspects of the &lt;span class="Apple-style-span" style="font-style:
italic;"&gt;Matrix's&lt;/span&gt; depiction of the machine world inside the
machine are inspired by this book. Apparently, there is also some
question about whether this book is actually part of the world
of &lt;a href="http://en.wikipedia.org/wiki/The_Culture"&gt;the Culture&lt;/a&gt;,
from some of Iain M. Banks' other sci-fi novels, even though it isn't
identified as one. It seems that this probably isn't the case, due to
the back story surrounding &lt;span class="Apple-style-span"
style="font-style: italic;"&gt;Consider Phlebas&lt;/span&gt;, but this could be
read as a hypothetical explanation of how the Culture originally
formed.&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-732491349996165507?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/732491349996165507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=732491349996165507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/732491349996165507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/732491349996165507'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/blog-post.html' title='Feersum Endjinn'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1157324475984262434</id><published>2007-08-18T19:50:00.000+10:00</published><updated>2007-11-19T22:06:36.271+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='scheme'/><category scheme='http://www.blogger.com/atom/ns#' term='shrew'/><title type='text'>Thoughts on Scheme</title><content type='html'>There's nothing like writing a complex application in a language for
really learning it. I've been able to read and write small pieces of
Scheme for years. And I've known enough of the underpinnings of the
language to write a (very) small Scheme interpreter in the past. But,
part of the point of writing Shrew in Scheme as opposed to, say, Ruby
is to really learn the language.

&lt;br/&gt;
&lt;br/&gt;

I haven't been at it for long, but here are some random thoughts and
comments so far. Much of this will change as I figure out how to use
Scheme properly. These comments are also mainly a comparison of the
only other functional language I know
well: &lt;a href="http://haskell.org"&gt;Haskell&lt;/a&gt;.

&lt;br/&gt;

&lt;ul&gt;

&lt;li&gt;The syntax is not very clear: everything looks the same. This
prevents you from scanning the code to get a feel for what is
happening. The indentation helps, but fundamentally every operation is
just a parenthesized expression. I am certain that this is just
cultural, with more exposure I'll get better at reading; don't count
this as a negative.&lt;/li&gt;

&lt;li&gt;I really miss pattern matching. How can you program without it?
I'm going to have to look into destructuring-bind.&lt;/li&gt;

&lt;li&gt;Dynamic typing is sweet. As well as all the other benefits,
dynamic typing + modules = as much encapsulation as classes give you
in C++.&lt;/li&gt;

&lt;li&gt;The standard libraries are pretty paltry. The SRFIs add a lot, but
it's still nowhere near as rich as pretty much any other
language. Maybe I'll explore Common Lisp at some point.&lt;/li&gt;

&lt;li&gt;Currying is not just a implementation technicality, it's useful
for designing data structures. I miss currying as well.&lt;/li&gt;

&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1157324475984262434?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1157324475984262434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1157324475984262434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1157324475984262434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1157324475984262434'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/thoughts-on-scheme.html' title='Thoughts on Scheme'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6844343193315627162</id><published>2007-08-14T21:45:00.000+10:00</published><updated>2007-11-19T22:04:50.093+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='shrew'/><title type='text'>What is Shrew?</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Shrew"&gt;Shrew&lt;/a&gt;: a small
insectivorous, mammal; one of the descendents of the first mammals to
evolve. Related
to &lt;a href="http://en.wikipedia.org/wiki/Vole"&gt;voles&lt;/a&gt;
and &lt;a href="http://en.wikipedia.org/wiki/Hedgehog"&gt;hedgehogs&lt;/a&gt;. They
are not rodents, and are not in related to mice and rats.

&lt;br/&gt;
&lt;br/&gt;

It's also an animal name containing the letters S, R and W: I use
animal names for my project code names, and I needed this one to
contain those three letters. The R and W are for REST and Web Server
respectively, the S is for Scheme. I'll get to that later.

&lt;br/&gt;
&lt;br/&gt;

The idea of Shrew is to build a web server that makes the creation of
RESTful web services easy. Popular web servers are still designed as
file servers: a web server exposes a directory tree, and then allows
certain files within that tree to be executed on the server, to
generate the content to send to the client. This encourages (even
forces) web applications and services to be built around
files. RESTful services are supposed to built around resources. These
resources are meant to be the logical 'things' that exist in your
service: not files. You don't want to have ".aspx" or ".jsp" or ".php"
appearing in your resource URI. It should look something
like &lt;code&gt;/person/visit/730&lt;/code&gt;. And one of the rewriting modules
should not be how you have to get there.

&lt;br/&gt;
&lt;br/&gt;

Shrew will make resources the centre of an application or service. The
resources exposed will be listed and mapped onto a URI form, and also
a piece of code to handle that resource. Shrew will also make no
attempt to pretend that an application is not running over HTTP. All
request headers will be available to the application; the application
will be able to override the generation of response headers on a
response-by-response basis; the application will be able to specify
particular response codes.

&lt;br/&gt;
&lt;br/&gt;

Most importantly, dispatch of incoming requests will be performed not
just on the request URI, but also the request method: GET, POST, PUT
or DELETE.

&lt;br/&gt;
&lt;br/&gt;

The point of providing this level of control is to allow applications
to be properly RESTful. For example, look at the Etags header. When a
request for a URI is first served to a client a web server can
generate and attach an Etag header. If the client requests that
resource again, it can include the Etag header in the request. The
server can then use the received Etag to determine if the resource has
changed and needs to be re-sent. Sounds fantastic, right? No need to
re-generate a complex page on the server, or send down a large amount
of HTML. The server reduces its load, and the client can redisplay
faster. A popular web framework even automatically implements Etags
for you. Everyones' happy.

&lt;br/&gt;
&lt;br/&gt;

Not so fast. That popular web framework generates its Etags by taking
an MD5 hash of the page before sending it to the client. This requires
generating the full page, everytime. Even when it hasn't changed. It
saves the bandwidth, but not the server processing time. To do Etags
properly the application needs control of headers, it needs to be able
to match the response to a particular resource.

&lt;br/&gt;
&lt;br/&gt;

The web changes rapidly, there could be other valuable headers coming
soon, there could be interesting and unique ways of using existing
headers. Instead of trying to forsee all those cases, Shrew will
simply provide default implementations for headers, but allow an
application to override those.

&lt;br/&gt;
&lt;br/&gt;

Of course, there's more to web applications than requests and
responses. Part of the reason those rewriting solutions are
distasteful is that the generated pages needs to use URIs in the
rewritten space, not the developers directory space. Shrew will allow
resources to link to other resources, by name and id, generating the
correct URI at runtime.

&lt;br/&gt;
&lt;br/&gt;

Shrew will also include a library for writing markup. This will not be
template based. The markup will be written in a Shrew DSL and then
executed to produce the HTML. Inspired
by &lt;a href="http://code.whytheluckystiff.net/markaby/"&gt;Markaby&lt;/a&gt;. This
markup will be renderable as HTML for serving to a browser, and also
as XML for serving to a web service client. This will probably require
some hinting, as large parts of the HTML will not be required in a XML
view. It's going to be interesting to get that to work...

&lt;br/&gt;
&lt;br/&gt;

Finally, in
my &lt;a href="http://overwatering.blogspot.com/2007/08/new-project-shrew.html"&gt;introduction
to Shrew&lt;/a&gt; I mentioned some unusual technology choices: the whole
thing will be written in Scheme. This is the other half of Shrew as
learning project. As well as really getting a handle on REST, I want
to learn Scheme. I can read Scheme and write small projects in Scheme,
but there's nothing like writing something large for really getting a
feel for a language.

&lt;br/&gt;
&lt;br/&gt;

In particular, Scheme's killer feature to me is 'data is code.' Not
that code is data, nor the macro system, nor that it's a functional
language. I'm really interested in exploring the data is code concept,
and a web application/service framework seems like a good place to try
that.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6844343193315627162?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6844343193315627162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6844343193315627162' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6844343193315627162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6844343193315627162'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/what-is-shrew.html' title='What is Shrew?'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1931760498530743803</id><published>2007-08-13T19:50:00.000+10:00</published><updated>2007-11-19T22:03:23.222+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><title type='text'>The Clown House</title><content type='html'>Over
in &lt;a href="http://maps.google.com.au/maps?f=q&amp;hl=en&amp;amp;geocode=&amp;q=darlinghurst+nsw+2010&amp;amp;amp;amp;amp;ie=UTF8&amp;ll=-33.880748,151.21891&amp;amp;spn=0.038479,0.051498&amp;z=14&amp;amp;iwloc=addr&amp;om=1"&gt;Darlinghurst&lt;/a&gt;,
on the corner
of &lt;a href="http://maps.google.com.au/maps?f=q&amp;amp;amp;amp;amp;hl=en&amp;geocode=&amp;amp;q=Bourke+St+%26+Stanley+St,+Darlinghurst+NSW+2010,+Australia&amp;sll=-33.879825,151.21956&amp;amp;sspn=0.019239,0.025749&amp;ie=UTF8&amp;amp;amp;amp;amp;cd=1&amp;ll=-33.875386,151.219575&amp;amp;spn=0.00962,0.012875&amp;z=16&amp;amp;amp;amp;amp;iwloc=addr&amp;om=1"&gt;Bourke
and Stanley Sts&lt;/a&gt;, there is an old, very run-down, abandoned
terrace. Fortunately, though it is essentially a ruin, it has not been
knocked down. If you happen to approach this house from the back, by
walking up Stanley St, there's a sight you can catch over the back
fence.

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://2.bp.blogspot.com/_fhKywsFe6TU/Rr7P5h07tmI/AAAAAAAAALQ/UuPlZFmn0Iw/s1600-h/IMG_2508.JPG"&gt;&lt;img style="display:block;
margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;"
src="http://2.bp.blogspot.com/_fhKywsFe6TU/Rr7P5h07tmI/AAAAAAAAALQ/UuPlZFmn0Iw/s400/IMG_2508.JPG"
border="0" alt="" id="BLOGGER_PHOTO_ID_5097740415469860450"
/&gt;&lt;/a&gt;

&lt;div&gt;I've no idea who painted it, or how long it's been there. I like
it; it's nice to see these random expressions of art hidden away in
the middle of the city.&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1931760498530743803?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1931760498530743803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1931760498530743803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1931760498530743803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1931760498530743803'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/clown-house.html' title='The Clown House'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fhKywsFe6TU/Rr7P5h07tmI/AAAAAAAAALQ/UuPlZFmn0Iw/s72-c/IMG_2508.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3758096914227193487</id><published>2007-08-12T18:50:00.000+10:00</published><updated>2007-11-19T22:01:16.555+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='shrew'/><title type='text'>The New Project: Shrew</title><content type='html'>I've been reading and thinking about RESTful web applications and
services quite a bit recently. The last large web application I wrote
evolved into a RESTful web application: readable, bookmarkable URLs;
resources with unique addresses; and alternative renderings of a
resource depending on the request.

&lt;br/&gt;
&lt;br/&gt;

It would have been a short step to complete this evolution and then
expose the programmable interface as RESTful as well. This all
happened without being aware of REST: it just seemed like the logical
way to design a web application.

&lt;br/&gt;
&lt;br/&gt;

REST is starting to make a big splash now. Web services have been
around for a few years, and many systems have been built upon
them. Beyond the architectural considerations, it seems that the main
differences between the two approaches is that it is easier to write
clients for a RESTful service, and it is easier to write the service
using SOAP.

&lt;br/&gt;
&lt;br/&gt;

Up until recently most of the development of web services has been for
systems that do not cross organisation boundaries. Therefore, the
consumer of the web service has usually been the programmer who wrote
it. Or, if not actually the same programmer, then a programmer in the
same organisation. SOAP works well in this environment as one
development tool can be mandated and this tool can generate all the
painful code required to consume a SOAP service, and when the SOAP
service changes every single consumer can be informed.

&lt;br/&gt;
&lt;br/&gt;

However, now there are many services being exposed on the Internet
that provide useful data. Services such as Google Maps. It is becoming
more common to write applications that consume a handful of services
from different organisations. Suddenly, it is more important for the
client to be robust and easy to write.

&lt;br/&gt;
&lt;br/&gt;

Unfortunately though, it is still much easier to write the service
using SOAP than REST. Most web servers don't deal well with the
concept of the URI not referring to an actual file on disk, and there
aren't many frameworks that put resources rather pages at the
centre. There seems to a hole in the eco-system here.

&lt;br/&gt;
&lt;br/&gt;

I'm going to take a shot at filling it. For this project, as I'll be
doing this for interest and to learn, I'm going to talk about what I
do as I do it. Ruby On Rails will ultimately provide the full RESTful
service framework that the world needs; I'm not expecting to make
money off this project. No need to hide anything.

&lt;br/&gt;
&lt;br/&gt;

I've started writing some code, and planning a simple design. I'm
going to make some apparently unusual technology choices, but this is
for my learning. I'll talk about the technology and design in some
upcoming posts.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3758096914227193487?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3758096914227193487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3758096914227193487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3758096914227193487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3758096914227193487'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/new-project-shrew.html' title='The New Project: Shrew'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-6046972028245325279</id><published>2007-08-10T21:35:00.000+10:00</published><updated>2007-11-19T22:00:15.654+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Sandman, Vol 2: The Doll's House</title><content type='html'>&lt;span style="font-style: italic;"&gt;The Sandman, Vol 2: The Doll's House&lt;/span&gt;
&lt;br/&gt;
&lt;span style="font-size:85%;"&gt;Neil Gaiman&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

Second volume of trade paperback editions of the Sandman comic series
from the 90's. Clearly I liked the first one enough to keep going. And
this one has kept me interested; I will be reading the third
one. Unfortunately I still don't know how to write about comics very
well...

&lt;br/&gt;
&lt;br/&gt;

Anyway, after this one I'll be reading &lt;span style="font-style:
italic;"&gt;V for Vendetta&lt;/span&gt; by Alan Moore and then probably
onto &lt;span style="font-style: italic;"&gt;The League of Extraordinary
Gentleman&lt;/span&gt;, also by Alan Moore. We gave my younger brother Frank
Miller's Batman, The Dark Knight books. I'll be hitting him up for
some comments, and maybe reading those as well.

&lt;br/&gt;
&lt;br/&gt;

One thing I can say, comics take mere minutes to read. Grab a few and
just churn through them, no long term commitment, no worry that you'll
spend hours, days, weeks reading a book. A good way to just fill in
some time with some (very) light escapism.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-6046972028245325279?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/6046972028245325279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=6046972028245325279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6046972028245325279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/6046972028245325279'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/sandman-vol-2-dolls-house.html' title='The Sandman, Vol 2: The Doll&amp;#39;s House'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-4263682341118694121</id><published>2007-08-09T21:30:00.000+10:00</published><updated>2007-11-19T21:59:21.213+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cats'/><title type='text'>A Subtle Request</title><content type='html'>A few weeks ago, on the 5th of July, we came home to find the
following subtle request:

&lt;br/&gt;

&lt;div align="center"&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://3.bp.blogspot.com/_fhKywsFe6TU/RrVFEB07tlI/AAAAAAAAALI/ICESD3DZRFk/s1600-h/IMG_2648.JPG"&gt;&lt;img style="margin:
0pt 10px 10px 0pt; float: left; cursor: pointer;"
src="http://3.bp.blogspot.com/_fhKywsFe6TU/RrVFEB07tlI/AAAAAAAAALI/ICESD3DZRFk/s320/IMG_2648.JPG"
alt="" id="BLOGGER_PHOTO_ID_5095054488951830098" border="0"
/&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();}
catch(e) {}"
href="http://3.bp.blogspot.com/_fhKywsFe6TU/RrVEgB07tkI/AAAAAAAAALA/eVaLptTV9q4/s1600-h/IMG_2649.JPG"&gt;&lt;img style="margin:
0pt 10px 10px 0pt; cursor: pointer;"
src="http://3.bp.blogspot.com/_fhKywsFe6TU/RrVEgB07tkI/AAAAAAAAALA/eVaLptTV9q4/s320/IMG_2649.JPG"
alt="" id="BLOGGER_PHOTO_ID_5095053870476539458" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;
Our London had pushed her empty bowl across the floor, and left it
right in front of the cupboard we keep her tinned fish in. I wonder
what she could have been after?
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-4263682341118694121?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/4263682341118694121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=4263682341118694121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4263682341118694121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/4263682341118694121'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/subtle-request.html' title='A Subtle Request'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fhKywsFe6TU/RrVFEB07tlI/AAAAAAAAALI/ICESD3DZRFk/s72-c/IMG_2648.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5980290835710228426</id><published>2007-08-08T21:50:00.000+10:00</published><updated>2007-11-19T21:57:33.508+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>On Books and Trains Stations</title><content type='html'>I didn't want to say anything about &lt;span style="font-style:
italic;"&gt;Harry Potter and the Deathly Hallows&lt;/span&gt;, but I will say
that I deeply approve of the use of the train station. Train stations
are magical places: journeys begin and end there. When they were first
built, lives ended and began there. Train stations are intersections
of everyone's world: your world with all the people around you; your
old life with the new life awaiting at the end of your journey. With
technology, the train station has largely been replaced in this role
with the airport. Which is why it's such a damn shame that, with the
exception of the now
abandoned &lt;a href="http://www.flickr.com/photos/plemeljr/188875507/"&gt;TWA
terminal&lt;/a&gt; at JFK airport, airport architecture is so utterly
anonymous and boring.

&lt;br/&gt;
&lt;br/&gt;

The builders of train stations through the 19th and 20th century
understood the importance of what they were doing. You can't walk
under the enormous, soaring arc of
the &lt;a href="http://www.flickr.com/photos/tampics/33724612/"&gt;roof&lt;/a&gt;
of Paris' &lt;a href="http://en.wikipedia.org/wiki/Gare_de_Lyon"&gt;Gare de
Lyon&lt;/a&gt; without feeling something. You may say that a train station
requires an enormous roof - you need something to fit the trains under
- but there's more to it than that. A train station does not require
the &lt;a href="http://www.flickr.com/photos/snwbeast/538395266/"&gt;main
concourse&lt;/a&gt; of New
York's &lt;a href="http://en.wikipedia.org/wiki/Grand_Central_Station"&gt;Grand
Central station&lt;/a&gt;. Humans required that grandeur for a building this
significant to their lives.

&lt;br/&gt;
&lt;br/&gt;

And this is why I'm so disappointed in airports. Books aren't
switching from train stations to airports because airports aren't
inspiring or significant. They look like low, bland, corporate office
blocks. Full of bland, inoffensive corporate colours, with plenty of
practical reusable furniture and rooms. As train travel becomes less
and less common, we're in danger of losing a whole raft of ideas and
images. In 15 years time will a child reading Harry Potter who's never
been inside a train station really understand the significance? Will
that chapter grab them? Do children reading now understand this?
Architecture is not just about building the most practical, useful
building for the cheapest price. Architecture is about shaping our
world, and thus our culture and experiences.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5980290835710228426?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5980290835710228426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5980290835710228426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5980290835710228426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5980290835710228426'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/on-books-and-trains-stations.html' title='On Books and Trains Stations'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-162965748601482164</id><published>2007-08-08T18:05:00.000+10:00</published><updated>2007-11-19T21:56:43.274+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Harry Potter and the Deathly Hallows</title><content type='html'>&lt;span style="font-style: italic;"&gt;Harry Potter and the Deathly Hallows&lt;/span&gt;
&lt;br/&gt;
&lt;span style="font-size:85%;"&gt;J.K. Rowling&lt;/span&gt;

&lt;br/&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 80%; background-color: rgb(255,
255, 153); font-size: 65%; padding-bottom: 10px; padding-left: 10px;
padding-right: 10px;"&gt;
Don't worry, there won't be any spoilers, or
anything even remotely like a spoiler in this post. I'm not doing that
to this book.
&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

I liked this book, a lot. It would probably be my favourite of the
series. The ending really nicely wraps up the story without leaving
any major open holes. Everything that is supposed to happen,
happens. Which, according to
&lt;a href="http://en.wikipedia.org/wiki/Rosencrantz_%26_Guildenstern_Are_Dead"&gt;&lt;span class="Apple-style-span"
style="font-style: italic;"&gt;Rosencrantz &amp; Guildensten Are
Dead&lt;/span&gt;&lt;/a&gt;, is the definition of when a story is supposed to
finish.

&lt;br/&gt;
&lt;br/&gt;

Two days before reading this book, I was talking to a friend at lunch
about books. He was complaining that the ending of Neal
Stephenson's &lt;span class="Apple-style-span" style="font-style:
italic;"&gt;Cryptonomicon&lt;/span&gt; doesn't live up to the rest of the
book. I then made the extraordinary claim that no book I've ever read
had an ending that could live up to whatever expectations had been
built during the previous few hundred pages of the story.

&lt;br/&gt;
&lt;br/&gt;

And then this book comes along and makes a liar of me. Maybe my
expectations were lowered by reading a kid's fantasy adventure; maybe
it was exhaustion: finishing at 4.30am after reading continuously all
day. I'm a slow reader, I know. Whatever it was, I thought the ending
actually worked.

&lt;br/&gt;
&lt;br/&gt;

Many people choose to regard Harry Potter with some funny mix of
amusement and contempt. You're probably missing the point. It's a fun,
easy to read fantasy epic that doesn't take itself too
seriously. There is a special skill in writing something that is both
easy and enjoyable to read.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-162965748601482164?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/162965748601482164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=162965748601482164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/162965748601482164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/162965748601482164'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/harry-potter-and-deathly-hallows.html' title='Harry Potter and the Deathly Hallows'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-2480309636563519174</id><published>2007-08-07T18:30:00.000+10:00</published><updated>2007-11-19T21:53:45.133+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Harry Potter 1-6</title><content type='html'>&lt;span style="font-style: italic;"&gt;Harry Potter 1-6&lt;/span&gt;
&lt;br/&gt;
&lt;span style="font-size:85%;"&gt;J.K. Rowling&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

In preparation for the upcoming release of &lt;span style="font-style:
italic;"&gt;Harry Potter and the Deathly Hallows&lt;/span&gt;, I followed the
fantasy fan grand tradition and re-read the entire series from the
beginning. It took me about 10 days, including staying up til 4.00am
on the Friday before the release of book seven, to finish them all. It
was worth it in the end: I cared deeply about the characters and their
fates; perfect for finding out how it all ended.

&lt;br/&gt;
&lt;br/&gt;

Some random thoughts from reading them a second time.

&lt;ul&gt;

&lt;li&gt;&lt;span style="font-style: italic;"&gt;The Philosopher's Stone&lt;/span&gt;
will always be a sentimental favourite. It has an innocence and magic
that the other's can't match. The surprise of this enjoyable world
can't be repeated.&lt;/li&gt;

&lt;li&gt;&lt;span style="font-style: italic;"&gt;The Prisoner of Azkaban&lt;/span&gt;
is the strongest; &lt;span style="font-style: italic;"&gt;The Chamber of
Secrets&lt;/span&gt; is the weakest.&lt;/li&gt;

&lt;li&gt;Ron is a &lt;span style="font-weight: bold;"&gt;lot&lt;/span&gt; less
irritating on paper than he is in the movies.&lt;/li&gt;

&lt;li&gt;The big action sequence at the end of &lt;span style="font-style:
italic;"&gt;The Order of the Phoenix&lt;/span&gt; is disappointing.&lt;/li&gt;

&lt;li&gt;&lt;span style="font-style: italic;"&gt;The Philosopher's Stone&lt;/span&gt;
was a test book: will this sell? &lt;span style="font-style: italic;"&gt;The
Chamber of Secrets&lt;/span&gt; was 'Oh no, we're on to something get this
out quick!' &lt;span style="font-style: italic;"&gt;The Prisoner of
Azkaban&lt;/span&gt; was introducing some new characters and casting around
for the real story. &lt;span style="font-style: italic;"&gt;The Goblet of
Fire&lt;/span&gt; is where the story really
started. &lt;span style="font-style: italic;"&gt;The Order of the
Phoenix&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;The Half-Blood
Prince&lt;/span&gt; were middle books.&lt;/li&gt;

&lt;/ul&gt;

But no matter how I read them, and what different spin I read into
them, I loved the story. And to be honest, it fits together a little
too well for that final (cynical) analysis to be entirely
accurate. All those of you planning on
re-reading &lt;span style="font-style: italic;"&gt;The Deathly
Hallows&lt;/span&gt; but slower, I can recommend starting right from the
beginning again, if you haven't already. You will get something out of
it.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-2480309636563519174?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/2480309636563519174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=2480309636563519174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2480309636563519174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2480309636563519174'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/harry-potter-1-6.html' title='Harry Potter 1-6'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-9052392296842786851</id><published>2007-08-06T10:59:00.000+10:00</published><updated>2007-11-19T21:50:36.283+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Perl</title><content type='html'>I don't usually post entries that just refer to someone else's post
and then comment, but I thought this one was worth it.

&lt;br/&gt;

&lt;blockquote&gt;For the sake of comparison, people have been saying that Cobol has been dead for more than 20 years, but there are over 1000 Cobol jobs per month posted on Monster.com, and more than 5000 per month for Perl.
&lt;span style="text-align: right;"&gt;- &lt;a href="http://www.oreillynet.com/onlamp/blog/2007/08/perl_is_dead_long_live_perl.html"&gt;JT Smith, posted by chromatic on O'ReillyNet.&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;

&lt;br/&gt;

Everyone got that? Perl is doing absolutely fine as a language; there
are still heaps of jobs going for COBOL programmers, and Perl has even
more! Clearly this is the only measure of a language's health and
therefore we should all kindly stop pointing and laughing.

&lt;br/&gt;
&lt;br/&gt;

Personally, I think this couldn't come sooner. A technology isn't
really dead until people feel the need to loudly proclaim
how &lt;span style="font-weight: bold;"&gt;not &lt;/span&gt;dead that technology
is. People have been declaring the end of C++ since Java first
arrived, but no one is defending C++ yet... more's the pity.

&lt;br/&gt;
&lt;br/&gt;

Oh, and I particularly love his analogy to COBOL programmers: smooth.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-9052392296842786851?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/9052392296842786851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=9052392296842786851' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/9052392296842786851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/9052392296842786851'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/perl.html' title='Perl'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-2425181460426950123</id><published>2007-08-05T22:50:00.000+10:00</published><updated>2007-11-19T21:49:02.576+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Against the Day</title><content type='html'>&lt;span style="font-style: italic;"&gt;Against the Day&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-size:85%;"&gt;Thomas Pynchon&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

This was an absolutely massive brick of a book. 1,085 very dense
pages. The longest sentence I remember encountering was a page in
length. He's maintained his pattern of hard to read, but very
rewarding, books. Though this is only the second Pynchon I've read, I
will be going back for more, call me a masochist if you will.

&lt;br/&gt;
&lt;br/&gt;

Mathematicians are major characters; reasonably common in sci-fi, but
most surprisingly the maths is depicted accurately.

&lt;br/&gt;
&lt;br/&gt;

Except... ideas of science are never considered in a rational
vacuum. These ideas are always filtered through unbalanced, biased,
imperfect humans. We attach extra value to these ideas; we invest in
them, growing them beyond a purely rational consideration into
something larger. Something that a person could start to believe
in. Don't be distracted by false claims of inaccurate ascriptions of
religiosity. It's not there. These both emerge from the same base. The
linguists who analysed the unusual language of
the &lt;a href="http://en.wikipedia.org/wiki/Pirah%C3%A3_language"&gt;Pirahã&lt;/a&gt;
ended up spending sometime literally not speaking over a disagreement
in interpretation of language constructs. This is more than science
and rational discourse over ideas: this is belief.

&lt;br/&gt;
&lt;br/&gt;

No scientific proof is ever accepted from being derived from first
principles. &lt;a href="http://en.wikipedia.org/wiki/Bertrand_Russell"&gt;Russell&lt;/a&gt;
showed that isn't actually possible. Well, Russell gave it a shot; his
failure showed it wasn't possible
then &lt;a href="http://en.wikipedia.org/wiki/Godel"&gt;Gödel&lt;/a&gt; showed
why.

&lt;br/&gt;
&lt;br/&gt;

This book is an historical fiction set around the turn of the 20th
century: but if it was set now then it would be a near future
sci-fi. Something in the line
of &lt;a href="http://en.wikipedia.org/wiki/Neal_Stephenson"&gt;Stephenson&lt;/a&gt;
or &lt;a href="http://en.wikipedia.org/wiki/William_Gibson_%28novelist%29"&gt;Gibson&lt;/a&gt;
where the possible effects of recent discoveries are explored. That's
not what the book is really trying to explore however. It feels like a
daydream in the end. After exploring many different forms of
literatures, sciences, ideas and political battles through the pivotal
period of the 20th century the story lazily surfaces into what feels
like our world.

&lt;br/&gt;
&lt;br/&gt;

You're never quite sure where you've actually been.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-2425181460426950123?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/2425181460426950123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=2425181460426950123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2425181460426950123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2425181460426950123'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/08/against-day.html' title='Against the Day'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3103457660647334400</id><published>2007-07-30T19:15:00.000+10:00</published><updated>2007-11-19T21:47:29.618+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cats'/><title type='text'>For London</title><content type='html'>&lt;div style="text-align: center;"&gt;
&lt;span style="font-weight: bold;"&gt;Funeral Blues&lt;/span&gt;
&lt;br/&gt;
&lt;span style="font-style: italic;"&gt;W.H. Auden&lt;/span&gt;&lt;/div&gt;

&lt;div style="text-align: left;margin-left: 40pt;"&gt;
Stop all the clocks, cut off the telephone,&lt;br/&gt;
Prevent the dog from barking with a juicy bone,&lt;br/&gt;
Silence the pianos and with muffled drum&lt;br/&gt;
Bring out the coffin, let the mourners come.&lt;br/&gt;

&lt;br/&gt;
&lt;br/&gt;

Let aeroplanes circle moaning overhead&lt;br/&gt;
Scribbling on the sky the message He Is Dead,&lt;br/&gt;
Put crêpe bows round the white necks of the public doves,&lt;br/&gt;
Let the traffic policemen wear black cotton gloves.&lt;br/&gt;

&lt;br/&gt;
&lt;br/&gt;

He was my North, my South, my East and West,&lt;br/&gt;
My working week and my Sunday rest,&lt;br/&gt;
My noon, my midnight, my talk, my song;&lt;br/&gt;
I thought that love would last for ever: I was wrong.&lt;br/&gt;

&lt;br/&gt;
&lt;br/&gt;

The stars are not wanted now: put out every one;&lt;br/&gt;
Pack up the moon and dismantle the sun;&lt;br/&gt;
Pour away the ocean and sweep up the wood.&lt;br/&gt;
For nothing now can ever come to any good.&lt;br/&gt;
&lt;/div&gt;

&lt;br/&gt;
&lt;br/&gt;

We'll always love you Pundy.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3103457660647334400?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3103457660647334400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3103457660647334400' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3103457660647334400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3103457660647334400'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/07/for-london.html' title='For London'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8238588077257135564</id><published>2007-06-20T21:43:00.001+10:00</published><updated>2007-11-19T21:45:40.927+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>The Box Doesn't Exist</title><content type='html'>One word that always causes me to shudder: 'Content.' This is now
apparently the standard word that people in the software industry use
to refer to that which is created and owned by their users.

&lt;br/&gt;
&lt;br/&gt;

To me it's just the latest horrible, bland, meaningless MBA
word. Except it's not. Like all words, 'content' implies something
about that which it refers to: that it's irrelevant and doesn't
matter, that anything would do in its place. Content is what you put
in a box so that the box is no longer empty, it doesn't matter what it
is, it's just there to fill the box.

&lt;br/&gt;
&lt;br/&gt;

Sure, as software people you're all very proud of your box. You've put
a lot of effort into making your box very pretty, and emergent, and
Web 2.0, and now you just need something to fill it up. When all you
do is build boxes it's very easy to only see boxes.

&lt;br/&gt;
&lt;br/&gt;

Well, guess what? Your users don't even notice the box. That content
that you regard as interchangeable filling is all they care
about. That's what they've spent time, effort and emotion in
creating. They don't want to just dump it in some box somewhere, they
want it treated specially and with respect. Referring to it with some
bland management-speak term is not showing respect.

&lt;br/&gt;
&lt;br/&gt;

Words matter. The words you use to refer to something shape your
perception of it. If you're in the business of building something
where users can display their creations you need to remember that
those creative works are the entire purpose of your web site. So don't
refer to it as 'content' and then focus on the box. Remember the box
don't exist, and treat your user's works with respect.

&lt;br/&gt;
&lt;br/&gt;

Don't call it 'content.'
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8238588077257135564?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8238588077257135564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8238588077257135564' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8238588077257135564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8238588077257135564'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/06/dont.html' title='The Box Doesn&amp;#39;t Exist'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-2087939311539424768</id><published>2007-06-20T18:13:00.000+10:00</published><updated>2007-11-19T21:44:21.091+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><title type='text'>Ticket'd</title><content type='html'>Spotted out our window one cold winter night:

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://3.bp.blogspot.com/_fhKywsFe6TU/Rnjiu8yB8JI/AAAAAAAAAKc/eoXf0xJXQ6Q/s1600-h/speeding+ticket.jpg"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://3.bp.blogspot.com/_fhKywsFe6TU/Rnjiu8yB8JI/AAAAAAAAAKc/eoXf0xJXQ6Q/s400/speeding+ticket.jpg"
alt="" id="BLOGGER_PHOTO_ID_5078057876078063762" border="0" /&gt;&lt;/a&gt;

&lt;br/&gt;

A drug bust? A shooting? International crime syndicate? Nah, just a
P-plater getting a speeding ticket.

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/RnjivMyB8KI/AAAAAAAAAKk/KAisep0Z7JI/s1600-h/speeding+ticket+-+closeup.jpg"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/RnjivMyB8KI/AAAAAAAAAKk/KAisep0Z7JI/s400/speeding+ticket+-+closeup.jpg"
alt="" id="BLOGGER_PHOTO_ID_5078057880373031074" border="0" /&gt;&lt;/a&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-2087939311539424768?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/2087939311539424768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=2087939311539424768' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2087939311539424768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2087939311539424768'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/06/ticketd.html' title='Ticket&amp;#39;d'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fhKywsFe6TU/Rnjiu8yB8JI/AAAAAAAAAKc/eoXf0xJXQ6Q/s72-c/speeding+ticket.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3684076262251562044</id><published>2007-06-13T14:45:00.000+10:00</published><updated>2007-11-19T21:42:27.088+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cats'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Is Something Burning?</title><content type='html'>We suspect this singe:

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/Rm93VcyB8GI/AAAAAAAAAKE/tYMa9Aw9Qn8/s1600-h/singe.jpg"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/Rm93VcyB8GI/AAAAAAAAAKE/tYMa9Aw9Qn8/s400/singe.jpg"
alt="" id="BLOGGER_PHOTO_ID_5075406515456831586" border="0" /&gt;&lt;/a&gt;

&lt;br/&gt;

On this cat:

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://1.bp.blogspot.com/_fhKywsFe6TU/Rm93VsyB8HI/AAAAAAAAAKM/Wm_dbpjux6s/s1600-h/kitty.jpg"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://1.bp.blogspot.com/_fhKywsFe6TU/Rm93VsyB8HI/AAAAAAAAAKM/Wm_dbpjux6s/s400/kitty.jpg"
alt="" id="BLOGGER_PHOTO_ID_5075406519751798898" border="0" /&gt;&lt;/a&gt;

&lt;br/&gt;

Was caused by one of these lights:

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://1.bp.blogspot.com/_fhKywsFe6TU/Rm93VsyB8II/AAAAAAAAAKU/ffMGlYfSrso/s1600-h/fire-source.jpg"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://1.bp.blogspot.com/_fhKywsFe6TU/Rm93VsyB8II/AAAAAAAAAKU/ffMGlYfSrso/s400/fire-source.jpg"
alt="" id="BLOGGER_PHOTO_ID_5075406519751798914" border="0" /&gt;&lt;/a&gt;

&lt;br/&gt;

Trendy though they may be, it seems that if you have a brain the size
of a peanut and a love for heat, heat, glorious heat, halogen lights
set at floor level are a little too attractive on a cold winter's
morning.

&lt;br/&gt;
&lt;br/&gt;

If they hadn't attached themselves to humans cats would long since be
extinct. Probably through some accidental fire.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3684076262251562044?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3684076262251562044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3684076262251562044' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3684076262251562044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3684076262251562044'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/06/is-something-burning.html' title='Is Something Burning?'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fhKywsFe6TU/Rm93VcyB8GI/AAAAAAAAAKE/tYMa9Aw9Qn8/s72-c/singe.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3754989194365092578</id><published>2007-05-29T20:14:00.000+10:00</published><updated>2007-11-19T21:40:03.905+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Where-house?</title><content type='html'>These were taken in January, after we picked up the keys but before
our stuff had been moved in. By now I figure that those of you who can
make it here to see our new home have, so these photos are for the
rest of you.

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/Rlv8VVoVWFI/AAAAAAAAAJg/U6vyJUhNGZY/s1600-h/IMG_2146.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/Rlv8VVoVWFI/AAAAAAAAAJg/U6vyJUhNGZY/s400/IMG_2146.JPG"
alt="" id="BLOGGER_PHOTO_ID_5069923249049393234" border="0" /&gt;&lt;/a&gt;

&lt;br/&gt;

The building is a converted warehouse from the late 1890's. Until (I
think) 1994 it was used as a warehouse. For most of that time as the
headquarters, offices and printing rooms of the Sunday Times, Sydney's
third Sunday paper. From the 1840's to the 1890's there were smaller
buildings on the site, and before that, the area was market gardens.

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/Rlv8kVoVWGI/AAAAAAAAAJo/XGtDfPvSCxw/s1600-h/IMG_2145.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/Rlv8kVoVWGI/AAAAAAAAAJo/XGtDfPvSCxw/s400/IMG_2145.JPG"
alt="" id="BLOGGER_PHOTO_ID_5069923506747431010" border="0" /&gt;&lt;/a&gt;

&lt;br/&gt;

The envelope of the building (the external brick walls) is original,
and a lot of the original materials have been reused in the
reconstruction. There's an old wooden pillar by the front door, for
example, and some of the floor joists are original, though the floors
themselves have been moved. Moving the floors has given us the 6m
ceiling I've mentioned before, and the bedrooms have been tucked into
a mezzanine that hangs over and opens out into the living area. The
black rectangle in the photo is one of those openings.

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/Rlv8yVoVWHI/AAAAAAAAAJw/L7DQldP8ZKc/s1600-h/IMG_2143.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/Rlv8yVoVWHI/AAAAAAAAAJw/L7DQldP8ZKc/s400/IMG_2143.JPG"
alt="" id="BLOGGER_PHOTO_ID_5069923747265599602" border="0" /&gt;&lt;/a&gt;

&lt;br/&gt;

They don't mention the joys of living in a converted 1890's warehouse
in the trendy New York novels: our &lt;span style="font-weight:
bold;"&gt;wall&lt;/span&gt; leaks. That's right: wall. Ahh, well. I call it
character.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3754989194365092578?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3754989194365092578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3754989194365092578' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3754989194365092578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3754989194365092578'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/05/where-house.html' title='Where-house?'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fhKywsFe6TU/Rlv8VVoVWFI/AAAAAAAAAJg/U6vyJUhNGZY/s72-c/IMG_2146.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5776008810176980945</id><published>2007-05-28T11:24:00.000+10:00</published><updated>2007-11-19T21:38:25.828+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Embrace Your Inner Geek</title><content type='html'>Why bother reading long posts about esoteric language features that
your language doesn't provide, or even if it does, it's not a good
idea to use too often?

&lt;br/&gt;
&lt;br/&gt;

Two and a half reasons really.

&lt;br/&gt;
&lt;br/&gt;

Understanding your language is important. This is not magic we're
doing here. It's engineering, one of the purest and most
mathematically oriented branches of engineering you're likely to earn
money engaged in. When it's magic you're not supposed to know what's
going on, that's why it's magic. You are supposed to understand
engineering though. Languages are the most complex pieces of computer
software. You understand complex things by exploring the
boundaries. What do they do well? Why don't some things work at all?
How could they be better? All professional programmers should be able
to name several critical failings of the language they are currently
working in; if they don't hate it all together.

&lt;br/&gt;
&lt;br/&gt;

Related to that, when programming it's not enough to memorise the
class and function names from the whopping great big framework of the
week. You'll generally have inferred something about how the framework
works underneath. You'll know that before calling function A, you had
to instantiate class B first, unless you called function C first,
because that happens to create a B for you. Blah. Languages are the
same. Why does a variable declared inside a &lt;code&gt;while&lt;/code&gt; loop
disappear outside? This isn't voodoo. The goblins don't eat
it. There's a reason. The language is implemented in a certain way by
the compiler and runtime combination that causes these things to
happen. You should understand that relationship. Every thing we write
is built on some similar layer of abstraction. You need to
understand &lt;span style="font-size:85%;"&gt;(at least
theoretically)&lt;/span&gt; how to implement the layer immediately beneath
you or you'll end up wandering off into some abyss you didn't even
know was there.

&lt;br/&gt;
&lt;br/&gt;

And finally, we're professionals, dammit. Where's the intellectual
curiosity? Where's the 'Hey, that's cool. Now, how do I break it?' Or,
'I wonder what will happen if I do this...' Or, 'How does that work?'
And most basically of all, 'Why?' Geeks are supposed to be into that
sort of thing. We got beaten up in high school because we were
enthusiastic about things it wasn't cool to be enthusiastic about. Now
there's a lot of money to be had out of that enthusiasm. Let it out,
embrace your inner geek. Enjoy this amazing, complex, unique,
ever-changing world around us. Explore those things you've always felt
a connection to. If you're in computing, there's a good chance that's
something mathematical. Most things in computing are... For me it was
languages. What's it for you?

&lt;br/&gt;
&lt;br/&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 80%; background-color: rgb(255, 255, 153); font-size: 65%; padding-bottom: 10px; padding-left: 10px; padding-right: 10px;"&gt;
Oh, and last week at the pub we had a big discussion about category
theory, higher-order functions, contination passing web servers and
finishing up with the difference between a program that generates a
program and writing a custom compiler and interpreter. Geeky you may
say. Well, today I noticed a colleague reading up on continuations on
Wikipedia. &lt;span style="font-weight: bold;"&gt;That's&lt;/span&gt; what I'm
talking about.
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5776008810176980945?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5776008810176980945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5776008810176980945' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5776008810176980945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5776008810176980945'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/05/know-your-language.html' title='Embrace Your Inner Geek'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5369383419177945171</id><published>2007-05-27T16:09:00.000+10:00</published><updated>2007-11-19T21:35:29.680+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Sandman, Vol. 1: Preludes &amp; Nocturnes</title><content type='html'>&lt;span style="font-style: italic;"&gt;The Sandman, Vol. 1: Preludes &amp; Nocturnes&lt;/span&gt;
&lt;br/&gt;
&lt;span style="font-size:85%;"&gt;Neil Gaiman&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

Is that how you credit authorship of comics? I don't quite know. There
are artists involved, and I'll leave it at that for now. But yes, that
means I'm reading comics now.

&lt;br/&gt;
&lt;br/&gt;

&lt;iframe src="http://rcm.amazon.com/e/cm?t=overwatering-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=1563890119&amp;fc1=000000&amp;IS2=1&amp;lt1=_top&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;f=ifr&amp;nou=1"
style="width:120px;height:240px; float:right;" scrolling="no"
marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

I've never been a comics reader. Sure I read some comics as a
kid. &lt;span style="font-style: italic;"&gt;Asterix and Obelix&lt;/span&gt;
and &lt;span style="font-style: italic;"&gt;Footrot Flats&lt;/span&gt; were both
pretty important to me. I'm pretty sure I've read them all. I also
read the occasional &lt;span style="font-style: italic;"&gt;Tintin&lt;/span&gt;,
and there was one dark single issue comic &lt;span style="font-style:
italic;"&gt;Where the Wind Blows&lt;/span&gt; that I discovered in high school
that was pretty damn good. But I never read seriously the Marvel and
DC comics involving Spiderman, Batman, etc, etc.

&lt;br/&gt;
&lt;br/&gt;

Sure I'd get hold of a comic here and there. But it would usually be
issue 23 out of 148, then several months later I would read 92, then
5, then the grand finale. Overall, the story didn't make a whole lot
of sense...

&lt;br/&gt;
&lt;br/&gt;

I have always been a big fantasy reader, and for the last five years
of so I'd been hearing a lot about Neil Gaiman. Very popular, very
well regarded. But when I looked into him I found he'd only written a
couple of novels and a collection of short stories. Strange. It
usually takes a long line of novels and an epic series or two to build
this kind of cult following. Looking closer he was always credited as
'gaining his following through the cult 1990's comic
series &lt;span style="font-style: italic;"&gt;The Sandman&lt;/span&gt;.'
Interesting...

&lt;br/&gt;
&lt;br/&gt;

After talking to friends, reading blogs and then reading
Pynchon's &lt;span style="font-style: italic;"&gt;Gravity's Rain&lt;/span&gt;bow,
my interest in comics, especially the more modern darker ones was
lifted. For example, I thought the &lt;span style="font-style: italic;"&gt;V
for Vendetta&lt;/span&gt; movie was pretty damn good, and apparently the
comic was significantly better.

&lt;br/&gt;
&lt;br/&gt;

So, on finding &lt;a href="http://www.kingscomics.com/"&gt;Kings Comics&lt;/a&gt;
on Pitt St, here in Sydney I decided to start
with &lt;span style="font-style: italic;"&gt;The Sandman&lt;/span&gt;. This is the
first volume and so far I'm impressed enough to go back for the
next. It's a dark, kind of gothic horror fantasy story. I can't review
this as any sort of expert comic reader, but I enjoyed the stories and
the artwork. Most importantly for me, the character of the Sandman was
one that interested me. He is not clear cut. Not a hero, not a villain
and not always someone you appear able to trust.

&lt;br/&gt;
&lt;br/&gt;

For me so far, comics are looking good. I want to read
more &lt;span style="font-style:
italic;"&gt;Sandman&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;V for
Vendetta&lt;/span&gt;, and
as &lt;a href="http://damana.blogspot.com"&gt;Damana&lt;/a&gt; also bought volume
one of &lt;span style="font-style: italic;"&gt;The League of Extraordinary
Gentleman&lt;/span&gt;, I'll be checking that out as well. Any other
recommendations?
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5369383419177945171?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5369383419177945171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5369383419177945171' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5369383419177945171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5369383419177945171'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/05/sandman-vol-1-preludes-nocturnes.html' title='The Sandman, Vol. 1: Preludes &amp;amp; Nocturnes'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-907465892276089072</id><published>2007-05-27T15:07:00.000+10:00</published><updated>2007-11-19T21:33:42.918+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><title type='text'>Stupid Software Tricks</title><content type='html'>&lt;span style="font-style:italic;"&gt;Or, My Computer Was Possessed!&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

Last night I was following some blogs, and I found a link to a kind of
rubbish photo sharing site. I won't mention the name here, for reasons
that shall become clear. It's been around for a few years and has gone
through some major rounds of publicity and then failed. It's now into
it's third beta in a row. In short, going nowhere real fast.

&lt;br/&gt;
&lt;br/&gt;

Anyway, I was curious about their site, so I went to read their news
page. When I'm using a computer I tend to leave what I was last doing
open on screen. On coming back I can then pick up where I left
off. There's always a browser open, usually with four or five tabs I
want to read.

&lt;br/&gt;
&lt;br/&gt;

I open the photo sharing news page in a tab and then wander off. Our
apartment is a loft-style space in a converted 1890's warehouse. The
entire apartment is basically open-plan with the upstairs bedrooms
opening out near the six metre ceiling of the living room. My computer
is in a study that opens into the living room, downstairs.

&lt;br/&gt;
&lt;br/&gt;

At 4am this morning the entire apartment was awakened by the these
bizarre screams, crazy distortion and static. What the hell is going
on? Is this something from the pub next door? Have our neighbours
turned some movie on? Has one of our cats stood on the TV remote
again?

&lt;br/&gt;
&lt;br/&gt;

I stuck my head out into the living room to try to work out where the
noise was coming from. The weirdest thing was that I couldn't
understand the noise. I could hear voices that seemed to speaking
English, and I could pick out words, but I could not understand what
was actually being said.

&lt;br/&gt;
&lt;br/&gt;

Coming downstairs to investigate closer, the noise was coming from my
computer. And it really was strange screams, distortion and
static. Being closer made it no better. I started closing tabs in
Firefox, as that was all that was open. Eventually I closed the photo
sharing news page and it shut up.

&lt;br/&gt;
&lt;br/&gt;

I've never seen anything like it. The news page had a bunch of
embedded videos from all over the web, and it was like Firefox and
Flash had buffered the videos, and then after several hours of boredom
started to explore what interesting sounds could be made by sampling
and looping the soundtracks.

&lt;br/&gt;
&lt;br/&gt;

Spooky.

&lt;br/&gt;
&lt;br/&gt;

And with apologies to Yasmin, who was visiting us this weekend and was very rudely awakened.

&lt;br/&gt;
&lt;br/&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 80%; background-color: rgb(255, 255, 153); font-size: 65%; padding-bottom: 10px; padding-left: 10px; padding-right: 10px;"&gt;
And I haven't linked to the site because they really don't deserve
even the feeble publicity a link here would grant. I found them
through the &lt;a href="http://www.xkcd.com/c181.html"&gt;Blagosphere&lt;/a&gt;,
and I don't
post &lt;a href="http://jwz.livejournal.com/716737.html?thread=13675457#t13675457"&gt;vias&lt;/a&gt;.
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-907465892276089072?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/907465892276089072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=907465892276089072' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/907465892276089072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/907465892276089072'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/05/stupid-software-tricks.html' title='Stupid Software Tricks'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-2410219471058647624</id><published>2007-05-23T19:00:00.001+10:00</published><updated>2007-11-19T21:32:18.616+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='law'/><title type='text'>A Conspiracy</title><content type='html'>I don't believe in the Internet. It's a conspiracy of network
engineers... with a lot of pigeons.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-2410219471058647624?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/2410219471058647624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=2410219471058647624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2410219471058647624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/2410219471058647624'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/05/blog-post_23.html' title='A Conspiracy'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3092448593360403712</id><published>2007-05-18T23:19:00.000+10:00</published><updated>2007-11-19T21:31:27.884+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Continuing on Closures</title><content type='html'>&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 80%; background-color: rgb(255, 255, 153); font-size: 65%; padding-bottom: 10px; padding-left: 10px; padding-right: 10px;"&gt;
This is the (long awaited) second part of
my &lt;a href="http://overwatering.blogspot.com/2007/03/achieving-closure.html"&gt;tutorial
on closures&lt;/a&gt;. This part describes how your language's runtime might
provide closures. I've assumed that you understand what a closure is,
if not, read the first part of this tutorial first.
&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

So by now we know that we can think of a closure as an object: an
instance of an automatically generated class. This class has just one
method: &lt;code&gt;apply()&lt;/code&gt; that executes the body of the closure. The
class has one member variable for each variable in the active scope at
the time the closure object was constructed.

&lt;br/&gt;
&lt;br/&gt;

But local variables are only available to the function that defines
them and even then only for the lifetime of that particular function
call. How then is it possible for a closure to access these values? To
explain that I'm going to briefly go over how functions work, bear
with me if this all seems a bit basic.

&lt;br/&gt;
&lt;br/&gt;

Sometime back in the 1950's, during the design
of &lt;a href="http://en.wikipedia.org/wiki/ALGOL"&gt;ALGOL&lt;/a&gt; the concept
of the &lt;a href="http://en.wikipedia.org/wiki/Call_Stack"&gt;call
stack&lt;/a&gt; and stack frames were discovered. The call stack is just a
list of called functions, implemented as
a &lt;a href="http://en.wikipedia.org/wiki/Stack_%28data_structure%29"&gt;stack&lt;/a&gt;
so that as functions return they can be popped off the call stack,
leaving the calling function on top. A stack frame is the object that
is pushed onto the stack to describe a function. A stack frame
contains the line of code to return to when the function returns, the
parameters to the functions and the local variables of the function.

&lt;br/&gt;
&lt;br/&gt;

Every invocation of a function causes a new stack frame to be created
and pushed onto the call stack. Among other things, this makes
recursion possible. Early versions
of &lt;a href="http://en.wikipedia.org/wiki/Fortran"&gt;FORTRAN&lt;/a&gt; don't
support recursion: no call stack.

&lt;br/&gt;
&lt;br/&gt;

Your program executes; functions are called; stack frames are
constructed; values are calculated; frames are updated; and return
values are returned. But every time a function returns its stack frame
is destroyed, and the very next function called will completely
overwrite the memory where the last stack frame was. So how can a
closure always be guaranteed to still be able to access a local
variable?

&lt;br/&gt;
&lt;br/&gt;

Earlier I referred to a stack frame as an object. In languages like C
and Java a stack frame is not an object at all; it's just some
conventions for how certain pieces of data are stored. All of which
are calculated and laid out ahead of time by the compiler.

&lt;br/&gt;
&lt;br/&gt;

But what if the stack frame was an actual object stored with other
objects on the heap? What if, instead of a stack, a linked list was
used to connect the frames? Hmmm... interesting... The linked list
would represent the call stack. Every new stack frame would be
constructed with a pointer to the frame of the current function. Like
all other objects, these frame objects would be subject to the garbage
collector. This prevents a frame from being destroyed until it, and
all functions it called, have returned.

&lt;br/&gt;
&lt;br/&gt;

Once the runtime provides this implementation of frames and the 'call
stack,' a closure can include a pointer to the current frame. When the
closure needs access to anything in its containing scope it can now
just use this pointer. And as the frame contains a pointer to its
calling function, the closure can now work its way back through any
scopes it's interested in.

&lt;br/&gt;
&lt;br/&gt;

&lt;div style="float:right; text-align: left; width: 40%; font-size: 75%; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; background-color: rgb(204, 204, 255)"&gt;
Extra Credit: The ability to work backwards through the scopes of all
the functions in the call stack is known
as &lt;a href="http://en.wikipedia.org/wiki/Dynamic_scope#Dynamic_scoping"&gt;dynamic
scope&lt;/a&gt;. It's pretty uncommon now, as it's virtually impossible for
a human to understand in any kind of complex program. As a result
languages that support closures generally
provide &lt;a href="http://en.wikipedia.org/wiki/Lexical_scope#Static_scoping"&gt;lexical
scoping&lt;/a&gt;. In lexical scope the structuring of the program text
defines the scopes available to a function; and therefore a closure
can only use the local variables of the frame immediately referred to
by the closure. But enough on scoping; for more compare early versions
of &lt;a href="http://en.wikipedia.org/wiki/LISP"&gt;Lisp&lt;/a&gt;
to &lt;a href="http://en.wikipedia.org/wiki/Scheme_%28programming_language%29"&gt;Scheme&lt;/a&gt;.
&lt;/div&gt;

Frames as a linked list would not make any difference to your program
as the act of reading the data stored in a frame is still hidden by
the compiler and runtime.

&lt;br/&gt;
&lt;br/&gt;

And that's really all there is to it. Closures can now access local
variables that seemed to only exist at the time the function was
defined. The reference by a closure to a frame behaves like any other
reference: the frame will not be destroyed until the closure is
destroyed.

&lt;br/&gt;
&lt;br/&gt;

Hmmm... didn't I mention earlier that a frame also contains a line of
code to return to? Doesn't that mean that any frame can be safely
returned from? Yes, it does. Now, if we move our current line variable
into the frame itself we have what's called a continuation. That is, a
single frame object describes the current values of all local
variables for a function, the next line of code to execute in the
function and which function to return to. And that function in turn
also has all the same information preserved.

&lt;br/&gt;
&lt;br/&gt;

If the language then allowed it, you could pick up that underlying
frame object, store it away somewhere and then use it to later on
continue execution where it was previously left off. Hence the name:
continuation. To pull this off the language needs to provide two
features.

&lt;br/&gt;
&lt;br/&gt;

Firstly, the ability to get a reference to the frame object for the
currently executing function, at the same time halting execution.
Secondly, the ability to call that frame object at some later point
and have execution pick up exactly where it left off, as if there was
no pause.

&lt;br/&gt;
&lt;br/&gt;

Continuations as a concept are regarded as 'difficult.' As a result,
even though most languages that provide closures could also provide
continuations the programmer is not given direct control over
them. Some languages do provide this
control: &lt;a href="http://en.wikipedia.org/wiki/Scheme_%28programming_language%29"&gt;Scheme&lt;/a&gt;
(noticing a patten
here?), &lt;a href="http://en.wikipedia.org/wiki/Ruby_%28programming_language%29"&gt;Ruby&lt;/a&gt;
and &lt;a href="http://en.wikipedia.org/wiki/Smalltalk"&gt;Smalltalk&lt;/a&gt;,
amongst others.

&lt;br/&gt;
&lt;br/&gt;

So what are these good for? Before getting into an example of how
continuations can be used, I want to say one thing: powerful language
features are always useful. If you're not used to having a feature in
a language, the first time someone shows it to you the immediate
reaction will be: 'Sounds cool; but what use is something like that?'
A fairly normal reaction and simply the result of not having the
feature available. Once you've used a language with an 'advanced'
feature you'll find all sorts of uses, until eventually you won't be
able to imagine coding without it.

&lt;br/&gt;
&lt;br/&gt;

Anyway, onto an example. When writing web applications a big problem
is the enormous gap between the page displayed in the user's browser
and where the server thinks the user is up to. Continuations can make
this almost completely disappear. Once the application on the server
has prepared a page, instead of winding up the call stack and then
returning the page to the user a continuation could be captured. This
continuation is stored on the server and a key is sent to the browser
to be returned with the other data on the page. Using the key, the
continuation is invoked, and execution of the function picks up where
it left off.

&lt;br/&gt;
&lt;br/&gt;

The code running on the server to handle screens in the application
could then look something like the below. The
statement &lt;code&gt;yield&lt;/code&gt; causes the continuation capturing to
occur. And remember, all of this code executes on the server, there is
no AJAX or anything like that.

&lt;br/&gt;

&lt;div align="center"&gt;&lt;div style="text-align: left; width: 80%;
font-family: courier new; font-size: 85%; background-color: rgb(230,
230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;
function checkout()
{
  // The following three functions add UI elements to the
  // current page. These are rendered as HTML. 
  displayCartContents();
  addButton(new NextButton());
  addButton(new PrevButton());

  yield; // Continuation is captured, and the page so far
         // is sent down to the user

  // The user has sent a response back to the server
  // The functions payment() and home are similar to
  // this function: they create specific pages.
  if (Page.SelectedButton == Button::NextId)
    payment(); // Display a page to collect payment
  else
    home(); // The user wants to continue shopping
}&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

As well as this simple server side logic, the user can then explore
multiple paths through the application concurrently, with multiple
windows and using the 'Back' button with abandon. You, as a programmer
and a program, will never become confused. Pretty nice, huh? There is
a web server already out there that gives you
this: &lt;a href="http://seaside.st/"&gt;seaside.st&lt;/a&gt;

&lt;br/&gt;
&lt;br/&gt;

And any language can make these powerful features available simply by
implementing the call stack as a garbage-collected, linked list of
simple frame objects, instead of a one-dimensional stack of
data. Pretty powerful, and remarkably simple. Makes you wonder what
other abstractions are lurking behind small implementation decisions.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3092448593360403712?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3092448593360403712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3092448593360403712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3092448593360403712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3092448593360403712'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/05/continuing-on-closures.html' title='Continuing on Closures'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-110650348093854336</id><published>2007-05-14T19:01:00.000+10:00</published><updated>2007-11-19T21:25:33.673+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Worst Example...Evar!</title><content type='html'>Way back in my first year of university, as part of a first year
discrete maths unit we were taught introductory formal logic. After
introducing propositional logic and covering ANDs, ORs and truth
tables, we moved on to implications. For this particular lecture we
had a fill-in lecturer. I can't remember why.

&lt;br/&gt;
&lt;br/&gt;

In explaining implication to us this lecturer used an example that has
stuck with me ever since. This isn't because it was one of those
glorious examples that are like a light being turned on; suddenly it
is all clear and new vistas of understanding open up. Oh no, this
example was the other kind.

&lt;br/&gt;
&lt;br/&gt;

One of those examples that distracts with its own internal errors and
inconsistencies; that steers you in completely the wrong direction;
and, best of all, pollutes your mind enough that you may never
understand the original point.

&lt;br/&gt;
&lt;br/&gt;

The bad example:
&lt;blockquote&gt;An implication would be when your mother says to you: 'If
you clean your room, then you can go to the movies.' So after you
clean your room, your mother lets you go to the movies and the
statement is true. But if you don't clean your room and go to the
movies anyway, the statement is also true.&lt;/blockquote&gt;

&lt;br/&gt;

Huh?

&lt;br/&gt;
&lt;br/&gt;

Logically, yes, that's correct. Single implication works like
that. But the world doesn't, and it's pretty hard to ignore that
little detail.

&lt;br/&gt;
&lt;br/&gt;

Bonus points if you can work out who the lecturer was.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-110650348093854336?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/110650348093854336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=110650348093854336' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/110650348093854336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/110650348093854336'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/05/worst-exampleevar.html' title='Worst Example...Evar!'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1252594049088836005</id><published>2007-04-19T21:48:00.000+10:00</published><updated>2007-11-19T21:23:18.756+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Peopleware</title><content type='html'>&lt;span style="font-style:italic;"&gt;Peopleware; Productive Projects and Teams&lt;/span&gt;
&lt;br/&gt;
&lt;span style="font-size: 85%;"&gt;Tom DeMarco &amp; Timothy Lister&lt;/span&gt;

&lt;br/&gt;

&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 80%; background-color: rgb(255, 255, 153); font-size: 65%; padding-bottom: 10px; padding-left: 10px; padding-right: 10px;"&gt;

Note: This review is of a software development book, not a work of
fiction. The book that is; the book's not a work of fiction. Neither
is the review, I hope.

&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

I've heard about this book very often from Joel,
of &lt;a href="http://www.joelonsoftware.com"&gt;JoelOnSoftware.com&lt;/a&gt;. He
recommends it very highly, in fact one of his recommendations is on
the back. This is also one of the first 'software development process'
books that I've ever managed to read cover-to-cover, all the way
through, and in only a day and a half. Usually these sorts of books
are very dry, kind of suck and end up just annoying me.

&lt;br/&gt;
&lt;br/&gt;

&lt;iframe src="http://rcm.amazon.com/e/cm?t=overwatering-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=0932633439&amp;fc1=000000&amp;IS2=1&amp;lt1=_top&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;f=ifr&amp;nou=1"
style="width:120px;height:240px;float:right;" scrolling="no"
marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

This book is different, however.

&lt;br/&gt;
&lt;br/&gt;

Essentially, Peopleware is saying that any attempt to project manage
software development is doomed to &lt;span style="font-size:
85%"&gt;(painful)&lt;/span&gt; failure if it focuses on issues like technology
or process and policy. The point is that like most things humans do,
the problems are usually sociological. It's all a matter of getting
different people to work together - understanding how they think and
what is important to them at a very personal level is how you achieve
this.

&lt;br/&gt;
&lt;br/&gt;

Joel makes a big deal of how important the office environment,
particularly a quiet space with a door that shuts, is to any software
developer. This book really makes that very clear. All 'knowledge'
workers need some level of quiet and privacy, or there really is no
point in having them around. The book took the discussion further and
points the reader off towards Christopher Alexander, as the entire
environment from the building down to the angle of the desk matters.

&lt;br/&gt;
&lt;br/&gt;

As an aside, if you haven't heard
of &lt;a href="http://en.wikipedia.org/wiki/Christopher_Alexander"&gt;Christopher
Alexander&lt;/a&gt;, then go read about him. He has nothing to do with
software development. He's a &lt;b&gt;real&lt;/b&gt; architect. Not one of those
pretentious software ones. Anyone who ever lives or works in a
building should have some idea of what Alexander is on about.

&lt;br/&gt;
&lt;br/&gt;

&lt;iframe src="http://rcm.amazon.com/e/cm?t=overwatering-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=0195024028&amp;fc1=000000&amp;IS1=1&amp;lt1=_top&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;f=ifr&amp;nou=1"
style="width:120px;height:240px;float:right;" scrolling="no"
marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

I can't overstate this, if you currently manage software development;
would like to some day manage software development; or are a software
developer being managed, you really should read this book.

&lt;br/&gt;
&lt;br/&gt;

And the thing is, if you aren't in software development but can ignore
the references while reading this book, you'll find it useful. The
principles apply to any job where the workers are required to think
independently to get anything useful done. If you think while working,
this book is for you.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1252594049088836005?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1252594049088836005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1252594049088836005' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1252594049088836005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1252594049088836005'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/04/peopleware.html' title='Peopleware'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-9128705531367162130</id><published>2007-04-10T15:04:00.000+10:00</published><updated>2007-11-19T21:16:14.952+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Power and the Glory</title><content type='html'>&lt;span style="font-style: italic;"&gt;The Power and the Glory&lt;/span&gt;
&lt;br/&gt;
&lt;span style="font-size:85%;"&gt;Graham Greene&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

Reviewing this book really seems a bit ridiculous. Who the hell am I
to review this? If you haven't read it, go, go now. It's only 220
pages, won't take you a minute... Don't worry, I'll wait for you.

&lt;br/&gt;
&lt;br/&gt;

&lt;iframe src="http://rcm.amazon.com/e/cm?t=overwatering-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=0142437301&amp;fc1=000000&amp;IS2=1&amp;lt1=_top&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;f=ifr&amp;nou=1"
style="width:120px;height:240px;float:right;" scrolling="no"
marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

It also didn't occur to me that I was reading a 'Catholic book' over
Easter weekend until I was nearly finished.

&lt;br/&gt;
&lt;br/&gt;

This isn't a book about the Catholic sacraments, or about religion or
faith. It isn't even about persecution and martyrdom. The value and
effect of all those is well understood. This is about something
deeper: the moral ambivalence and ambiguities at the heart of
everyone. All these characters fit together and draw so much from
those around them - misinterpreting each others actions, intentions
and clinging to the the symbolism of another person. Their individual
actions are small. The overall result may be large, but often it
isn't. In the end though, it doesn't matter. Labels are attached,
conclusions are drawn, meaning is derived, and the world moves on.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-9128705531367162130?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/9128705531367162130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=9128705531367162130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/9128705531367162130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/9128705531367162130'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/04/power-and-glory.html' title='The Power and the Glory'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-3412675733003830804</id><published>2007-04-08T23:21:00.001+10:00</published><updated>2007-11-19T21:13:39.297+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Mandarin</title><content type='html'>Some places and people really ain't worth remembering, but hey! At
least I got some cool time lapse photos out of it...

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://3.bp.blogspot.com/_fhKywsFe6TU/RhjrVFzcjSI/AAAAAAAAAH0/rxc2Cag_2NI/s1600-h/IMG_1759.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://3.bp.blogspot.com/_fhKywsFe6TU/RhjrVFzcjSI/AAAAAAAAAH0/rxc2Cag_2NI/s400/IMG_1759.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051045729663749410" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/RhjrVVzcjTI/AAAAAAAAAH8/v96fwcHUMuw/s1600-h/IMG_1776.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/RhjrVVzcjTI/AAAAAAAAAH8/v96fwcHUMuw/s400/IMG_1776.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051045733958716722" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/RhjrVVzcjUI/AAAAAAAAAIE/5sZabr4kyl0/s1600-h/IMG_1778.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/RhjrVVzcjUI/AAAAAAAAAIE/5sZabr4kyl0/s400/IMG_1778.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051045733958716738" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://1.bp.blogspot.com/_fhKywsFe6TU/RhjrVlzcjVI/AAAAAAAAAIM/RtW2i4xHvAU/s1600-h/IMG_1779.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://1.bp.blogspot.com/_fhKywsFe6TU/RhjrVlzcjVI/AAAAAAAAAIM/RtW2i4xHvAU/s400/IMG_1779.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051045738253684050" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://2.bp.blogspot.com/_fhKywsFe6TU/RhjrV1zcjWI/AAAAAAAAAIU/rAXS6DQeAj8/s1600-h/IMG_1780.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://2.bp.blogspot.com/_fhKywsFe6TU/RhjrV1zcjWI/AAAAAAAAAIU/rAXS6DQeAj8/s400/IMG_1780.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051045742548651362" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://2.bp.blogspot.com/_fhKywsFe6TU/Rhjrq1zcjXI/AAAAAAAAAIc/p9skd0tDijg/s1600-h/IMG_1781.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://2.bp.blogspot.com/_fhKywsFe6TU/Rhjrq1zcjXI/AAAAAAAAAIc/p9skd0tDijg/s400/IMG_1781.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051046103325904242" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://3.bp.blogspot.com/_fhKywsFe6TU/RhjrrFzcjYI/AAAAAAAAAIk/j_sXbvJxSag/s1600-h/IMG_1782.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://3.bp.blogspot.com/_fhKywsFe6TU/RhjrrFzcjYI/AAAAAAAAAIk/j_sXbvJxSag/s400/IMG_1782.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051046107620871554" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://3.bp.blogspot.com/_fhKywsFe6TU/RhjrrFzcjZI/AAAAAAAAAIs/XvZ8HIRcWYs/s1600-h/IMG_1783.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://3.bp.blogspot.com/_fhKywsFe6TU/RhjrrFzcjZI/AAAAAAAAAIs/XvZ8HIRcWYs/s400/IMG_1783.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051046107620871570" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/RhjrrVzcjaI/AAAAAAAAAI0/8_-JEX90ahU/s1600-h/IMG_1784.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/RhjrrVzcjaI/AAAAAAAAAI0/8_-JEX90ahU/s400/IMG_1784.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051046111915838882" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://1.bp.blogspot.com/_fhKywsFe6TU/RhjrrlzcjbI/AAAAAAAAAI8/l9UOc3hrItY/s1600-h/IMG_1785.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://1.bp.blogspot.com/_fhKywsFe6TU/RhjrrlzcjbI/AAAAAAAAAI8/l9UOc3hrItY/s400/IMG_1785.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051046116210806194" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://2.bp.blogspot.com/_fhKywsFe6TU/Rhjr31zcjcI/AAAAAAAAAJE/5g-rNUuin34/s1600-h/IMG_1787.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://2.bp.blogspot.com/_fhKywsFe6TU/Rhjr31zcjcI/AAAAAAAAAJE/5g-rNUuin34/s400/IMG_1787.JPG"
alt="" id="BLOGGER_PHOTO_ID_5051046326664203714" border="0" /&gt;&lt;/a&gt;

&lt;br/&gt;

Kind of a symbolic progression, actually.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-3412675733003830804?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/3412675733003830804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=3412675733003830804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3412675733003830804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/3412675733003830804'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/04/mandarin.html' title='Mandarin'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fhKywsFe6TU/RhjrVFzcjSI/AAAAAAAAAH0/rxc2Cag_2NI/s72-c/IMG_1759.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8772697092033490395</id><published>2007-04-07T15:33:00.001+10:00</published><updated>2007-11-19T21:10:28.652+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>A Fire Upon the Deep</title><content type='html'>&lt;span style="font-style: italic;"&gt;A Fire Upon the Deep&lt;/span&gt;
&lt;br/&gt;
&lt;span style="font-size:85%;"&gt;Vernor Vinge&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

This book was recommended to me about four years ago by a colleague at
SoftLaw. It took me about that long to find it. If you're in Sydney, I
can highly recommend the Galaxy bookstore on York St - thanks for
putting me onto them, Jen!

&lt;br/&gt;
&lt;br/&gt;

&lt;iframe src="http://rcm.amazon.com/e/cm?t=overwatering-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=0812515285&amp;fc1=000000&amp;IS2=1&amp;lt1=_top&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;f=ifr&amp;nou=1"
style="width:120px;height:240px; float: right;" scrolling="no"
marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

The underlying premise interested me enough to keep an eye out for
this book for four years. The galaxy is divided into zones. As you
move up through the zones more advanced thought and science becomes
available. From the Unthinking Depths, where rational thought is
barely possible, through the Slow Zone, where there is no
faster-than-light travel, to the Beyond, with faster-than-light travel
and advanced artificial intelligence. To me this is still an
interesting and novel view of the Universe. It provides both an
extrinsic motivation common across individuals and species - to move
up to a more glorious life that can't even be expressed at your
current level - and also a danger and a fear. There is nothing worse
than falling into a lower zone. Sounds religious doesn't it? And that
is alluded to, although it would have been good to see that developed
some more.

&lt;br/&gt;
&lt;br/&gt;

The rich potential of this premise left the book as a whole slightly
disappointing.

&lt;br/&gt;
&lt;br/&gt;

Overall, the story is a quest. &lt;span style="font-size:85%;"&gt;Which is
another point in favour of my 'Sci-Fi is fantasy set in the future'
hypothesis...&lt;/span&gt; A quest story is really a journey to the depths
of the soul for all the major protagonists. For some of the characters
in the story, this was handled very well. For others though you just
didn't get the feeling of plumbing depths from which they could never
return.

&lt;br/&gt;
&lt;br/&gt;

And so, just like Thomas Pynchon's '&lt;span style="font-style:
italic;"&gt;Gravity's Rainbow'&lt;/span&gt; ruined David
Mitchell's &lt;span style="font-style: italic;"&gt;'Cloud Atlas'&lt;/span&gt; for
me, so was &lt;span style="font-style: italic;"&gt;'A Fire Upon the
Deep'&lt;/span&gt; ruined by Iain M. Banks' &lt;span style="font-style:
italic;"&gt;'The Algebraist.'&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

&lt;iframe src="http://rcm.amazon.com/e/cm?t=overwatering-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=1597800449&amp;fc1=000000&amp;IS1=1&amp;lt1=_top&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;f=ifr&amp;nou=1"
style="width:120px;height:240px; float: right;" scrolling="no"
marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

To first world citizens, the world is no longer a huge and almost
infinite place. Stories where a significant part of the dramatic
weight to the quest is the enormous distance that must be travelled to
cross a country no longer ring true. We can now fly to the other side
of the world in less than 24 hours and for less than $3,000. The other
side of the world no longer feels like an vast distance from where we
started. But we are starting to stare up into the night sky and
imagine just how far those other points of light are. Distances such
that after 30 years a satellite has only just left our solar system.

&lt;br/&gt;
&lt;br/&gt;

Treks across this almost infinite emptyness are the things that amaze
and scare us now. And unfortunately that was exactly the
feeling &lt;span style="font-style: italic;"&gt;'A Fire Upon the
Deep'&lt;/span&gt; failed to capture.

&lt;br/&gt;
&lt;br/&gt;

Don't get me wrong, it is a great Sci-Fi story, and the premise is
very interesting. It just could have been so much more. Hence, the
feeling of disappointment. If you're into Sci-Fi though, I would
recommend it.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8772697092033490395?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8772697092033490395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8772697092033490395' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8772697092033490395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8772697092033490395'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/04/fire-upon-deep.html' title='A Fire Upon the Deep'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-5831146866953202739</id><published>2007-04-07T15:08:00.000+10:00</published><updated>2007-11-19T21:08:27.477+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Shalimar the Clown</title><content type='html'>&lt;span style="font-style: italic;"&gt;Shalimar the Clown&lt;/span&gt;
&lt;br/&gt;
&lt;span style="font-size:85%;"&gt;Salman Rushdie&lt;/span&gt;

&lt;br/&gt;
&lt;br/&gt;

This book appears to be about Kashmir and so of course runs into that
eternal Rushdie question, 'How autobiographical is it?' And as usual,
the answer is 'Not at all.' As someone else has put
it &lt;span style="font-size:85%;"&gt;(gotta love that attribution)&lt;/span&gt;
this is as much about Kashmir as &lt;span style="font-style:
italic;"&gt;'The Satanic Verses'&lt;/span&gt; is about Islam.

&lt;br/&gt;
&lt;br/&gt;

&lt;iframe src="http://rcm.amazon.com/e/cm?t=overwatering-20&amp;o=1&amp;amp;p=8&amp;l=as1&amp;amp;asins=0679783482&amp;fc1=000000&amp;amp;IS2=1&amp;lt1=_top&amp;amp;amp;lc1=0000FF&amp;bc1=FFFFFF&amp;amp;bg1=FFFFFF&amp;f=ifr&amp;amp;nou=1"
style="width: 120px; height: 240px; float: right;" marginwidth="0"
marginheight="0" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;

Instead, &lt;span style="font-style: italic;"&gt;'Shalimar the Clown'&lt;/span&gt;
is about, well, Shalimar the Clown. This is a book in four parts all
revolving around one central character, and his doomed love for a
beautiful woman. And even though one part of this book is nominally
told from his perspective, this character remains an enigma right to
the last line of the last page. He is never truly revealed to you, and
you never truly know him. Why does he cause so much pain? Does he feel
pain himself? This is certainly not sloppy writing. How well can you
ever know another person? How well can you know yourself?

&lt;br/&gt;
&lt;br/&gt;

On a mechanical note, the first part of this book was the hardest to
get through, at least for me. It starts at the end, presenting you
with disconnected characters and no explanations for their
distance. Fortunately, this part is only forty pages. The book then
dives back into the past and builds the motivation, making you
believe. While all the time concealing the true motivation apparently
at the heart of everything. But then after all, aren't we just a
function of our past experiences? Are their truly any motivations
beyond what has already happened to us?

&lt;br/&gt;
&lt;br/&gt;

&lt;iframe src="http://rcm.amazon.com/e/cm?t=overwatering-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=009959241X&amp;fc1=000000&amp;IS1=1&amp;lt1=_top&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;f=ifr&amp;nou=1"
style="width:120px;height:240px; float:right;" scrolling="no"
marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

Well! Overall, a very good book. Some of my friends have described
Rushdie as a bit pretentious, and yes, I can see that. But, my
criteria for a good book (or movie) is simply 'Does it keep me
thinking once I've finished?' And on that standard this book
passes. Although, &lt;span style="font-style: italic;"&gt;'The Moor's Last
Sigh'&lt;/span&gt; is still my favourite of his.

&lt;br/&gt;
&lt;br/&gt;

Oh, and the Kashmir thing? My opinion is he writes in a setting he
knows, and that is always subservient to what the book is 'about.' In
this case a very significant percentage of his readers could never
know the Kashmir he writes of. It is probably lost forever, just like
the mind of Shalimar the Clown.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-5831146866953202739?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/5831146866953202739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=5831146866953202739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5831146866953202739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/5831146866953202739'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/04/shalimar-clown.html' title='Shalimar the Clown'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-8912043265363798673</id><published>2007-04-07T14:37:00.000+10:00</published><updated>2007-11-19T21:06:14.382+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Book Reviews</title><content type='html'>I read a bit, nothing impressive, or unusual, but a few books. And I
find it hard to keep track of which books I've read, when, and what I
thought of them immediately after finishing them.

&lt;br/&gt;
&lt;br/&gt;

So, I'm going to start posting short reviews of books I read as I read
them here, starting with the last two books I've read. With any review
it can be hard to avoid giving away some crucial detail of the
plot. And of course, everyone has a different view of what constitutes
a crucial detail of the the plot. In my view, it shouldn't be possible
to spoil a good book. It's not about what happens at the end, but what
happens to the characters (and you) as you read...

&lt;br/&gt;
&lt;br/&gt;

Anyway, I will try to restrict what I reveal about the plot to only
that which is revealed on the cover or in the first couple of
pages. But if you're really sensitive to 'spoilers' watch out.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-8912043265363798673?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/8912043265363798673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=8912043265363798673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8912043265363798673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/8912043265363798673'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/04/book-reviews.html' title='Book Reviews'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-7443023567377357654</id><published>2007-03-30T07:54:00.000+10:00</published><updated>2007-11-19T21:03:18.816+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>Achieving Closure</title><content type='html'>&lt;div align="center"&gt;
&lt;div style="text-align: left; width: 80%; background-color: rgb(255, 255, 153); font-size: 65%; padding-bottom: 10px; padding-left: 10px; padding-right: 10px;"&gt;

I was having a chat over lunch a few days ago about lambda
abstractions. The guy I was talking to didn't fully understand what
they did and how they worked, but he's a smart guy so he understood it
pretty quickly. I explained them using the below example, and I
thought I'd have a shot at writing this up for other people to read.

&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

Say you have the following functions in your code somewhere. The code
is intentionally simple. If that's a problem, imagine that everywhere
you see &lt;code&gt;double&lt;/code&gt;, it actually reads &lt;code&gt;encrypt&lt;/code&gt;.

&lt;br/&gt;
&lt;br/&gt;

&lt;div align="center"&gt;&lt;div style="text-align: left; width: 80%;
font-family: courier new; font-size: 85%; background-color: rgb(230,
230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;
int double(int val);

void doubleList(int values[], int valCount)
{
  for (int i = 0; i &lt; valCount; ++i)
    values[i] = double(values[i]);
}

int double(int val)
{
  return val * 2;
}&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

Now, it's pretty inconvenient to have to declare and define a whole
other function for something as short as &lt;code&gt;double&lt;/code&gt;. Excuse me
while I invent some syntax, but wouldn't it be convenient to be able
to do something like:

&lt;br/&gt;
&lt;br/&gt;

&lt;div align="center"&gt;&lt;div style="text-align: left; width: 90%;
font-family: courier new; font-size: 85%; background-color: rgb(230,
230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;
void doubleList(int values[], int valCount)
{
  for (int i = 0; i &lt; valCount; ++i)
    values[i] = function(int val) { return val * 2; }(values[i]);
}&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

And that bit with &lt;code&gt;function...&lt;/code&gt; is a lambda abstraction or
closure. What's happened here is that I've defined and called a
function all on the one line. This function doesn't have a name, so it
can't be called from anywhere else. But it is otherwise just like a
normal function; it appears on the call stack, it can return values
and it can even be passed parameters. Which is how &lt;code&gt;values[i]&lt;/code&gt;
ends up in the &lt;code&gt;val&lt;/code&gt; local variable.

&lt;br/&gt;
&lt;br/&gt;

In fact the only unusual thing about this function is that it was
defined 'inline.' And perhaps the syntax, but I invented that on the
spot, so don't hold that against it. There are nicer ways to express
this.

&lt;br/&gt;
&lt;br/&gt;

This sort of thing is known in some programming languages as a lambda
abstraction. That name comes from something called the 'lambda
calculus,' which doesn't really matter, but briefly it's a way of
writing programs as a series of anonymous functions, each referred to
as a lambda.

&lt;br/&gt;
&lt;br/&gt;

But why is it also called a closure? That's much more interesting
because that name actually says something about what you can do with
it.

&lt;br/&gt;
&lt;br/&gt;

Technically, it's called a closure because the anonymous function
'closes over' objects within the containing scope.

&lt;br/&gt;
&lt;br/&gt;

Which means almost nothing. Looking back at that inline doubling
example above it did appear slightly unwieldy. Something like this is
more readable:

&lt;br/&gt;
&lt;br/&gt;

&lt;div align="center"&gt;&lt;div style="text-align: left; width: 80%;
font-family: courier new; font-size: 85%; background-color: rgb(230,
230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;
void doubleList(int values[], int valCount)
{
  for (int i = 0; i &lt; valCount; ++i)
    values[i] = function() { return values[i] * 2; }();
}&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

Notice now how the anonymous function no longer takes any
arguments. How can that still work? The anonymous function is a
separate function on the callstack, with its own local variables. How
can it access the &lt;code&gt;values&lt;/code&gt; array, or the counter &lt;code&gt;i&lt;/code&gt;,
for that matter?

&lt;br/&gt;
&lt;br/&gt;

Imagine the following code:

&lt;br/&gt;
&lt;br/&gt;

&lt;div align="center"&gt;&lt;div style="text-align: left; width: 80%;
font-family: courier new; font-size: 85%; background-color: rgb(230,
230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;
class DoubleFunction
{
  public:
    DoubleFunction(int values[], int valCount, int i)
    {
      mValues = values;
      mValCount = valCount;
      mI = i;
    }

    int apply()
    {
      return mValCount[mI] * 2;
    }

  private:
    int mValues[];
    int mValCount;
    int mI;
};

void doubleList(int values[], int valCount)
{
  for (int i = 0; i &lt; valCount; ++i)
  {
    DoubleFunction func(values, valCount, i);

    values[i] = func.apply();
  }
}&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

So, what's happening here? We've defined a class with a constructor
and private members that happen to match exactly all the local
variables and arguments in scope where we want to construct our
closure, this class has only one member function called &lt;code&gt;apply&lt;/code&gt;
that matches the body of the closure.

&lt;br/&gt;
&lt;br/&gt;

This code is precisely equivalent to the version with the closure. And
in fact, it goes further than that. This version is how a compiler
could implement closures. A closure is an object with exactly one
method: &lt;code&gt;apply&lt;/code&gt;. So, anytime you see a closure in code just
imagine it as an object with a constructor that captures the current
scope and you're there.

&lt;br/&gt;
&lt;br/&gt;

A few details:

&lt;ul&gt;

&lt;li&gt;Some may be jumping up and down to point out how inefficient the
code with the class is. And they're right. But no compiler would
actually do that, it's just a way to understand what's happening under
the covers. Real closure implementations can be quite efficient.&lt;/li&gt;

&lt;li&gt;That class implementation takes copies of the values in scope. A
real implementation would actually take a reference to the exact same
value. This is important because it allows the value to change between
when the closure is created and when it's evaluated, and have the new
value be used at execution time.&lt;/li&gt;

&lt;/ul&gt;

I said above that you can imagine the closure as an object. There is a
consequence to that. You can take references to objects, pass those
around and call methods on them at some point in the future. The exact
same is true of a closure.

&lt;br/&gt;
&lt;br/&gt;

What do I mean and what use is this anyway? Well, in the following
code I'm using an invented syntax for closures. The part in the
parentheses to the left of the &lt;code&gt;-&amp;gt;&lt;/code&gt; is the parameter list,
and the type to the right of the &lt;code&gt;-&amp;gt;&lt;/code&gt; is the return type.

&lt;br/&gt;
&lt;br/&gt;

&lt;div align="center"&gt;&lt;div style="text-align: left; width: 80%;
font-family: courier new; font-size: 85%; background-color: rgb(230,
230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;
void applyFunctionToEveryElement(int values[],
                                 int valCount,
                                 (int) -&gt; int fn)
{
  for (int i = 0; i &lt; valCount; ++i)
    values[i] = fn(values[i]);
}

void doubleList(int values[], int valCount)
{
  applyFunctionToEveryElement(values,
                              valCount,
                              function(int val)
                                { return val * 2; }
                             );
}&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

Here instead of evaluating the closure as soon as it is created, it's
being passed into another function, which will evaluate it. Once for
every element in the list. Which is exactly what you could do with an
object. Big deal? Well, with that exact
same &lt;code&gt;applyFunctionToEveryElement&lt;/code&gt; function, you can also write
the following functions. Oh, and &lt;code&gt;applyFunctionToEveryElement&lt;/code&gt;
is traditionally known as &lt;code&gt;map&lt;/code&gt;, so I've used that name below -
same function though, just a shorter name.

&lt;br/&gt;
&lt;br/&gt;

&lt;div align="center"&gt;&lt;div style="text-align: left; width: 80%;
font-family: courier new; font-size: 85%; background-color: rgb(230,
230, 230); padding-left: 10px;"&gt;

&lt;pre&gt;
void printList(int values[], int valCount)
{
  map(values,
      valCount,
      function(int v) { printf("%d\n", v); return v; });
}

void scaleList(int values[], int valCount, int factor)
{
  map(values,
      valCount,
      function(int val) { return val * factor; });
}&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;br/&gt;

Both of these functions do completely different things to a list of
integers, but use the exact same function to perform the mechanical
walking the list part. Congratulations, you've abstracted out
iteration. The first function is pretty straight forward, it prints
every value and leaves the list unchanged.

&lt;br/&gt;
&lt;br/&gt;

The second function is a little more tricky. The closure created there
is using a local variable, which the &lt;code&gt;map&lt;/code&gt; function has no
knowledge of or access to. Remember that a closure captures all
objects in scope at the time it is created, and those objects can be
used anytime the object is evaluated. That's exactly what's happening
here.

&lt;br/&gt;
&lt;br/&gt;

How that works requires a few more tricks, so I'll be leaving it for
another post. It's related to why continuations and closures commonly
go hand in hand. Look out for my crash course in continuations and how
to implement closures coming soon.

&lt;br/&gt;
&lt;br/&gt;

For now, just know that this works. Closures are good, if your current
language has them, use them. You won't regret it. If you, like me,
find your language doesn't have closures, then...
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-7443023567377357654?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/7443023567377357654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=7443023567377357654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7443023567377357654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/7443023567377357654'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/03/achieving-closure.html' title='Achieving Closure'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-470808384548497474</id><published>2007-03-28T23:05:00.000+10:00</published><updated>2007-11-19T20:43:40.872+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comp. sci.'/><title type='text'>What Would You Do With It?</title><content type='html'>This is a question I've been thinking about a bit lately:

&lt;br/&gt;

&lt;blockquote&gt;If you had a computer that was as smart as a human, what
would you do with it?&lt;/blockquote&gt;

&lt;br/&gt;

It almost seems obvious; everyone wants a computer that has human
level intelligence, people have been working towards that goal for
literally 40 or 50 years, but what would they do with it if it was
suddenly dropped on them?

&lt;br/&gt;
&lt;br/&gt;

OK, some clarification. It's a currently modern computer that is good
at doing all the things computers are usually good at (arithmetic,
finding files, storing lots of information) but it also happens to be
really good at doing the sorts of things humans are usually good
at. You know, making an 'educated' guess, pattern matching, seeing
links and generally being partially intuitive.

&lt;br/&gt;
&lt;br/&gt;

It would &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; have any special
hardware, it wouldn't be able to speak for example. It would look just
like a computer, except for this extra bit.

&lt;br/&gt;
&lt;br/&gt;

So, what would you ask it? What would you do with it?

&lt;br/&gt;
&lt;br/&gt;

I think I can't actually answer this question as I'm not really a
computer consumer anymore. Because of my job a computer is no longer
just a tool, it's an end in itself. So for my purposes, I guess I'd
want it to be able to write code really well. But seriously, what
would you as a computer consumer want it to do?

&lt;br/&gt;
&lt;br/&gt;

Throwing this one open. Please comment
or &lt;a href="mailto:giles.alexander@gmail.com"&gt;email&lt;/a&gt; me with your
ideas, because I really do wonder...
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-470808384548497474?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/470808384548497474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=470808384548497474' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/470808384548497474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/470808384548497474'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/03/what-would-you-do-with-it.html' title='What Would You Do With It?'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6541479885845327365.post-1859028932106466438</id><published>2007-03-18T21:40:00.000+11:00</published><updated>2007-11-19T20:41:12.371+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sydney'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>shb75</title><content type='html'>Today was the 75th anniversary of the opening of the Sydney Harbour
Bridge. To celebrate, the bridge was closed to traffic and people were
allowed to walk across. North to South. We were there for the walk,
along with a &lt;span style="font-weight: bold;"&gt;lot&lt;/span&gt; of other
people. No
rabid, &lt;a href="http://en.wikipedia.org/wiki/Francis_de_Groot"&gt;right-wing
monarchists&lt;/a&gt; though...

&lt;br/&gt;
&lt;br/&gt;

An icon and engineering marvel like this is really all about the
photos though, so here you go.

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://1.bp.blogspot.com/_fhKywsFe6TU/Rf0ZS7pSKsI/AAAAAAAAAF8/XjOOxIl1GOc/s1600-h/IMG_2391.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://1.bp.blogspot.com/_fhKywsFe6TU/Rf0ZS7pSKsI/AAAAAAAAAF8/XjOOxIl1GOc/s400/IMG_2391.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043214970764012226" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://2.bp.blogspot.com/_fhKywsFe6TU/Rf0ZTLpSKtI/AAAAAAAAAGE/F0Qvvur5pps/s1600-h/IMG_2393.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://2.bp.blogspot.com/_fhKywsFe6TU/Rf0ZTLpSKtI/AAAAAAAAAGE/F0Qvvur5pps/s400/IMG_2393.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043214975058979538" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://2.bp.blogspot.com/_fhKywsFe6TU/Rf0ZTLpSKuI/AAAAAAAAAGM/YoChFouWmtA/s1600-h/IMG_2394.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://2.bp.blogspot.com/_fhKywsFe6TU/Rf0ZTLpSKuI/AAAAAAAAAGM/YoChFouWmtA/s400/IMG_2394.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043214975058979554" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://2.bp.blogspot.com/_fhKywsFe6TU/Rf0ZTLpSKvI/AAAAAAAAAGU/-ReeOCY3sSw/s1600-h/IMG_2399.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://2.bp.blogspot.com/_fhKywsFe6TU/Rf0ZTLpSKvI/AAAAAAAAAGU/-ReeOCY3sSw/s400/IMG_2399.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043214975058979570" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://3.bp.blogspot.com/_fhKywsFe6TU/Rf0ZTbpSKwI/AAAAAAAAAGc/FqpARSwG3I8/s1600-h/IMG_2403.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://3.bp.blogspot.com/_fhKywsFe6TU/Rf0ZTbpSKwI/AAAAAAAAAGc/FqpARSwG3I8/s400/IMG_2403.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043214979353946882" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://2.bp.blogspot.com/_fhKywsFe6TU/Rf0ZzLpSKxI/AAAAAAAAAGk/PnRgw1mN4Xs/s1600-h/IMG_2406.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://2.bp.blogspot.com/_fhKywsFe6TU/Rf0ZzLpSKxI/AAAAAAAAAGk/PnRgw1mN4Xs/s400/IMG_2406.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043215524814793490" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://3.bp.blogspot.com/_fhKywsFe6TU/Rf0ZzbpSKyI/AAAAAAAAAGs/aY7Jnl5o6uQ/s1600-h/IMG_2408.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://3.bp.blogspot.com/_fhKywsFe6TU/Rf0ZzbpSKyI/AAAAAAAAAGs/aY7Jnl5o6uQ/s400/IMG_2408.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043215529109760802" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/Rf0ZzrpSKzI/AAAAAAAAAG0/c_7v10Igr2U/s1600-h/IMG_2409.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/Rf0ZzrpSKzI/AAAAAAAAAG0/c_7v10Igr2U/s400/IMG_2409.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043215533404728114" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/Rf0ZzrpSK0I/AAAAAAAAAG8/Ps33GCrbdQ8/s1600-h/IMG_2415.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/Rf0ZzrpSK0I/AAAAAAAAAG8/Ps33GCrbdQ8/s400/IMG_2415.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043215533404728130" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://1.bp.blogspot.com/_fhKywsFe6TU/Rf0Zz7pSK1I/AAAAAAAAAHE/siAQ18DkuV0/s1600-h/IMG_2420.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://1.bp.blogspot.com/_fhKywsFe6TU/Rf0Zz7pSK1I/AAAAAAAAAHE/siAQ18DkuV0/s400/IMG_2420.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043215537699695442" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://3.bp.blogspot.com/_fhKywsFe6TU/Rf0aIbpSK2I/AAAAAAAAAHM/iLdIyBvlvkk/s1600-h/IMG_2429.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://3.bp.blogspot.com/_fhKywsFe6TU/Rf0aIbpSK2I/AAAAAAAAAHM/iLdIyBvlvkk/s400/IMG_2429.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043215889887013730" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://4.bp.blogspot.com/_fhKywsFe6TU/Rf0aIrpSK3I/AAAAAAAAAHU/J4pYPssel9Y/s1600-h/IMG_2433.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://4.bp.blogspot.com/_fhKywsFe6TU/Rf0aIrpSK3I/AAAAAAAAAHU/J4pYPssel9Y/s400/IMG_2433.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043215894181981042" border="0" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://1.bp.blogspot.com/_fhKywsFe6TU/Rf0aI7pSK4I/AAAAAAAAAHc/hN85TwbwdR8/s1600-h/IMG_2435.JPG"&gt;&lt;img style="margin:
0px auto 10px; display: block; text-align: center; cursor: pointer;"
src="http://1.bp.blogspot.com/_fhKywsFe6TU/Rf0aI7pSK4I/AAAAAAAAAHc/hN85TwbwdR8/s400/IMG_2435.JPG"
alt="" id="BLOGGER_PHOTO_ID_5043215898476948354" border="0" /&gt;&lt;/a&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6541479885845327365-1859028932106466438?l=overwatering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://overwatering.blogspot.com/feeds/1859028932106466438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6541479885845327365&amp;postID=1859028932106466438' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1859028932106466438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6541479885845327365/posts/default/1859028932106466438'/><link rel='alternate' type='text/html' href='http://overwatering.blogspot.com/2007/03/sbh75.html' title='shb75'/><author><name>Giles</name><uri>http://www.blogger.com/profile/05034571153121453245</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fhKywsFe6TU/Rf0ZS7pSKsI/AAAAAAAAAF8/XjOOxIl1GOc/s72-c/IMG_2391.JPG' height='72' width='72'/><thr:total>2</thr:total></entry></feed>
