Revenue Canada wants me to buy an iMac 27″

For as long as I’ve been a developer, there was only ever once when I had a machine that I felt was an adequate development workstation. That was around 2001 when I had a dual-proc 667MHz P3 768MB RAM and three 17″ CRT monitors. This baby put out enough heat that my home-office didn’t need a heater on during the rainy Seattle winters; in fact, it was so warm in there that I’d wear shorts, a tee-shirt, and left the window wide open.

Since that time though, my computer has typically been limited to a laptop, my biggest since that dual-proc furnace being a 17″ Powerbook G4. Being a developer, there are three priorities that stand out above all others: screen real-estate, memory and CPU speed. Due to my history of being a web developer, only the first item on that list was a big priority. Since becoming an iOS developer, where your productivity is directly related to how fast you can compile your app, and how fast your performance profiling tools can run, I’ve encountered the other barriers developers face.

In the past though, I’ve largely been a cheap developer, opting to get by with what I have, or doing whatever I can to improve my productivity in other areas. However, for the first time since that space-heater with a RAID array, I have an opportunity to get the workstation I’ve been dreaming of.

Since I run my own personal business on the side, I can take advantage of tax deductions that normally wouldn’t be available to me. Computer purchases, like other capital expenditures, can be tax deductible, so the money I would have to pay the Government in the form of taxes, can be deducted from what I owe them. Normally only a certain percentage of that purchase price can be written off per year, in a process called amortization, so it’s effects are only moderately felt.

In Canada, as part of their economic stimulus package they put together to boost small business spending, they instituted a limited-time Capital Cost Allowance for 100% tax deductions on computer hardware and software purchases made between January 27th 2009 and February 1st 2011.

Think of it this way: assume I had a decent year of app sales on the iTunes App Store, and because of my extra income, let’s say I owe the Government $10,000 in taxes. Normally my only recourse is to dig up $10k (which, since I’m a good little business owner, has been sitting in a savings account all year long) and hand it over to Revenue Canada.

But because of this stimulus package, I have an option. I can instead buy $4,000 worth of computer hardware necessary to effectively run my business, and then only give $6,000 to the Government. No need to spread that deduction out over several years, no need to have the accounting hassle of carrying that equipment value over year after year. I see, I buy, I save.

There are limitations of course. Just as with other business deductions, you can’t cheat and take advantage of the system for your own profit. At home I use the equipment in support of my iOS development, web development, and any testing I need to do.

So what do I get for my last year?

This is the last year you can take advantage of this deduction, which really is a shame. But now that my side work is taking me to more and more demanding areas, such as Core Audio, OpenGL, and a little bit of video work, I feel that now is the time to invest in that dream machine I’ve always wanted and needed.

The question is, what’ll it be? Do I add on a cinema display to my laptop? Do I get a fully pimped-out quad-core iMac 27″? Or do I splurge and get both?  Based on my preliminary estimates for how much I’ll be owing in taxes, here’s my shopping list:

I’m probably going to wait until mid-December, or perhaps in January when I get back from my various weeks of travel.  What are your thoughts?  And if you’re a Canadian iOS business owner, what are you going to do to take advantage of the capital cost allowance?

Recovering from bit rot

One of the things that’s hard as a developer is keeping your legacy code up to date.  It’s all too easy to fire-and-forget; write your code, debug it just enough so that it compiles, and then forget it until it breaks again.  I’m guilty of that as well.  In fact, just today I discovered that my continuous deployment configuration for Boomle was broken…for the past 3 months.

After merging my code from a private repo over to Github, it still didn’t work.  After updating the Hudson build configuration to point at the proper repos and to respond to the proper webhooks (to get automatically triggered on a new check-in), it STILL didn’t work.  You see, not only does configuration change, but SDKs and APIs shift out from under you.  The iOS SDK had changed out from under my project, and the Xcode configuration was pointing at libraries and SDKs that no longer were shipped by Apple.

The lesson for me here is this: I need to get off my ass every few weeks to at least look at my source code.  Kick the tires a little, hit a build every now and then, and check that everything is still okay.  Because the longer you wait, the more things can fall apart.  Each one of those issues I mentioned above would have been simple to fix, had I addressed them right away.  But the more problems that build up, the more difficult it is to clean up your code.

As it is, I still need to integrate Game Center with Boomle, and refactor its drawing routines to be more efficient.

Now, I don’t believe in New Year’s resolutions.  Instead, I believe in making resolutions whenever they’re relevant, and sticking to them without the excuse of a New Year to motivate you.  My resolution is to take care of my projects proactively, instead of forgetting them.  Treat it like the quasi-living thing that I’m anthropomorphizing it to be, because even inactive projects need love too.

Localizing iOS apps using ICanLocalize.com

As with most things, the amount of work we as developers see when starting an iOS application is just the tip of the iceberg. There’s artwork, “About” screens, tutorial pages, icons, the app’s website, and all the marketing the app needs to get it out there. Even writing the app’s description or taking screenshots for the App Store is a time-consuming process. So anything I can do to cut down on the time needed to release my app, the better I am. Therefore when I decided to have myDrumPad translated to other languages to widen my user-base, I wanted to do make it as painless as possible.

I tried tried to have friends and family who understood foreign languages help with translations, and while they were very well intentioned it really didn’t work out in the end.  What I discovered was that there really is no substitute for hiring a trained professional.  But luckily it doesn’t have to be outrageously expensive. Read on for more.

Continue reading “Localizing iOS apps using ICanLocalize.com”

Most blog templates suck

I’m a fairly decent web designer.  I’m not great by any stretch of the imagination, but I’m not really visually creative.  I tend to express my creativity in the apps I build, as well as in my writing.  So given the fact that I’m really proficient in CSS and HTML, I can make simple web applications look good if I don’t have the help of a designer.  That being said nothing replaces a great UI designer, who are worth their weight in gold!

But when it comes to my blog, I want it to look attractive without having to spend a ton of time on it.  I’ve given up on trying to write content management systems.  To me they’re a solved problem – maybe not solved particularly well, but it is to the point where I don’t feel I’d like to contribute anymore to the field – so tweaking my own website content by hand holds no interest to me.

But seriously, why do the available blog templates out there have to look so damned horrible?  Even the commercial blog templates for WordPress all seem to be lacking in some serious areas.  Is it really too much to ask that I can have an easy-to-read blog template that will adjust to the width of the browser that doesn’t have serious CSS problems on one browser or another?

Over the next few days I may be tweaking my blog’s template a bit, because I’m tired of the standard one-size-fits-none layout that most templates have.  I might even pay for a commercial template, if it means my blog doesn’t look like the sidebar of a print newspaper anymore.

This is not the toast you are looking for…

Last night while watching TV I had a conversation with my wife Deanna that made me realize that she is, as far as I’m concerned, a Jedi Knight.

I never really have that much of an appetite, and it’s not uncommon for me to skip meals altogether.  Since yesterday we had a late lunch, I ended up skipping dinner.  Normally it wouldn’t be a big deal, except that I thought I’d forage for a little snack in the evening.  After a cursory scan through the kitchen I didn’t find anything that sat comfortably below my laziness threshold, so I decided to forego eating anything at all.

What followed was a conversation that goes something like this:

Deanna: “Make yourself some food.”
Me: “No, I’m not hungry.”
Deanna: “Make some toast.”
Me: “No, I’m not hungry.”
Deanna: “Make some toast with almond butter.”
Me: “No, almond butter’s too much work…I’ll just have some toast.”

It was perhaps a full 30 seconds before I realized “Wait…what just happened?!”

Using Amazon S3 as your iOS app’s server-side

While developing myDrumPad, I came across an interesting problem for my in-app purchase support. The app allows users to download additional packs of sounds (referred to as “sound packs” in the app) that they can use to tap out songs and rhythms. The sound packs themselves were a collection of CAF-encoded uncompressed PCM audio files, with a single configuration file describing the labels and arrangement of the sound files on the drum pad’s grid of buttons.

I wanted to be able to add additional sound packs without issuing a new release of the app, but since the information describing the sound packs is largely static, I didn’t want to have to worry about maintaining a dynamic server for the app to continue functioning. I wanted it to largely be “fire and forget”.

What I came up with is, I think, a best of both worlds. The app functions without needing me to maintain a server, but I can still dynamically add additional resources to the app instantly.  Read on to find out more.

Continue reading “Using Amazon S3 as your iOS app’s server-side”

I’m now a Canadian Citizen

Today, I’m proud to announce that I’m officially a Canadian Citizen!  I’ve lived in Canada for 7 years now and almost all of my family lives here, but since I was born in California, I’ve technically been an American for all that time…until today.

No longer will I have to sheepishly explain myself when US teams play against the Canucks.  No longer will I have to carry a stupid Permanent Resident card with me when flying home to Canada.  And probably most importantly, I no longer will I have to worry about losing my immigrant status if I need to stay out of the country for more than 6 months in a year.

There is one interesting drawback to all of this: I neglected to realize that once I became a citizen, I’d lose my Permanent Resident card, required for a landed immigrant to return to Canada when travelling abroad.  Normally this wouldn’t be too big of an issue, but I have to fly to San Francisco in a week for business with Salesforce.com.  ACK!

I’m doing the mad-dash rush to apply for my Canadian passport, booking my flight, getting passport photos taken, and all the other machinations needed to get from here to there without being detained by airport security.  This is the only black mark on an otherwise awesome occasion.

Go Canada!