Showing posts from 2011

The Battle Path

Writing-On-Stone Provincial Park, Alberta, Canada

Carbide Wilson Mill

Abandoned Mill, Gatineau, Quebec

©2011 Darren DeRidder

Checking In

Hard to believe the month of November flew by without so much as a peep out of 51 Elliot.  Between getting my boat put away for the winter, removing stain from my porch and cleaning the wood, spending too many hours on and various architectural websites, and raking up about 87 bags of autumn leaves, it just happened.

And, instead of posting my usual techo / philosophical points of view, the last couple of months have been mainly a time to sit back and observe. The Occupy movement has been in the news a lot, the campaign in Canada has been building momentum, and businesses of the digital economy are speaking out against the abuse of copyright by media conglomerates as manifest in the much-hated SOPA and Protect-IP proposals. I'm looking forward to seeing how it all plays out, and I hope it results in a better world for everyone.  A Christmas wish, a bit early.

I did manage to accumulate a fairly big back log of interesting articles, so here to make up …

Pink Lake

Pink Lake, Gatineau Park, Quebec

 © 2011 by Darren DeRidder

Little Meech Outflow

Gatineau Park, Quebec

© 2011 Darren DeRidder

Himeji-jo Corridor

Himeji-jo Corridor
© 2010 Darren DeRidder. Originally uploaded by soto voce
A room within one of the outer walls of Himeji Castle, Himeji, Japan.

Himeji-jo no Kabe

Himeji-jo no Kabe
© 2010 Darren DeRidder. Originally uploaded by soto voce
Himeji castle wall, Himeji, Japan

Japanese Craftsmanship

In his wonderful and comprehensive book, "Japanese Homes and Their Surroundings", first published in 1885 and now available from Google Books, Edward S. Morse writes the following delightful description of Japanese home-building craftsmanship.

Within these houses there are often to be seen marvels of exquisite carving, and the perfection of cabinet work; and surprise follows surprise, as one becomes more fully acquainted with the interior finish of these curious and remarkable dwellings.
... as to altering the present plan of housebuilding... If such changes are effected, then will perish many of the best features of true Japanese art, which has been the surprise and admiration of Western nations, and of which in the past they have been the unwitting cause of modification and degradation it has already undergone. A somewhat extended experience with the common everyday carpenter at home leads me to say, without fear of contradiction, that in matters pertaining to their craft th…

Origami Flight

Paper Airplane Sculpture, Toronto Pearson International Airport

©2011 Darren DeRidder

The Market

Byward Market, Ottawa, Ontario
© 2011 Darren De Ridder

Aberdeen Pavilion

The Aberdeen Pavilion at mid-day, Landsdowne Park, Ottawa.

© 2011 Darren DeRidder.

jQuery, Data-link, Knockout.JS and Microsoft

In may 2010 Microsoft contributed the template and datalink plugins to jQuery. The announcement was made on Scott Guthrie's blog:

On October 4 Scott G, Boris Moore and John Resig all announced these as official jQuery plugins.

One of the comments in Scott's post suggested that his team should be working with Steve Sanderson as well.  Sanderson is the guy behind the Knockout.js templating and data-binding library.…

Marina at Dusk

Sunset over the Nepean Sailing Club, Lac Duschenes, Ottawa

© 2011 Darren De Ridder

Selenium IDE Sideflow Update 1

Once again, for your development pleasure, ladies and gentlemen, the famous Sideflow plugin for Selenium IDE!  Goto and while loops performed in Selenium, before your very eyes.

Some people were having a bit of trouble getting started, so I've updated the demo test for Sideflow (Selenium IDE flow control extension) to use the latest Selenese commands.

What's changed: no more direct access to 'storedVars'.  No more 'getEval'... uses 'runScript' instead.  Need to do some weird casting to perform counter increments.

The github repo is over here.  Everybody git on board the github train!

PS. You can find the original post here.

Spinnaker Set

We pulled off a perfect spinnaker set with a crew of first-time sailors, Canada Day long weekend. The weather couldn't have been more perfect!

Flying the spinnaker is challenging, and doing it with a crew of brand new sailors was interesting.  There's a real art to skippering a boat and helping the crew learn the ropes.  It's definitely taught me a lot about patience and leadership.

A simple introduction to TDD with Expresso in NodeJS

In the last post we made a super simple NodeJS module called hello.js and used it in app.js. We can make it better, and test it with Expresso.

First we can add to the awesomeness of hello.js by adding a farewell function, so it can say both "hello" and "goodbye".

// hello.js var greeting="Hello World!"; var farewell="Goodbye Cruel World!"; var greet = function(){     return greeting; }; var leave = function() {     return farewell; }; exports.greet = greet; exports.leave = leave;
So now our module can say hello, and bid farewell.  It exports the "greet" and "leave" functions, which we can use from app.js like so:

// app.js var hello=require('./lib/hello.js'); console.log(hello.greet()); console.log(hello.leave());
Notice that I moved hello.js into a new directory called "lib", which is why the require statement now says "require('./lib/hello.js')".

Now suppose we want to test this module u…

A simple intro to NodeJS modules

In preparation for an upcoming workshop at Shad Valley on NodeJS, I tried to come up with some simple examples of the CommonJS module system in NodeJS.  Felix Geisendörfer has a similar "hello world" example in his Node.js Beginner Guide.  I've put the main concepts into a short tutorial. We start with one line of Javascript, and turn it into a working NodeJS module.

Assuming you have node installed, you can run "node" from the command line to get the REPL (ie. node shell).

$ node > console.log("Hello World!"); Hello World!
Wonderful. How about putting this in a file?
// hello.js console.log("Hello World!")
Then run:
$ node hello.js Hello World!
Also wonderful. Then, how about making an application that includes hello.js? Let's call it app.js. Here are the two files:

// app.js require('./hello.js');
// hello.js console.log("Hello World!");
Now we can run it like this.
$ node app.js Hello World!
Again wonderful. We…


Reading articles on multi-core scaling while listening to a new track from Jamiroquai - "Smile" - available as a download from It's pretty good - even if you're not into software design for multi-core, multi-cpu computer architectures. :-)

Windows 8 gets on the Web Stack Bandwagon

I'm a Mac / Linux guy, but it's good to see Microsoft putting some serious work into the user experience in the Windows 8 preview.  What's cool about the video on that link is that they've also seen the light when it comes to the developer experience, paving the way for rapid application development by leveraging the web stack of HTML5 and JavaScript.  A long way back I wrote about  "Gödel, Escher, Bach" to explore the link between artistic creativity and great engineering work - how a love of technical complexity drives some developers, compared to a love of elegance and simplicity that drives another kind of developer.  While technical complexity enamors the uber-geek, artists are inspired by technology that gets out of the way and allows them to do what they do best - create stuff.  Even though a web stack wouldn't be my first choice for some kinds of apps, it's just fine for a whole lot of them, and when it comes to rapid application development i…

get path in bash

When running a bash shell you might want to find files and directories relative to the path of the script. The use of 'pwd' in this case can lead to problems if the script has been run from another directory. What you need is the absolute path of the script being executed. Here's an example of how to do it. This works on most Linuxes but unfortunately is not supported on Mac OSX.

Map Reduce in JS

Joel Spolsky's piece "Can Your Programming Language Do This?" was an enjoyable read for three reasons: 1) he provides some clear, simple examples of map/reduce and anonymous functions, 2) he shows how these are natively supported in JavaScript (actually there is even more and better support for Map/Reduce in JavaScript than he describes) and 3) he hints (link to related article) at why Java is a mediocre language that produces mediocre software. Originally posted in 2006 it generated a big buzz on HN this morning and is more timely now than ever, considering the groundswell of support and innovation around JavaScript in the upcoming generation of web-scale programmers.

Those who follow the bleeding edge of software development today know that in the last two years there has been a Cambrian explosion of innovation and creativity related to JavaScript as a serious, server-side programming language.  It may not be a stretch to say that a majority of the software people …

Virtual Chior 2.0 "Sleep"

The previously mentioned production of Eric Whitacre's Virtual Chior 2.0 performance of "Sleep", previewed recently at TED, has been posted on Youtube. A brilliant collaboration of more than 2000 singers from around the world participating in a virtual choir.

The Dark Side of Hadoop

Backtype Technology posted an article "The Dark Side of Hadoop".

[via HN]

2000 Voices

One of my top 10 albums of 2010 was Eric Whitacre's Cloudburst.  TED has just released a talk by Eric Whitacre featuring the amazing 2000-voice virtual choir singing two of the songs featured on the album.  It's definitely worth checking out.

Incidentally, I was at a meeting of high-tech entrepreneurs this evening, and in a very interesting conversation with a high-tech company founder who shares a background in classical music, was told that musical training, and piano in particular, often results in highly analytical thinking.  As an engineer with a background in music, I've always felt a strong connection between musical composition and technical design, but have never been able to say exactly what it is. This video really seems to find itself right at home in the intersection of artistic creativity and technical innovation.

Crib Goch

Scrambling on Crib Goch, Snowdon, Wales

© 2011 Darren DeRidder

Llyn Llydaw

Crib Goch and Llyn Llydaw, Snowdonia, Wales, UK

© 2011 by Darren DeRidder

Crib Goch and Llyn Llydaw

Crib Goch and Llyn Llydaw, Snowdonia, Wales

© 2010 Darren DeRidder.

Google Person Finder - Japan Quake 2011


Prayer for Omar by darrenderidder

Here's a short composition I wrote using Omnisphere, a virtual synthesizer. It's basically a meditation on making a choice between two different mindsets: forgiveness, reconciliation, and respect for human dignity... versus fear, bitterness, vindictiveness and disregard for human rights. The song is meant to be a musical expression of the first mindset.

C++ STL Manpages

Do man pages exist for the C++ STL library?  Yes they do, and here they are.
libstdc++-man.4.4.0.tar.bz2. . . Apr 21 2009 360K

Phonegap and jQuery Mobile First Impressions

This past long weekend I decided to spend some time getting familiar with PhoneGap and jQuery Mobile.  After a couple of afternoons spent in coffee shops, walking through the learning curve and experimenting, I had a working app installed on my iPhone.  Not the most polished piece of boilerplate, but enough to show off to some friends, who were duly impressed.

These are my first impressions after muddling around with it for a while.

Why PhoneGap?

PhoneGap is one of several platforms that aim to make developing cross-platform mobile apps possible, and easy. It does this by wrapping a mobile web app in a stand-alone application that provides wrappers for the phone's native APIs, including accelerometer, sound, vibration, media, geolocation, camera and local storage. PhoneGap targets a large number of mobile platforms including Android, iPhone, Blackberry, Palm, Symbian and WebOS. It uses straightforward markup, script and stylesheets to build the application. Some of the native look …

Human Tech

Software engineering should not be about getting humans to become more technical. It should be about getting technology to become more human.

jQuery on the Command Line

This is too cool... A Jquery command line interface. TJ Holowaychuk posted it to his git repo last night.


   $ curl | query logging img attr alt

Tell CRTC to Reverse UBB

The CRTC is soliciting input from Canadians on anti-competitive Usage Based Billing practices by Bell, Rogers, and other incumbent ISPs.  The Open Media group has a convenient online form letter that you can submit to the CRTC.

Go the Open Media page and let your voice be heard by the CRTC!

When I wrote that "dumb is the new smart" in December, predicting that consumers would demand dumb pipes, it was before the FCC ruling on the merger of Comcast & NBC and the CRTC 2011-44 decision.

That CRTC ruling and subsequent public uproar has brought the issue to a head faster than I imagined.  Alas it seems that big ISPs like Bell and Rogers don't get it yet, but a lot of Canadians seem to think that dumb pipes are a smart choice. Yay! They're demanding it loudly, even if the big incumbent ISPs were too slow to see it coming.


Sunflowers on an October afternoon.

Steam Train

Working steam engine at Wakefield, Quebec.

Artist at Work

Jacques Boissinot, Artiste-peintre, Gatineau, Quebec

Remembering Autumn


Petition Anti-competitive Internet Fees in Canada

Canadian ISPs want to charge you so much for Internet usage that it would be cheaper and faster to buy the most expensive solid-state hard drives and ship them across the country than it would be to download the same data online.  Sign the petition against Usage Based Billing.


Why Dropbox Beat Syncplicity

If you follow this blog you know I'm a big fan of simplicity in design.  Most software development is rife with complexity, and a lot of developers just love to wallow in it.  It's a good recipe for Epic Fail.

Isaac Hall addresses this in a great post on why Dropbox beat it's competitors, summarized by Graham Wetzler.  It echoes similar stories on the reasons for Facebook's displacement of MySpace.  The idea that "features equals power" is a myth.  As Paul Graham said, power is the result of conciseness.  More programmers need to get this.

Syncplicity lacked simplicity.   Anyways, good read.

[via HN]