Three Step Chili

February 27, 2011 · Posted in Stuff · Comment 

For the longest time I’ve been talking about making a giant pot of chili so that Gigi and I could brown bag something to lunch each day. It’s a sound idea described by David Wong’s Home Economics: How to Cook Cheap Food That Won’t Kill You*. After checking a few recipes, chili can be summed up as:

  1. Brown some extra-lean ground beef and drain
  2. Throw in a bunch of stuff
  3. Simmer all day

Boom! Lunch.

* Pretty much all content from cracked.com should be considered NSFW.

Humble Indie Bundle is Humble

December 20, 2010 · Posted in Stuff · 1 Comment 

The Humble Indie Bundle is probably the greatest deal you can possibly get when it comes to video games. It is:

  • Five indie games for pay-what-you-can
  • DRM Free
  • Available for Mac OS X, Windows, and Linux simultaneously

This is the second year it’s running, and there’s really nothing, nothing bad you can say about it. Even if there’s only one or two games you like in the bundle, the pay-what-you-can model makes it worth it. Not only that, you’re likely to to find a hidden gem or three. I grabbed last year’s bundle solely for World of Goo’s inclusion only to discover Aquaria, a sort of underwater Metroid meets Megaman with a hint of Ocarina of Time. It’s exceptional for what is essentially a two-man project with some great art, double great music, and some awesome boss battles.

This year’s bundle is arguably and even stronger offering. Braid is there, and if you haven’t played it yet, you really owe it to yourself to try it. I remember Braid making a stir when the developer priced it for the equivalent of $15 on XBox Live Arcade and the world wondered if that was too much. Is it? I don’t know. The bundle gives you a pretty good idea about what consumers feel these games are worth. Well, maybe.

The statistics are fascinating. The average going price at the time of writing is $7.50. Not $7.50 for Braid, but for all five games with a charity and non-profit on the side, all splitting the bill. It’s easy to be upset, wondering if the world really values these things so little, but it bears remembering that there will always be a disparity between what consumers think something is worth, and what they are willing to pay. Maybe certain economic theories say that these things are one and the same, but this really isn’t my area of expertise.

So let’s form a two overly broad arguments:

  1. Pay-what-you-can/want can be a successful model. The bundle has raised over $1 million at the time of writing despite the low average purchase price on the strength of its simple distribution, lack of DRM, and multi-platform offering. Revenue lost from the low average purchase price is partially or fully recouped thanks to wider exposure and appeal.
  2. The pay-what-you-can/want model shortchanges developers by greatly under-valuing their work.

There’s really not much more you can say about #2. It’s a big contention, and undeniable even if you consider the bundle a success. It’s in its second year though, and for that, and the big seven-digit number on the website, I’m willing to call that a success. I’ve really strayed from the point though, haven’t I? Check out the bundle, it’s neat-o. You get a Steam key with it too so that you can download and play them later if you’re like me and don’t have time right away.

Tattoo Sound + Music Presents Earjam

December 1, 2010 · Posted in dev · Comment 

There’s been a great deal of going-ons recently, and I nearly forgot to mention Earjam. What do you do as an artist, looking (listening?) to get a feel for the work of a local studio? What if you’re looking for new talent on the local scene? What if you’re the studio, looking to provide a new sample of work each month? There’s an app for that.

Earjam is an app for anyone who enjoys making music or discovering new sounds. It’s small, it’s free, it streams music. Grab it and listen to the tunes, and if you like them, most are even available for purchase. If you don’t like them, no big deal; open it again in a month and there will be a new listening list available for streaming. It’s handy to have when the radio is playing repeats, and if you’re in the biz, it’s a great example of what’s possible. If you’re lucky, you might even get Dave as your engineer.

Stages of Code Refactoring

October 22, 2010 · Posted in dev · Comment 

Stage 1 – New Code

Numerous lines and a half-dozen unneeded and fleeting variables are used to produce a “Hello world!” answer to “I wonder how this API works…”

Stage 2 – Tightening Things Up

Code is compacted down into an elegant solution that probably doesn’t run much faster, but damn if it doesn’t look good.

(@”%@ %d”, [globals localizedStage], n); – Macros

Don’t Repeat Yourself is taken to its logical conclusion. Anything reusable is chopped up and hardwired values are spited. Pseudocode runs shrieking bloody murder, never to be seen again.

Stage 4 – TRotK

Return to code snippet only to forget what it does. Wonder at how you solved that problem with so much math and so few conditionals — or the other way around.

Stage 5 – Enshrined

Don’t. Touch. Anything

It’s a Follow-Up Post

June 27, 2010 · Posted in Politics · Comment 

I’m eating my words all right. What happened over the weekend still doesn’t seem in step with reality, but for a different reason now. Why? Why why why? The videos show people running up to windows, taking three swings with a baseball bat and then retreating into a crowd. Another clip shows someone trying to launch a newspaper box through a window. Really?

This isn’t practical, it doesn’t get out the right message. The message we hear isn’t “save the whales” or “feed the starving” or anything useful. Those messages just become footnotes, and the real protesters have a lot to be upset about. This weekend, the medium was the message, and was ugly.

Showdown

June 3, 2010 · Posted in Politics · 2 Comments 

A week or two ago we were told not to come to work during G20 summit: the shop and most of the campus would be closed those days due to our close proximity to the protests scheduled at Queen’s Park. This seemed strange at first. Protests in Toronto are regular enough after all, and if organized well, usually peaceful. Granted, something polarizing like the G20 is probably going to draw a larger crowd, but surely–

Oh man.

I’m not sure that the over-the-top security measures are really in step with reality. Maybe a month from now I’ll be eating those words, but right now it looks like they’re expecting a city-wide riot. What’s more terrifying: the idea of local law enforcement gearing up for a small war, or the possibility that it might all be necessary? Or maybe it’s self-perpetuating, I don’t know. The rhetoric from Star and Globe commenters is wearing thin too, though this is true for most stories (conspiracy theorists are particularly well-represented on G20 stories).

Above all the noise of dissenting opinions, I just hope the G20 passes uneventfully. Peaceful protests are one of those things that make Canada great; the right to yell through a megaphone without fear of arrest or martial law is something not all nations enjoy. I think it loses some of its relevance though once you see people being carried away on stretchers; does the us versus them mentality begin to upstage the actual issues? It’s not a rhetorical question, I really don’t know.

Employment 2.0: Business Owner

January 20, 2010 · Posted in Stuff · 3 Comments 

So this is weird. I own one third of a business.

Back in June of 2009, the repair shop that had employed me for the better part of nine years folded. For some this was good news, for some this was expected, and for the formerly employed this was very sudden (we had in fact just hired a new technician when the news hit). Repair shops tend to have a very polarized client base: some love you, some hate you, and both are usually deserved at some point. Still, myself and the core group of technicians tried our best to make it the most kick-ass Mac repair shop in Toronto, and while there were certainly challenges to overcome (that’s putting it politely), I feel like we succeeded to a degree. Diagnosed by the next business day? Check. Earn Apple’s Top 5% plaque? Check. Make every single person happy?

Well, there’s the point about a very polarized client base, but the number of happy people well outstripped the the unhappy. I never wanted to work in the sort of service centres they portray on TV or in Dilbert comics, or god forbid the actual real life service centres they’re satirizing. You’ve probably seen these, where workers and customers are bitter enemies struggling for dominion and witty remarks. No, we wanted to be awesome. The service industry is unforgiving, so believe me when I say that life is much more pleasant when you’re sending people home happy rather than cursing your name.

So as you can imagine, not being employed put a bit of a kink in things — but we got better.

This week, myself and two colleagues became self-employed. We opened our Mac repair business in the University of Toronto’s Campus Computer Shop inside the downtown Koffler Centre, taking over the repair operations from the former staff. Our philosophy is the same as ever: be awesome, make people happy. As expected, there will be hiccups as we get going, but so far we’re pretty happy with the first few days. So, tell all your friends, and even a few strangers! Despite the shop’s name, our scope is not limited to U of T students and faculty, so anyone at all is welcome to drop off their grievances with us. Ideally you’ll get something nicer back.

SwipeHead

January 6, 2010 · Posted in dev · 4 Comments 

Most of us, at some point, will apply a label of sorts to ourselves. Are we teachers, rocket surgeons, hippies, nihilists, or maybe middle-aged? A single label rarely suffices, and I’ve gone through a few myself. I’ve alleged myself to be a musician, a coder, a technician, a writer (hah), and had a few other stints. There’s a common thread here: I like making things. With that out of the way, in the middle of December I helped to make this:

This is SwipeHead, a sort of hybrid puzzle game for the iPhone and iPod touch. I’d explain how it works, but figuring that out is one of the more satisfying puzzles. It reminds me a bit of old LucasArts adventure games in which a challenge would be posed and various tools offered, but after that it was up to the player and their wits. SwipeHead, likewise, is meant to have an intuitive learning curve and once it gets going, is very enjoyable.

Though I might seem to be trumpeting my own horn, the real kudos go to the game designer, Leanne, over at Wizkeit Games, who designed and produced the whole thing. For my own part, it’s humbling to see my code executing on other devices and available on the iTunes Store. I know there iTunes Store is a pretty saturated market these days, but it doesn’t detract one bit from the glee. More horn trumpeting yet: it was accepted on the first submission, which Leanne and I were told doesn’t happen often.

If you’re looking for a unique experience among the many app clones on the iTunes Store, give SwipeHead a try. When I first saw the design documents, it wasn’t one bit like any other puzzle game I saw out there, and remains so even post-release. Though only a mere $0.99, there’s a free version as well to whet your appetite.

[UIImage imageNamed:]

December 10, 2009 · Posted in dev · 1 Comment 
UIImage *myImage = [UIImage imageNamed:@"pony.png"];

This is probably one of the most convenient methods I’ve ever come across. Feed it a name and it will return an image. Better yet, it handles caching for you automatically so that you don’t have to. Notice something about it though? There’s no alloc, meaning you shouldn’t call release. If you can’t call release, how do you get your memory back? This isn’t a big deal when using Mac OS X’s older brother, NSImage, since your average computer these days ships with several gigabytes of memory as opposed to the paltry 25MB or so that most iPhone apps are limited to. If you’re dealing with a lot of images on the iPhone though, this hands-off caching approach is going to cause problems.

The first obvious solution is to just avoid the convenience method and manually alloc and load each image with its full path:

UIImage *myImg = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/pony.png", [[NSBundle mainBundle] bundlePath]]];

That’s not awful for loading an image or two, but if you’re going to load many images, why not encapsulate this in something more elegant? Since such a method would be useful application-wide, it furthermore makes sense for the method to exist in its own application-wide class, rather than just stuffing the method willy-nilly into whatever class you’re working in. Actually, if you’re going to go to the trouble of creating a new class just for a convenience method, why not make it do other neat things? Let’s do that.

Hey Dave!

September 16, 2009 · Posted in Stuff · 1 Comment 

Hey Dave! is a social experiment/exhibit/event being run by some good friends of mine at Nuit Blanche. If you know Dave (or especially if you don’t), mark October 3rd on your calendar and go visit him at Bay and Queen Street.

Next Page »