Really Enjoyed Her

Her PosterAfter putting the kids to bed this evening, Karla and I sat down to watch a movie and unwind. We were browsing through what seemed to be an infinite number of titles, discussing how we could possibly select something amazing based solely on the cover and title. Yes, there are definitely UI issues with how these movies are listed, but that’s beside the point.

We were somewhere in the list close to a favourite of ours, Big Fish (2003), which has a subtle, simple, but beautiful cover, when I proposed that even Her (2013) could be good based on it’s subtly.

A simple click, and the synopsis read:

In the not so distant future, Theodore (Joaquin Phoenix), a lonely writer purchases a newly developed operating system designed to meet the user’s every needs. To Theodore’s surprise, a romantic relationship develops between him and his operating system. This unconventional love story blends science fiction and romance in a sweet tale that explores the nature of love and the ways that technology isolates and connects us all.

This made us both laugh out loud because it definitely sounded like something we could both enjoy watching, and it truly didn’t disappoint. What an interesting movie that explored “human” emotion and the very real impact technology increasingly plays on our lives. Understanding this complexity will become so much more important in the coming decade, as technology will be embedded into our very fabric.

Highly recommend Her; a great watch.

Christmas Projects 2014: Raspberry Pi PBX


I was lucky enough to take two full weeks of holidays over Christmas and New Years this year. It was magnificent and completely rejuvenating, despite the fact that everyone in my house was sick with one or more ailments throughout. In fact being sick and stuck at home may have in fact been just the excuse I needed to indulge in a few geeky back-burner projects.

Project 2: Raspberry Pi PBX

I have been running Elastix for years. Elastix is a top-notch open source project that glues together many other open source telephony projects (i.e. Asterisk, FreePBX, HylaFAX, and many more) into a single distribution built on top of CentOS. This setup has worked flawlessly for years, but I had an idea I wanted to try out… build a basic PBX phone server on a $35 Raspberry Pi computer.

My project: use this amazing little Raspberry Pi to run my home phone system.

Raspberry Pi

Well as it turns out, this project was a resounding: SUCCESS

I had most of the equipment around the house already, here is my setup:

Raspberry Pi – 1st Generation.
Lexar Professional 16GB Class 10 SD Card – For Raspberry Pi storage.
RasPBX – A Raspbian based Linux distro with Asterisk, FreePBX, HylaFax, etc.
Aastra 480i CT – A decent IP phone with a cordless handset.
Polycom SoundPoint IP 335 (x2) – Really great sounding IP phones.
Cisco SPA122 ATA – Connected to a fax machine.
NetGear ProSafe PoE Switch – 24 port Power over Ethernet to power the phones.

Also useful may be the layout of the network:

So the Raspberry Pi, the three IP phones, and the Analogue Telephone Adapter are connected through the NetGear switch. Additionally the three IP phones are powered by the switch (PoE), which is extremely nice because you don’t need a big ugly power adapter plugged into each of your telephones.

To configure Asterisk, RasPBX comes with a very slick web application called FreePBX that allows you to setup and maintain your trunks (linkages to your VoIP provider), telephone extensions, inbound call routes, outbound call routes, and much more. You can get really fancy with this stuff, and it’s pretty fun to think of potential uses. In terms of VoIP providers I have been using Unlimitel (owned by Primus Canada Inc.) for 7+ years now, and have nothing but great things to say about their service. They’re not fancy, but they certainly know what they’re doing.

When I started this project I went into it with the expectation I could make it “work”, but that it probably would not be something I could rely on as a phone server. Needless to say that after 3+ weeks of this being fully operational without any issues, this setup has exceeded all expectations and cost less than $50.

Also interested in Project 1: PowerMac G5 Linux Desktop? Read on…

Christmas Projects 2014: PowerMac G5 Linux Desktop


I was lucky enough to take two full weeks of holidays over Christmas and New Years this year. It was magnificent and completely rejuvenating, despite the fact that everyone in my house was sick with one or more ailments throughout. In fact being sick and stuck at home may have in fact been just the excuse I needed to indulge in a few geeky back-burner projects.

Project 1: PowerMac G5 Linux Desktop

Apple PowerMac G5When I started working at Queen’s University 11 years ago I was graced with a new Apple PowerMac G5 desktop to work with. While it is long passed its’ prime in the Apple world, this machine with a dual 1.8Ghz G5 processor and 6GB’s of RAM will run Linux without breaking a sweat. It’s still decent hardware.

My project: turn this beautifully designed 11 year old relic into a completely usable Linux desktop computer for light usage.

As you can probably guess, projects like this can go South. 16 hours, several *buntu installations, and a Debian 7.7 installation later, project status: FAIL

This particular PowerMac G5 has an NVidia GeForce FX 5200 graphics card, which absolutely will not work reliably with PowerPC architecture. The reason I think I sunk so much time into trying different things is that it doesn’t fail outright, it just fails in different ways between different versions of different Linux distributions (i.e. screen flickers, text disappearing, white boxes covering certain dialogs, etc.).

All is not lost for 2 reasons:
1. I am apparently stubborn and have ordered an old ATI Radeon 9600 XT for this machine, which appears to have a functioning driver available. I will update later to confirm.

Update: No, the ATI Radeon 9600 XT does not work. Waste of money. Boo. I’m open to suggestions if someone reads this. Hum… Should I install Mac OS X 10.5, or use the thing as a coffee table? That’s pretty much where I’m at.

2. I have a new love and respect for Debian. What a great operating system.

Next – Coming Soon – Project 2: Raspberry Pi PBX

Mr. Nobody, Really Something

Mr. Nobody ArtworkFew movies have struck me the way that Mr. Nobody has. What a brilliant and thought provoking story by Jaco Van Dormael:

A boy stands on a station platform as a train is about to leave. Should he go with his mother or stay with his father? Infinite possibilities arise from this decision. As long as he doesn’t choose, anything is possible.

I have a bit of a fascination with the concept of time, brought on by Ray Kurzweil’s The Age of Spiritual Machines, and Lee Smolin’s Time Reborn. I am also both fascinated and terrified by the Oscillating Universe Theory, which this movie lightly explores.

I would definitely recommend hunkering down and watching Mr. Nobody.

Displaying Dates Using User Selected Timezones in Laravel 4

Let me start by saying, you can safely stop worrying about user selected timezones if you are using Laravel 4+. I just spent a few hours trying to determine what was generally the most accepted method to store and display dates using a users own timezone. As it turns out, it is way too easy. So much so that I was finding it difficult to locate up to date Laravel 4 discussions on the topic.

So in case you are as thick as I am, here it is, all spelled out for you.

Important First Step: Set the timezone in app/config/app.php to your preferred timezone (or leave it at UTC if you want) keeping in mind that you will never change this, and you will never do something terrible like Config::set(‘app.timezone’, Auth::user()->timezone); anywhere in your application.

Using the following users table as an example, assume that we want to show foobazed_at to the user using their selected timezone:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `locale` varchar(255) NOT NULL DEFAULT 'en',
  `timezone` varchar(255) NOT NULL DEFAULT 'America/Toronto',
  `foobazed_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `deleted_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),

Laravel by default converts created_at, updated_at, and deleted_at columns to instances of Carbon, which, not knowing what Carbon was at the time didn’t mean a whole lot to me. Well, let me tell you… Carbon is awesome.

Instead of doing the following to display the created_at date (which will show the date in the default application timezone):

echo User::find(1)->created_at;

You can simply do this to get created_at in the users own preferred timezone:

echo User::find(1)->created_at->timezone(Auth::user()->timezone);

This is all well and good for the default columns, but what about our foobazed_at date? Easy. In your model (in this case the User model at app/models/User.php) add the following method:

public function getDates()
    return array('foobazed_at', static::CREATED_AT, static::UPDATED_AT, static::DELETED_AT);

That’s it! Any time you want to display foobazed_at you can simply do this:

echo User::find(1)->foobazed_at->timezone(Auth::user()->timezone);

I hope this is useful to someone else.

Getting A Trip Into BlackBerry Travel from TripCase

bb10travel BlackBerry Travel is one of my favourite BlackBerry applications of all time. Even when I had my BlackBerry Bold 9900 (which I had a rather strong disliking for), BlackBerry Travel kept me smiling. Needless to say I was delighted when they brought it to BlackBerry 10. I get lost without this application when I travel, literally.

For iOS and Android users that don’t know the awesomeness of BlackBerry Travel, they have TripCase. TripCase seems just fine, I’m sure they have an equally enthusiastic fan base. Unfortunately there isn’t a BlackBerry 10 version, which is fine because I use BlackBerry Travel.

Okay… so the problem is that I recently received an American Airlines flight itinerary directly into TripCase, and there wasn’t an obvious way for me to e-mail myself the itinerary. This means the trip wouldn’t get added to BlackBerry Travel, thus I would end up lost.

To solve this:

  1. Log into the TripCase web interface, and select your trip.
  2. Click the big “Share Itinerary” button at the top.
  3. Add one of your own alternative e-mail addresses (in my case I used GMail’s awesome +whatever trick), and be sure to check off the “Share Itinerary” checkbox.
  4. Once you receive the shared TripCase itinerary e-mail, forward it to from your real BlackBerry Travel e-mail address.

Within a few minutes if all goes well, your TripCase itinerary will now be in BlackBerry Travel. Now you won’t get lost! Happy travels.

My Top 5 Most Impactful Tweeters

My Twitter Top 5Twitter has certainly evolved into my most loved social media platform. I love it because it’s ubiquitous, relevant, and it doesn’t have to be time consuming. I can easily sample all 5 courses of the content marketing meal (including binging, my personal favourite) regardless of whether I have 2 minutes to spare before a meeting, or an hour to enjoy before heading to the office.

This flexibility is great, but what makes it the most valuable to me is the content tweeted and retweeted by the people I follow. So today I thought I would share my top 5 most impactful tweeters. So without further ado, and in alphabetical order:

Meet Sidneyeve Matrix @sidneyeve

Associate Professor, Media @ Queen’s University. Tracking social/mobile eMarketing & edTech trends

Sidneyeve has social media figured out, and routinely tweets engaging articles on a wide range of topics including two of my passions, technology and education.

Meet Tim O’Reilly @timoreilly

Founder and CEO, O’Reilly Media. Watching the alpha geeks, sharing their stories, helping the future unfold.

Tim is probably the most well connected person I follow. He posts polarizing opinions, retweets great articles, and does so in a way that is helpful and not overwhelming.

Meet Wes Robertson @roberwes

A #writer, #photographer, and #traveler with a #tech #management job in #MedEd @uoftmedicine.

A colleague in the field of technology in medical education, Wes uses Twitter to promote positive, inspiring, and constructive stories.

Meet Joel Spolsky @spolsky

Co-founder of Fog Creek Software and Stack Overflow

I can compare Joel to Obi-Wan Kenobi (in a wise not old sense). Joel has been in the technology and software industry a long time, and his pieces are regularly eye-opening.

Meet Julie Zhuo @joulee

Product design director @ Facebook. Lover of food, games, and words.

I am a relatively new Julie follower, but her piece on A Manager’s Manifesto turned me into an immediate fan.

Awe Snap, A Bonus Track

Meet Lifehacker @lifehacker

Don’t live to geek; geek to live.

I have to mention Lifehacker because I get so much value out of the topics these guys post, everything from how to save space in your cupboard drawers, to how to hack your own brain. A+ folks.

BlackBerry Z10 Review – A Week In

A Bit Of Background

I have never been a fan of the BlackBerry smartphone. In fact back in 2009 I used to laugh at BlackBerry OS while proudly sporting my slick new Android Dev Phone 1; however, when it came time to replace that Dev 1 in 2011 my laughter had morphed into concern. RIM appeared to be caught in quicksand, slowly sinking into a pit of irrelevancy, and being a patriotic Canadian I was honestly sad to see this happening to another important Canadian tech giant. So I did the only thing I could do, I bought one, the Bold 9900 the day it was released. It had their shiny new BlackBerry 7 OS on it, which had to be better than the clunkers I’d played with in the past right? Erm, not much. While the hardware itself was a thing of beauty, that clunky old OS was still underwhelming especially coming from Android.

I certainly saw a shining glimmer of hope for RIM though. Back in 2010 RIM had bought an impressive tech company from Ottawa called QNX, who created a rock solid OS for embedded systems. If RIM was going to reinvent their OS then this acquisition would certainly give them the foundation they would need to do it. Oddly enough this is almost exactly what Apple did 10 years earlier with Mac OS 10.0. They expired their rotten OS 9, and started over by using a rock solid foundation (FreeBSD) and put a slick and very functional UI on top of it. Apple is now the darling of the tech sector, so I am hoping that RIM can follow suit with QNX at its core.

The Future Is [Finally] Ready

Blackberry-Z10There have certainly been some bumps along the way (ahem PlayBook OS 1.0, and two crushing BlackBerry 10 delays to name a few), but last week BlackBerry showed the world that they certainly can deliver the goods. I bought two Z10’s on February 5th and here is my opinion.

Starting with the hardware specs, solid grades for sure. It is simply beautiful to look at, and a perfect weight to hold. The 4.2″ 1280 x 768 resolution screen @ 356 PPI is bright, deep, and crisp. If Apple uses the word “retina” to describe the iPhone’s 326 PPI screen, what should BlackBerry use to describe the Z10’s 356 PPI screen… “vitreous humor”? The dual core 1.5Ghz processor and 2GB of RAM make the Z10 seriously responsive to the touch, super fast to load applications, and perfect to run multiple apps at a time.

Another hardware “feature” I really like is that I can take the back cover off and replace the battery, even have a second battery, and even add my own external microSD storage to extend the 16GB of internal storage provided (yes, that is a well deserved dig at the iPhone).

I have read other Z10 reviews that indicate a slight “styling problem”, I simply disagree. It’s properly done. Everything looks intentional, and well positioned. I am a graphic designer, I know these things.

On to the new BlackBerry 10 OS, the piece I have really been waiting for with cool beans QNX under the hood. BlackBerry 10 OS is simply top notch. It feels solid, stable, and responsive just like it should be. Almost everything has impressed me… from waking the phone up (and pulling down the shades at night), to the well thought out gestures, to BlackBerry Hub, and their default application catalog that I somehow immediately depended on (i.e. Remember app with Evernote integration). It also has some really well done social integration (Twitter, Facebook, and LinkedIn), of course e-mail, and some impressive voice controls.

I remember how confused I used to get when BlackBerry users would go on about how awesome BBM is… it’s text messaging right? Well it is awesome! So much more than text messaging. You can communicate with any other BlackBerry user (or groups of users) for “free” via text, voice, or even video chat now.

Finally, BlackBerry World has thousands of apps to play with (lots of really good and really bad ones) so you won’t be bored, I am not at all put off by the selection of apps. Sure it will be nice when Whatsapp and Skype are available, but the trade off is that there are some good games like Run In Crowd and Angry Birds Star Wars that are available for free.

One thing I do need to rant about is the lack of BlackBerry Travel for BlackBerry 10. Where is it? I’m freaking out. I am travelling in the next month or so, and I don’t think I remember how to do that without BlackBerry Travel. I sadly depend on it to tell me where I’m going, how I’m getting there, and where I’m staying. I have read that it’s coming soon, so I’ll just hold tight.

Another issue worth mentioning in this review is battery life. Real world I get 2 days (from 6AM day one, until about 10PM day two) of battery life under light usage, and 1 day (from 6AM to 10PM) under moderate usage. While this certainly compares to other “superphones” out there, this is still inadequate and needs to be generally addressed at the industry level. Put some Rossi LENR in these things or something.

Spell It Out For Me – Conclusion

I think it’s pretty obvious, but if not… go buy one. You won’t be disappointed. BlackBerry has done an amazing job on this device (my wife even agrees), and I feel like they deserve a nod for finally kicking this thing out the door ready for the world.

Content Disclaimer: I have absolutely no vested interest in BlackBerry (other than maybe as a small part of some mutual funds somewhere), and was not paid or contracted to write this piece.

Cleaning Up Is Hard To Do

Linux TuxI have been administering Linux servers for a while now so coming across a new problem is both exciting and stressful, especially when that problem is on a high demand production server. I recently came across one of these scenarios, and was surprised how difficult it was to solve.

I had a single directory on a server that contained millions and millions of tiny 32Kb text files (which were actually non-sharded PHP session files that didn’t get caught in garbage collection, and went unnoticed for months on a busy server). The interim fix to that problem was easy:

mv /var/php/sessions /var/php/sessions.evil && mkdir /var/php/sessions

The real problem was that I was left with this sessions.evil directory that I couldn’t delete, ignore in snapshot backups, or even list of the contents of because there were just too many files and going anywhere near it would use too much disk I/O and cause the load on the server to spike.

After using / writing various Bash, Python, PHP, etc, scripts that caused too much load on the server I happened across this genius solution by Zhenyu Lee (and a comment by Paul Reiber)… to use rsync instead of rm, find, xargs, etc:

On a CentOS box and using my example directory of /var/php/sessions.evil, which was owned by root:apache do this:

cd /var/php
mkdir empty_dir
chown root:apache empty_dir
rsync -vvvv -a –delete empty_dir/ sessions.evil/

Depending on how many files are in your sessions.evil directory this could take a while (2 days in my case), but the 5 minute load average on the server stayed between a manageable 2.0 and 3.0. My twist to Zhenyu’s solution was to add some verbosity (-vvvv) in there so I could tell that rsync was actually doing something.

Paul’s next comments are important though, so once rsync is eventually done mirroring your sessions.evil directory with your empty_dir pay attention:

rmdir sessions.evil
mkdir sessions.evil
rmdir sessions.evil empty_dir

The first rmdir sessions.evil will cause a bit of a load average spike for a few minutes, but once it’s gone… whew.

Well there you go, happy rsyncing, and a huge thanks to Zhenyu Lee for posting that unique and brilliant solution.

Multiple Accounts in Google Drive

Google released their Google Drive last week, and I’m feeling conflicted about it. On one hand it’s awesome, nearly everything I would want in a document sharing service; on the other hand Dropbox has been providing me with similar functionality for years when Google couldn’t or wouldn’t, so I have a certain level of loyalty there.

Regardless of my internal struggles I thought I would point out one glaring issue I have with Google Drive: I have 2 Google accounts, a personal one and a work one, and this intentional line in the sand cannot be crossed.

Based on a statement from their support website it is currently

“not possible to use Google Drive for your Mac/PC with more than one account at the same time”

Okay that is fine with me actually, but at least let me configure two accounts in settings (each with their own separate shared directory) and then let me switch between the one that is actively syncing. The disconnecting and connecting with a different account (as they suggest) doesn’t really solve the issue of keeping these two accounts separate.

This was never really an issue with Dropbox for me because of how I structured my Dropbox directory, whereby my “Work” directory was shared with work people, and my “Home” directory was shared with family.

Besides that one glaring issue I have to say, I am very impressed with Google Drive. The integration with Google Docs is especially brilliant.

At this point Drive and Dropbox coexist happily together on my Mac, each being used for something slightly different.