Geek Smithology

March 16, 2009

Gardening; not architecture – Oblique Strategies with Brian Eno & Peter Schmidt

Filed under: Craft of Dev by Nathan @ 10:01 pm

Everybody blocks.  Writer’s block.  Programmer’s block.  Lego block.  As with so many things, one of the things that differentiates the great from the average is how we break through.  I’m always on the lookout for new ideas and came across the idea of oblique strategies, an idea from producer Brian Eno & Peter Schmidt.[1]  The basic idea is a deck of cards, each with a pithy (or cryptic) saying on it that helps you reframe your thoughts, like the the one in the title of this post:

Gardening; not architecture.

What does that mean?  We all have our own interpretation, and while our left brained developer minds might not like it, every one of those interpretations is correct.

It has been said that the best metaphors often come from bisociational discord.  In fact, assuming we can bring it together, the further apart the two sides of our conceptual model, the more epic our epiphany when it comes together.

And if it doesn’t?  Who cares!  Pick another card and go again…

Not building a wall, but making a brick.

[1] There are various web resources for using Oblique Strategies: I use the iPhone application myself.

February 28, 2009


Filed under: Announce,Craft of Dev,Ruby by Nathan @ 11:34 pm

chess Shortly after I left Service Intelligence all those years ago, a small panel convened at a Tim Horton’s to discuss the future. Well, actually, it was me, The Ront and Foo and since we seemed to like working together we figured we’d write a game of some kind. After not a whole lot of thought we figured we’d go ahead and write a chess game in Java. We didn’t really get anywhere with that, though. Then it happened.

I remember it like it was yesterday. But really, it was right after No Fluff Just Stuff 2005. My eyes were opened and it was decided right then and there that the chess game would written in Ruby. Sure it’s not the most “performant” language for chess calculations, but I wanted to learn Ruby and it’s always better to have a real project to work toward.

We decided to call it “pawnzilla”, for all the reasons you can imagine someone might want to call a chess engine pawnzilla. It’s been a bit of a roller coaster – we went through a horrible OO implementation, transition to 64-bit love and bitboards, and a fairly recent switch from sourceforge to GitHub, but after three and a half years (maybe a couple person months total effort – it’s tough to get time to work on this stuff!) I finally realized a dream, and played a game against my own chess engine.

It was pretty anticlimactic. All of the time so far has been spent working on a complete rules engine (this turns out to be quite a difficult proposition!), so the AI is pretty stupid. So stupid that the game lasted only 7 moves. But still, after all this time, it was great to watch pawnzilla make moves and actually “understand” that the game was over.

I think that we’ve implemented some pretty cool ideas in pawnzilla (including our domain specific approach to testing) and now that there is finally something to see, I hope to start blogging about some of those ideas. The next big goal is to develop the AI into something that doesn’t suck and hook it up to the free internet chess server so that it can get rated. So far it’s been a hell of a ride, and even though it took so long, it’s nice to get to such a significant milestone in my own labour of love.

If you’d like to see it, pawnzilla is licensed under the Apache 2.0 license and you can check it out over on github. And if anyone out there wants to play with a pure-ruby chess engine (should be a lot of fun just to work on different AI strategies now that the rules engine is in place) drop me a line and I’ll be happy to talk about it.

So cheers to pawnzilla.

February 1, 2009

This is your project on Git…

Filed under: Craft of Dev,Ruby by Nathan @ 3:36 pm

There’s been a lot of noise ’bout distributed source control the last year or two, especially with regard to Linus’ other baby, Git. Even I’ve bit – moving pawnzilla from sourceforge to GitHub last year, with serious thought to going with gitsvn in my professional life.

Stuart over at Relevence even went so far as to say that If you run a significant open source project that is not on a distributed SCM, it is a clear warning sign that you are a dinosaur.

He points to a pretty brilliant data visualization of commits to the rails project over the years. Take a look around April 2008, when they moved to Git. Make sure to watch the HD version fullscreen, it’s truly something to behold.

As always, our friends the pragmatic programmers have a book about Git to get you started on the road to enlightenment. (Or distributed SCM, as if they aren’t the same thing…)

July 1, 2008

Street Usability (or lack thereof)

Filed under: Craft of Dev by Nathan @ 8:16 pm

Happy Canada Day! While it’s nice to have a special day, I hope my fellow Canadians take more than one day a year to celebrate everything that makes this such a great country. Except for the number pads on these newfangled parking “meters” in downtown Calgary. I’m sure they’re all over the world by now, but I don’t drive all that often to begin with, and me driving downtown is almost unheard of. The idea is that you park, and then pay for time based on the numbered zone in which your car resides. It insisted the zone number I was keying in didn’t exist. Just as I was about to reduce the machine into it’s component atoms, I looked down and saw this:

WTF is the zero doing up there? There are really two different ways number are represented – like a phone, or like a numeric keypad. The only common idea is that the zero goes on the bottom! So I had pushed the $1 key a couple o’ times and ended up not inputting the correct zone. But what about the larger potential consequences? What if the completely incorrect number I typed in actually was a valid parking zone, just one that was elsewhere. Then while I’m off traipsing around downtown, thinking I’ve done my duty in properly remunerating our fine municipal government for the privilege of parking I’ve left myself open to any nefarious combination of ticketing or towing. Sure you may say I should looked at the display and double checked my work, but can you really defend the position of that zero?

Luckily I was able to calm my nerves by heading into the local coffee shop and settling down with this:

June 12, 2008

Well Done, Mozilla

Filed under: Announce,Craft of Dev by Nathan @ 9:59 pm

I just got around to installing Firefox 3 on my MacBook Pro, and while I find the new Firefox is completely hideous under Ubuntu, it is beautiful in OS X. It’s obvious that a lot of effort was put into making the GUI have the native look and feel. From a couple hours of light browsing everything is better – from the little things like buttons and checkboxes and text fields looking “right”, to the new look for the tabs, to the buttons, Firefox finally looks like it belongs on a Mac.

I’ve never been a fan of skinnable applications, I’d rather have everything be consistent (in an aesthetically pleasing way). So, great work on making Firefox look great out of the gate. And this doesn’t even include any of the new features:

– It only saves passwords after you’re authenticated – about damn time!
– Nicer download window
– Waaay better incremental search in the address bar
– like the new add-ons and plugins look and feel

And it’s noticeably faster for general browsing. I’ve tended to use Safari (gasp!) over the last few weeks, but Firefox has come back with a vengeance.

My only real complaint is that my All-in-One Gestures plugin isn’t compatible. When the hell are you going to make mouse gestures part of the core feature set, Mozilla? Opera did it years ago…

Update – All-in-One Gestures has been updated, so Firefox is back to it’s glory. That said, I’m doing this update from Safari…go figure. Oh, and I changed my heretical misspelling of MacBook because Popowich made fun of me.

February 27, 2008

Domain Specific Adventures in Real Life

Filed under: Craft of Dev,Ruby by Nathan @ 6:49 pm

Fatal error: Call to private method CodeColorer::performHighlightCodeBlock() from context '' in /data/5/0/134/72/297561/user/302314/htdocs/blog/wp-content/plugins/codecolorer/codecolorer-core.php on line 55