En route to Atlanta for the Cocoa Bootcamp

I'm just now at the airport, waiting to board the plane which will take me to Atlanta and the Cocoa Bootcamp. This is a trip I've been looking forward to for over a year.

I have prepared for the course by reading most of Aaron Hilegass' book Cocoa Programming for Mac OS X, and of course by meddling with iPhone development. But I have always found it easier to learn by interacting with knowledgeable people, so this will be my big chance to really get to grips with the parts of the Cocoa framework which I haven't been able to grasp. 

The Interface Builder has been my biggest stumbling block so far, leading to me writing all interfaces in my iPhone applications in code. So I hope to come away from this week with new insights into how it's supposed to be used. Interface Builder is a very different beast compared to the .NET Visual Studio experience I'm used to. However, I fully expect it to be superior once I can wrap my mind around it. It is an Apple product after all.

Judging by his book, Aaron has a knack for systematically introducing progressively more complex concepts in a very clear and easy to follow manner. I thoroughly recommend his book to anyone new to Objective-C and Cocoa. I think I may be able to finish it during the flight.

I'll summarize my experience at the Big Nerd Ranch in an upcoming post.

Japanese navy flag and the App Store reviewer backlash, an apology

As you may remember from my previous post Analyzing App Store sales data, the vast majority of sales I've seen for my iPhone applications have been in the US market. 

My applications have been available for well over a month now and I had been wondering why I barely saw any reviews in the store. As it turns out, reviews are not combined worldwide but instead tied to the store the reviewer is in. This makes sense I suppose, avoiding any language problems. Sadly there is no way for a developer, as far as I can see, to get a summary of the reviews left worldwide. Instead you have to go into each and every store to see if any reviews have been written for the specific markets.

I just realized this fact the other day when I switched over to the US iTunes store to see what movies are available for rental there. I then did a search for my app Hiragana and noticed that all of a sudden there were a couple of reviews that I hadn't seen before. Almost none of them positive!

My applications are marketed towards students of the Japanese language, and apparently people were taking offense with the Japanese navy flag that I was using both for my icon graphics and as a background image for the flash cards in my applications.

Version 1.0 look

Version 1.0 look

Some review excerpts:

"I don't know if you know what it means but it is like using Nazi flag for learning German application icon."
"Are you even aware of the gross political incorrectness of that imperial military flag you're using as an icon and background? People don't even dare fly that thing in Japan anymore."

Read more reviews here (App Store link, make sure you are in the US iTunes store)

The second review above hits it on the spot. I was not at all aware that the flag I was using is considered politically incorrect. In my eyes it is a very neat design, I even bought a jacket featuring it as a design element when visiting China last year. I guess now I know not to bring that jacket when going across the Atlantic to Aaron Hillegass' Cocoa Bootcamp at the Big Nerd Ranch this winter (more about this in a later blog post). 

I did know the flag was/is used by the Japanese navy and i know that the Japanese committed a bunch load of horrible war crimes during WWII, but it never crossed my mind that people may equate it to the nazi flag. Is this really true? Wouldn't the App Store staff have considered this before clearing the applications for release? Feel free to leave your thoughts in the comments section, I would really appreciate it.

Measures taken

Of course I could not let the current state stand, so here are the measures I have taken to try to rectify the situation.

  • Redesigned icon
  • Removed card background
  • Half price during the full month of November!

Also I would like to express my apologies here to everyone offended by my using that flag in my applications.

Shameless plug

Introducing version 1.1 of my Hiragana and Katakana apps.

Now containing:

  • 100% less Japanese navy flags
  • Refined transition animations
  • Other minor fixes
Version 1.1 look

Version 1.1 look

These have already been available for a couple of days, and a few more positive reviews have trickled in. If you own the previous versions i recommend getting them updated via the App Store, unless you really want to hang on to that navy flag of course.

If you have avoided purchasing these applications for any reason, now is your chance to get them at a discount; $1.99 as opposed to the regular price of $3.99. Get them at the App Store.

Oh, and don't forget to leave a review in the store if you feel like it. Thanks!

Analyzing App Store sales data

I am currently selling two applications on the iTunes App Store. Hiragana and Katakana are educational applications aimed at the novice students of the Japanese language. Hiragana and Katakana are also the names of the two Japanese character alphabets my applications focus on.

Apple provides sales data for applications sold via the App Store, but the data is presented in the most unintuitive way possible, as plain data tables. This makes it extremely hard to get a view of sales performance, so I dropped the data files for my first three weeks of sales into my favorite data analysis application and ended up with the following insights. Click the images for higher resolution.

Sales Growth

Hiragana was first available for download from the App Store on 20th of September, with Katakana following on the 27th. In less than three weeks 266 units have been sold with Hiragana representing the majority of sales. The last week had the highest sales with a combined 126 units, 71 of which were Hiragana and 55 were Katakana.

Biggest Markets

Close to half of the sales were in the US market (122) with Germany, Canada, Japan and Australia being the other regions with more than ten sales each. The long tail of stores selling less than ten units represents 85 sold units, with 11 stores clocking in at one sold unit each. I doubt I'll ever see any profits from those markets as I need to sell approximately 100 units in a store to reach Apples minimum amount of $250 for royalty payout.

The information above is based on the weekly stats reported by Apple. Apple also provide daily statistics, but you have to grab them while they're fresh, only the last 7 days are available. I was out of town for a little over a week and forgot to download a few days worth of data. Going forward I'll try to store every day and return with a more detailed analysis. It should be interesting to se the daily trends. I would expect weekends to lead the sales since that's when people may have the extra time to play around with their iPods and iPhones. We'll see.

Published on the App Store: Hiragana

My first iPhone/iPod Touch application, Hiragana, has been published on the App Store. Apple's review of it took less than a week from submission to publication which did catch me off guard, as I was hoping to have more time to prepare a webpage for its launch.

Hiragana is a flash card application which helps me, and hopefully others as well, take advantage of occasional down time during the day to study the Japanese hiragana characters. 

You can slide the cards left/right to flip through them. There are 104 character cards in all, plus one information card which functions as the application manual.

Sliding the card upwards reveals the pronunciation of the character.

A double tap zooms the card out to fit the whole card on screen, and presents a card removal button similar to the ones in Mobile Safari's tab view.

The cards can either be studied in order or in randomized order. This is toggled by tapping the crossed arrows in the lower left corner.

The i-button in the lower right flips the view around and allows the customer full control over which characters to include in the card set. 

The application makes use of Core Animation to provide a very smooth and pleasant user experience.

Hiragana is available now for $3.99, all feedback is appreciated.

A version of the application focusing on the Katakana characters has also been submitted, but it is still in review.

iTunes application icon in Ad Hoc distribution

A few weeks ago I started a beta program for my iPhone application using the official Ad Hoc distribution model, allowing my beta testers to install early versions of the application by simply dragging it into iTunes. It's all very convenient, but it bothered me that my application showed up under the Applications section of iTunes with a boring black generic icon.

Luckily there is a simple fix for this.

What you have to do is prepare a 512x512 pixel JPG image, rename it iTunesArtwork, without extension, and then copy it into your application bundle. You access the contents of your application bundle by right clicking the .app in Finder and selecting Show Package Contents, then just drop the image in there next to all the other stuff making up your application.

 

Running SDK apps on a jailbroken 2.0.1 iPhone [Updated]

Update: There is useful information in the comments about how to do this with later versions of the SDK as well. Thanks to everyone who has contributed. 

 

This summer I've spent some time working on my iPhone app, which I hope to release on the App Store later this fall.

Since I imported my iPhone from the USA, I have to use the iPhone Dev Team's Pwnage Tool to unlock and jailbreak it. I chose to stay on firmware 1.1.4 until 2.0.1 was available to avoid the performance issues that were widely reported. This means I have not had the opportunity to try my application on the phone itself, but last night I updated to 2.0.1 and tried installing the app.

It turns out my application works great, but I still need to add a few more features and spend some time generating nice visuals to replace the placeholder graphics I am using.

To get the application running on the iPhone I had to copy it using scp to the /Applications directory on the phone and bypass the iPhone Code Signature check. After some googling I found the ldid tool written by Jay Freeman, which takes care of the Code Signature.

Here are the steps I used to get my SDK developed app running on a jailbroken iPhone, all commands should be entered as one liners in the Terminal:

1. Make sure you set Xcode to compile for the device, not for the simulator.

2. Compile the project, then copy the resulting MyApp.app directory to the iPhone's /Applications directory.

mac# scp -r MyApp.app/ root@iphone_ip:/Applications/

3. Access the phone using SSH. The root password is alpine, at least on my phone.

mac# ssh root@iphone_ip 

4. Make sure the executable is marked as such, this step is probably unneccessary but it wont hurt anything.

iphone# chmod +x /Applications/MyApp.app/MyApp

5. Install the ldid tool, this step probably needs Cydia to be installed on your phone.

iphone# apt-get install ldid

6. Run ldid on the application executable on the phone.

iphone# ldid -S /Applications/MyApp.app/MyApp

7. Your application icon should now turn up once the phone is rebooted.

These steps will work even if you have not been accepted to the paid iPhone developer program.

Note that these instructions are experimental. I can't be held responsible for whatever happens if you try them.

Euro2008: Go Germany! [Updated]

So, now it's just a few hours away. The single biggest sporting event of 2008 - the Euro2008 final between Spain and Germany!

They're both great teams who truly deserve their shot at gold, but only one can go down in history as winners. No matter who wins I'll be happy, but I've chosen to throw my support behind the Germans.

The spaniards have more star players, especially Fabregas is a genius with the ball, and they have played brilliantly all the way through the tournament. Nevertheless I feel more for Germany and think that with their enthusiastic style of play they may well pull off another miracle in the Alps.

Jetzt geht's los!

UPDATE: Congratulations to Spain on a well deserved victory.

iPhone App Store and the IRS - a study in frustration [Updated]

I decided to spend my friday afternoon setting up all the necessary information in preparation for selling my applications on the iPhone App Store. Since I am based in the EU, not in the US, I ran into a brick wall of trouble.

Once logged into the iTunesConnect system all seemed very straight forward. Since I watched the Publishing on the App Store video that Apple released on iTunes yesterday I knew I had to sign a contract, so I clicked the Contracts, Tax, & Banking Information link.

I then chose to add a new contract for Paid Applications to my account. There are three necessary steps, so I start by filling in my contact information. Not a problem.

Bank Info

I then need to supply Bank Info, like the name and address of my local bank. So far nothing troublesome at all. I also need to provide:
Account Name
Account Type
Branch/Branch ID
Account Number
Account IBAN
Bank Swift Code
Sort Code (UK) / SIC (SZ)

Here things were getting a little hairy, but I was able to figure everything out. My bank actually provided a convenient account number to IBAN converter and the Swift code (althought they call it a BIC code) on their website.

Tax Info

Finally I just have to add my tax info to the contract and I should be ready to go. But as it turns out, this step requires filling in something called Form W-8BEN and involves the IRS. I have to provide a US Taxpayer Identification Number, so I start exploring how to obtain one of these magic numbers.

As I am registered as an individual I need either a Social Security Number (SSN) or an Individual Taxpayer Identification Number (ITIN). I don't think I qualify for a SSN, not being a US citizen and living in Europe and all, so I start reading up on getting an ITIN. As it turns out this will take six to eight weeks and involves filling out another form, form W-7.

As forms go it is actually pretty good, only one page long. But reading the instructions it seems I have to send it in with my passport, not a copy mind you, the original passport. They promise to return it to me in 60 days.

Now, I'm not about to put my passport in an envelope and send it off across the Atlantic any time soon. I need it for my vacation this summer! I'm actually a bit disappointed as I was hoping to be able to start selling applications on the App Store in July. I just feel this could have been handled easier.
Apple Inc. does have a presence in the EU, so how come I have to register for an american tax number anyway?!

Getting an ITAN is a PAIN

Peter Nixey also notes the trouble getting an ITIN in his article about moving his business to the US:

You can’t get an Social Security Number SSN without being a US resident which means instead getting either an EIN (Employer ID Number) or an ITIN (Individual Tax Payer Number) both of which are a PAIN.
To cut a long story short, despite our best bureaucratic wrangling we were unable to attain ITINs. As if from nowhere though, an EIN popped out of a random conversation we were having with an official who it seems we charmed / confused into co-operation. It seems out that EINs actually require almost no paperwork and that the main thing required is persistence.


Quoted from Coming to America: Getting visas to do business in Silicon Valley

For me getting an EIN is not an option as I don't have a company. Although those numbers seem to be only a phone call away.

UPDATE: This turns out not to be true. After reading up on the SS-4 form for applying for an EIN it turns out foreign (non US) individuals can apply for EIN to comply with IRS withholding regulations. So I called the number (+1-215-516-6999) and ended up with an EIN in just 5 minutes. Very convenient, I just wish Apple had made this more clear on their application site.

Lack of memory card slot is my favorite iPhone feature

In my view the lack of a memory card slot on the iPhone is actually a great feature.

Case in point: Here's what happened when Google's Andy Rubin was demonstrating an Android prototype phone to Wired reporter Daniel Roth.
Let's see, let's go to a music player. I can go to Artist here and get my list of — oops, it says the SD card is missing. He squints into the tiny card slot. "Hmm, it's there. Looks like I have a little bit of a bug." He shrugs, taps on an icon to go to the browser, and checks out CNN.com.

Quoted from Google's Open Source Android OS Will Free the Wireless Web

I can't even begin to recount the numerous occasions this very same thing happened on my previous Linux based Motorola smartphone. And it's not just that the memory wasn't available for reading. The applications that were set up to store data (photos, notes, audio recordings) on it would all default back to storing on the miniscule internal memory, which meant I had to spend a couple of minutes reconfiguring these applications after power cycling the phone to get the memory card back. That makes for a truly sucky user experience.

This is not to say that Andriod will suck. Quite the contrary, I have huge hopes and expectations of Google succeeding. Android seems like the one potential competitor to the iPhone platform, and I definitely look forward to trying it out. The point I'm trying to make is strictly hardware related. A memory card slot is never going to be as reliable as a soldered on internal memory.

Eliminating failure points is, in my humble opinion, the most effective way of reducing bugs and problems. The more bullet point features are included in the product specs, the worse the user experience of said product.

A sufficiently large internal memory beats a memory card slot any day of the week. It's just way more convenient for both developers and customers.

iPhone Developer Program == profit?

So I decided to apply for the iPhone Developer Program to add some preassure for quickly learning Cocoa. It took maybe three days from sending in the application until I received the activation code from Apple. All in all a very smooth procdure.
Now I have to start drafting up a few iPhone applications to launch this fall on the AppStore. I'm quite excited about the possibilities, maybe I can even earn some money?

And off we go!

So Amazon shipped Aaron Hillegass's book across the Atlantic in record time and I'm already one chapter in. I took some time yesterday to watch the CocoaHeads Best of Both Worlds video before diving in.

What I take away from the video presentation is to always respect the user's space, to keep it simple and to put an extraordinary amount of thought into getting the GUI just right.

The book (Cocoa Programming for Mac OS X) so far seems to be just what the doctor ordered, but I'll withhold my recommendation until I'm at least half way in.

Summer reading

Scott Stevenson points out that the third edition of Aaron Hillegass' book Cocoa Programming for Mac OS X has been released. Since it appears to be a sort of Cocoa newbie bible I went ahead and ordered it immediately. The affordable price also helps of course.

Let's call this my first major step towards becoming proficient in Cocoa. Now I know what to do with my summer vacation after the Euro 2008 finals have played out.

Bought an iPhone, thinking about security

So I've been away for a week doing a presentation at a user conference in San Francisco. While there I dropped in at the Apple Store across the street from the hotel at least twice per day, attempting to purchase an iPhone. They were constantly sold out.
I even tried at the AT&T store, but they demanded I sign up for a contract in order to buy the unit.

On my third attempt on the day before leaving town lady luck gave me a break. The Apple Store had just gotten a small shipment of 16GB iPhones, and I managed to grab the second to last one in the pile! After running the spectacular Pwnage Tool from the iPhone Dev Team I was able to use the phone with my SIM card. Compared to my earlier cell phone, a Linux based Motorola A1200, it's like being transported five years into the future with the flick of a finger.

Now to my security concerns. I have installed the OpenSSH client and server package, and am somewhat worried about the root password of all iPhone's being public knowledge. (It is alpine by the way.) If someone is able to find my IP address they could easily ssh into the machine as root and totally wipe my phone!

I know I can change the password by logging in as root and running the passwd command, but I worry that changing it will screw up the functionality of the device in some unforeseen way, rendering it an iBrick. Maybe Apple have hardcoded the password into some of the functionality of the device.

I love my iPhone a little too much to risk trying to change the password at the moment, but once the first crush wears off maybe I'll build up the courage and give it a try.

(posted from my iPhone)

What's in a name?

When working in Germany I kept hearing people refer to der Böse Chef, meaning literally the evil boss, when discussing their jobs and work life experiences.

In my mind, der Böse Chef personifies all impopular decisions a boss takes, whether needed or not, in the line of duty. Since I have always nurtured a dream of running my own company or business, at least part time, I hope this blog can help me become my own evil boss. I would probably drive myself nuts changing requirements of the software I would be developing more often than your average cook washes his hands.

Hence the name of the blog.

Update: It is probably worth pointing out that although I haven't always agreed with every decision my current and previous bosses have ever taken, I can't claim to have any firsthand experience of a truly evil boss.

An introduction

Okay, so here's the deal.

I am a full time Windows application developer for a multinational software company. I love my job, I really truly do.

But. It's purely Windows and .NET.

In the last few years I have migrated my private life over to the Mac. My only regret is not making the move sooner, Macs are just the most amazing machines.
Being a developer I am obviously interested in learning about Mac-development using Cocoa, Objective C and Xcode, but I have had a hard time finding the time to really get into it. I hope starting this blog to keep a journal of my progress will help push me along.

Obviously, since I have plenty of experience of C# and Java I will look into Mac development using those languages as well and type up my experiences right here. Hopefully it will all add up to a collection of interesting tips and thoughts on software development on the Mac.

I am keeping this blog mostly for my own sake, but feel free to drop by to read my musings, and do drop me a comment with your best Mac tips and tricks. 

Oh yeah, I do have another regret; not buying huge amounts of Apple stock once I realized how amazing Apple's products really are.