Karen Geier’s High-larious “Thorsten Tips”

thorsten tips

Click to see the Twitter search for #ThorstenTips.

Wow — Karen Geier is killing it on Twitter with her “Thorsten Tips”, a bunch of silly predictions inspired by Blackberry CEO Thorsten Heins’ crazy predictions that in five years, no one will care about tablets and that Blackberry will be the undisputed leader in mobile tech. They’re tagged with #ThorstenTips, and you should get in on the fun!

I’ve posted some of my favourites below:


Delusional CEO of Company Scrambling for Distant Third Place Says They’ll Be the “Absolute Leader” in Five Years

crazy thorsten's crazy-ass prediction

Thorsten Heins, CEO of BlackBerry, made two crazy “five years from now” predictions in an interview with Bloomberg:

  • “In five years I don’t think there’ll be a reason to have a tablet anymore. Maybe a big screen in your workspace, but not a tablet as such. Tablets themselves are not a good business model.” And yes, if you’re going solely by BlackBerry’s disastrous experience with the Playbook, then yes. However, with Apple and Samsung tying up the supply chains, Apple selling the iPad mini at lower-than-usual margins and Amazon selling Kindle devices at a loss, a new entrant in the tablet market would either have to have a killer price or killer features. BlackBerry are prepared to deliver neither.
  • “In five years, I see BlackBerry to be the absolute leader in mobile computing — that’s what we’re aiming for. I want to gain as much market share as I can, but not by being a copycat.” Shooting for the top is what a company is supposed to aim for, and that’s exactly what he’s supposed to say. The more realistic goal isn’t so inspiring: “In five years, I want us to be in not-so-distant third place. Maybe if we’re extremely lucky, almost tied for second.”

Here’s the interview in which Heins talked about these predictions:

Heins says that he’s going after the hard-working “crazy multitaskers”, but the problem is that they’re digital omnivores — people who have a laptop, a smartphone and a tablet, and they like using all three. In fact, according to Deloitte’s recent “State of the Media Democracy” survey, these people make about 26% of the U.S. population.

Sure, he sounds delusional, but he’s saying what he has to say. If you really want delusional, you have to go back in time to 2010, at the “funeral” held for Android and iOS when Windows Phone went golden master. I was still working at Microsoft at the time — as a Windows Phone Champ, no less — and I was embarrassed.


Unspace’s Toronto Embergarten: An Ember.js Boot Camp, May 18th and 19th

embergarten poster

The question they always ask at Toronto-based Unspace, the local heroes behind such get-togethers as Toronto’s Rails Pub Nite, RubyFringe, FutureRuby and Throne of .js is “Is there a better way to do this?” Their quest for better ways to do things extends to finding better development tools, which led to their early adoption of Ruby on Rails, and more recently, JavaScript-based frameworks (hence their Throne of .js conference last summer). Having been to several Rails Pub Nites, RubyFringe and FutureRuby, I can also say that they also do developer gatherings better than most.


Unspace have announced their next developer get-together: Embergarten, a workshop where beginner and intermediate Ember developers can learn how to use Ember.js, the JavaScript framework whose site describes it as “a framework for creating ambitious web applications” and which developer Joachim Haagen Skeie (author of the upcoming book Ember.js in Action) describes as “web applications done right”.

The event will take place over two days, with the Beginner day taking place on Saturday, May 18 and the Intermediate day happening on Sunday, May 19. Unspace will be working with the development/consulting/training shop Tilde, Jeff “Coding Horror” Atwood’s excellent discussion forum Discourse, and the wonderful coworking space Foundery to make Embergarten a top-notch learning experience. Here’s their proposed syllabus:


  • Beginner – Day 1 (Saturday, May 18)
    • Basic app structure, routing and (of course) conventions
    • Ember’s object model
    • Ember MVC
    • Simple debugging
  • Intermediate – Day 2 (Sunday, May 19)
    • Managing data and persistence
    • Performance strategies
    • UI modelling
    • Testing

The sessions will come with pre-training packages and take-home materials, and there will be on-site mentors to help you as you build your first Ember.js application. If past history is any indicator, it will be fun, and there may even be some take-home swag.

The registration fee for each day is $400, or $700 if you want to attend both. If you’re serious about attending, register soon — Unspace events are popular and have a tendency to fill up rather quickly.

The Afterparty!

unspace rooftop party

Ain’t no party like an Unspace party!
Photo by Andrew Louis. Click to see the original.

It wouldn’t be an Unspace event without a party, and this is no exception. Whether you’re attending Embergarten or not, you can RSVP for the Embergarten Afterparty taking place at 6:30 p.m. on Saturday, May 18 on Unspace’s lovely rooftop patio, and it’s free-as-in-beer. Sign up quickly, as these slots are likely to vanish!

Getting Started with Ember.js

ember-handlebars-smIf you’re curious about Ember.js, here are some resources to get you started:


Class Warfare: Panel on the Pros and Cons of Formal Training for the Videogame Industry – Toronto, Thursday, April 25th

class warfare

Software development is one of those fields that’s classified as “professional”, yet doesn’t have strict educational requirements as other fields, such as medicine, engineering and law do. Some of the biggest names in software come without academic credentials: consider Jobs, Gates and Zuckerberg, as well as some lesser-known-among-laypeople ones including Anders Hejlberg (creator of Turbo Pascal, chief architect of Delphi and later C#), John Carmack (lead programmer of Wolfenstein 3D, Doom, Quake and other id software games), David Karp (Tumblr; and he doesn’t even have a high school degree), and Jamie “jwz” Zawinski (Netscape and XScreenSaver), just to name a few off the top of my head. Sooner or later, in a group of developers, you’ll hear some kind of debate as to whether a formal computer science education is truly necessary.

The debate is even more applicable for game development. Most universities have a game development course or two in their computer science offerings, but full game development academic programs seem to be offered mostly by what we in Canada call “colleges” (“community colleges” in the U.S.) or post-secondary vocational colleges like triOS. WIth relatively few avenues for formal training in game development, is there any value in being certified?

Hence the Class Warfare panel being hosted at the University of Toronto’s Bahen Centre for Information Technology (40 St. George Street) taking place this Thursday, April 25th at 7:00 p.m.. Moderated by Sheridan College’s Avrim Katzman, coordinator of their Bachelor of Game Design program, the panel will feature (listed in alphabetical order of their surnamesP:

In the discussion, the panelists plan to “address the current state of post-secondary game design programs and their value in equipping the next generation with the right tools to succeed in the industry.” The event will be followed by the Hand Eye Society’s (that’s Toronto’s videogame arts organization) at the nearby pub Molly Bloom’s (191 College Street) for their monthly social.

This sounds interesting to me, and I think I’ll catch this one.


Free as in Crap


From Oleg Gelfand, found via Stanislav Platonov.

I found this picture in my Google+ stream earlier today, and it made me chuckle. “GNU/Linux on the desktop” or “Most GNU/Linux User Interfaces” would’ve been more apt captions, as TEH LUNIX is pretty sweet as a server or embedded OS, but hey, brevity is the soul of wit. Still, this image goes very well with my favourite occasional outburst for annoying Free Software and Open Source zealots or coping with poorly-documented or -interfaced FOSS applications: “Free as in CRAP!”


Results from the LinkedIn “Information Security” Group’s 2013 BYOD/Mobile Security Survey, Part 1: The State of BYOD

A few weeks back, Holger Schulze put out the call on his Information Security group on LinkedIn for respondents to a survey on BYOD and mobile security practices. Of the group’s approximately 160,000 members, 1,650 took the survey. He’s since tallied the results and published them online:

In this article, we’ll look at those results that describe the state of BYOD at the organizations represented by the respondents.

BYOD Adoption in Organizations: Still a Long Way to Go

byod adoption stage

60% of the organizations represented in the survey have not yet adopted BYOD, but are considering it. 24% are working on the policies and practices to implement a program, and about 10% of the people who haven’t yet adopted BYOD haven’t do so because they’re forbidding it outright.

byod readiness

It’s always a tricky thing to ask people to quantify a “gut feeling” with questions like “How would you rate your readiness for full enterprise BYOD adoption, in percent, where 100% is completely ready?” What’s the difference between 20% ready and 30% ready? Or 70% ready and 80% ready? Still, the fact that most of the organizations represented in the survey say that they’re less than 50% ready to adopt BYOD says that there’s a lot of uncertainty about their ability to set up a BYOD program.

In the meantime, here’s what the organizations are doing right now:


Note that in the chart above, both “Privately-owned devices are in very limited use” and “Privately-owned devices are widely in use, but not supported by the organization” are the 3rd and 4th most popular categories, each accounting for more than 20% of the respondents. That’s a good chunk of people who are accessing corporate resources with any policies or technologies to manage them; in some cases, IT would probably be completely unaware of how widespread the practice would be. We like to call this practice SYOD — “Smuggle Your Own Device”; others like to simply put it under the larger blanket term “Shadow IT”; either way, it has the potential to cause you great trouble.

Simply put: most organizations still have a long way to go before they’re truly ready to support employees bringing their own devices for work.


Updating’s “AFNetworking Crash Course” for iOS 6

weather app

Whether you’re new to iOS programming or a long-timer, is a valuable resource for the iOS developer. They regularly publish tutorials, tips, tricks and other goodies that you’d be crazy to do without if you’re serious about writing apps for iDevices. In addition to articles on the site, they go deeper with their books, which are excellent. recently published an article titled AFNetworking Crash Course, which covers how to write networking apps using AFNetworking, a library created by the folks at Gowalla that simplifies iOS network programming. In this tutorial, you build a weather app that uses AFNetworking to get its data from the World Weather Online service. Check it out; AFNetworking’s useful, and the tutorial’s pretty nice.

In order to reach the widest possible audience, the tutorial was written for iOS 5 and earlier versions of Xcode. If you’re developing with the current version of Xcode and for iOS 6 (which accounted for 83% of all iOS traffic in North America in February), you might want to make a few changes to the code in the tutorial. I’ve listed the changes below:

Use Modern Array Notation

Here’s the old way to get at the element of an array whose index is theIndex in Objective-C:

element = [theArray objectAtIndex:theIndex];

It’s a little clunky, and as I wrote in an earlier article, Objective-C’s New NSNumber, NSArray and NSDictionary Syntaxes Mean Less “Yak Shaving” for iOS and OS X Developers, there’s a much nicer way to do it:

element = theArray[theIndex];

In AFNetworking Crash Course, where you see code like this:

daysWeather = [upcomingWeather objectAtIndex:indexPath.row];

path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"WeatherHTTPClientImages/"];

change it to this:

daysWeather = upcomingWeather[indexPath.row];

path = [paths[0] stringByAppendingPathComponent:@"WeatherHTTPClientImages/"];

Use Modern Dictionary Notation

Here’s the old way to get at the item in a dictionary whose key is theKey:

item = [theDictionary objectForKey:theKey];

Again: it’s clunky. Also again, in my earlier article, I showed the modern way to access dictionary items:

item = theDictionary[theKey];

Setting items for a dictionary used to be like this:

[theDictionary setObject:theObject forKey:theKey];

Now, it’s like this:

theDictionary[theKey] = theObject;

So, in the places where you see code like:

*array = [self.xmlWeather objectForKey:@"weather";];

change it to:

*array = xmlWeather[@"weather"];

…and where you see code like:

[self.xmlWeather setObject:array forKey:@"weather"];

change it to:

self.xmlWeather[@"weather"] = array;

Update the Deprecated Location Manager Delegate Method

If you use the code as-is with iOS 6, you’ll get an error message that looks like this:

Deprecated in iOS 6.0
Tells the delegate that a new location value is available. (Deprecated in iOS 6.0. Use locationManager:didUpdateLocations: instead.)

Instead of using the deprecated locationManager:didUpdateToLocation:fromLocation: method, use the current locationManager:didUpdateLocations: method instead:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    // locations is an array of locations where the device has recently been
    // starting with the least recent and ending with the most recent.
    CLLocation *lastLocation = (CLLocation *)[locations lastObject];

    // Fetch the weather only if the last location is less than 5 minutes old
    if ([lastLocation.timestamp timeIntervalSinceNow] < 300) {
        [self.locationManager stopUpdatingLocation];
        WeatherHTTPClient *client = [WeatherHTTPClient sharedWeatherHTTPClient];
        client.delegate = self;
        [client updateWeatherAtLocation:lastLocation forNumberOfDays:5];