Stop using social channels to push, start pulling.

It feels incredibly weird that I still have to say this near the end of 2012, but stop using your social channels to solely push content.

Yes, you have a captive audience. Yes, they want to hear what you say. Yes, they will retweet and like and re-pin every trivial thing you push out there.

But why aren’t you listening to them?

If you follow me on twitter, and actually manage to catch me tweeting, you might know that I’ve been disappointed with GoPro and their lack of responsiveness.

Now, I’m a huge fan of GoPro. I have loved their products since the very start, and finally bought one with the announcement of the HERO3, simply because it could shoot 720p video at 120fps. Seriously, that’s all I wanted.

Well, I received my GoPro HERO3 Black Edition on Wednesday, November 14, 2012, and I spent the better part of that night playing with it. Learning the ins-and-outs, I quickly became accustomed to it and so I started to connect it to my accessories – no problems with the wi-fi remote that came with my HERO3, but any and all instructions on connecting to the GoPro iPhone app, which was pimped out on my packaging and all over their website, were for the HERO2 + Wi-Fi BacPac, and even a manual firmware update didn’t do a thing.


So I tweeted GoPro, thinking I’d get a quick response (they were tweeting at least once an hour at that point) but it never came. I tweeted again the next morning, thinking business hours would catch them, but… nothing.

It turns out, GoPro doesn’t respond to anyone. At all. Not on Twitter, not on Facebook, nothing. Hell, right now, I’ve been intercepting messages to their Facebook page and answering the questions that pop up about the HERO3 Black Edition and connecting to the GoPro app.

NOTE: The solution, if you were wondering, is that there is none. The HERO3 Black Edition won’t be getting a firmware update until December 14, 2012. That bit was buried in their features page for the HERO3, so I can’t complain about not being told. However, it still sucks that the packaging lead me to believe otherwise, but I can’t be mad about it.

I sent them an email to plead with them to engage with their audience. They may ignore it, and that’s most likely going to happen.

However, if you run any sort of consumer-facing company and you still don’t get it: PLEASE engage with people on your social channels.

I’m not asking you to respond to trolls and haters (though it’s an opportunity to swing them into your favour with your great responses) but I am simply asking you to fully utilize these channels that people come to have their questions answered and even just tell you how awesome you are. Plenty of companies are doing this correctly, and even if you’re the market leader in the industry (looking at you, GoPro) you should do everything in your power to build walls against any eventual competitors that come your way.

Stop just pushing, start pulling.

FreshBooks + Stripe = Freelancer’s Best Friend

As an occasional freelancer, one of the more painful aspects in my day-to-day operations is the invoicing and payment collection.

Now, I’ve used FreshBooks for a good long time for the freelancing side of the business, and it has always served me well – keeping track of billable hours and expenses – but I’ve always found payments to be a tad annoying. The previous payment gateway I used was Paypal, simply because there weren’t any other useful alternatives.

And then, Stripe came to Canada.


Oh happy days! Stripe makes online payments with credit cards much, much easier, and when coupled with FreshBooks, it makes the collection of payments for invoices that much easier as well. Payments can now be made directly inside of the FreshBooks interface, and the payments will go directly to your bank account rather than sitting inside of Paypal.

To get started, you’re going to need an account for both FreshBooks and Stripe. Here are the sign-up links for those interested:

FreshBooks (Affiliate link!)

Once you’ve signed up for both services, go to Stripe and click on the “Your Account” button in the top right and head to “Account Settings” and navigate to the “API Keys” section of the settings popup.

API Keys from Stripe

You’re going to need the “Live Secret Key” in a minute, so keep it handy.

Next, click on “Settings” in the top right part of your FreshBooks account, navigate over to the “Online Payment” page, and click the box next to “Stripe”. A new section should appear asking for your “Live Secret Key”. Paste it in here, click “Save”, and you’re good to go!

Now, when clients want to pay off their invoices online using a credit card, they’ll see this button at the top of their invoice:

Stripe Invoice Payment

And clicking on it will bring up this payment form:

The real advantage, in my opinion, is that I can now control the entire branding experience, rather than having clients taken away to Paypal and then being directed back. The flow of payments is far easier, and you can still leave Paypal as an additional option if your clients really need that.

Happy freelancing!

Scaling Back on Social Media

From: ContextBot – xkcd

For the past few months, I’ve been scaling back on the amount I share on various social networks. My tweets have been coming with less frequency, I no longer use Path or Instagram, and I’m not sure I am even using Pinterest correctly.

I’m not knocking anyone who uses these platforms on a regular basis. They’re definitely where the digital world is heading, and people are definitely integrating them into their day to day communications.

But it’s just not for me.

This, coming from the guy who would post food photos at every opportunity, or would use twitter as a complaints board. It really just isn’t for me.

Why was I posting food photos anyway? What value was I contributing by doing so?

I couldn’t answer that question to myself in a satisfactory manner, so I stopped. Instead, I wanted to take the time I devoted to dilly dallying on social media outlets and divert it into being… a person. I wanted to have good conversations and not look at my phone. I wanted to write and create rather than consume the social channel feed.

And that’s where I’m going: back to creating.

Being Lost

Hi, my name is Jon, and I’m a bit lost in life.

*pauses for greetings*

I’ve spent the last month flip flopping between ideas, contemplating re-joining the working force, and generally being unhappy. I started September with the idea that I could take a serious attempt at becoming a good developer and building a web product that would give me some level of monetary comfort. Progress was good, until one day I sat down and just did not feel right.

I beat myself up for pursuing ideas purely for the sake of a piddly amount of money, ideas that did nothing to better the world. In short, I felt that I was selling myself short and I was underachieving.

From there, I set out on the hunt for ideas that could make a meaningful impact on the world, to society, or at least better the lives of those who really needed it. However, this started this rather vicious cycle of falling in love with an idea, realizing that I don’t have any sort of expertise in this space, and becoming dejected at the idea of being “just the business guy” in a venture, and then being sad and frustrated that I haven’t figured things out yet.

Right now, there’s no happy ending in sight.

So why would I bother writing all this out and telling people? Because, as awesome person Guy Gal told me when I told him this story randomly: “Success is all in the recovery.”

Things will get better. Eventually. And no, it won’t be because I wait patiently for an idea to strike home; things will get better because I will work hard to create opportunities for myself. I am going to go out there and pound the pavement, meeting new people and learning about problems, and taking a crack at creating the solution. It’s going to be disheartening, frustrating, and difficult.

But who said success was going to come easy?

Kindle Paperwhite vs Kobo Glo

Both Amazon and Kobo made some announcements today, revealing new versions of the Kindle and Kobo e-readers.

Introducing the Kindle Paperwhite and the Kobo Glo. (Note: Affiliate links!)

As an avid reader and user of my Kindle Keyboard, I wanted to take a look at these two side-by-side to make my purchasing decision easier and I figure I would share.

Kindle Paperwhite Kobo Glo
Display 6″ Paperwhite display with patented built-in light, 212 ppi, 16-level gray scale 6” E Ink XGA Pearl screen; 1024×768 resolution; 16-level grey scale
Size 6.7″ x 4.6″ x 0.36″ (169mm x 117mm x 9.1mm) 6.2″ x 4.5″ x 0.39″ (157mm x 114mm x 10mm)
Weight 7.5 ounces (213 grams) 6.5 ounces (185 grams)
Storage 2GB (approximately 1.25GB available for user content) 2GB (approximately 1GB available for user content)
Battery Life 28 hours of continuous use with light on 55 hours of continuous use with light on
Connectivity Wi Fi 802.11 b/g/n Wi Fi 802.11 b/g/n
Warranty 1 year limited warranty 1 year limited warranty
Return Policy Within 30 days of delivery Within 30 days of delivery

NOTE: I calculated the Kindle Paperwhite’s 28 hour battery life by taking 30 minutes per day with light on, multiplying it with 8 weeks and finding the number of hours from that. Not sure if entirely accurate, but I wanted a comparable number with Kobo Glo’s numbers.

It’s a pretty even race, from my point of view.

Personally, the most important factors are the size and weight. The Kindle Paperwhite is taller and wider than the Kobo Glo, but also a hair thinner.

I think I’m going to give both a purchase and figure out which one I like using the most. I’m a little more entrenched into the Amazon ecosystem (with plenty of books and a lot of store credit to use up) but I would be happy to switch if I received a significantly better reading experience from the Kobo Glo.

If you’re purchasing one of the new Kindle or Kobo models, please do share in the comments which one you will be buying and why. I’m very curious!

EDIT: I forgot to mention that the Kobo internal storage can be expanded by 32GB using a micro SD card. Personally, not a factor for me, but people should know.

Week 1 of Coding: Ouch, right in the feels.

Ah, glorious Thursday. Not even close to the end of the week and I’m writing a wrap-up of my week so far. Want to know why?

My project is broken.

Yup, absolutely broken. Well, it works up to a certain point (and was really fun writing!) but there’s no logical way to finish it.


This week, I was spending the majority of my days getting myself setup on Python and writing a script that accesses the Last.FM API to grab all of my scrobbles throughout the years, categorize them into genre, and present the data by year to visualize the change in my musical tastes over the years.

Everything went well until the “categorizing into genres” part, because… trying to pin a single genre to an artist is apparently very difficult. Last.FM doesn’t use “genres,” they have tags that are user applied and include a high level of variance. MusicBrainz, which Last.FM utilizes (I believe) also uses tags. Scraping Wikipedia and AllMusic resulted in gigantic piles of genre for each artist, so I’ve resorted to a more manual version: I tag them all as a specific genre by hand.

It hurts. Right in the wrists. (And the feels.)

However, this week has been a really fun experience and only makes me look forward to the next project. Before I talk about that, there are some important lessons I learned throughout the week.

1) Homebrew and pip are your best friends.

Writing basic scripts in Python? Yeah, that’s no sweat.
Want to write more complex scripts that might require external libraries? Yeah, have fun compiling and installing that stuff.

Well, okay, in actuality, it’s still relatively simple. But compared to typing ‘pip pymongo‘ into the terminal? It’s quite a bit more complex!

With homebrew and pip, I managed to get MongoDB onto my development machine, install the PyMongo driver, and install the unidecode library. In a matter of seconds.


2) Unicode can burn in hell.

I spent the better part of today and yesterday figuring out how to wrangle with unicode. A few of the artists from my scrobble list have Asian characters in their name on Last.FM, and Python (or MongoDB) automatically turns them into their unicode representations.

That’s all good and well, but turning them back (and using them in functions) is an absolute nightmare. Thank goodness for unidecode for (temporarily) solving that nightmare.

3) MongoDB is pretty awesome.

During the project, I was able to pull my scrobbles down from Last.FM but I wanted to insert them into a database.

I’m used to working with MySQL so I attempted to get that up and running. Well, after half an hour of yelling at my computer, I decided to take the lazy route and check out my alternatives that might be quicker. The suggested alternatives were SQLite or some sort of NoSQL solution. I figured it would also be a good opportunity to try out those fancy datastores I kept seeing on Hacker News and settled on MongoDB.

Got it up and running within minutes on default settings, and it’s been pretty smooth sailing so far. Inserting and retrieving data has been a breeze (my dataset is only 50,000 items) and I have enjoyed the experience.

I’m not skilled enough (yet) to really grasp the differences between the different types of datastores, and I make no attempt at doing so. I was just enamoured by the incredibly short amount of time it took for me to get up and running on Mongo.

4) I took breaks by learning Spanish.

I’ve been experimenting with the Pomodoro technique (25 minute sprints, 5 minute breaks) and it’s been a really good way of creating hard deadlines and stop-points for work.

However, I generally surf during breaks and get carried away for more than 5 minutes, so I wanted to do something that allowed for shorter bursts.

Enter Duolingo.

It turns out, doing one or two lessons on Duolingo were perfect – I would sit here shouting Spanish phrases and words at my computer and laughing all the while, and my alarm would go off and I would get right back into the work.

As a result, I’ve familiarized myself with basic Spanish words and phrases, and I am working my way through as much of the Spanish portion of Duolingo as I can. It’s a win-win situation, as far as I can tell!

Want to follow my Spanish-learning progress? Check out my profile on Duolingo.

Here comes week 2!

I haven’t decided exactly what project I’ll be working on next week, but I would really like to focus on starting to incorporate tests into my code. I’ve been ignoring them for now because I figured it would be beneficial to familiarize myself with syntax over anything else.

However, if I want to get any better at this, I’ll have to learn to write code that isn’t complete crap and I think tests would be a good place to start.

In the mean time, I’m going to try to categorize my music and complete my musical visualization. Thanks for reading my weekly brain dump!

On My Actual New Venture

Yesterday, I wrote a post, On New Ventures and Making the Right Decisions. I received an unexpected amount of feedback because, well, it sounded like I was starting a new venture and was announcing it to the world.

Well, I am, but I didn’t mean to use that post for that. Darn.

To the many people who took the time to read the post and personally reached out to offer their support: thank you. A million times thank you to Dessy, Brian, Duane, Jay, Aleks, Rob, and Ray for being the kind and supportive souls that they are.

However, I figured I should probably elaborate a little more on what’s going on.

That sounds like a good idea.

The Next Three Months

Make no mistake, I am definitely starting something new, but a business may not sprout for the next couple of months.

The reason is that when I left my last job, I told myself that I’m going to take a serious crack at making a product. Never mind what, I needed a way to build it in the first place, so I’m taking the next three months to seriously learn development. Seriously.

I’m starting with Python because I’m familiar enough with it (thanks to first year university comp sci and Codeacademy) to get started quickly enough, and it’s a popular enough language now that there are plenty of resources to learn from should I get stuck.

So how will I be learning?

I will be creating small apps that solve little problems I have, or are just plain cool.

Yes, seriously. The first thing I’m working on is a script that connects to the Last.FM API to pull my entire play list throughout the years (approaching 50,000 plays over four years!) to categorize them by genre and separate by the year it was played in. I just want to visualize the change in my musical tastes over the years.

That’s it! Nothing entirely special, but it will give me a good foundation to start with using Python, including figuring out what functionality each piece of the script will need as well as the libraries I’ll need to import to even connect to an API.

I budgeted this week to code and design the main parts of the app, but I refuse to determine the app for the second week because I do not know exactly how much time I need for this. However, I will basically be building apps on a weekly basis until I get to the point where I can create a much larger scale project and feel comfortable taking it from start to finish.

In The Bigger Picture

Three months isn’t a lot of time to accomplish much (despite what my wallet thinks) but I figure it will also give me three months to create a project that I will be happy to work on for the foreseeable future and has a sustainable business model from the start. I’m not entirely sure what it will be yet, and that makes me a bit nervous, but we’ll tackle that problem when we get there.

These three months will be a time for the creation of a solid development process as well as a solid idea generation process. It would be foolish to think that an idea is just going to find me and smack me over the head.

At the end of the day, I just want to spend every single day of my life working on projects that excite and challenge me. This is the beginning of the foundation that I am building.

The unknown can be a tad frightening and intimidating. I can’t say I’ve made the right decision right off the bat, but I know that this is the decision I wanted to make anyway. Besides, what’s the harm in venturing into the unknown?

Let’s go exploring.

On New Ventures and Making the Right Decisions

For the past week, I’ve been struggling to verbalize (on paper, mostly) how I feel about making the plunge back into starting my own venture. It’s a life filled with highs and lows that always makes you question everything about what you’re doing, so it can be a bit difficult to write about.

Well, as with everything else in life, someone else wrote it better than I ever could.

In a thread on Hacker News where someone announces that they’ve done the scariest thing they can imagine: resigning from their job and starting their own company in the Netherlands, Ed Weissman posted this wonderful comment on what’s to be expected:

The good news: If you think you’ve done the right thing, then you have. Congratulations!

The other news:

  • Your runway is probably 50% of what you think it is.
  • Your task is probably 200% of what you think it is.
  • It will take 200% of what you expect to get your first customer.
  • Your wife will get scared before you do.
  • Some customers will take forever to pay.
  • You’ll probably have to backtrack on your design / architecture.
  • When you need to sell, you’ll want to code.
  • When you need to code, you’ll want to sell.
  • Your MVP will be missing something critical.
  • At some point, you’ll question your decision.
  • At some point, someone will discourage you.
  • You may need to pivot your entire business.
  • In a year, you won’t be who you are now.

I don’t mean to discourage you. I just want you to bottle that enthusiasm for later use. You’ll probably need it.

Best wishes!

Here we go.

Gallery Separation with WordPress Lightbox Gallery Plugin

While working on a friend’s blog, I ran into a bit of a problem with having multiple Lightbox galleries on a page in WordPress: all images on a page will be in the same gallery despite being from different posts. It would basically mean that clicking on an image from one post’s gallery will allow a reader to navigate to all images on a page.

There was a simple fix, but it was rather manual. It involved taking the gallery shortcode for WordPress:


And adding a class to separate the galleries:

[gallery class="gallery2"]

However, this was a manual process and I was sure that there was a way to make it more automated so that I wouldn’t have to add a class for each gallery, perhaps using the post ID as the class name to separate them?

After some digging around, I found this in /wp-content/plugins/lightbox-gallery/lightbox-gallery.php:

	'order'      => 'ASC',
	'orderby'    => 'menu_order ID',
	'id'         => $post->ID,
	'itemtag'    => 'dl',
	'icontag'    => 'dt',
	'captiontag' => 'dd',
	'columns'    => $columns,
	'size'       => $size,
	'include'    => '',
	'exclude'    => '',
	'lightboxsize' => $lightboxsize,
	'meta'       => 'false',
	'class'      => 'gallery1',
	'nofollow'   => false,
	'from'       => '',
	'num'        => '',
	'page'       => $page,
	'before' => '<div class="gallery_pagenavi">' . __('Pages:'), 'after' => '</div>',
	'link_before' => '', 'link_after' => '',
	'next_or_number' => 'number', 'nextpagelink' => __('Next page'),
	'previouspagelink' => __('Previous page'), 'pagelink' => '%', 'pagenavi' => 1
), $attr));

A simple change with the ‘class’ part of the the array do exactly what I need:

	'class'      => "'" . $post->ID . "'",

Ta-da! Multiple Lightbox galleries on a single page are now automatically separated by post ID without any extra manual fuss. Photos in each post will now remain sandboxed inside of each post, regardless of how many are listed on a page.


A Cautionary Tale for PC Builders & A Sad Rant

Almost two months ago, near the tail end of June, I had made the decision to purchase all of the parts I would need to build a computer rig that would be strong enough to play the latest and greatest computer games that were coming out. That’s all I wanted out of it.

That’s right, I was joining the ranks of PC builders everywhere.

I chose to purchase practically everything from NCIX because they have convenient locations for me, their prices were great, and I’ve purchased some gaming-related peripherals from them before without any issues. Sure, there was that initial snafu of “your motherboard isn’t ready yet, so… wait a week, thanks” which was fine by me, I was off to Los Angeles for a week, so I could afford to wait.

I came home and picked up all of computer parts on July 11th, a day after I got back, and promptly assembled my computer. It booted up, I installed everything onto it, and it ran like a dream.

An hour after I finished installing all the right drivers, I was off playing the Counter-Strike: Global Offensive beta. Perfect.

Problems? Let’s get some.

Fast forward three weeks: I had been playing co-op Borderlands, when I started noticing some weird artifacting on the screen. I didn’t think much of it, maybe chalking it up to a one time glitch or the graphics card, an MSI Radeon HD 7950, may have been running hot that one time, so I slept on it.

I woke up, they were still present, to the point that my Flash player was no longer working and any sort of process that involved the graphics card could (and would) crash my computer. Checked the temperatures and the graphics card would run at 35 degrees MAX, so it wasn’t overheating or anything.


Sent an email to my local NCIX to ask what the hell is going on, and they suggested bringing it in. I brought in my entire tower into NCIX on August 7th, being told almost immediately that my graphics card was defective (was showing artifacts ALL over the screen during testing) and that I could exchange it.

Fun fact: did you know that you can’t do a straight exchange without a box?

I did not know that, being used to just dumping my Apple computers onto the desks of those Geniuses at Apple Stores and being given replacements, so imagine how awful I felt after learning this and having thrown away the boxes the week before. Yes, exactly one week before.

After learning that fun fact, they said an exchange was still possible. Oh good, good good. The real problem: they didn’t have any MSI Radeon HD 7950 Twin Frozr cards in the store. Or in Ontario. D’oh!

Good news: they could take my card (as my 30 day warranty wouldn’t last until the cards came) and hand me a new one as soon as they got them in the store. Their predicted date was August 13th, as they had already placed their orders.

Awesome, I could wait five days. Five gaming-less days. No problem.

Oh, today is August 27th. Where has the time gone?

In the span of the 21 days that I have had a useless gaming computer, I spent 11 of those days (weekdays since the 13th) calling my local NCIX to check if they have it in stock yet (nothing in Ontario still!) and I have tweeted and have been in contact with their Customer Care department.

Nothing has happened. At all.

This week marks an interesting intersection in lengths of time: I have been able to use my gaming computer for just as long as it has been non-operational. I take full responsibility for not having the box (which prevented me from getting a replacement card) but I could have flown to Vancouver, picked up a new graphics card from NCIX, and flown back here to make the exchange.

So a few lessons for those of you who want to build a computer:

  • Do not throw away boxes. I had no idea this was an actual issue, but I guess when you’re just the retail part of a supply chain, you don’t have much say in the matter.
  • A 30-day warranty is not enough. If this graphics card failed after the 30 days that NCIX gives each purchase, you can definitely bet that I would be completely out of luck considering I had no box.
  • Customer Care cannot do a damned thing. They are all great people manning the phones, emails, and Twitter at NCIX, but all they can ever do is investigate. I have had zero progress through any of these channels.
  • Compensation wouldn’t mean much for this. Maybe my situation is a bit on the super-rare side, but I’m not even sure how to feel anymore. An apology would be nice, but I don’t think I could even ask for anything to compensate. What are they going to offer, the crappy AR drones their phone system keeps advertising?

If you plan on building a computer anytime soon, I hope you can avoid the frustration that I have had to suffer through. This isn’t a cautionary tale against NCIX, just an example of some of the stupid things that can happen.

Best of luck.