Posts in Category: Professional

Me and the Double-B

A Brief History of Time

Robb Reid (a.k.a, the Double-B) and I have worked together on and off since 2008, and on the auspicious occasion of his first day at a new job, I figured that I would chronicle our adventures together.

2008 - A Meeting of the Minds

I started at Haemonetics, after leaving Intuit, in October 2008. There were a lot of people to meet and whose names I would have to remember. Robb was one of these people. He did not like me.

As time went on, I think he warmed to me, so much so that after a few weeks, I came to understand why Dennis called him the RMDB. Robb knows his movies and TV, and nobody can tell me otherwise.

2009 - A New Opportunity

When Obama became president and destroyed the project I was working on (Thanks, Obama!), I found a new contract very quickly. They were looking for another developer, and I immediately thought of Robb. So we spent some time working together (albeit on different projects) at Accenture. I think that's when we started going for lunch together every day.

Late 2009 - Back to the Beginning

Robb and I both got work at Haemonetics on a new and improved project that was safe from the whims of government, being a commercial product. We worked there together, being the first two contractors on the project, and survived the (at least perceived) scorn of some of the permanent people there. We dismantled our cubicle and created the Collaboratron, which was basically just a hole in the wall where we could share ideas.

Toward the end of the first contract, we were both renewed, but Robb found a different job and took it, leaving me to patch up the collaboratron hole and pick up the pieces.

Late 2010 - 2014 -- Two Roads Diverged

Robb continued in his job with the government as I continued to pick up contracts. The work at Haemonetics dried up and I found Intuit, POSP (my own sojourn into government work), Telus, and Intuit once more. Toward the end of my contract with Intuit, Robb got in contact. He was starting a new job at Gamesys, a company I'd heard of only tangentially to that point, and we started going for lunches again.

2014 - 2015 -- Gamesies

Through March and April of 2014, I tried to get hired by Gamesys. And in May of that year, Robb and I were reunited at Gamesys. We worked together. But in July 2015, all of that changed.

2015 -- Gone Again

Robb accepted a position with IntelliWave, some kind of tracking company that uses RFID to save oil companies money. I understand the reasons he took the job, but it leaves me Robbless yet again.

I wish Robb well at his new job. He starts today, and I wrote this as much to wish him well as to mark his passing.

Game Programming

For the last week, James and I have been working on a game.

I was going to wait until we were done, until we had deployed the finished and polished product somewhere, but I'm excited by the work we're doing, and I wanted to talk about it, so here it is.

ASTROSMASH!

In 1981, Intellivision released Astrosmash, a game that was released to match Atari's Asteroids game. Instead of flying around the screen, though, you're stuck to the bottom, shooting upwards. Meteors, seekers, and bombs of varying sizes and speeds fall from the sky as you zip back and forth across the screen and try to line the little buggers up to blast them from the sky.

My memory of this game from my childhood is incredibly intense -- from the descending tones of the bomb as it makes its way to the ground to individual asteroids in which I could see faces. I used to play this game for hours at a time. We didn't have an internet available to us, and it was a reasonably diverting way to spend some time.

Why ASTROSMASH?

The first game I worked on using the technology we picked was through a tutorial. I recreated the Nokia snake game where a snake eats an apple and grows longer. If the head runs into the body or the walls, the game is over. The finished product was really nice. It was simplistic, but it worked, and it was fun. Which made me think of the Intellivision. Simplistic but fun was almost their calling card. So I decided on the simplest game I could think of.

The Devil in the Details

Nick implemented a version of the game in scratch that worked. If we were interested in a working, and somewhat reasonable facsimile, we could have stopped there. Instead, we wanted to look into the guts of the game, figure out what made it work, what made it fun, and try to implement that. There is a lot to this game.

When the game is ready, and I write a post about it, I'll go into the details I'm talking about. I can talk now about how the jerkiness of the ship in the original intellivision game made it a lot tougher. I can talk about how at faster levels the speed of the meteors is so intense, you're almost shooting them by accident as you try to avoid the faster ones. I can talk about how there are never more than five bad guys on the screen at a time and the big guys split when you hit them, but only if there are enough open slots for two new bad guys to fit. There's a bigger list of things with this game, but again, I want to save that for when we've solved all the problems and have something polished. For now, suffice it to say, there is a lot of tweaking of algorithms to up the danger and keep the game fun.

The Technology

Both James and I are using JavaScript in some flavour or another at work, and we decided that we would tackle this project in Phaser, an HTML5 Javascript library. It may be slower to get something out than scratch, but it seems a lot more extensible, and full featured. I'm very proud to see what Nick has accomplished. I just want to do something with code.

Phaser, for those of you who are intrigued, is, as far as I can see, a really good, fully-featured game programming environment. It has libraries to help you, but leaves the logic and the game itself up to you. One day, I will make a write-up on phaser itself, and you will see how simple it is to make something quickly in phaser.

But Where Can I Play It?

James has put a copy of the game up on his site, though as of this writing it hasn't been updated in a bit, and the ship is slow, and the enemies are completely unthreatening, but it's a game that we made, that has score, and good guy, and bad guy, and game over. I'll be deploying something to my site as well, but not just now.

That's it for now.

Liam

A Dubious Anniversary

Six years ago today, everything started to go downhill.

I'll grant that things weren't helped by the passing of my mother on the 25th of February, that year. I was sad, but I was processing. My family was supportive, and I had a good and productive job that I worked with a bunch of like-minded people, all of whom were interested in getting better and getting the job done. Then, the bottom fell out.

The majority of the people working on the project were contractors. There weren't any big egoes. Everything was going well. I spent all of the previous December doing manual testing, and I didn't even mind.

Let's keep in mind that this was the first work that I'd done after leaving Intuit. I felt, for the last six months at Intuit, like I was drifting, with nothing important to work on. I joined Haemonetics and was almost immediately put to work, learning a new framework, and it felt like urgent, important work. I felt valued.

Then Haemonetics lost the contract.

I don't know how these things work. It sounded like the work was guaranteed, that we were in it for the long haul. But I guess if there are enough dollars thrown around, you can get out of pretty much anything.

"It's not the work that you guys did. The Project Office loves that."

"They're just as surprised and upset about it as we are!"

These are the things they told us when they called all of the contractors on the project into the room, save one, and let us know that our services were no longer required.

It wasn't the end of the world. I mean, I wasn't being let go because of performance issues. And I still had friends who had jobs. I could maybe lean on one of them to find something. And I did. Before the end of that week, I had something lined up through a friend of a friend.

It wasn't the end of the world, but it was a serious rupture to the momentum I'd built up in recovering from the loss of my mom.

I started the next contract, and I had big ambitions to be everything they needed. I would work just as hard there as I had at Haemonetics and impress them every bit as much. I could do that. I would do that. Anything else was unacceptable.

Then I didn't.

Things weren't the same at the new place. There was no collaboration. There was no support. Where I'd had good conversations over design decisions, and collaborative efforts were the name of the game, now there was finger-pointing, blame-dropping, and crickets, or worse, figure-it-out-yourself-contractor when I asked for some help. My motivation to excel waned, my work ethic withered, and, though I redeemed myself at the end, their decision not to renew my contract at the end of the eight weeks was understandable, and probably nothing more than good business sense.

I'd lost myself in uncertainty, anxiety, and depression, and I let that affect my work, my family, and everything else. I remember leaving work one afternoon and just wandering downtown Edmonton. I couldn't bring myself to face the work that I had to do because I'd built it all up so high in my mind and I didn't have the heart to tackle it.

I finally hit rock bottom when a design came due and I had done almost nothing on it. I bounced back pretty quickly, stayed up all night and finished the design properly, according to their template, and didn't charge for that time, but I'd embarrassed the hell out of myself professionally, and the damage was done.

One of the project managers, one that I felt some animosity towards over some interactions we'd had before, sat down with me and told me that the work I'd been doing was not good enough, and that, while they were not yet ready to get rid of me, they had considered it, and I had better improve. I replied that I knew the work I'd done was not good enough, and that I would do better.

Over the last weeks of the contract, I attempted to do better. I put everything to the side -- family, friends, interests -- and threw myself into work. I worked sixteen hours, four days straight, knocking out bugs for a release that was already far past due, and left on the last day of my contract, after midnight. I'd skipped supper because I didn't have a key anymore, and there was one guy left to see me off.

After the contract, the friend of a friend who'd gotten me the job contacted me. He'd heard from the office manager who'd wanted to pass something along. I tensed up as soon as I heard that. That crippling anxiety that I'd thought I had left behind when I hit bottom came rushing back into me. What if they were planning on suing me? I couldn't afford that.

Instead, he told me that the manager wanted to thank me for the extra time I'd put into the project before my contract was up. The bug count had gone down dramatically and it was largely due to the work I'd done. I guess you could call it redemption, but I got the distinct impression that they were happy to be rid of me.

Every year after that, starting with the 25th of February, anxiety creeps over me, a ghost with icy fingers crawling through my guts. The secret shame of that horrible failure of a contract steals over me and I find myself almost paralyzed by my own inadequacy. It's gotten better in recent years. The years when I was at Intuit kept me so busy I didn't have time to feel one way or the other, and the contract at Telus was much the same.

This year, I've started to go down that road again. Some of it has to do with Timehop, an application that unearths your old social media posts from the same day in the past. I've been reading posts from my time at Haemonetics, and as this day got closer, I was feeling more and more dread.

Today, I've decided that enough is enough. I'm coming clean about the darkest and most shameful time in my life. I'm making a commitment to moving forward in my life instead of spinning my wheels and looking behind me for a thing that will only chase me if I look for it. And I'm deleting Timehop.

Timehop, you were a fun waste of five minutes now and then when I took the time to look at you, but you're in my way, and I'm saying good bye.

I hope you will forgive the lack of editing on this post. It was a tough one to write and if I think about it too much, I'll chicken out and not publish it.

Thanks for listening.

Beginner’s Intro to Programming: Lesson 1

Programming Course: Lesson one

In the first class of programming course, we talked about a couple of ideas.

First, we talked about Boolean logic and the notion of TRUE and FALSE. These two things are very simple to think about. The examples we used involved a couple of students and a sibling.

We said "Nick is a boy" is TRUE. We also said that "Ryan is a boy" is TRUE. And we said that "Lily is a boy" is FALSE. Using that, we could expand to talk about the logical operators.

"Nick is a boy" AND "Ryan is a boy" is TRUE. "Nick is a boy" OR "Ryan is a boy" is TRUE. "Nick is a boy" AND "Lily is a boy" is FALSE. "Nick is a boy" OR "Lily is a boy" is TRUE. "Lily is a boy" AND "Nick is a boy" is FALSE. "Lily is a boy" OR "Nick is a boy" is TRUE.

We also looked at logical negation, or the idea that NOT TRUE is FALSE and NOT FALSE is TRUE. This gets a little confusing when you try to fit it into English, but we tried:

NOT "Nick is a boy" is FALSE. NOT "Lily is a boy" is TRUE.

Then we looked into code for these logical operators.

AND is &&, OR is ||, and NOT is !. Using T for TRUE and F for FALSE, we get the following values:

T && T == T T && F == F F && T == F F && F == F T || T == T T || F == T F || T == T F || F == F !T == F !F == T

There's a lot of ground to cover in logic, particularly with Boolean Algebra, but that got us started, so we'll leave off there, with a final note: If you're interested in more, you can find it here.

Moving on, we talked about variables. Variables are a little tricky because they're pretty different in different languages. But for our purposes, beginning programming, we discussed what variables are for. Variables are there to hold stuff for us, so we can do work without always knowing what values are going to be.

We talked about a program that prints the greater of two numbers. The simplest way to do this, if you know the two numbers going in is to just write one line of code:

console.log(1);

if you're comparing two numbers and 1 is the lower one. The problem is, when you're programming things that are smarter than that, you won't be able to know in advance what the values you're using are. So, we added variables to our problem, like this:

var input1 = 1; var input2 = 2;

So, we have two variables that we can use. We can change them if we want to, we can read them, we can compare them, we can print them out to the screen:

console.log(input1);

So, knowing that we can store things, and knowing that computers are good at making decisions, we need to find out HOW a computer makes decisions.

The easiest way for that is with a conditional statement -- for our purposes, an if-statement:

if ([boolean equation here]) { [do the stuff you want to do here] }

That's the syntax for an if-statement. We learned about boolean equations above, but we have to take a little time to learn a way to make those TRUE and FALSE values.

One way is to use mathematical comparators: >, <, ==, !=, >=, <= That is, greater-than, less-than, equal-to, not-equal-to, greater-than-or-equal-to, and less-than-or-equal-to. There are more ways than this to generate boolean values, but these are the simplest, and they suit our purposes well. Greater than is a great place to start, because we want to see which is the biggest number of our two:

if (input1 > input2) { console.log("The bigger number is input1, which is: " + input1); }

Ok, there's a little bit to talk about here. The console.log line has a + sign in it, but for now, let's just say that when you're dealing with a string, it just mashes everything together.

The first line is what we're most concerned with. Greater than is true if the first number is bigger than the second. So, if input1 is 10 and input2 is 2, this would evaluate to true. The curly-braces {} hold everything that happens if this case is true. So you could have more than one line inside those curly-braces and it would only execute if the condition in line 1 is true.

Great, so assuming input1 is bigger than input2, we're done. But, as we said, we can't assume that. So, we need more. We could just add:

if (input2 > input1) { console.log("The bigger number is input2, which is: " + input2); }

That would definitely get us further down the road. I mean, you've got the cases where one is bigger or the other is bigger, and that should be just about it, right? Except that we're missing one case. What about if they're equal? That should be easy by now. We have another comparator to check equality:

if (input1 == input2) { console.log("input1 and input2 are equal, and their value is: " + input1); }

And that closes all the cases. If neither one is bigger, then they must be equal. So, we're done. But that is a little bit of a bog. Three separate if statements. What if our comparison was more complex?

if (input1 > 0 && input2 > 0 && (input1 + input2) < 100) { console.log("both are greater than zero, and their sum is less than 100"); }

That's great, but how would you do something if that wasn't true?

Sure, you could code it explicitly:

if (input1 < 0 || input2 < 0 || (input1 + input2) > 100) { console.log("no they aren't"); }

But there's a simpler way:

if (input1 > 0 && input2 > 0 && (input1 + input2) > 100) { console.log("both are greater than zero, and their sum is less than 100"); } else { console.log("no they aren't"); }

That's the all-powerful else. If the condition in the initial if-statement is true, the block under it is executed. However, if the condition is false, then you can put an else statement there to be executed instead. You can chain if-else statements so they look like this:

if([initial boolean equation]) { [first code block] } else if ([second boolean equation]) { [second code block] } else { [default code block] }

So, if we go back to our original problem, we have something we can use for that:

if (input1 > input2) { console.log("The bigger number is input1, which is: " + input1); } else if (input2 > input1) { console.log("The bigger number is input2, which is: " + input2); } else { console.log("input1 and input2 are equal, and their value is: " + input1); }

We ended the lesson by coding up the reverse of this, which was to print out the smaller of two numbers, or if they were equal, then to print out the word equal. Most answers looked something like this:

var input1 = 1; var input2 = 2;

if (input1 < input2) { console.log(input1); } else if (input2 < input1) { console.log(input2); } else { console.log("Equal"); }

Then I tested the programs by entering different values for the variables, one where input1 was bigger, one where input2 was bigger, and one where they were equal.

There was a lot to think about by the end of the lesson, and the syntax can sometimes be tricky, that's for sure. It starts out being frustrating that the language is so picky, especially for students who are used to the ambiguity of human languages, but once you learn to properly state things, there's almost no opportunity to be misunderstood. Learning how to properly state things is what makes someone a programmer.

The Third Thing I Am

Career choices are a funny thing. I wasn't thinking about a career as a programmer when I decided to go to university. I wanted to be a journalist. I wanted to be a professional writer, and I knew that the University of Lethbridge was a school that had a journalism transfer to Saskatoon. Little did I know that the journalism program at the Lethbridge Community College was all that I would have needed for that -- two years less and more chance I'd get in.

While I was looking through the calendar for the U of L, I started thinking about the science courses they had to offer. Being a Liberal Education university, I was going to have to take four sciences. I was intimidated by math, having been through the wringer in high school. None of the core sciences were appealing either. I realize now that I probably could have taken some Geography, Logic, and something else, and that would have been enough. But I got drawn in by computer science.

Truth be told, that story was written a decade and a half earlier.

Picture it: 1982 or 1983, and my dad brings home a computer. A Commodore VIC=20, to be more precise. It was a clunky thing. It had a tape player as its only storage device. But it was fun.

We played a lot of games on that computer, but I got my first real taste of programming. The operating system accepted BASIC commands and you could write a program right on the command prompt and execute it in front of your eyes. Never mind that I didn't know how to save anything that I'd written. Everything was in main memory, and I'll never forget:

10 print "Liam is awesome." 20 goto 10 run

Of course, I was six or seven, so I probably wrote something else, but the premise was there, and I was hooked.

Sean had some programming book, either it came with the computer or he got it at school, but I spent hours typing up the sample programs that were in it. I don't remember anything about how any of it worked, other than when I tried typing out a game that they'd printed out. It rendered ok, but there was no interaction. Honestly, I was probably eight or nine by that point, and the fact that I got enough of it right to even run anything was amazing.

Then, after high school, I finally invested some money in a 286 8MHz computer. It was hopelessly outdated, it didn't run any games or anything like that worth running, but it got me back interested in computers. We'd had a Colecovision ADAM, but I hated that thing. If you didn't load the tape drive or the cartridge bay, it loaded into a word processor. I'll grant that that's something I'd appreciate nowadays, but back then, it wasn't BASIC, so I didn't want anything to do with it.

When I invested some money in a more modern computer after the 286, one that had more than sixteen colours at its disposal, and a whopping 8 MB of RAM, one of the very first things I got was a copy of Borland Turbo C++. I wanted to learn how to program, so I also bought a book. Yes, it was C++ for Dummies, and yes, the stupid thing had the requirement of already knowing how to program in C, so I did the next thing, which was pick up C for Dummies and start learning that instead.

Granted, the book was full of stupid things like Microsoft-specific commands that didn't work when I started sampling Linux, but it got me started down the path to loops, conditionals, variables, and functions. By the time I started the intro to programming course at university, there wasn't really anything for me to learn. But I studied. And I asked a pile of questions. Any time the professor said, "Let's just pretend that it happens by magic for now," I knew I had a question to ask. And he was more than willing to help me figure it out.

I did waver in my commitment to graduating. I struggled pretty mightily with it, especially over summer when I had a job that was paying me right then. Couple that with a suspicion that maybe I wasn't good enough, and you had the fact that I only intended to come back after summer once, and that was the year that I spent taking classes over the summer so I could finish up at Christmas instead of in the spring. By then, I knew my back was basically shot and there wasn't much chance I could do a full-time labour job anymore.

Then there were three very demoralizing years after graduation, when I worked as a Document Control Clerk, then a supervisor. I got what I needed from that job, mainly money to start my life as a married man and experience in an office setting. I struggled, as I failed to qualify for job after job, not even getting an interview, wondering if it would make more sense for me to go back to school for something like millwright training, and just start over. It felt stupid. I'd gone the Student-Loan route through university, and if I was going in for more training, it would be even more time before I could start paying that massive debt-load down, not to mention how much I would have to pay to get certified.

Eventually, though, I got through the resume process, I got into an interview, and I did well. Well enough, at least, that they hired me. Since then, the foot's been on the throttle and, despite a couple of setbacks, I haven't really spent a lot of time looking back. If someone asked me how I identify myself, the third thing on the list would be as a programmer. And if they had something to say about identifying too much with career, I would maybe partially agree with them, but honestly, it is so much more.

Programming is more than a job for me. It's a mindset. It's how I go about solving problems. It's how I come to conclusions about things. Thinking this way got me my second and third mortgages. It helped me to decide to become a contractor and also to become a permanent employee again. I'm not saying I'm an unfeeling computer. Impulse and passion come into it a lot too, no doubt.

I like building things. I like to see them come to life. When all the pieces fit together and it not only works well, but hides the complexity of what's been built from the user, that's a satisfaction I get from very few things -- the two things I identify with before programming providing those. When I'm faced with a problem, I don't panic. When I hit a setback, I don't usually whine. I look for other solutions. And that is because I'm a programmer.

Y'know, in case you were wondering why I do what I do.

Keepin’ Busy

I find myself in the possibly-enviable position of being really busy.

I mean, I've been busy before. It feels like I've been busy since I finished university, with maybe a couple of breaks in there, but now, I've got so much going on, it's almost like I should outsource myself.

First, there's my family. They command my attention, and I would be a fool if I didn't try to give them the best of my time, if not the greater portion of it.

There's the full-time job, working for Gamesys on various projects. That's going really well, and I would let the other work-type things burn if they threatened what I have there.

Then there are the other work-type things. They're what have me excited and scared. I'm worried that I've over-committed, but I'm willing to give it a shot to see what comes of it. Starting on Tuesday night, I'll be alternating between two different projects, in order to both supplement my income and sharpen my skills in technologies that I'm unfamiliar with.

I figure that a month will give me what I need to know, whether this is a realistic thing, or whether I'm kidding myself and I need to pare down. I haven't been this busy in a long time, and I'm looking forward to the challenge.

Why Tuesday? What's so important about Tuesday? Tuesday is the first day in a month where I won't be participating in the summer blog challenge.

Have a good night,

Liam

Onward and Upward

Last night, I posted about starting to teach introductory programming to some homeschoolers. I'm really excited about it, and I'm looking forward to using my programming skills to do something more than just putting food on the table.

In the same line of thinking, I was pondering a way to make more use of the skills I've learned. My kids are going through the pain of learning their multiplication tables. I didn't struggle through that because of a tape my mom got for my brother that he used to listen to every night. I thought about doing the same thing for my kids, and I might just do that, but on another track, tonight I started writing a small program that would quiz them on their multiplication tables.

I mean, the premise is pretty simple: a question pops up, they answer it. If they get it right, they get a congratulations-message. If they get it wrong, they get the right answer and a consolation. That's what I've got so far, but I'm thinking about extending it.

Enter a name, and the program keeps track of you, either through a flat file or something else, but it keeps track of things like right vs. wrong percentage, longest streak, things like that. Then you pit your kids against each other, with your love at stake, and you can't lose. You're leveraging their competitive nature and natural insecurity for their own good.

Ok, ok, never mind the parents love thing. But it might be something to get them working at their multiplication tables.

Dear Old Golden-rule Days

In a week, I'm going to be teaching for the first time ever. I've agreed to teach a small group of kids an introduction to programming.

I love learning. I love teaching. I think that teaching has the opportunity to teach the person in the instructor role as much as it does the one on the other side of the line.

However, I have never been the biggest fan of school. I guess I was too impatient to get on with the real thing.

It should be interesting. I do a lot of teaching on-the-job, and I have ever since I had enough experience to have something worth sharing. There's something about when the light goes on for someone. You see them get it, and it's just this feeling that the world is somehow better.

I should be nervous, but I'm not. These kids have a real interest in learning, and there are definitely things that I can teach them, not just about a programming language or a particular framework, but about problem-solving, and the best way to do it with a computer.

I'm wondering how I'll consider it a success. I also wonder how fast it will be able to go. I'm guessing that will go however it has to go, but I've never had to deal with someone getting it faster than someone else.

I guess what I'm saying is that I'm excited for this opportunity to learn something about myself. Can I teach this? I know they can get it, but am I the guy to give it? I certainly hope so, and I hope that this becomes something more advanced, and something that I can give to the homeschooling community.

Cop-out

[Note: This cop-out post comes after a ten-hour day at work, Scouts night and a bed time that ended near 10pm. --l]

CSS layout for one form: 13 hours Dropdown population from a properties file: 6 hours and counting Javascript interactions between form fields: pending Data validation: pending

There are certainly days that are more humbling than others.

Better post tomorrow.

Liam

Books and Books

There are books, you know, the kind that you buy that have words in them. They entertain us, they give us knowledge, and insights. They are wonderful. I have that kind of book-buying problem.

This is after a massive, massive cull about a year before we moved out here. Most of my books are electronic nowadays.

This is after a massive, massive cull about a year before we moved out here. Most of my books are electronic nowadays.

Then there are the other kind of books. You know the ones. They often come with horizontal blue lines on every page, with a single vertical one on the side (or maybe one on each side). I don't buy those books very often. As a contractor, I used to get one for each contract, or if I filled one, I got another. Yeah, those kinds of books. I also have a problem with them.

Fear the pile!

This is what I could find immediately to hand and doesn't include my new duo tangs or the five or six big binders that I also use for the same purpose.

The thing is, when I go to start a project, either writing or programming, I generally start by scribbling some notes, requirements, or even some snippets, in a book. Since I have so many books, I've found myself plunging through them to find the things I've been trying to write.

To get away from this, I've started in with Duo-Tangs. I have one for this programming project I'm working on. I'm slowly transcribing my notes from this one book that has a couple dozen other things in there, including two partially-written blog posts that I haven't ported over to a book that I actually use for that, some notes on the Telus AMS 2.0 project -- don't worry, I don't have anything damning -- and a bunch of notes from my first contract at Intuit. I think there's some thirteen-year-old C code snippets in there for connecting TurboTax Desktop to Revenu Quebec. Don't worry, that stuff's so out of date that it doesn't apply anymore. Not that it matters. You can get documentation to connect to them on their website, if you so desire. (Trust me, you probably don't)

The duo-tangs have been serving their purpose admirably. However, I required something more central, a place to put appointments, work notes, things I needed to do, and to catalog all the things I have in various locations.

"But Liam," you say, "you have a Galaxy Note 3. what are you using that for?" And you'd be right. But while I love my phone and use it a lot, I can't get away from paper and pen. I'm addicted. Take away my physical reading books if you replace them with ebooks, but you can't take away my paper and pen. I need them. It's how I pull the thinkings out of my brain.

So, now I have something central. Following in Kim's footsteps, but starting a little closer to home, I picked up a Franklin Planner.

Leather that shines!

8.5x11 size, so I can just punch some holes in anything and go!

It's a little bare right now, having only a task-list pad and a blank notepad that I had lying around with all my other books.

Featuring the biggest pen loops ever!

We'll see how long the task pad lasts in the planner. It's a bit confining.

I also threw in a nice little notebook Kim gave me, that I've started keeping work notes in.

Front cover

Millions of little pockets!

Given that I spend all day on the computer, it's nice to have something physical to use to keep everything together. Plus, it's more chance to write.

Switch to our mobile site