Archive for May, 2011

Starfield 3D for the iPhone

Friday, May 27th, 2011

I originally made Starfield 3D an iPad-only app because it was the only iOS device that I owned that had a compass. But fortunately, I have friends with more modern devices and so I spent a little time turning it into a universal that now works on iPhones and iPod Touches.

If you’ve got a more modern iPhone than I have (like, it can run iOS 4.0), then check it out! It’s free!

Horizon Cast and Crew Interviews, Part 2

Monday, May 23rd, 2011

Here’s a second behind-the-scenes video that I put together for Horizon, a short film that a bunch of friends and I worked on. If you’ve ever wondered how people get involved in making a short film, check this video out!

Parenting Can Be Gross

Friday, May 20th, 2011

Raising a baby isn’t all just Starcraft and haircuts. Sometimes it can get a little gross.


Wednesday, May 18th, 2011

Over the weekend, we drove down to LA with the baby and brought down baby food, diapers, changes of clothes, powder formula, wipes, play pen, sippy cup, toys, and his spoon.

Did you notice what we forgot? Neither did we. We forgot his bottle, the one that he always had before he went to sleep. But by the time we got in, it was pretty late. So, we tried just putting him to bed. It was a bit of a struggle, but somehow he did it. And that was that. He was weaned off the bottle.

Or so I thought. Last night, he woke up screaming around midnight and kept on crying solid for an hour. Tracy went in a few times to give him some water and put him back down, but he kept on crying and crying. So I went in and finally just picked him up and held him until he went to sleep. I know that you’re not really supposed to, but … he just seemed so darned sad. He’d just lost his bottle and I thought, maybe he just needed to be held, just this one more time. And you know what? I think it worked. Maybe sometimes, you lose your bottle and life seems too hard and maybe sometimes, you just need to be held.

1000 Days of Apps

Sunday, May 15th, 2011

Today marks the 1000th day that I’ve been selling iOS apps! It’s been nearly 3 years and 5 apps since I started. What have I learned? Umm … I guess a lot of little things:

  • iPhone apps sell better than iPad apps
  • the games marketplace is very crowded
  • short term, having a big website mention your app can really boost sales
  • long term, having a generic name helps people find your app
  • people download way more free apps than paid apps
  • like way more
  • unfortunately, you don’t make money from free downloads

Fortunately, about 1% of free download apps turn into paid app sales. So in the end, it all works out.

iOS 4 Blocks

Friday, May 13th, 2011

So … through a weird series of events, I ended up working on an iPad app at work that someone even mentioned in a video. I didn’t write the original app, but I have become responsible for it, which was all fine and dandy until it just started crashing all the time.

Fortunately, I found out what the problem was. And the solution turned out to be to use “blocks”, which became available in iOS 4. What are blocks? Essentially, they’re ways to encapsulate bits of your code to execute later.

Here’s a very simple example:

  for (int i = 0; i < 100; i++) {
      NSString *countString = [NSString stringWithFormat:@"Now we are at %d", i];
      countLabel.text = countString;

You might think that this would update a UILabel somewhere, animating it from 0 to 99. But it won't because the app doesn't have a chance to display until this code is completely finished. So what you can do instead is to use a block like this:

  for (int i = 0; i < 100; i++) {
      [[NSOperationQueue mainQueue] addOperationWithBlock: ^{
          NSString *countString = [NSString stringWithFormat:@"Now we are at %d", i];
          countLabel.text = countString;

What this does is it takes those two lines of code and executes them later in 100 separate chunks so that the UILabel has a chance to update. The most amazing thing about blocks is that they encapsulate not just the code, but the state of all the variables leading into the code. This is extremely useful if you want to, say, decompress a bunch of files on startup.

Rest in Peace

Tuesday, May 10th, 2011

Our oldest cat had been struggling for the last few weeks and he passed this morning. I’d always wanted a cat as a kid but wasn’t allowed to have one, so he was the first cat I’d ever had. And he was a good cat.

He did all the cat things he was supposed to do: keep my lap warm, greet our guests, and purr when scratched. But he also had a great deal of empathy and would comfort us when we were sad.

He was loved and he will be missed.

Time Limit to Launch

Monday, May 9th, 2011

I had this weird bug that I’ve been trying to fix for the longest time. It would consistently crash whenever I started the app on my iPad. But unfortunately, it never crashed when I started it up from XCode, which made it pretty hard to debug.

And then I learned that an iOS app has a limited amount of time in which it has to finish launching. If it doesn’t, the operating system kills the app! However, starting the app from XCode bypasses the time limit. Sure enough, that turned out to be the problem.

In my next post, I’ll talk about how I fixed it. (Ooh, a cliffhanger!)

Baby Mind Meld

Friday, May 6th, 2011

The baby’s still not talking, so I had to get a little creative.