Cocos2d-iPhone Programming

Dungeonators iPhone Game Released in the App Store!

Writing a real game, from scratch, in Objective-C, with original Art and sound effects, took a heck of a lot longer than I imagined. Even with the help of the Cocos2d-iPhone framework!

You can find it here:

Here’s what the sprite atlas looks like (formatted by Zwoptex) …

And here are some stats:

Now you know all my secrets!




Invalid Code Signing Entitlements

Finally after 11 months I submitted my iPhone game, Dungeonators, to iTunes Connect for inclusion in the Apple App Store. I’m planning on giving it away so the “warcraft meets angry birds” funs is accessible to everyone! I hope it passes Apple’s review process 🙂

It took several attempts for me to get to “waiting for review status”. Here are the step I went through in hope that if you, in the near future, need to submit an app for the first time, you can succeed on your first attempt.

At this point set a cold beer within easy reach…

  1. Most of the info from Apple and the books on iPhone development is based on the old Xcode 3-based application submission process. Google Xcode 4 iTunes connect for the most recent tips. I’m not even going to include a link because the info goes stale fast. Just google it.
  2. Set your app’s pricing and metadata in iTunes connect. You’ll need a 512 x 512 icon too.
  3. Follow all the directions about distribution certificates and distribution provisioning profiles. Like a double-linked list your distro cert should point to your provisioning prof and vice versa.
  4. First create the distro cert via keychain access app on your map. Make sure there is key associated with your distro cert after you install it in your key chain.
  5. Second create your distro provisioning prof and install it in Xcode 4. Make sure your target’s code signing entitlements point to your distro provisioning profile for the release build.
  6. Clean and Archive your app with the Product menu in Xcode 4. The Archive scheme should be set to your release configuration.
  7. In the Organizer window validate and submit your app. You’ll need your iTunes Connect password.
  8. If you get the dreaded “invalid coding signing entitlements” don’t panic. It could mean a lot of different things. But if your iOS app is simple then it’s most likely  the iCloud entitlement. (Google it for more info.)
  9. Go to App IDs in the provisioning portal. Scroll to the bottom. Click configure on the row that represents your app’s ID. Uncheck Enable for iCloud. Click Done. Create a new distro provisioning prof and reinstall it into Xcode 4. Go to iTunes Connect and reject your binary. Go back to Xcode’s Organizer window and do Validate and Submit again.
  10. If you get an invalid binary. Drink a beer and try again! (do while beer != empty)
See, that was easy!

Why Engineers Should Win

If you accept my argument that engineers generally don’t win arguments because they tend to rely on reason instead of rhetoric (even if you don’t accept my example that spam is preferable to junk mail) then you’ll be glad to know I have  a prescription for engineers that will help them win arguments.

But before I get to that prescription I’d like to point out two important premises. First, winning arguments is desirable; Second, winning arguments via rhetoric isn’t really winning.

I have some friends in the hacker/engineering community who are simply disgusted and ready to drop out of mainstream society. In many ways they already have. They have their own culture, their own activities, and their own vernacular.

Q: Why did the hacker surrender his spoon but not his fork?

A: Because spooning is privilege but forking is a right.

If you get this joke you’re an engineer (of the hacker persuasion). Don’t ask me to explain it to you 🙂

“Why bother with the muggles if they’re just going to abuse us with their outmoded ideas about sexuality, gender, religion, intellectual property, and what constitutes an worthwhile activity?”

But there are several good reasons for dealing with the main stream, and helping it become more efficient, effective, and generally more happy. The muggles are our parents, brothers, sisters, and children and we owe them something. They are suffering needlessly. If you can help someone but stay your hand that’s just as bad as doing direct harm. These are all excellent but tired arguments. The best reason for engineers to engage society-at-large and start winning arguments is that we don’t have our own private planet. A couple of more Chernobyls, a few more degrees of global warming, a few more years of developing world famine, and it’s game over for all of us.

“Kk” you say, “I grok it. Let’s all go learn rhetoric and NLP  and beat the muggles at their own game!”

Unfortunately that happens all the time. I know lots of people who started out as engineers and ended up as salesmen, managers*, and investors. Once you change your thinking patterns to base arguments on rhetorical techniques (winning on style, winning at any cost, winning as an end in itself) you lose the the ability to figure out the reasonable thing to do. Like Stockholm Syndrome once you take up the sword of your enemy you become your enemy.

If we really want to win arguments, we can’t win on mainstream terms, because then we lose. We have to win arguments on our own terms. See if you can guess how before I write  my next post…

* Mea culpa.


Why Engineers Never Win

Our world is full of bad decisions based on convoluted logic in service of irrational preferences. A great example is people who drive into NYC every morning to get to work. Why people sit in bumper-to-bumper traffic for hours polluting the air, wasting fossil fuel, and developing hypertension inducing road rage is beyond me. Another good example is junk mail. I just can’t phantom why the we tolerate a process where perfectly good trees are transformed into trash, and delivered to my mailbox in brightly colored envelops. Every day I simply throw this junk mail away. At least with spam no trees are sacrificed and I can automate filtering it out.

I like to think that if engineers ruled the world driving into NYC and junk mail would be optimized away like inefficient algorithms and duplicated code.

Apparently engineers don’t rule the world. They rule the internet and the desktop–all the virtual worlds–just not the real one.

So why is that? Why do lawyers and managers (like me) and lawmen get elected and listened too? Why do A students work for  C students?

It’s a problem of tools. Engineers are taught logic. Lawyers, managers, and lawmen are taught  rhetoric. Thus the engineer makes a well reasoned argument based on data and sound scientific principles and gets blown away by a non-engineer making an emotional appeal in the court of public opinion. If engineers used rhetoric to communicate their ideas instead of reason we would not have half as many problems. We would figure out where to store nuclear waste, how to feed more people, provide more health care, and jump start the economy. As a manager I don’t have the answers to these problem but I know several engineers who do.

If we let the engineers win life would not be perfect but it would actually get better via iterative processes, refactoring, and bug fixing. Instead our life degrades. This makes me sad and hopeful too because there is an obvious solution:  Engineers of the world: Stop arguing so rationally.

My favorite Monty Python skit is the one about the Argument Clinic:

Python 1: Ah, is this the right room for an argument?

Python 2: I told you once

Python 1: No you haven’t.

Python 2: Yes I have.

Python 1: When?

Python 2: Just now.

This skit is brillant on so many levels. Every engineer should study it to help him or her learn rhetoric. Python 1 is obviously a typical rational engineer. He asks a perfectly good and honest question. Python 2 is obviously a manager. Python 2 answers Python 1’s question with a statement designed to inflame his passions and cloud his senses. By the end of the skit Python 1 has had his argument but feels cheated out of it at the same time. Like asking for technical debt to be addressed and leaving the meeting wondering how you got talked into creating more technical debt to remove the old technical debt.