WWDC Itinerary

Apple recently announced dates for WWDC 2011 which sold out in about ten hours. With help from some friends I was able to procure tickets, a nearby affordable hotel, and free flights using miles.

I’m pretty excited about this year’s World Wide Developers Conference since I missed last year due to short notice and existing plans. With all of the new things coming in Mac OS X 10.7 (Lion), Apple is sure to provide tons of new information. I’m looking to be inspired as we plan for some new things coming from Outer Level.

As I was putting together my trip itinerary in Knapsack, I thought it would be fun to share it with any other developers also making the pilgrimage this year. Maybe it can save you some time when putting your plans together.

You can use File > Import Trips… to import the WWDC itinerary into Knapsack where you can customize the details for your own plans.

If you have any suggestions for activities or locations to included in the itinerary, I’d love to hear from you.

Removing Features

Lukas Mathis on Removing Features.

I especially like this bit:

You can’t please all of the people all of the time. Sometimes, you have to make a few people really unhappy in order to make everyone else a little bit happier. Don’t let angry customers dictate your application design – the application isn’t as important to them as it is to you. Keeping your application healthy is your responsibility.

Code Example: Drawing the iPhone Back Button

Recently, I had need to provide a back button similar to the one used in Mobile Safari for a consulting project.

Many of the buttons used in the built-in iPhone applications are made available via the SDK with built in button types and graphics. Unfortunately, the back button is not one of these.

Because I needed to display the toolbar button from inside a static library which can not include images, I had to render the back arrow directly in code.

Since this was a bit time consuming, I thought I would share in hopes that it saves someone else a little bit of time.

- (CGContextRef)createContext
{
   // create the bitmap context
   CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
   CGContextRef context = CGBitmapContextCreate(nil,27,27,8,0,
                            colorSpace,kCGImageAlphaPremultipliedLast);
   CFRelease(colorSpace);
   return context;
}

- (CGImageRef)createBackArrowImageRef
{
   CGContextRef context = [self createContext];
	
   // set the fill color
   CGColorRef fillColor = [[UIColor blackColor] CGColor];
   CGContextSetFillColor(context, CGColorGetComponents(fillColor));
	
   CGContextBeginPath(context);
   CGContextMoveToPoint(context, 8.0f, 13.0f);	
   CGContextAddLineToPoint(context, 24.0f, 4.0f);
   CGContextAddLineToPoint(context, 24.0f, 22.0f);
   CGContextClosePath(context);
   CGContextFillPath(context);
	
   // convert the context into a CGImageRef
   CGImageRef image = CGBitmapContextCreateImage(context);
   CGContextRelease(context);
	
   return image;
}

- (UIBarButtonItem *)backButton
{
   CGImageRef theCGImage = [self createBackArrowImageRef];
   UIImage *backImage = [[UIImage alloc] initWithCGImage:theCGImage];
   CGImageRelease(theCGImage);
	
   UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:backImage
                                        style:UIBarButtonItemStylePlain 
                                        target:self.webView 
                                        action:@selector(goBack)];
   
   [backImage release], backImage = nil;
	
   return [backButton autorelease];
}

uDevGames 2008 Game Programming Contest

iDevGames announces the start of their uDevGames 2008 contest:

iDevGames is proud to announce the start of the fifth uDevGames Mac Game Development Contest! The contest challenges participants to create a Mac OS X game in three months time, which will then be subjected to public vote and peer vote, with the best in a variety of categories receiving prizes provided by our generous sponsors.

My game, Bullfrog for Mac is a direct result of a previous iDevGames contest back in 2005. It was a fun challenge and great learning experience. Nothing like a true deadline to push you to get something done and you never know where this may lead you.

The Village Toy Maker

Brent Simmons: Advice for Indies

You have to work every day. You have to sit in the chair and stay seated. And sleep and come back to the chair. You need to wear out that chair and then buy a new one and then wear out that one.

I shouldn’t even have to say it, but I will: you need a weblog. People in the village love toys, but they also like to get to know the village toy-maker.

That’s you, and it’s a great job.

Mike Ash: iPhone Development Story

Now, this sounds familiar. Mike Ash, describes the process of developing iPhone applications.

Finally, nearly a month after the original submission, the application is accepted by Apple and appears in the store. It spent longer going through Apple’s approval process than it did in development! And while Apple did find a legitimate bug, spending a month in limbo for a single bug is a very poor tradeoff.

Lucky to be a Programmer

Gustavo Duarte: Lucky to be a Programmer

Under the right conditions, writing software is so intensely pleasurable it should be illegal.

Many programmers relate to this, but others are taken aback when they hear it. I think it’s because institutions are so good at squeezing the fun out of everything. It’s appalling for example how schools can take the most vibrant topics and mangle them into formulaic, mediocre slog. And so it is for programming.”

(Via Duncan Campbell.)

What does a deadline look like?

What does crunch time only three days before the submission deadline for Apple’s iPhone AppStore look like?

Designing Bullfrog Touch Levels

And with that, I need more coffee.

Update (July 6, 2008): As per request, the visible apps running on the large display include Photoshop, Terminal.app, and Xcode. The front-most windows belong to a custom map and level designer for a soon to be announced iPhone game.

The second display on the right has Colloquy (irc client), VoodooPad, and Safari opened to our bug tracker hosted by Unfuddle.