Skip to main content

Ada Lovelace Day 2009

Today is Ada Lovelace day. You can find out about what this means by looking at the website:

Put simply, I signed a pledge to, "publish a blog post today about a woman in technology whom I admire". I hope there are many more events like this.

So, on to my post:

The subject of my post isn't a woman nor in technology. She's my seven-year-old daughter and I want to describe a positive experience we shared in technology.

Like many children her age Penelope has used software such as a word-processor for writing letters to grandparents and painting software for all sorts of interesting creations.

However, Penelope was curious about what I did all day sitting in front of my computer: was I drawing pictures? writing letters? playing games? I explained that I designed and wrote software, "er… I write in a special computer language that tells it what I want it to do."

"Can I try?" was the inevitable response.

Remembering back to my own school days, I looked up the Logo computer language.

We spent a couple of hours playing together, she at the keyboard with me looking over her shoulder. She quickly learned how to control the "turtle" on the screen and then came to the realization that she could make the computer do interesting stuff that nobody else had thought of before.

We talked about some interesting maths: the concept of an algorithm (a recipe for getting stuff done), basic geometry (lines, points and angles) and basic flow control (repeat). We even managed to draw a box-flower:

    to sqr

        repeat 4 [fd 100 rt 90]


    repeat 36 [sqr rt 10] 

(draw a box, turn x degrees and repeat 360/x)

In the end Penelope was so excited we couldn't get her to go to sleep (we were doing this instead of bed-time story).

I want to draw your attention to the excitement that Penelope felt.

Like me, she now sees how much fun it can be to "create" on a computer.

The fact that she is a girl isn't (and shouldn't) be special. Unfortunately, women in technology are rare (I've never worked with a female developer and only worked with three female software architects). This is a problem because gender has nothing to do with the ability to create software. I can only assume that there is something cultural going on.

In conclusion, I hope that Penelope retains her sense of wonder at the creative potential locked away in computers rather than view technology as just another "boy thing".

The 56, 5 Book Meme

"In such cases, the existence of the institution enables individuals or groups of individuals to impose on objects functions that the objects cannot perform in virtue of their physical structure alone, but only in virtue of the collective recognition of the object as having a certain status, and with that status, a special function."

Rationality in Action by John Searle

Pass it on:

  1. Grab the nearest book.
  2. Open it to page 56.
  3. Find the fifth sentence.
  4. Post the text of the sentence in your journal along with these instructions.
  5. Don't dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.

(The book was next to my computer because it's what I'm reading on the train at the moment when going into work. Oh, and I promise to be better at updating this blog from now on.)

Concerto Review

It has just come to my attention that someone actually wrote a review of my performance of the Vaughan-Williams concerto.

When I sat down to perform I noticed a chap sitting right on the front row, "in the line of fire" with the business end of my tuba pointing right at him. I asked him if he would like to move, but he declined.

It turns out he's a local music fanatic (his words) called Andrew Wardle and he wrote the following on his Band Club blog:

"The highlight of the evening was surely Ralph Vaughan Williams's Tuba Concerto in F Minor. The other pieces would have made the event well worth attending, but this made it a must attend. I was lucky enough to have the very best seat in the house (you'd be amazed how often that happens) as Nicholas Tollervey gave his excellent rendition of this all too rarely performed work. He read it off the sheet as well, unusually for a soloist. They can usually just get away with playing a piece of music, and leave the hard work to the orchestra!"

It's a good job he wasn't reading the score over my shoulder otherwise he'd have spotted my "deliberate" mistake that only myself and Graham (the conductor) noticed. :-)

Learning Erlang..? Why...?

I spent last week at two events:

  1. A beginners Erlang course given by Richard Carlsson on Monday to Wednesday, and
  2. The Erlang eXchange conference (sic) for the rest of the week.

As the Erlang site states Erlang is a functional programming language with an emphasis on concurrency, distribution, robustness, "soft" real-time (where response times are required within milliseconds), hot code upgrades, incremental code loading and external interfaces to connect to the outside world.

Why am I, someone who writes C# code for an investment bank, interested in this? There are three reasons:

  1. Self improvement: I'm always trying to expand my horizons, learn new things and challenge my own habits and world view. Erlang is an exploration of a completely new style of programming – think of it as personal development for the software developer in me.
  2. The next big thing™: What everyone is looking for… It seems to me that Erlang is where Ruby was four years or so ago (pre-Rails) – on the cusp of transforming from a niche language to something mainstream and "in demand". What is the reason for this transformation? From my newbie perspective I can see that:
    • Because of the way the Erlang language is designed, source code is relatively short and easy to understand (compared to my experience of writing C-like programming languages) and is thus faster to write and easier to maintain (and therefore cheaper and more fun).
    • The move to multi-core architectures to speed things up means concurrency is now a very big issue. Erlang has an excellent and easy to understand means of dealing with concurrency (based on the so-called "actor" model, isolation and message passing). This is in contrast to most other languages that use threading, locks and shared resources – a methodology that is harder to get right and a nightmare to debug (I know this from bitter experience). As Erlang gets this sort of thing right I want to exploit concurrency in the simplest and most effective way possible.
    • You get a lot for "free". The OTP libraries and other modules that come with the Erlang language provide lots of re-usable functionality – meaning developers don't have to constantly write so-called "boiler-plate" code before implementing the functionality the software was actually designed to fulfill. As most languages have large and feature rich libraries associated with them this aspect of Erlang isn't a differentiator – rather evidence that it is a mature and actively maintained language.
    • Buzz. There is a book, a movie and lots of articles, blogs and websites out on the net. Erlang is starting to get noticed and I think it only a matter of time until a "killer" application arrives (a la "Rails" on Ruby) to suck more developers into using it.
  3. Free Software / Open Source: My interest in programming started after I installed Redhat 5 on an old 486 PC my father-in-law gave me back in the day… My commercial experience is completely within the proprietary world of .NET. I'd like to get commercial experience using free software (not the oxymoron it might look).

The course I mentioned at the start was great fun and Richard is an excellent teacher and obviously an expert in the field. All of us went away enthused and wanting more. Luckily there was more… the Erlang eXchange.

This was a relatively small affair but I got to meet lots of interesting people and see some of the cool things that have been done with Erlang. Richard took some photos that can be found here and Podcasts can be found at the Erlang eXchange website.

So what happens next..?

As those of us on the beginners track soon realised, we need to keep learning and practice our newly acquired skills. As a result, I'm devouring Joe Armstrong's book whilst on the train into work and we've organised ourselves a site on Google and intend to set projects for each other to keep us motivated and on track.

My first challenge to the rest of the group is to create a simple IRC-bot server:

  • Start a bot server with a particular name. For example: bot:start("Frank").
  • Connect with a username to the bot and talk and be ignored (as if in a regular IRC chan).
  • The bot only pays attention when any input starts with its name. E.g.: "Frank, blah blah blah blah"
  • You teach the bot new things by saying "Frank, learn Erlang is a cool language about Erlang". The pattern being: botname, learn X about Y.
  • The bot responds to questions of the form "Frank, tell me about Erlang" with "Nicholas, Erlang is a cool language". The pattern being: botname, tell username/me about Y. And the response being: Username, X.
  • The bot returns a list of all it knows by responding to "Frank, what do you know?" with "Nicholas, I can tell you about Erlang." The pattern being: Username, I can tell you about [list of all X's].
  • Asking "Frank, help." returns a summary such as this one.

Why do an IRC bot? I can think of several good reasons:

  • It should be a good challenge to write the core functionality described above using the skills we already have.
  • At its heart, an IRC bot is pattern matching – something Erlang is supposed to be good at so we'd better explore what works and what doesn't.
  • We can build upon this core to help learn other aspects of the language:
    • Using ETS/DETS/Mnesia for data storage. This is a common requirement in Erlang projects so we might as well try doing it in this project.
    • Using OTP to create the server architecture for the bot.
    • Network programming so we can connect to a real IRC server to play.

I'll keep you posted how I get on.

Wordle Play

I've just found a rather cool website called Wordle.

It allows you to enter text and it produces "beautiful word clouds" (to quote the website) – and I happen to agree with them. I used the text of my post on computational creativity and species counterpoint to produce the following:

Composing Species Counterpoint with Genetic Algorithms

(click the image to get the full word cloud from the Wordle site – Java required).

You are able to change the colours, fonts and layouts to create some rather funky effects. It is also possible to import the tags from specific users on delicious. Here's a picture of the results for my user (ntoll):