Category Archives: Stories

Prime Time BBS

Note: Throughout this post, I’ll use “us”, “I”, “me”, and “we” fluidly, since I did most of these things with my friend, and I just can’t decide whether each thing was done by me alone, or together with my friend.

When I was in grade 8, I started a bulletin board (BBS) on my family computer, using a 2nd phone line that I convinced my parents to get for us. It started out as a text-based system using free software that I downloaded from another BBS, but I soon migrated to graphical systems.

I used a pirated version of First Class Server for experimentation. First Class was the gold standard for Mac BBS software, but it was quite expensive. I recall that it was like $300 for a hobby license, which had a limit of 100 user accounts, and you couldn’t use it for commercial purposes. I might be misremembering the exact price and limitations, but for a kid with no job it was champagne, and I wasn’t even old enough to have a beer budget yet.

The thing that set First Class apart from all the competition was its graphical user interface. You see, most BBSes at the time were text-based, meaning that it was kind of like using your terminal program. No mouse, or windows. The menus would just be numbered lists of options, and you would have to type in the option that you wanted to choose. I happily tolerated these archaic text-based interfaces until I discovered First Class.

First Class provided, pardon the pun, a “first class” experience. When you logged into a First Class BBS, it felt like you were just accessing a multi-user part of your computer. The main menu was just like a regular Finder window but with some custom icons and backgrounds in the window. It supported email, message forums, file attachments, multi-user chat-rooms, and background, resumable file downloads. The experience was pretty darn close to modern systems like Slack and Discord – but back in 1993, it was ground-breaking.

For me, there was no going back to text-based bulletin boards, once I knew that GUI BBSes existed.

The only problem was cost. First Class was out of my price range, and using pirated software for a public BBS just wasn’t an option – it was too easy to get caught. And it was always my intention to grow it into something big, like AOL or Compuserve, so everything had to be legitimate and above board.

Luckily, in chatting with the sysop of The Revelation, the best First Class BBS in the Vancouver area at the time, I discovered that they had a license for NovaLink Pro, a competing BBS system that also had a graphical user interface. And he was willing to sell it to me for an affordable price. It was around $100. I think it had a limit of around 100 users, but there was no commercial restriction.

I had never heard of NovaLink Pro before, but it sounded perfect. There weren’t any NovaLink Pro BBSes in my area, so it was difficult to make a comparison, but they had a demo version that I downloaded and installed. It wasn’t as polished as First Class. Some aspects of the UI were similar. E.g. The main menu looked like a finder window with icons for all of the menu items. However, in First Class, you could customize the look of the items – change the icons, drag them into different positions, etc. On NovaLink, the icons were arranged in a grid, and sorted alphabetically, and you couldn’t change the config. You could click on an icon to select it, or double click it to open it, but you couldn’t drag it around.

NovaLink did have some cool features that First Class was lacking, such as Telnet support (i.e. the ability to log into the BBS over the internet – which was a very new thing), but overall, the impression I got was that it was a poor-man’s First Class.

As a fourteen-year-old kid, I was nothing if not a “poor man”, so I felt that NLP (NovaLink Pro) was a perfect fit. There’s also some part of me that likes to support the “B” team. I was a Macintosh user in a world of 99% PC, and despite owning a Nintendo Entertainment System, I was very curious about competitors like the Sega Master System – and later on, about the “also-rans” in the 16-bit console wars, like TurboGraphix16. My search for movies similar to Indiana Jones led me to a few duds (King Solomon’s Mines, Alan Quaterman and the Lost City of Gold), but also to a few that were better than okay (Romancing the Stone).

So, in the world of GUI BBSes, where First Class was the clear leader, I liked the idea of going with NLP – the underdog.

Before finalizing the purchase, I contacted ResNova, the company that made NLP to make sure that it was “legal” for them to sell me the license. They said it was, but recommended that I buy the manual from them – and we would be entitled to upgrade to their new version, “4.0”, when it came out.

I bought the software from the Revelation BBS, but I don’t recall ever receiving any packaging from them. It must have been the sort of thing where they called ResNova to transfer the license. I do recall having an option of how I wanted to get the software. I could either wait for it to come by mail (actually that part was going to happen anyways, because we bought the manual – and the software came on floppy disks inside the manual), or I could download it from Nova Central, ResNova’s BBS, and pay the long distance fee. Yes, in those days, before the internet, you actually needed to dial into BBSes over the phone, and if the BBS was in a different area (ResNova was located in California), then you had to pay long distance fees by the minute, which could grow to be substantial.

I figured, how long could it possibly take to download the software? I was also pretty hyped about logging into a real BBS that used NovaLink Pro, so I chose to try to download it.

As it turned out, it can take a very long time to download software. The application fit onto three 1.44MB floppy disks, so it was probably about 4 megabytes. My modem was 14.4kbps, so under optimum conditions, it should take about 100 seconds per disk, so I should have been looking at five minutes or so. I don’t remember the long distance prices, but let’s say they were ten cents per minute (I think that is realistic for the time), then I’d be looking at fifty cents. Well within my budget. But there was still the matter of logging in, and filling in the sign-up form. So we’re looking at about ten minutes or so. I could splurge for a dollar. Heck, make it twenty minutes – I’ve got plenty of change where that came from.

Unfortunately, their download protocol, a custom protocol that they named RNP (for ResNova Protocol) was a little flakey. I started downloading the disk images for the software, and then proceeded to browse around the BBS to see what else they had to offer. Unfortunately, the download stalled at around 5%. I gave it a few minutes to see if it would “un-stall” itself, and after it didn’t show any more progress, I canceled the download and started again. The same thing happened again. So I put it on for a third time, but this time I decided to just let it download undisturbed and not browse around the site. Their download protocol, a custom protocol that they called RNP (ResNova Protocol) was supposed to support background downloading, but it was a little flakey.

I don’t think that three times was a charm, because I remember the call lasting nearly three hours. Ultimately, though, I did manage to download the software. I didn’t mention anything about the long distance to my parents, and they never brought it up, so I’m guessing it wasn’t so high as to stick out like a sore thumb.

Two weeks later, I received a parcel in the mail with a hard copy of the manual, printed and bound in a three-ring binder, and “official” install disks. There were four disks in total, the fourth one containing only my license key.


Setting up the BBS

I installed the BBS on the family’s Macintosh Centris 660AV computer, and just kept it running in the background all day. As I write this, I begin to question how well this would have worked on the Macintoshes of the day – I think it was around System 8, which didn’t have preemptive multitasking. But as far as I recall, it worked just fine, and my family didn’t even know it was running in the background.

I had a lot of fun poring over the manual to learn about all of the features. NovaLink Pro was a hybrid Text/GUI system that clearly used to be text-only, and added a graphical UI later on, evidenced by the fact that many of the features, such as scripting, were text-only, and had no impact on the GUI.

One of their big selling features, which supposedly set them apart from First Class, was that they supported Telnet out of the box – i.e. users could connect to the BBS over the internet, potentially opening it up to a global audience. Unfortunately, this was one of those “text-only” features. Yes, they could log in over the internet, but they could only use the text interface. That wasn’t of much interest to me.

My plan for the BBS was mostly to provide message forums and file download areas, but I also wanted to create a visually appealing experience, using The Transformers (the toy) as a theme. Most First Class BBSes provided a “modded” version of the client with some custom icons and background images, which gave each BBS a distinctive look and feel. These mods were easy to make using Apple’s free ResEdit tool. I created one of my own when I was experimenting with First Class, prior to purchasing the license for NLP.

I was a little disappointed when NLP didn’t seem to allow the same kind of customization. The administration app included a menu editor tool that allowed me to drag items, such as file libraries, message forums, and chat rooms from a palette into the menu, but it didn’t provide any layout options, nor did it allow me to customize the icons. It always laid out the icons in a grid, in alphabetical order.

They did provide an option to use a custom graphic with hot-spots for menu items which was quite cool, but it was an all-or-nothing proposition, at least on a per menu basis. I.e. For a given menu, you could either use a custom graphic, or you could use an automatic menu, but you couldn’t, for example, use a custom graphic in the background, and use the auto-layout icons in the foreground.

It took a while to get used to this limitation, and, in some ways, this was better than the First Class method of modding the client with ResEdit. For example, users didn’t have to download a custom client to be able to see my board’s custom graphics. The vanilla client supported it out of the box. If I added a menu with custom graphics, it would be instantly available to all clients. It was common practice, by contrast, for First Class BBSes to periodically update their clients with new graphics from time to time, and advise users to download their latest version. The NLP solution for custom graphics was much closer to the way that that web would later work.

And, hey, it was actually kind of fun to make menus in photoshop.

Reading the Brochures I’ve always been a sucker for reading brochures. As a child, I spent hours on my bedroom floor thumbing through the pages of the Sears Wish Book, imagining that I was the little boy depicted playing with the GI Joe aircraft carrier, or riding on that CHiPs-themed Big Wheel. Fast forward ten years, and things hadn’t changed much. Only replace the Sears catalog with ResNova’s brochures for NovaLink Pro.

I don’t recall if the brochures came with the software when I purchased it, or if we received them prior to the purchase, but I do remember spending many hours studying them, and memorizing all of the features listed. Features like Telnet, Usenet, Fidonet, and Apple Search. I only had a dim idea of how the features worked, but where experience and know-how were lacking, my imagination filled in the gaps. I imagined building a service like AOL, where hundreds or thousands of people in the Vancouver area would log in to my BBS to get their news, access the internet, chat with each other, and maybe even buy products.



In fact, I even made my own brochures for this yet-to-be-created online service, which I dubbed “Vancouver Online International” or VOI for short. I guess “Prime Time BBS” just wasn’t grand enough for my vision. I spent hours, days, weeks creating mock-ups for each section of the BBS in Photoshop, making use of all of the modern effects it offered. Lots of emboss, gradients, lens flares, and, my favourite: extrudes. That’s the one where it partitions the image into 3D cubes that are sort of jumping out of the image at you.

The World Wide Web is Coming

The press releases were almost as exciting as the brochures, despite their lack of graphics. I distinctly remember the one announcing NovaServer 4.0. Yes, they were changing the name of the server from NovaLink Pro to NovaServer for their next major release. The big news, in addition to the name change, was that it would include full support for the World Wide Web.

This was the first time I had ever read (or heard) the term World Wide Web, or WWW, and frankly, it didn’t mean much to me at the time. I recall being a little bit disappointed by the announcement because I was more hoping that they would add FTP support, since this was the key to file downloads. Nonetheless, I was intrigued by this new “Web”, as they called it.

As soon as NovaServer 4 was available, I downloaded the demo, and started playing with it. The WWW support was neat, but clearly nascent. The client came with a reasonably compliant web browser built into it, and it used HTML to encode most of its custom graphics, but the general web browsing experience left a lot to be desired. For one, it didn’t support file downloads at all.

Despite its shortcomings, I recognized the potential.

And Then They Were Gone

Nova Server’s inclusion of a Web Browser inside a Bulletin Board client is, perhaps, the most direct link between the golden age of the BBS and the advent of the internet. No other BBS software, that I’m aware of, incorporated the internet to the same degree as Nova Server did. Unfortunately, it barely got a chance to spread its wings before it was purchased by Microsoft and discontinued.

From Web TidBits, Nov. 1996:

Microsoft Gets Personal — In a surprising move, Microsoft and ResNova announced that Microsoft has acquired ResNova’s Web server products: the personal Web server WebForOne, and the full-featured Boulevard. In conjunction, five of ResNova’s employees, including president Alex Hopmann and product manager Lauren Antonoff, have joined Microsoft’s Internet Platform and Tools division in San Jose, and ResNova is seeking a buyer for its NovaServer bulletin board system.

I only discovered this years later. From my perspective, ResNova just sort of disappeared without a trace. Even now, with the benefit of modern search technologies like Google and Bing, it is quite difficult to find corroboration for my memories of its existence. You can find the odd mention of it on old BBS lists that people have posted, and I found one press release on a Usenet archive – though without the ResNova letterhead, it’s not the same. The best proof of life for NovaServer is found in the December 1995 issue of BBS magazine, which has kindly preserved for humanity. Link here (page 46).


More recently I discovered that Apple Fritter, currently uses NovaServer 4 for its eWorld clone.

Reviving Nova Server

In my spare time, I still sometimes play with Nova Server, and I have dreams of reviving it. A couple of years ago I managed to create mostly-functional web, mobile, and desktop clients. I still have all the old software, and have acquired some documentation for its C API for writing extensions, which should make it possible to write a CGI gateway, which would really open things up. E.g. I could write dynamic extensions using PHP, Python, or any other modern programming language, to augment the features of the old Nova Server.

I don’t know when I’ll have time to do all of this tinkering between the day job and the family, but I choose to believe that someday I’ll have the time, and, God willing, still have the passion to build things like this. In the meantime, I’ll just wax nostalgic about the good ol’ days, when the internet was still mostly just a dream, and we could build it into anything we wanted.


How I got hooked on Baseball Cards (part 1)

I started collecting baseball cards in 1988. I know this because I still have the Panini sticker book that started it all off. I don’t remember how I got that sticker book – probably as a birthday present, which would have made it technically the end of 1987, rather than 1988.


The sticker packs were sold at convenience stores and supermarkets, so I would probably get a pack every time I accompanied my mom on the weekly grocery shopping trip. I collected Blue Jays. Actually, I collected whatever came in the pack, but I always hoped for Blue Jays. This is because a few months earlier, I had visited my Grandpa while he was watching a Blue Jays game, and he explained to me that they were the only Canadian team in the league, so we should cheer for them.

Made sense. I was Canadian. The Blue Jays were Canadian. Therefore I must be a Blue Jays fan.

So, being a Blue Jays fan, I naturally hoped for Blue Jays when I got a pack of stickers.

My friend Chris was also Canadian, so he was a Blue Jays fan too. He had the same sticker book, and was also collecting Blue Jays. And, since all kids need to choose a favourite player, mine was George Bell. The choice was based on a mix of statistics (he was American League MVP in 1987), randomness (his sticker was one of my first), and which player’s picture I liked best.


Chris’s favourite player was Tony Fernandez.

My Panini sticker Blue Jays collection was almost complete before Baseball cards even entered my consciousness. I knew what they were, but they had never crossed the chasm between things that “exist” and things that were “options”. During those early days of collecting, I had to correct several adults, including my parents, when they said that “I collected baseball cards”. I collected stickers. Not cards.

I didn’t even know what I would do with a baseball card. I mean, at least with a sticker I could stick it in my sticker book. There was an empty, outlined space for it and everything. It was like a puzzle waiting to be completed.

My First Pack of Cards

Then, one fateful day in the Spring of 1988, I got my first pack of baseball cards. I don’t recall the circumstances. It could have been a miscommunication, like I asked my dad to get me a pack of baseball stickers when he went in to pay at the gas station, and he came out with a pack of cards instead. Or it could have been a pragmatic choice, like I was allowed to get a pack of stickers at the store that day, but they didn’t have any, so I got a pack of cards instead.

Whatever the circumstances were, I opened that wax pack of 1987 Topps baseball cards, and found, to my delight, that it also came with a stick of gum. The gum was rock hard, but once you got it going it would still chew, and it still provided some sugary sweetness. Panini stickers didn’t come with gum.

Side note: For some reason Topps gum was always rock hard. O-Pee-Chee gum was typically much softer.

I could get used to this whole “getting gum with my baseball cards” thing.

But it gets better. The pack came with about 14 cards, and one of them was a George Bell “All Star” card. I had struck gold on my very first pack. My favourite team – and my favourite player. I couldn’t believe my luck.

What are Baseball Cards Good For?

Now, I had this stack of cards, but I didn’t know what to do with them. I couldn’t stick them anywhere, and I didn’t yet know about all of the elaborate accessories that were available for the display and storage of baseball cards, so I just stacked them on a shelf in my room.

Shortly after that first pack, I was faced with an honest to God choice between a pack of stickers and a pack of cards at the grocery store, and I … chose the cards. My panini sticker book sadly was never completed, and includes empty spaces for ungotten stickers to this day.

At this point, I began to identify as a “baseball card collector” (as opposed to baseball sticker collector), but I existed in a microcosm. It was just my friend Chris and I collecting cards – and we collected them the same way that we had collected stickers. We’d get a pack of cards at the corner store when we had an opportunity, and we’d hope for Blue Jays. Each trip into a new corner store brought with it the thrill of discovery, as we might discover a new brand of cards.

It was some time before I even knew that there were brands other than Topps – since that is what the corner stores near me carried. Then one day, my friend showed me a pack of O-Pee-Chee’s that he got from a different store. Mind blown. The O-Pee-Chee’s looked identical to Topps. They had the same players, same pictures, same stats on the back. The only difference was the logo in the top corner of the card, which said “O-Pee-Chee” instead of Topps. That and the gum was much softer – but I’m not sure if I knew about that difference yet, since Chris probably had finished the gum long before he showed me the cards.

Side note on the gum: The O-Pee-Chee gum, 35 years later, tends to disintegrate into sugar dust as soon as you start chewing. I know this because I have a case of unopened O-Pee-Chee hockey cards still in a box under my parent’s stairs. I don’t have any surviving Topps package to offer a comparison. Perhaps Topps was playing the long game with their rock-hard gum, and 35 years later it would chew like Bubblicious.

Then one day, on a trip across the border, I found a pack of cards I had never seen before: Donruss. I was slightly disappointed that this pack didn’t come with gum. It came with a puzzle piece instead. Presumably, if I collected several more pieces, they could be assembled into a picture of something baseball-related. I couldn’t wait to show my new Donruss cards to Chris.

The Baseball Card Store

Little did I know that Chris had made a discovery of his own. One that dwarfed my measly Donruss cards.

He had found a baseball card store. A store that had nothing but baseball cards. I couldn’t believe my ears, and frankly my nine-year-old brain was having trouble processing it. I couldn’t quite imagine how you could fill up a store with just baseball cards. Up to that point, I had only seen them at convenience stores, where they would typically have one box with 36 packs of cards sitting amongst the gum and chocolate bars.

“They have boxes and boxes of nothing but cards!” he said. “You don’t even need to buy packs. You can look through the cards and just buy the ones that you want!”

“You can buy any card that you want?!” I asked incredulously.

Seemed too good to be true.

This store was named Chris’s Collectibles, and it was located just across from the library. One evening, while my mom was at the library, I asked if I could go into that store and look around.

If my mind was blown after the O-Pee-Chee discover, then I crapped my pants when I entered this store. (No not really – just trying to express how much of a “good” shock this was).

It was dark outside, so it must have been late. The only people in the store were two adults – one guy with a moustache, T-shirt, and trucker hat who was behind the counter, and the other, a customer, I presumed. They were chatting about baseball stuff – I don’t recall the specifics. My mind was busy processing this amazing new world that I had stepped into.

Before walking through that door, which might as well have been a portal into another dimension, I was aware of only three types of cards: Topps, O-Pee-Chee, and Donruss. And as far as I knew, all three of them had just started making baseball cards in 1988, because that was the only year of cards that were available at the corner stores. (Well, I had knowledge of 1987 Topps because that was the year of my first pack – but I hadn’t seen any more 1987 packs in ages).

Inside that store, they had more, different types of card packs than I had ever seen in my life. They had new brands I had never seen, like Score and Fleer. They had packs dating back five years, at least for most of these brands. They had glass cabinets filled with high-value singles, as they were called – each one in its own hard plastic case, and sporting price tags that were well outside my price range.

The thing that impressed me the most was the line boxes with rows of single cards sorted by year, set, and number. I could literally walk in here and find all of the Blue Jays I didn’t have, and just buy them outright. If I had the money, of course. Which I surely didn’t. I was on a one-pack-at-a-time budget.

So, on my first trip into this new world, that is just what I bought: one pack of cards.

But knowledge of this house of treasures changed my world for years to come. I had graduated beyond corner stores.

One thing lost in this transformation was anticipation of discovery when entering a new convenience store. I now had access to the definitive trove. I knew what brands were “out there”, so the odds of discovering anything new at the corner store was low to nil.

The Joy of Trading

My next big milestone, after the baseball card store, was the discovery of the joy of trading.

At the time I entered the baseball card store for the first time, and during the weeks that followed, I was still collecting in a microcosm. Chris and I would trade our doubles to help each other complete our Blue Jays collections – which was getting more and more difficult with the exponentially expanding universe of different sets – but we weren’t part of any larger “baseball card” community.

I didn’t really have any desire to find a community. I’m an introvert, and I liked collecting cards. If I needed a card, I could continue to buy packs and hope for the best – and the existence of a baseball card store was like a newfound super-power – as I could also go in there and just buy whatever card I needed to further my collection. But one night the community found me, and hooked me.

It was a night-time church meeting. I don’t recall what it was for. I remember that it was for the grown-ups, but a lot of kids would be there too. One of the grown-ups mentioned that his son and a few other kids would be bringing their baseball cards to do some “wheeling and dealing” (that was the first time, not the last time, I had heard that term), and he wondered if I was planning on joining in.

I didn’t really know what to expect, and I was a little bit nervous. At that point I didn’t know these other kids that well, and they were all a year of two older than me. But I said “okay”, and I brought my cards in a little box with me that night.

When I entered the “trading” floor, I was welcomed by the other kids – there were only two or three of them – and they asked if they could see my cards. One of them, Scott, was the most knowledgeable. He seemed to be an encyclopaedia of facts, and he carried with him a Beckett price guide that showed what every card was worth.

Beckett Baseball Card Monthly would be well-known to anyone who was around for the baseball card bubble of the late 80’s and early 90’s, but this little meetup was the first I had ever heard of it. I’m sure I went out and bought one the next day. Scott looked through my cards and showed me which ones were good. My focus had been on Blue Jays only, so I had no idea if I had any “good” cards in the objective sense. Apparently I did have a couple of good ones, and he offered to trade some of his cards with me.

That feeling of having something that someone else wanted – and being able to get something I wanted for it was special. This lies at the heart of the baseball card experience. That night I was introduced to this fun. I had finally learned what it is that you do with baseball cards. You trade them. Another life-changing discovery.

The Next Chapter: Sports Card Shows

This was only the beginning of my journey, into baseball cards. Over the next few years, the sports cards industry would experience a crazy bubble, and I rode that wave for all it was worth. In my next chapter, I’ll talk about my experience buying, selling, and trading cards at sports card shows.


Automation, Organization, Documentation, and Sanity

I used to be the “Web Coordinator” in a university faculty, and I often had to provide tech support to the office staff. One morning I received an urgent call from one of the program assistants (let’s call her Carol) who had misplaced her notes, which, among other things, told her how to use her computer. I jogged down to her office, and found her with a panicked look on her face.

“What am I going to do, Steve?” she asked. “I’ve lost everything. I need to print out the reports for [something or another] and I don’t remember how to do it”.

Carol was a product of a time before computers, and had adapted to her new overlords with difficulty. She was only a few months away from retirement, but without her notes, it would be a rocky send-off.

“Don’t worry. I’m sure we can figure it out”, I assured her. “Do you remember which program you use to print the reports?”

“No.”, she replied. “I wrote it down in my book. But I can’t find my book”.

You’ll be relieved to know that she eventually found her book, and was able to print her reports. Earlier that morning she had been thumbing through some files in one of those big metal file cabinets, and had forgotten that she placed her book on top of the files. Luckily it was still there the next time she needed a file.

At the time, I recall finding a lot of humour in Carol’s predicament. It was further confirmation that my parents’ generation, of which Carol was a member, were clueless about technology. Imagine needing a book to tell you how to do your job?!

Fast forward twenty years. I now keep an exercise book where I write down notes on …. how to do my job. At the beginning of each day, I write the date at the top of the page, and I write down a short to-do list. I refer back to my previous entries and copy outstanding items into my list for today. In the back of the book I write down things that I will need longer term, like passwords.

If I lost my book, I’d be in a tight spot.

We will all be Carol some day.

My Own Crisis of Complexity

If only I could keep all of my development projects in my book.

I have more development projects on computer than I can easily enumerate. If I had to guess, it would be more than 300, less than 1000. At any given time, I have somewhere between 5 and 10 projects that I’m actively working on, and an another 30 or 40 that I’m regularly maintaining. Projects span many different computer languages, build tools, IDEs, and server types. Each project is associated with its own set of standard and obscure tasks. Despite almost all of these tasks being automated by build scripts and CI, the complexity of maintenance can still be overwhelming. When returning to a project that I haven’t worked on in a while (months/years/decades), it still takes a while to grok the project and figure out how to build it, test it, and deploy it again.

Projects that use Maven or Gradle are generally easier to dust off than, for example ANT, or ad-hoc projects. A working mvn package or gradle build command can help with building up some early momentum, but it is still only the beginning. Sometimes I get the “Build Successful” message, and then think to my self “Oh good, it builds! … um ..Now what?”

“I know I had a development server set up somewhere to run this before. Let’s see if I made a script to start that up.”

“Which server is this deployed to. And what passwords do I need?”

“The certificates are expired… how do I generate those again?”

“Oh.. there are build profiles called ‘production’, ‘release’, ‘live’, ‘beta’, and ‘staging’. Which one is the one.”.

“Ugh…. I hope I left some clues in the README”.

“Damnit! I can’t remember where I saved that project. Was it in ‘Projects’, ‘Xcode Projects’, ‘NetBeans Projects’, ‘tests’, ‘demos’, ‘work’?!!! Maybe I didn’t save it on this computer? Is it on Github? If so, does github have all the latest changes?!”

A Place for Everything and Everything In Its Place

To summarize, my problem is two-fold:

  1. I don’t remember where I saved many of my projects.
  2. I don’t remember how to use (i.e. build/test/deploy) my projects once found

What I really need is a book-like medium that includes a searchable catalog of all of my projects, along with any instructions required to use the project. Bonus if this catalog can include buttons or menus to perform the project’s automated tasks.

Over the weekend, I decided that it was time to solve this problem once and for all, so I built Shellmarks.

Shellmarks provides a live catalog of all of my shell scripts including documentation and GUI launchers, all in one place.

Tuxpin: A Case Study

This morning I added an entry for Tuxpin so that I can easily start and stop the development server, as well as deploy it to production. The Tuxpin server app is a PHP/MySQL application. It is built using Xataface, which provides command-line scripts to start and stop the development Apache and MySQL servers. For deployment, I use a bash script that uses rsync to upload the app to the production server.

Up until now, when I want to work on Tuxpin, I start by opening Terminal, navigating to the tuxpin directory, and running xataface start – which starts up Apache on localhost port 9090 with the app.

When I want to deploy it I run bash

Frankly, this isn’t too bad. However, I can imagine a slightly older version of me returning to this project after many months, or even years, and not remembering what to do. For the benefit of this future self, I have just created a Tuxpin management script in Shellmarks. When he wants to work on Tuxpin, all he needs to remember to do is open Shellmarks. He can then do a simple “Find” for “Tuxpin”, or he can find it in the table of contents:


The Tuxpin section, in shellmarks includes some very short documentation, links to the development server and PHPMyAdmin pages (that will open in the default web browser if the development server is running), and a button to manage the development server:


Pressing the “Run” button brings up a server management dialog with buttons to Start and Stop the server, and another button to show the server status:


This makes it dead simple to start working with the project. My future self won’t need to remember anything. He can figure it all out from the GUI.

The Script

The script is pretty simple.

Let me describe what’s going on here. The script has two parts:

  1. The first part is a regular bash script that does the starting/stopping/status checking according to the values/presence of certain environment variables.
  2. The second part (after the exit 0 line) is the dialog definition that shellmarks uses to build the dialog.

The documentation shown in shellmarks is set in the __description__ property. Its content is parsed as Asciidoc, so it can include links, headings, etc…

The buttons are defined by sections, whose names correspond with environment variables used by the script.

For example, the following definition results in a “Start Server” button being displayed in the dialog:

   label="Start Server"
   help="Start tuxpin server"

If the user presses this button it will set the $startServer environment variable to “1” when it runs the script, so that the section

if [ ! -z "$startServer" ]; then

is run.

To the future and beyond

I’ve ported one project into Shellmarks. There are hundreds more to do. But all in due time.

If you want to start organizing your life, you can install Shellmarks too.

Learn more in the Github Repo

Photo by Wesley Tingey on Unsplash


Do Kids Still Read Computer Books?

I still remember my first computer programming book. It was a glossy, black, brick of a book on PERL 5. I had started building web pages a few months prior, using the copy of Adobe PageMill that came with my bondi-blue iMac. It didn’t take long before I outgrew the “what you see is sort of what you get” interface of PageMill and started coding the HTML by hand. And it wasn’t long after that, that I entered the world of “copy-and-pasting Javascript” to gain a level of interactivity in my pages – or at least some scrolling status bar text. I started with a free Tripod account, but soon upgraded to “paid” so I could be rid of that pesky banner ad in the header.

In those early days, I learned mostly by viewing the page source of other webpages, and tried to make sense of the HTML code. One of my first projects was a “Search Remote” – basically a popup search window where people could select from a list of popular (and unpopular) search engines, and enter a query. We provided links that Netscape and Internet Explorer users could drag up to their bookmarks bar to make it easy to open the remote. At the time, there were a few search engines, notably, that would pay you a penny or two for each search query, so I would place these engines first in the list, and wait to get rich. I didn’t get rich, but I did learn a lot about HTML, Javascript, and search engines, and I pushed up against their limitations pretty quickly.

Below is a screenshot of the search remote installation page that I pulled from a Wayback machine capture from 2001. It’s missing some images, but you can get the idea.

Screenshot pulled from the Wayback machine showing the install page for the Search Remote.  Capture was from 1999.  It's missing a few of the images.
Screenshot pulled from the Wayback machine showing the install page for the Search Remote. Capture was from 1999. It’s missing a few of the images.

Back then, all of the search engines were pretty bad, so it was common practice to do a sort of “pub crawl” through all the main ones until you found what you were looking for. You’d start with Altavista (the search engine with the largest index), then you’d try Excite and Yahoo. If you still didn’t find what you were looking for you might try Lycos, Infoseek, or even AskJeeves. This is where my Search Remote comes in. Rather than have to navigate to 6 different search engines’ websites, you could perform all the searches from one place. It worked pretty well, but It still required the user to perform separate queries for each search engine. I wondered if there was a way to let the user perform a single query and have all of the results from the different engines combined into a single result set.

Meta-Search Engines

Sometimes, when you’re stuck on a problem, the watershed moment is simply learning the correct terminology for what you want to accomplish. In my case, as I soon learned, the name for what I wanted to build was a “meta search engine”, and I was not the first person to conceive of such a thing. Meta-search engines would allow a user to submit a single search query to a server-side CGI script, which would relay the query to 5 or 6 major search engines, in the background, and return all of the results back to the user. Some of them would merge the results into a single set, and sort them according to its own relevancy algorithm. Others would keep the results separate, presenting them on a webpage organized by search engine. Dogpile, my favourite meta-search engine at the time, would use the first method: merge the results into a single list, so it felt like a first-class search. (Side note: Just did a search and it looks like Dogpile still exists).

Dogpile meta search as it appears in the wayback machine from Sept. 2, 1999
Dogpile meta search as it appears in the wayback machine from Sept. 2, 1999)

See Dogpile on Wayback Machine

Without a server-side script, it is really hard to write a meta-search engine. This was before AJAX, so the only way to load things from the server from Javascript was using submission forms, and frames. We didn’t even have iframes yet. I tried to build one using pure Javascript, but the results left something to be desired. The best I could do was create a window with a separate frame for each search engine. This worked okay when there were only two search engines, but anything more than that and your “productivity” gains get lost in the clutter of tiny frames.

CGI: The Undiscovered Country

I think that most programmers have a certain resistance to learning new technologies, I was no different. I had cultivated familiarity with Javascript and HTML, but server-side programming was a remote country whose border crossings might as well have been guarded by barbed wire and machine guns. Not until I had exhausted all avenues on the Javascript side of that border, did I decide to venture forth into the untamed world of PERL. I started with things that were freely available online, such as the CGI specification, and the odd PERL tutorial. But the online ecosystem for programming tutorials was sparse, and discoverability was poor – nothing like today, where you can type in just about any programming topic you want, and find tutorials, examples, videos, tutorials, open source projects, and memes enough to keep you busy for months.

One day in my travels, I came across a PERL meta-search script that someone had posted on Hotscripts (or some similar free cgi script site). I printed it out with my Epson 740 inkjet printer, and proceeded to study it. At the time, it was a completely foreign language to me. I recall curling up in bed, on the couch, and in the hot-tub for hours at a time with these pages, poring over it line by line, trying to understand what was going on. It was like one of those pictures they used to display in shopping malls, where, at first, it looks like just a mess of textures, but if you stare at it long enough, you start to see a 3-D image emerge. This script, which, at first, was just a sequence of gibberish, would start to reveal its structure to me in fleeting moments of clarity.

The hours I spent studying that script were important to my growth as a programmer. I still didn’t fully understand what everything meant, and I certainly couldn’t have written my own search script yet, but it did provide me with a feel for what PERL looked like and, strangely, what it felt like. I was ready to graduate to the next level: an actual computer programming book.

Did I mention that I was broke at the time. I had started making webpages just at the end of a six month failed entrepreneurial adventure with a friend, and I was down to about twenty dollars in my bank account on a good day. Luckily, I was living at Casa de my parents where rent was reasonable (free), but I didn’t have a lot of money to spend on frivolities. Or essentials. That was OK, because I was going to be getting rich from my search remote any day now.

To the Bookstore

So, when I entered my local Chapters to shop for computer books, I might as well have been shopping for high priced commercial real estate, as both were out of my price range. Computer books went for anywhere from $60 to $120 depending on how “hot” or specialized the topic was. Lack of funds did not deter this dreamer, though. I scanned through the tables of contents of several dozen books, trying to identify the one that spoke most directly to my interests. When I was a child I used to spend hours examining the toys section of the Sears Christmas catalog, imagining what it would be like to have all of these cool toys and sets. This was that, except replace “Masters of the Universe” with “Mastering PERL”.

After what seemed like minutes, but was probably closer to an hour, I had settled on this PERL book. It promised me close to a thousand pages of secrets that, up until now, the universe had greedily kept from me. All I had to do was figure out how to pay for it. A rich benefactor, perhaps?
That rich benefactor ended up being my Dad. I made a deal with him to build a website for his band if he bought the book for me. It was a win win. This book was my first real glimpse into the world of programming. Every page opened my eyes to new possibilities. Things I could build. With every new concept, my mind would start wandering to computer programs I had used in the past, and wondering if I could build something like them – or better.

I could fill a school gymnasium with the spaghetti code that this book (and the hundreds that followed it) inspired. When I later got a job, I started buying a new computer book every payday. Sometimes three or four books. Books on Java, PERL, PHP, HTML, Flash, Servlets, Applets, Game development… you name it. I was hooked. When computer books became more affordable and discount stores like “Half-priced Computer Books” started popping up, I was no longer only buying books on topics that interested me. I began buyings books that I might someday be interested in. I thought I’d won the lottery when, one day, I found a bookstore that was going out of business, and the owner said I could fill 4 big boxes with books for only $100.

Side note: See my post about that time I wanted Star Wars on LaserDisc but ended up with more than I had bargained for. Same personality traits seemed to dominate there as did here.

We are now almost twenty years removed from the computer books hay day. Book stores stock a paltry few books on programming now, and buying books on Amazon isn’t the same. I like to be able to pick up a book, thumb through it, and, um, smell it before I buy it. It’s not a purchase – it’s an experience.
I still frequent the computer books section of Value Village to see if I find anything interesting. Some recent hauls included The Macintosh Bible (7th Edition, 1998), Core Web3D (1999), and Core Swing Advanced Programming (2000). I love reading the preface and introduction sections. They add history and context to these old technologies, and serve as a sort of time capsule that reveals how the world looked to software developers at that time. I love reading 20+ year old predictions about the future, and laughing about how wrong they were, or marvelling at how spot-on they were.

A few of the retro computer books that I picked up recently from Value Village
A few of the retro computer books that I picked up recently from Value Village

Old man yells at cloud, reflects on good ol’ days

I wonder, if I were just getting started now, would I still gravitate towards the thousand-page textbook as a preferred method of learning? Or would I just watch a Youtube video. Information is so much more accessible than it was in the nineteen hundreds and there are many new forms of media that are available. There are online communities, question/answer sites, online courses, and video tutorials for just about everything imaginable on Youtube. For free! I suspect that “kids” these days don’t even bother with books. If that’s the case, then oh what a shame. They are missing out on a rich, comprehensive, noise-free medium that gives pure escape from the real world.

I’m not sure how many computer books I currently own. Probably more than 200 and less than a thousand. Most of them are stored away in boxes, spread between my parents’ basement, my garage, my furnace room, and my office, but few coveted titles still enjoy the prestige of sitting on my bookshelf.

My latest project

The Search Remote didn’t exactly strike gold, but I have high hopes for my most recent project, Tuxpin, which builds on my love for audiobooks and podcasts. It is an app (available on both iOS and Android) that allows you to listen to webpages in your podcast app. That project was built using many of the same technologies that I learned how to use at the beginning of my programming journey. PHP, MySQL, and Java. Sadly, it doesn’t contain a single line of PERL.

The website for my latest project, Tuxpin, which allows you to listen to webpages in your podcast app.
]5 The website for my latest project, Tuxpin, which allows you to listen to webpages in your podcast app.


I might have the original files for the search remote still stashed away on some 4 gigabyte hard drive, but it would require a lot of effort to retrieve it. But, in the same spirit that supplanted reference books with Google+Stack Overflow, I decided to do a quick search on the Wayback machine to see if it had any record of my debut web project. To my delight, they had both my “Homepage” project, and the search remote project. They are missing most of the images, but the page structure is there, and the search engine select lists are intact so you can see which search engines we supported. I’m impressed at the comprehensive list that I amassed. I must have had a lot of time on my hands.

Photo by Sharon McCutcheon on Unsplash


Take me there

I love reading, but I don’t have time to “just read” so I tend to consume a lot of written material in “audio” format. This allows me to “read” while I do other things, like walking, driving, cleaning, and cutting the lawn. I “read” a lot of audio books, and follow a short list of podcasts. For the past year or so, I’ve also been experimenting with the latest in neural text-to-speech systems like Amazon Polly for converting blog posts into audio format so that I can listen to them during my walks. The results are surprisingly good. In many cases, I actually prefer the “machine” narration to a human narration. The voice is natural-sounding and consistent.

My favourite type of book (or blog post) is one that tells a true story, especially stories that intersect my personal lived experience. E.g. Stories about the birth of technologies that I use or remember. Insider accounts behind the scenes of movies or TV shows that I have watched. Memoirs of people who experienced certain events that remember living through. The more I “read”, the more specific my “tastes” become. You might say I’ve become more demanding of writers.

One of the most important qualities that I look for in writing is the ability to “take me there”. Books that give a mere account of what happened are barely better than reading a wikipedia article. I want a story to transport me into the time and place in which the described events occurred. I want to feel like a fly on the wall, so that I can imagine what it was like to be living in the story. Memoirs and personal anecdotes have a natural advantage for achieving this level of intimacy because the default is to see the events through the story-teller’s eyes. However, it is still possible to miss the target by focusing too much on sequence of events, and not enough on setting the scene and conveying how it felt to be there.

“The map is not the territory” is a well-known mental model that provides an analogy of what I’m looking for in a story. One way to explain this model is to consider that a map of Paris is not Paris. It is only a map the shows you where things are located from a birds-eye view. It doesn’t provide you with any information about what it feels like to walk the streets of Paris, or experience any of the historical landmarks. When I read a story, I want it to provide me with the territory. I can get the map off of Wikipedia or other reference sources.

My first exposure to this sort of story-telling was Console Wars by Blake J. Harris. It tells the story of the early nineties’ battles between Sega and Nintendo using a technique called as “Scene-based storytelling”. I had never experienced anything quite like it. It felt almost like I was living through a movie, as each bit of history was told through a scene. I don’t know how he was able to put together such a vivid picture the characters and conversations, but however he accomplished it, the end result was magic.

I immediately read his follow-up book History of the Future which uses the same technique to similarly vivid results.

These two books raised the bar for me, and I still have not found anything that quite “takes me there” like they do. I’m always looking, so any recommendations are appreciated.

More recently I’ve started “reading” the Mad Ned Memo, that includes stories from the computer/software industry by a 40-year veteran. His posts are always insightful, and usually combine a theme or timeless truth with some entertaining anecdotes. Not only do his stories “take me there”, they also take me back to my own parallel experiences in my early days of software development. I really wish I could find more content like this.

If you have done any type of software development, or participated in the development of long forgotten projects, I’d love to read about your experiences.

Photo by Clever Visuals on Unsplash

artur-tumasjan-42l3tjsJGyw-unsplash (1)

Star Wars and the Seven Laser Disc Players

Photo by Artur Tumasjan on Unsplash.

This post was inspired by the recent Retroist podcast on LaserDiscs.

A few years ago, I was browsing through the Twitter feed on my phone while waiting for the kettle to boil when I stumbled upon a news story about a community initiative to create a DVD version of the Theatrical Star Wars trilogy. I was momentarily surprised that this was news at all. Surely this has been available for ages now, I thought.

But a little bit of searching reminded me of the conundrum. When George Lucas re-released Star Wars in theatres in 1997, he monkeyed with them. He added scenes and lots of new computer imagery. And he made Greedo shoot first.

Of course, I knew all this, but I assumed that there must be a legit DVD version of the original, unaltered theatrical release available by now.

In fact, there was one version, included on a bonus disc in the limited edition DVD release of episodes IV to VI; but the quality is apparently disappointing because it was sourced from the 1993 LaserDisc release.

Upon reading the word LaserDisc, my mind wandered to the nostalgic realm of yesteryear when my friends and I would frequent the demo rooms at A&B Sound. There we would crank the subwoofer, cue up the T2 LaserDisc, and watch in bliss as Schwarzenegger blazed a trail through the Los Angeles viaduct system on his bad-ass Harley Davidson. LaserDiscs were a high-end luxury item that a kid like me could dream of, but never afford. Even if I could have scrounged up enough to buy a player, I’d quickly go broke from the cost of the discs – I recall that $100 per movie was pretty standard.

As my mind veered back to the present, it skidded over a slick patch, and a terribly wonderful idea was born.

That was like 25 years ago!, I thought to myself. I’ll bet I can pick up a LaserDisc player from Craigslist for almost nothing. And how hard could it be to find a LaserDisc copy of Star Wars?

What if… stay with me here…, I bought a LaserDisc player for the single purpose of playing the original theatrical release of Star Wars? It would be the new jewel of my home theatre – and I would be the envy of the neighbourhood. While all these other suckers were suffering through the lamely modified special editions, or adjusting the tracking on their degraded VHS copy of Star Wars, I would be enjoying the trilogy that started it all on LaserDisc!

The kettle was now boiled, so I poured it into the pot to start the steeping process. Then I resumed my planning for operation LaserDisc.

First stop, Craigslist, where I hoped to find a cheap player. I assumed I’d have to try eBay for the movies themselves. I typed in “LaserDisc” into the search field, pressed the “Search” button. To my amazement, the very first thing that came up was the Star Wars box set on LaserDisc! It was listed as part of a lot of LaserDiscs. Two boxes of them for $50.

The plan was only to get Star Wars. But $50 was well within my cost tolerance for a foolish impulse buy, so if they forced me to take the rest of the discs, then I wasn’t going to complain. I could have that LaserDisc collection that I had always wanted back in ’94.

The tea was finished steeping now, so I poured it into my mug, took a sip, and started plotting my journey to the pawn shop where the discs were being held.

When you are a parent of small children, you can’t just pick up and leave on a whim. You need to negotiate with your wife, first. Depending on the success of the negotiation you may end up with anywhere between zero and three travel companions. Best case scenario, is your wife has your back, and you can just walk out the door and seek your glory. The worst case scenario is that you have some obligation that you forgot about, and you can’t begin the mission at all. The other three possible outcomes are, in decreasing order of goodness are:

  1. You have three travel companions. Two half-lings and a wife.
  2. You have one travel companion.
  3. You have two travel companions.

It is worth noting that option 1, while being preferable to the other two, may involve a more rigorous preparation of rations, and thus it may take longer to get the wagons moving.

On this occasion, it would just be me and my almost-two-year-old apprentice, Apollo.

After finishing my Tea, I packed Apollo into his car seat, and we started off on our fateful journey.

We arrived at our destination about 40 minutes later. It was a small concrete building with barred windows on a fast and wide stretch of King George highway. There were no other cars in the parking lot, but there was a neon “Open” sign in the window, that gave me some assurance that I was in the right place.

Before getting out of the car, I took a quick glance around the neighbourhood, to assess whether there was any way I could pull this off without bringing Apollo in with me. The assortment of Tattoo parlours and questionable-looking passers-by, combined with the mild, but warm temperature forced my hand. Apollo would be joining me.

I unbuckled him, and lifted him out of the seat, then carried him to the door, which was locked. After ringing the door bell, we were buzzed in.

A guy behind the counter asked if he could help me and told him I was there for the Star Wars LaserDisc.

He pulled out two cardboard boxes from the back room and placed them on the counter. I asked if he would be willing to sell just the Star Wars, but he said he couldn’t. I didn’t protest much. I just pulled out my wallet and paid.

The trek back to the car was a multi-trip affair, holding Apollo in one arm and a box of LaserDiscs in the other. The two boxes fit nicely in the back of the car. Sometimes that “hatch-back” comes in handy.

And so the first act of our adventure was complete. We had secured our treasure. Now we just needed to acquire the player.

Sitting in the parking lot of the Pawn shop, I browsed through the Craigslist ads to see if there were any listings on my way home. There was one that was conveniently located in Cloverdale, about half way to home. The ad said he had seven laser disc players, and a whole bunch of movies. All I needed was one player. Perhaps he would be willing to do me a solid and break up the band for me.

“Which one do you want?”, he asked.

“Which one is the best?”, I replied.

“It depends”, he said. “One or two of them may not work – I don’t remember.”

I asked him to send me the model numbers so I could do a little bit of research. He sent me the list and I went to work trying to figure out which one would be best. Unfortunately, LaserDisc largely pre-dates the internet so finding specs on these models was difficult.

After a rather unfruitful ten minute rapid-fire Google session, I decided to just drive there and see what he had.

When we arrived at the guy’s house, he came out and met us.

“Let me show you what I have”, he said.

He opened the door to a storage room adjacent to the house. Inside there were boxes stacked floor to ceiling, and a smattering of electronics.

“Hold on”, he said as he forged a path through the stacks.

I followed him to the back of the room where he had two towers of LaserDisc players. Some of the units looked like they cater more to Karaoke, as they had microphone inputs, volume knobs, and Japanese writing on them. Others were more familiar (Pioneer) and looked like they were more appropriate for movie watching.

“Can you give me any indication of which one is the best one?”, I asked. I knew we had been over this ground earlier by text, but I thought that it was worth a shot to try again, now that we were face to face. Perhaps his body language would provide that extra bit of insight that would help me to decide.

He hummed and hawed a little.

“It’s really hard to say”, he said. “It has been so long since I’ve had them hooked up. I just can’t remember which ones work and which ones don’t”.

“I’ll tell you what”, he said. “Why don’t I just give you the whole lot for, say, $100?”

“Is that just the players, or for all the movies too?”.

I think he had been asking $250 for the lot in the ad – and he mentioned there were hundreds of movies and karaoke discs.

“The movies too”, he replied.

I thought about it for a moment. My gut said, hell yes! I want it all!. But my sober, responsible, self-aware inner adult wondered if this was, for lack of a better word, hoarding. I thought about the original, minimal vision that I had constructed for this project only 3 hours earlier, waiting for my tea to steep. “One LaserDisc player, and one box set… That’s it. That’s all I need”, I had told myself.

“Sounds good! I’ll take it all”. My hoarding inner child won the argument decisively.

Apollo sat patiently in his rear-facing car seat as cardboard boxes began to grow around him. Unfortunately the car reached maximum capacity prematurely, so we had to unload some of it and strategize ways to pack it in more efficiently. LaserDiscs abhor a vacuum, and we did their bidding by filling every possible space in that car. You’d be lucky to fit a baseball card in that car by the time were were done.

You’ll be relieved to know that I didn’t pile anything on top of Apollo. Beside, behind, underneath, but not on top. Though it did cross my mind.

“Don’t look at me, I’m hideous!”

That’s the first thing I said to my wife when I arrived home with a weighed-down car, bursting at the seams with obsolete analog media.

I had returned from the sanctum sanctorum with the ultimate boon: LaserDiscs with the original theatrical release of Star Wars, and a laser disc player.. And a few hundred other discs, and six more players.

Surely one of them must work, right? Right??

Stay tuned for the next instalment, where I test each player, disqualifying the ones that emitted bad smells and demonic sounds to settle on the one that almost worked perfectly. Then got it repaired for twice the cost of the entire rest of this adventure. And then bought two copies of Rocky III on eBay.

IMG_9578 (1)

Photo of me, by my wife.


The Water Fight

This is my account of the epic indoor water fight of 1989 that laid waste to Mr. Galvin’s grade 4 classroom. Enjoy

Our classroom looked like an exhibit at the BC history museum. The north wall was covered with a landscape showing the exploration of the “new world” by Europeans like Jacques Cartier. This mural was constructed using an adaptation of the Bob Ross method, whereby we staple the background elements (land, ocean, and sky) to the wall first, and then proceed to add the foreground details, including lots of happy little trees. First and backmost was a layer of light-blue wallpaper representing the sky, which stretched all the way to the ceiling. Covering the bottom half of the mural was darker blue paper representing the Atlantic ocean. Its top edge was cut into waves, and it was book-ended by two brown landmasses resembling the foothills of mountains rising out of the ocean. These brown mountains represented Canada on the left and Europe on the right.

Mr. Galvin had set up the background on his own, but he left it to the class to populate it with happy little trees and the like. The mural was littered with cut-out drawings of ships, forts, people, buildings, tee-pees, bears, and just about anything else that could possibly spawn from the imagination of a nine-year-old when provided with such a juicy blank canvas. Mr. Galvin didn’t tell us what to draw, or how to draw them. The only rule was that it had to be “appropriate”. Drawings were colored using paint, crayons, pencil crayon, and felt marker. A drawing, once approved, would be stapled to the mural by Mr. Galvin.

We started building this mural in September, and continued to develop it throughout the year. At the end of the school year we were told that they would be transporting it to some other location, like the school district offices, so that it could live on. It represented a significant amount of work, and we were all very proud of it.

On the other side of the class was a science fair exhibit which was a little less grand, but also involved lots of paper-based artwork and diagrams. The class had been split into groups of five or six for this science fair. A section of table had been allocated to each group to display their project. Most of the projects consisted of charts and diagrams glued onto some brightly colored paper. Some exhibits also included three-dimensional visual aids that had been constructed out of materials such as popsicle sticks and egg cartons.

It is relevant to the remainder of this story that neither the mural nor the science exhibits were designed to withstand water damage. It is also relevant that our classroom had a sink.

That night, the school would be hosting the annual Spring Peterson Road Carnival, but it was already set up in the gym, and classes had each been designated a time when they could come down and “preview” the carnival during the day.

It was about to be our turn.

“I expect you all to be on your best behaviour”, said Mr. Galvin with his Liverpool accent. He sounded like one of the Beatles.

After he had finished delivering his pre-carnival “expectations” speech, Mr. Galvin directed us to line up at the classroom door. Then he led us down the stairs to the gym where we were set free.

The perimeter of the gym was lined with attractions that were being operated by aspiring carnies (i.e. grade seven students and parent volunteers). They had the usual stations you would expect to find at a fair, from the fishing exhibit (where you throw your clothespin fishing rod over a sea-themed bulletin board, and hope to catch a prize), to the dunk tank (where a teacher who probably drew the short straw, sits precariously on a plank above a water tank and waits for students to throw balls at a target).

My personal favourite was the floor hockey station so that was my first stop. After a short wait, I was invited to step up to the line that had been taped onto the floor. Then the carnie handed me a plastic hockey stick, and placed a bright orange plastic puck onto the line. I dragged the puck back and forth a few times with the stick to get comfortable and looked toward the net, which was about fifteen feet away. It was blocked by a wooden piece of plywood with a hole cut out of the bottom just big enough for a puck to fit through. I released my first shot, and it thudded off the sieve, about a foot off the mark.

“Oh so close!” said the carnie. “Don’t worry, you get two more tries”. Then he set up another puck.

I don’t recall how many tries it took, but eventually I threaded the needle, and was allowed to claim a prize.

The prize vault was a plastic milk crate filled with an assortment of brightly colored plastic goodies and candies. I quickly scanned over the rings, and plastic spiders before settling on a tiny lime-green water pistol.

I completed the circuit, and then Mr. Galvin directed me to return to class. Our departure from the carnival had been staggered and, for whatever reason, Mr. Galvin was the last one to return to the classroom.

Upon my arrival, I discovered that nearly every boy in the class had also won a water pistol. There we were, a room full of nine-year-olds armed with water pistols, in a classroom that just so happened to have a bottomless supply of munitions. For a few minutes we all sat in our desks, harmless powder-kegs awaiting our teacher’s return. Then, someone lit the fuse. A single boy, I don’t remember who, walked up to the sink, and filled up his water pistol.

Then another boy did the same, and they started squirting at each other.

“They are going to be in so much trouble”, I thought, watching these two fools dueling toward certain doom.

But then another boy joined in. And another. Before long it was full-on war. Boys would be ducking behind the science table, then pop up to squirt their enemies, then duck again to avoid the return fire.

I didn’t participate right away, but every boy has his threshold beyond which the temptation to follow his friends off a cliff is irresistable. I rose from my desk, walked over to the sink, popped the cap off the top of my pistol, and ran the water over it. Once it was filled, I pushed the cap back on, and dried the gun on my pants. Then I found a corner that could be easily defended and engaged in the fire fight.

Streams of water arced through the air, splattering the mural, the chalkboard, the science table, and just about everything else in the room. Boys ran with glee around the perimeter and through the rows of desks with their pistols cocked imagining we were living in an episode of GI Joe. We even made the “pew pew” sound effects to accompany our shots.

This continued for a glorious 2 or 3 minutes before we were rudely interrupted by Mr. Galvin’s booming voice.

“What is going on here!”, he yelled with a ferocity that I had never heard from him before.

Instant silence, except for the shuffling of feet of students trying to quietly return to their desks where they could feign innocence.

“Everyone who was involved in this, come up and stand at the front of the classroom”, he continued, in a stern but more controlled tone.

One or two students rose from their desks and sheepishly walked up to the chalk board and turned around. I resisted this first alter-call, as did most of the other boys.

“That’s all?!!”, he yelled incredulously.

And that’s when the fingers started pointing. The boys who had answered the first call started calling out their co-conspirators, and a few of the conscientious objectors to the great war began reciting what they had witnessed in such great detail that there was no denying the war crimes.

Ultimately there were about fifteen of us standing up in front of the chalk board with our hands in our pockets and heads hanging in shame over what we had done.

“Hands out of pockets and stand up straight!” he ordered.

He then proceeded to admonish us for this episode. Some key themes of his speech were betrayal of trust, destruction of property, lack of respect, and responsibility. It must have been a good speech because I felt ashamed. During his tirade, I looked around the wasteland we had left behind on the battlefield. The full extent of the damage was not yet known since the water had yet to dry, but there were already many cases of felt marker drawings bleeding and smudging.

He ordered us all to detention that afternoon. I don’t think there was a single girl among us.


Date Night

Beverly sorted the DVDs in the furnace room a couple of weeks ago, and, as a result, there is a stack of DVD cases sitting on the floor of our basement. Topmost in this stack is “Necessary Roughness”, the 1991 football comedy starring Quantum Leap’s Scott Bakula with a talented supporting cast that included SNL’s Rob Schneider (“Fumblaya, Fumbleroosky!”, Deuce Bigalow, etc…), Sinbad, Jason Bateman (Arrested Development), and lots of other familiar faces from that era. Seeing that case reminds me of the first time I saw the film at Willowbrook 6 cinemas on its opening night, way back in 1991.

Ads featuring the catch phrases and slapstick moments from the film started to blitz the airwaves late in the summer between grade 6 and 7.

“I can’t wait to see that”, I said to Ezra, probably while watching one of its TV commercials. “It looks like Major League, but for football.”

“Sergeant Fumblina Wilkerson fumbles the ball!”, he replied, quoting the film.

We recited a few more of the catch phrases, laughing at each other after each impression.

“You should ask Christina to go”, he suggested.

I paused for a moment to ponder the practicality of this idea. Most people don’t know this, but Christina was my first verified reciprocated crush. In case you’re not familiar with that term, allow me to explain.

To borrow a phrase from the Wonder Years, a “crush” is when you “like like” someone.

A reciprocated crush is when you have a crush on someone, and they also have a crush on you. However, you may not know that they have a crush on you – and they may not know that you have a crush on them.

A verified a reciprocated crush is when you have a reciprocated crush, and both parties of the crush are aware of it.

I had had crushes before Christina, and I may have even had reciprocated crushes (unbeknownst to me), but she was my first verified reciprocated crush.

Our story began four months earlier, in Mr. Wiebe’s grade six class. Christina was new to the school, joining our class mid-way through the year. I was just becoming “interested” in girls for the first time, but I didn’t have any clue how to navigate around the obstacles that were blocking the “friend-zone” exits. Christina, being new, was not afflicted with this complication, which was a big feature. And she was pretty.

I decided to make “my move” one May afternoon after school. I was doing a tour of duty as the desk monitor, so I had to stay behind for a few minutes after class with a clipboard to inspect all of the desks to make sure they weren’t messy. If I encountered a “messy” desk, I was entitled to give them a “ticket”. I don’t recall if I made my quota that day, but by the time I was finished, there was just me and one other student left in the class. This was my chance!

I placed my clipboard on Mr. Wiebe’s desk, then proceeded to the cloak-room, where I slowly placed a few things into my bag and donned my jacket. I paced myself so as to exit the classroom at approximately the same time as the other student. We descended the steps outside the door and continued to walk together towards the bike racks at the front of the school.

And that’s when I made my move.

“What do you think of Christina?”, I asked Ben (the other student).

Sure, I could have just talked to Christina directly, but that would have been risky! (What if she said “no”, I just don’t think I could take that kind of rejection! — George McFly, 1955)

I call this move “planting the seed”. It didn’t come from any playbook. I was freestyling.

“Why? Do you like her?”, he replied in an “oooh” tone as if he had a script.

I made a dramatic pause, to make it seem like I was reluctant to divulge this information. Then I responded with “Maybe”.

“Oooh. That means that you do like her.”, he gently teased.

“Well I guess so”, I confirmed. “But don’t tell anyone”.

Mission accomplished! Now all I had to do was sit back and wait until, inevitably, Ben divulged my secret to someone.

Amazingly, things unfolded exactly as planned. Approximately one week later, I was approached by a couple of girls on the football field with tidings of great joy.

“Do you like Christina?”, they asked. “Because she likes you, and she thought that you liked her”.

That was good enough for me. I confirmed to them that I, indeed, liked Christina, and they were free to share this information with her.

Messengers dispatched with my seal, I was free to resume the lunch-time football game that was underway.

Now, if my “playbook” were a physical book, this is the point where I would turn the page only to discover that the next page is blank. Then I would fan through the remaining pages until I reached the back cover, to confirm to my horror, that there were no more plays in this book. I didn’t think I would get this far, and now I was something of a victim of my own success, as I didn’t have any idea how to proceed.

“Should I go talk to her?”, I thought to myself. That would be too eager. Eventually I would have to talk to her, but for now, I reasoned, it was much better to limit communication to smiles and waves. That way I couldn’t say anything wrong. I mean, I might as well stick to the fundamentals that got me this far. I would let my football do the talking. Surely she would notice all of the touchdowns I was scoring during lunchtime games, and that would impress her.

I basked in the glow of this new world for the next couple of weeks. Everything was going smoothly. I still liked Christina, and, as far as I knew, she still liked me, and that was good enough for me. I planned to wait until the perfect moment to spring my first conversation on her. That moment came during the school field trip to Stardust roller rink. I waited until the day was almost over, then I rolled up beside her and asked if she wanted to skate. She said yes.

I held out my left hand, and we began to skate together under the disco lights. Finally the time was right for our first conversation to occur.

I looked at her and said “I don’t really like this song”. And she looked back into my eyes and said “What??!, I can’t hear you”.

I replied with “nevermind”.

With the pleasantries out of the way we proceeded to skate around the oval, as if we were the only two skaters on the floor. I learned later that Ezra and Stephanie were skating behind us for the whole song laughing (secretly) at us.

After the song ended, we went our separate ways.

I learned a few weeks later, through the grapevine, that she didn’t like me anymore. When I inquired why, I was told that she had said that “we had nothing in common”.

“How could she possibly know that we had nothing in common?”, I thought to myself, in dismay. “We had never even really talked.”

I made a mental list of the things that I knew about her to see if I could identify any common interests. I knew that she liked horses. At least I think that she liked horses. I didn’t really care for horses. Didn’t hate them, mind you; I just wouldn’t call myself a horse person.

“Well”, I thought, “maybe she’s right. Maybe we are just too different.” This was a bitter pill, but I had no choice but to swallow it.

Now that you’re up to speed on the “Christina” back-story, I’ll return to Ezra’s suggestion that I should ask her on a date.

“That would be too weird”, I said to Ezra. “My dad will ask who I’m going to the movie with, and if he finds out it’s a girl, he’ll make fun. Why don’t we do a double date thing? You can ask Suzanne or Stephanie, or someone else to go with you, and then we’ll all go together.”

Making it a double date would accomplish multiple things. Firstly, it could be presented in a more casual light, so I wouldn’t have to stand on the precipice of rejection. Second, it was possible that Ezra could open the negotiations, and save me the agony of having to “ask” entirely. And finally, it would make the experience on the date less stressful, as I wouldn’t be relied upon to participate in every conversation. I could chime in when I felt comfortable, but I wouldn’t bear responsibility for long awkward silences.

Ezra agreed, and we put the plan into action. The next day at lunch time, Ezra informed me that he had talked to a few girls, and that the movie was on. Only, it wasn’t going to be a double date as we had originally planned. Four or five girls in the class had already expressed interest. It was just a matter of finding the right matches, since this was going to be a “date night”. Over the next few days matches started to form, and before I knew it, our little double date had grown into double digits, with 5 or 6 couples pledging to attend.

This little idea had transformed into something like a highschool dance with boys trying to summon the courage to ask a girl, and girls patiently waiting to be asked.

A week before the big day, I still hadn’t asked Christina. I’m not sure what I was waiting for. Perhaps I was waiting for a message from the heavens to assure me that the time was right. Unfortunately, when the message finally came it was different than I expected.

“Steven, you better hurry and ask Christina”, Ezra warned me during recess. “I heard that Rob just asked her, and that they are going together.”

“What?!!” I exclaimed, experiencing a small amount of genuine shock. This was my fault. I had waited too long. Part of me was relieved as I was now absolved of my obligation to ask her myself. No rejection required, and I didn’t technically “chicken” out. It was out of my hands. Oh well.

But then, at lunch time, opportunity reared its ugly head. I was warming up in the gym for lunch-time floor hockey, when Rob approached me.

“Steve, can I talk to you”, he asked.

“Yeah, sure, what’s up”, I pretended to not know what this was about.

“I heard you wanted to go to the movie with Christina”, he said. “If I had known that you wanted to go with her, I never would have asked.”

“That’s OK”, I assured him. “I was just too late”.

“If you want, I can cancel with her, so that you guys can go”, he offered.

I had already made peace with my loss, but this offer seemed like it was too good to pass up.

“Wow! You’d do that?”, I replied. “Thanks man”

That set the stage for my second conversation with Christina. That afternoon, she pulled me aside in the back of class. “Can I talk to you for sec”, she asked.

“Sure”, I replied.

For a brief instant I thought that this would be the magical moment when we would, once again, profess our mutual affection for each other, and make it official that we would be attending the movie as a couple.

I was wrong.

“How dare you make a deal behind my back!”, she said sternly. “I am not some piece of property that you can trade.”

She said other stuff too, along the same lines.

The gist of her monologue was that we weren’t going to be going to the movie together. She would be going with Rob per the original plan.

I handled this rejection with grace, since I had already previously accepted this the first time I heard it. And, I could see her point. But now I faced a new challenge. With only 4 days to go until the movie, I still didn’t have a date, and now I didn’t even have any prospects. I suppose I could have just gone by myself, but that would have gone against the entire concept of a “date night”. Everyone had to have a date.

Luckily, on Tuesday, the universe intervened. Suzanne suggested that I should go with Gail because she also didn’t have a date. Gail was nice and pretty, so that sounded fine to me.

Friday was movie night. My dad dropped Ezra and I off at the Willowbrook 6 box office for the early show (7pm-ish). Once inside the door, we saw Suzanne, and a couple of other kids from our group standing watch in the lobby.

“Necessary Roughness is full”, she informed us. “Only half of us can fit in there. So some of us are going to watch City Slickers”.

To paraphrase the late great Hannibal Smith, I hate it when a plan falls apart. I had seen City Slickers a few weeks prior. It was a good movie, but I didn’t want to see it again.

A lesser man might have lost composure upon hearing this news – screamed, cursed, pushed over a popcorn wagon. But I somehow managed to keep it together, while Suzanne continued to brief us on the situation.

“… We have a row blocked off in Necessary Roughness”, she continued, “and there are two seats left….”

“Hallelujah!”, my inner voice screamed. “It’s too bad we have to split up, but at least I can still watch the movie I came to see.”, I thought. This was a silver lining I could hang my hat on.

But then, the boom dropped.

“Gail is already in City Slickers.”, Suzanne added. “She’s saving a seat for you”.

There is a scene in Good Will Hunting where Robin Williams’ character is telling Matt Damon’s character how he met his wife. He had been entering the gates of Fenway park for the historic game 6 of the 1975 world series, when the most beautiful woman he’d ever seen caught his eye as she was walking away from the stadium. It was love at first sight for him, so he relinquished his ticket, and went after her. Damon’s character, astounded by this, asks if he ever regrets this decision. “Not even when she (eventually) died of cancer”, he responds. (Or something to that effect).

Good Will Hunting didn’t come out until 1997, so it was not available to my decision-making algorithm on this 1991 Friday night. Had it come out ten years earlier, perhaps it would have granted me the perspective to see beyond my immediate desire to watch Necessary Roughness. Perhaps I would have chosen to join my date in City Slickers, and it would be such a life changing decision that I would never have any regrets about what I had sacrificed to sit with her. But it didn’t, so I was wholly unprepared for this dilemma.

I could hear the trailers start to play, so I knew I had to make my decision quickly. I mean, I guess I was sort of obligated to sit with my date…. But on the other hand, it didn’t seem fair to ask a man to suffer through a movie that he had already watched when could be watching a new movie – one that he really wanted to see. Furthermore, I continued to rationalize, it wasn’t really like a “date date”. We were all together as a group. Surely Gail wouldn’t mind if we watched separate movies.

In the end, the decision itself wasn’t that hard for me. The hard part was telling Suzanne.

“Since I’ve already seen City Slickers….”, I began. “I’m going to watch Necessary Roughness. Can you tell Gail?”.

Phew! That was awkward. But it felt good to have all of the obstacles cleared. I could now proceed straight to my seat and enjoy the movie with a clear conscience.

Necessary Roughness is more than a movie to me now. It is a time capsule that transports me back to that Friday night in 1991 when we were still kids, but were beginning to explore the waters of the next frontier for the first time.


The Rivalry

The following is my account of one of the greatest rivalries in elementary sports history. It retells the infamous showdown at the 1992 Langley Grade Seven Boys Basketball Championships between Peterson Road’s heroic grade seven team, and the evil grade six team.

Okay, they weren’t evil ;). Enjoy

“Did you hear that Mr. Page entered the grade sixes into the grade seven tournament?”, John declared. There were four of five of us kids gathered in a cluster outside the grade seven entrance of Peterson Road waiting for the morning bell.

“What?!!”, I said in a surprised tone. “Can he do that?”

“Well, he did it”, John replied.

“Hah. We’re going to kick their asses”, a few others chimed in.

I had to take a minute to process this information. My first reaction was one of dismay. “The audacity!”, I thought. “These upstart grade sixes thought they could challenge us?!! Who did they think they were?!”.

Surely this broke some law. I mean, we had dutifully followed the unwritten protocol of “wait your turn” through seven years of elementary school. My mind went back to the dispute we had with some grade-three kids, when we were in grade one, about who got to play on the soccer field. Our case was dismissed with prejudice by the noon-hour supervisor on the grounds that the grade threes were older. As a part of that ruling, we were assured that, when we were in grade three, we could use the soccer field. This dispute was not alone in its affirmation of the protocol that the needs of the older outweighed the wants of the younger.

We had paid our dues, and now it was our turn to be sovereign. These upstart grade sixes thought they could buck this sacred law skip to the top of the food chain. This insolence could not go unpunished.

My second thought was that this was unprecedented! To my knowledge, no grade six team had ever, in the history of elementary school sports, been allowed to compete in the grade seven tournament. At least not of the school already had a grade seven team.

Better fact-check that, I thought, as my historical knowledge of elementary sports was limited to the past three years and spanned only a couple of schools.

“Has a grade six team ever been allowed into a grade seven tournament before?”, I asked the wikipedia of the day (aka John, Steve, Ezra, and Pat).

“Nope”, they said.

It was confirmed. Unprecedented in the history of sports. Which leads me back to my first thought again. “The Gall!”

If I’m honest with myself, however, the most unsettling aspect of this news was that the grade sixes were pretty good. “What if they beat us?”, I thought. I’m sure this same thought crossed the other boys’ minds as well, but none were foolish enough to express it.

I had been teammates with most of the grade six boys at one time or another. Several of them had been on my baseball teams throughout elementary school. A few of them lived in my neighbourhood, so we would often play street hockey and tennis together. During lunch-time football, we would frequently scrimmage against them, and one of them even played on our (grade seven) team when we were low on players.

They were fast and athletic so I wasn’t immediately confident that we would beat them in a head-to-head matchup.

As a thought experiment, I imagined a pick-up game combining both grades, where I got to “draft” my team. Who would I pick?

Well, my first pick would probably be Quinn, as he was our best player. Quinn was tall and lanky, with a shoe size that hinted that he was going to grow a lot taller. He could jump, dribble equally well with both hands, and make highlight-reel lay-ups from both sides of the hoop. His dad was very tall, and had coached several of our basketball teams throughout elementary school. If he wasn’t on the courting shooting hoops, he was probably carrying a basketball en route to a court.

Having chosen a grade seven as first pick in this fantasy draft, I felt a little bit better, but the subsequent picks weren’t going to be as easy. We had a good crew. We had played together for years in multiple sports, and we knew each others’ strengths and weaknesses well. I could think of four or five good choices for the second pick. Pat, Chad, the other Steve, John, Ezra, Chris. All were good players who I trusted with the ball. But…. I can also think of one or two grade sixes who, If I’m honest, deserved the second pick over my trusted mates, and an additional four or five who would be solid third picks. So it is conceivable that four of the five starting spots in the “dream team” would be filled by grade sixes.

“But we have a height advantage”, I tried to convince myself, “and the experience”. Our sheer will to win would be the difference. We got this.

As far as I recall, the grade six boys were gracious about the situation. They were all good kids, and we got along well with each other. I suspect that if the roles were reversed, we wouldn’t have been as respectful. But they didn’t need to say it out loud – the threat was palpable, and the stakes were high, but asymmetrical. They had nothing to lose. We, on the other hand, had everything to lose. If we allowed to the grade sixes to come into our tournament, and beat us, it would have been demoralizing.

On the first day of the tournament, we arrived in the DW Poppy Secondary gymnasium as a team. The schedule was posted on a portable bulletin board, the kind with wheels and a chalkboard on the back. There were about ten schools listed. I overheard some players from other schools wondering out loud about the fact that Peterson Road had two teams. I thought about explaining it to them, but decided not to. Better to leave them guessing. Information is power!

We had played against most of these schools during the regular season, and I felt confident about our chances. In my mind, only two teams mattered. Langley Central had a kid named John MacDonald who was, hands-down, the best player there. He was five foot ten, and, like Quinn, could dribble equally well with both hands. He didn’t need to jump at all when shooting free-throws, and his three-point percentage was better than most boys’ layup percentage. He was a complete player, who could have been playing senior ball. Because of him, Langley Central was the team to beat.

The other team that mattered was, of course, the grade six squad. In our eyes, it was the only game that mattered. If we managed to run the board against all the other schools, win the championship, appear on TSN for interviews, and be congratulated by the Queen for our achievement, but lose to the grade sixes, we would feel obliged to retreat to a dark corner and curl up into the fetal position, never to be seen again. Yes, it was that important.

As with any tournament, it was possible that we wouldn’t end up playing the grade sixes at all. They could have been placed into a different pool, and then we would only play if we both made it to the finals.

“We play Langley Central second! On the main court”, Chad shouted, looking over his shoulder with his index finger on the schedule, “and then the grade sixes, in the small gym”.

So it was official. Game On!

After winning our first game, we assembled on the main court to start our warm ups for the game against Langley Central. We started with layup drills.

This gym had a completely different feel than the elementary school gyms we were used to. The hardwood floor was a little bit less bouncy than the linoleum I was used to, and the plexiglass backboards were a bit more bouncy than the wooden ones we had. The gym was two to three times the size of Peterson Road’s. It had actual stands where spectators could watch, and a large electronic scoreboard mounted near the ceiling. This was the big time.

After our warm-ups, we returned to the bench where our coach picked a starting lineup. The chosen five stayed on the court, and the rest of the team took their place on the bench. The five included Chris and I sharing guard duty, Quinn in the middle, and Pat and John on the wings.

In professional basketball, they usually have a starting five players, and individual players may be substituted out in the course of the game when a starter needs a rest, or runs into foul trouble. The coach may also make a substitution if they want a particular match-up. In elementary school, however, our substitutions worked more like line-changes in hockey. The starting five would play a few series before being replaced by the second line, followed by the third line, etc..

This made for some dramatic momentum swings in games, as the skill-level of different lines vary wildly.

Quinn lined up against John MacDonald for the tip off to start the game. They won the jump ball, MacDonald tipping it back to their point guard, who took a couple of dribbles before passing it back to MacDonald. A couple more passes, then back to MacDonald under the hoop, who dropped in an easy lay-up.

Not a great start. But now it was our turn.

Chris in-bounded the ball to me and I took it up the court. I saw John open on the right side just inside the three point line, so I bounced it over to him. He gave a quick head fake to the defender then took it to the hoop, where MacDonald was waiting for him. A little fake to the left and then an underhand layup made it up to the rim. After a couple of rattles around the rim it dropped for a basket and we tied at two. We got this.

A few minutes later, with the score seven to two, Langley Central did a line change, and their star player was replaced by a new squad. I found it puzzling that they didn’t just have him play the entire game. With him on the bench, we clawed our way back into the game. A few minutes later, with our team up now ten to nine (or thereabouts), their top line was back on the court, and momentum changed again.

This pattern continued throughout the game. Their top line would run up the score, and then we would inch our way back against their second line. When the final buzzer sounded, though the score was close, we were a couple of baskets shy.

This loss didn’t phase us terribly. We knew what we were up against and the score was close enough to make us feel like we could turn it around the next time, which we assumed would be in the finals.

On to the main event – the only game that mattered – in the small gym.

This gym felt more comfortable than the main gym, as its size was closer to what we were used to. It still had a hardwood floor, plexiglass backboards, and an electronic scoreboard. But it was a newer gym (about 3 years old), and the floor felt a little bouncier. The lighting was also a little brighter than the dull lights of the main gym.

After the pre-game warmups and rituals, both teams assembled on the court for the tip off. Our team wore the white side of the school’s invertible jerseys, the grade sixes were wearing grey and burgundy T-shirts. A moment of calm before the storm as the referee prepared to toss up the ball to start the game. Our height advantage secured an easy victory on that first jump ball – and on most of the subsequent ones.

Unlike the Langley Central game, which was a series of momentum shifts, this game was see-saw. Back and forth. They would score, then we would score. We would stop them, then they would stop us. We went into halftime in a virtual tie – which was too close for comfort. Things were a little bit tense. Players who made mistakes were informed of them by certain other team-mates – just in case they weren’t aware that they weren’t supposed to miss that last layup.

This pattern continued into the second half, while intensity continued to rise. With under thirty seconds to go, we were down by a point. I was watching from the bench as Chad dribbled the ball up the court and the team set up the offence. The sixes were playing tight defence with everything on the line. We passed the ball around the perimeter but couldn’t find an opening. Twenty seconds left. Finally someone got an open shot. Fifteen seconds… the ball arced through the air, our hopes attached to it … 13 seconds… It went off script and bounced off the front edge of the rim and returned to flight, back into the court. 11 seconds. Luckily the rebound found its way into Pat’s hands near the free-throw line. Pat, who was one of our most reliable shooters, made no mistake with it. He stepped forward and released a shot that resulted in a swish.

We all cheered loudly. Everyone on the bench was on their feet, with arms in the air celebrating what was looking like a sure victory. I glanced up at the scoreboard for some assurance. 8 seconds, 7 seconds.

The game was not over yet. They passed the ball in, and started down the court with urgency. With only a few seconds remaining they knew it was all or nothing here. The guard threw up a “hail mary” to their forward near our freethrow line. I watched in horror as the pass was completed, and their player (I don’t remember who), turned to the hoop, and started his attack run. Two dribbles, a step and a half, and he was going up for a lay-up, but at the last second, Chad, dove in from behind and got a piece of his arm just before releasing it.

“Foul!” yelled the ref.

And so, with the score thirty-nine to thirty-eight, for us, and three seconds left on the clock, a grade six was going to the line for two free-throws.

The coach decided to substitute in all of our tallest players at this point to make sure we got the rebounds, so Chad was out, as he was one of the shorter players. I could see tears running down his face as he sat down.

“What’s wrong?”, I asked.

“I lost the game for us”, he said frantically. “It was my foul. If he sinks these, it’s my fault!”.

He was too agitated to sit, so he started pacing the sidelines.

“Hold on a minute”, I said. “If you didn’t foul him, he would have sunk it for sure, and then we would have lost already. This way we still have a chance.”

That seemed to calm him down, and our attention shifted to the court where everyone lined up for the first shot. We watched as the ball traveled toward the hoop, and… bounced out.

An eruption from our bench. Everyone was already on their feet, but now we were jumping and screaming. We had evaded the immediate danger of losing, but they still had a chance to force the game into overtime.

The referee bounced the ball back to the grade six’s hands. The gym got silent. You could cut the air with a knife. Everything was now riding on this one young boy’s shoulders (I really wish I remember the name of the boy – if anyone reading this knows, please share). He bent his knees and raised the ball up to shooting position, then launched it toward the hoop. This time, after bouncing around the rim for a second, the ball decided to drop through the hoop, and just like that, we were going to overtime.

Having been one shot away from victory, I could taste disappointment in my cocktail of emotions. But it was a new game now, and we were going to come out guns blazing.

The electronic scoreboard was updated to read “5:00”, and the ref called the game to order again.

This overtime frame followed the same pattern as the rest of the game, with back and forth action. However, we managed to go up by a couple of baskets early, and we retained the lead throughout. Truth be told, I don’t remember very much about overtime, as the real and memorable drama had already played itself out in regulation time. When the final buzzer sounded with us ahead on the scoreboard, we all rushed the floor to celebrate.

We recounted the memorable moments of the game to each other in between hugs and high fives. “Thank God”, I confided to Ezra, “I did not want to lose that game”.

“I won the game for us!”, I overheard Chad say during the celebration. “If I hadn’t fouled him, they would have won.”

After a short celebration, we lined up for the customary show of sportsmanship to shake hands with our fallen foes – our friends. The optimists among them threw in a “See you in the finals” along with the usual “good game”, but I could see the disappointment in their eyes. The emotion was still raw.

We didn’t end up winning the championship that year. We lost our semi-final game against Wix Brown the next day, which relegated us to a fourth place finish in the tournament. Disappointing as that was, it didn’t really matter that much. We had accomplished the most important feat and could return to Peterson Road with our heads held high and our rightful dominance still intact.


The Go Kart

Another true story from my childhood, that I call “The Go-Kart”. Enjoy:

I wheeled the Go-kart out from behind the shed. One could be forgiven for thinking it was a dune-buggy with its two rear tractor tires, its heavy-duty metal frame and roll bar. But it wasn’t a dune buggy. It was a go-kart – our go kart. My Uncle Ray had built it for us a few years prior, but it was never completed. In its current state, I suppose, it would be more correct to call it a soap box since it’s motor wasn’t functional. But I prefer to define things by their potential, not by their shortcomings, so I’ll call it a go-kart here. But I digress.

The seat was a single, curvy piece of lime-green fiberglass that was moulded into the shape of a cock-pit. It looked a little bit like a bathtub with a high back and a steering wheel. The steering column was moulded into the fiberglass’ contour, protruding up in the center, so that, when sitting in the driver seat, you would slide your legs into position on either side of it – the right foot on the gas pedal, and the left foot on the brake. Behind the seat, on the frame, was mounted a lawnmower motor.

The front wheels, in contrast to the rear tractor tires, were smaller (about 8”), rounder, and far less grooved. They looked like proper go-kart wheels.

She had been collecting dust underneath the lean-to roof behind our shed for years. Occasionally we would pull it out and push it around for a bit, but it was hard work because of its weight, so it mostly just sat waiting for the day when we had the wherewithal to get it “working”. Today was that day. Today was the day that my friend, Ezra, and I were going to finally take her out for a spin.

It was the summer after grade 7, and we had plenty of free time to tinker with the go kart. We had a goal, which was to “fix” the go kart’s engine, which had never been operational, but the plan was half-baked at best.

Ezra yanked on the engine’s starting cord a few times. It didn’t start, but it sounded like it almost did.

“I think we just need to pull faster. If we pull fast, and then let it go real quick, I think that’ll get it going.”

I gave it a couple of feeble pulls with no success, then Ezra took over again. Ezra was bigger and stronger than me, he was usually assigned these brute-force tasks.


“Check the gas”, Ezra said, “maybe it needs more”.

I found the grease-covered gas cap on the top of the motor and turned it to take a peek inside.

“Is it empty?”, Ezra asked.

“I dunno. Can’t tell. Too dark”.

Just to be sure, I fetched the jerry can from the back of the shed that we used for the lawnmower, and topped up the gas tank.

“That oughta do it.”, I said as I twisted the cap back on then wiped my greasy palms with my jeans pocket.

Ezra dug in with his foot on top of the go kart’s metal frame so that he could pull extra hard, then he gave it a tug.

The engine turned and sputtered a bit as the cord was pulled out, but it refused to add its own force and, like all the times before, just whirred down to a stop again.

“Maybe it needs to have a chain”, I said, pointing at the naked gears of the motor that were clearly intended to link up with the rear axle.

I thought for a minute, while Ezra continued to tug on the starting cord. Where could I find a chain? Hmm… Then it came to me. Our old swing set had chains that were used to connect the swings to the monkey-bar frame. Perhaps I could use that chain to link the gears of the motor and axle.

It took a bit of digging in the garage, but after rummaging through a dozen or so drawers of junk, and screws, and old light switches, I finally found the chain that I was looking for. This chain wasn’t the kind of chain that would typically be used in motors. This chain was more like the ones that they used at Zellers to rope off a closed checkout lane. I recognized that it wasn’t quite right, but I still naively hoped that it could be adapted. MacGyver once made a record player out of an Earring. If he could do that, then there was a chance, even a tiny one, that I could make this chain work.

Ezra took one look at the chain, and said “That’s not going to do it. It’s the wrong kind of chain”.

“I know”, I said, “but….”. I trailed off as I began my futile, and frustrating attempt to fit this square chain onto the round gear.

Ultimately I was forced to concede defeat to my cruel and humorless opponent, also known as reality.

This was a set-back.

We stood there for a moment, trying to think of an alternate solution. We had been planning for today. The goal was to take the kart out for a ride, and we weren’t going to return empty-handed. But without a working motor, there could be no “ride”.


“The walkway!”, I said excitedly, referring to the fire lane at the end of the cul-de-sac. If we could push it up to the top of the hill, we could let gravity be our engine. Just let it roll down the hill and hang on tight.

“And it’s closed off to cars, so it would be “safe”, I added.

Small detail, but relevant here: The go-kart, despite having a brake pedal, had no working brakes. “No matter”, we reasoned. “The bottom of the fire lane leveled out and should give us plenty of time to coast to a stop before we hit traffic.”

We discussed all of these safety concerns with sober consideration, and decided unanimously to proceed.

We used our combined might to roll the kart out of the back yard. Ezra walked along side of the driver seat and applied pressure on the steering wheel so that he could steer.. I pushed from the back, both hands on the frame. The first few hundred yards went smoothly because it was mostly level ground.

My house was situated at the “bottom” of our neighborhood. The entrance was at the “top”. By this I mean that if you drive into the neighborhood, the road follows a steady descent in the shape of a wishbone. When you reach the cul-de-sac at the “end” of the neighborhood, you find yourself at the bottom of the hill, and as proof of this, there is a rather dauntingly steep walkway at the end of the cul-de-sac, which leads directly back up-hill to the entrance of the neighborhood. If not for the fallen tree branches littering the path, and its rounded hockey-stick shape, this walkway would have made a fine venue for Olympic ski jumps. There was even a storm drain about three quarters of the way down that made for a perfect jump.

I used to love riding my bike down hills. I would take my hands off the handlebars and hold out my arms like a bird stretching its wings as the force of the wind blew against my body. I was a kite flying in the wind. But I never dared to ride my bike down this walkway. Too steep. Too narrow. Too crazy for my blood. And my bike had brakes.

We rolled the kart to the entrance of the walkway with ease. We were slowed for a moment while we steered around the gate posts, which had presumably been installed to prevent people from taking vehicles onto the walkway. The kart’s steering worked, but it was a little stiff, so it took a couple of attempts to thread the needle, and soon we were cruising again.

To make things fair, Ezra and I switched positions. I took the steering wheel to guide us up the landing, or the “blade” part of the hockey stick shaped run. Once we started rounding the heel, things got far more difficult, and we both had to push from the back to maximize our effective power output. From here on up, every step of the climb would be hard fought. I’m not sure how heavy the go-kart was, but it had to be at least a few hundred pounds. The frame alone was heavier than Ezra and I put together.

We reached the storm drain, and rested the go kart on the ledge that it formed so that we could take a short break and collect ourselves for the remainder of the climb. Beads of sweat were dripping off my brow and down the ridge of my nose. I looked back at the ground that we’d covered, then I looked up at the path ahead, and felt, for a moment, like we were in over our heads. Only a hundred yards to go. Maybe a hundred and fifty. But when every step is a battle, a hundred yards feels like a mile.

Luckily we had nothing else on our schedule for the day, so the length of the climb didn’t matter. If we kept pushing forward, eventually we would get to the top. And we did.

I recall an immense feeling of accomplishment as we approached the top of the path. We reached a second set of gate posts there, but we didn’t have to steer through this time. We carefully performed a 9 point turn with the kart and rolled it to the starting line. This is where we finalized the details.

It was already decided that Ezra would drive. I would stand on the back frame and hold onto the rollbar. We didn’t go immediately as we were exhausted from the climb, and wanted to rest. We also wanted to take in the experience for a while before moving onto the next thing. I suppose we were also a little scared. But what was there to be scared of really?

To recap, there were no brakes. Neither of us had helmets. I don’t recall if there was a seat belt, but if there was it would have been a loose-fitting lap belt. From one perspective, these details demonstrate a clear cause to be scared. But, looking at it another way, it demonstrates that we didn’t consider these things to be important, and thus, we didn’t think there was anything to fear.

We went in with eyes wide open. Before finally deciding to launch, we both took a last look down the path.

“That curve might be tricky”, I said.

“Yeah.”, said Ezra. “I’ll try to take it wide”.

“And watch out for that storm drain”, I warned. “If we hit that, I’ll go flying off the back for sure.”

We laughed for a minute at the ridiculous image of my flying through the air, arms flailing. We made up a few scenarios like the kart flying off the cliff and into the ravine. (Did I mention that the walkway had a cliff on one side with a hundred and fifty foot drop down to a river).

“That would suck”, we both agreed.

“We’d never be able to get it out of there.”

And we laughed some more.

Then things got serious as we prepared ourselves for the final countdown. We backed up the kart as much as we could, then Ezra climbed into the driver seat. I pulled on the back of the frame to prevent a premature start.

“Three, two, one…” I counted down.


I gave it a little push – a very little push as I wanted to make sure I was still able to climb onto the back before it gained too much velocity. It started to roll, so I jumped up onto the frame, and held on for dear life.

There’s a scene in Indiana Jones and the Last Crusade where the Nazi opens the hatch of the army tank just as it is about to roll over a cliff. This was me after about the first twenty feet, so I bailed out. But the kart continued, with Ezra at the helm.

The uncontrolled acceleration I felt in those first few yards had ignited a new fear in me, as I realized that brakes were a good thing. And a lack thereof was a very, very bad thing. I watched from the top of the hill as Ezra swerved from side to side and his momentum increased. The steering was a little tricky, and we’d never tested it at these high speeds before. Perhaps that is why Ezra’s plan to avoid the storm drain and take the curve “wide” didn’t pan out. Or perhaps he thought “what the hell!”, and decided to take the drain head-on. Whatever the reason, he went directly into that jump, and the kart was catapulted 5 feet into the air. I watched for that short eternity as Ezra and the cart sailed through the air.

Amazingly the cart stayed level, and straight. Unfortunately, the path began to curve underneath him, so that the further he flew on his trajectory, the closer he came to the curb.

The run had begun as “Days of Thunder”, but had suddenly morphed into “Top Gun”. Its success hinged on Ezra’s ability to land the aircraft. In slow motion, the harrier jet descended on the runway, inching closer and closer to the edge. And just when it looked like a spectacular crash was inevitable… he landed it! It touched asphalt just inside the curb which served as a sort of roller-coaster rail, guiding the kart around the heel of the hockey stick and into the home stretch. At the moment of touch-down, the universe returned from its suspended animation to a sort of “Three-stooges”-like fast frame mode. (You know, the effect where they speed up the film speed to make it look like the characters are running really fast, and movements become comically jerky). The friction from the tires scraping against the curb caused Ezras head to appear to bobble back and forth, like a small child hanging onto a jack-hammer.

I ran down the hill, screaming “Oh my God!”, and as the go kart started to decelerate on the landing, my fear converted itself into elation.

“That was awesome!”, I yelled. Still running down the hill.

When I reached the bottom, we celebrated briefly, and shared with each other what the view was like from our respective seating positions.

“You got so much air, man!”, I said. “Like 10 feet.”

“Yeah”, said Ezra with an air of new-found experiential wisdom, “I didn’t think I was going to land that”.

“You could have been killed”, I exclaimed, not stating the obvious at all.

I don’t remember who said it, or if it was said out loud at all, but we both heard it.

“Let’s not do that again.”