Sunday, November 29, 2009

Happy T-GIV

Boy, writing a client-server game is hard. You have to simultaneously develop a protocol, write a server, and write a client to prove that each of the other two components are doing what you expect them to.

I feel like I haven't gotten enough done lately on this project. I need to get more done.

Wednesday, November 25, 2009

Technical Debt

I decided that I was designing my game entirely wrong, and I have since decided to work on a different project. For those who cared, I was working on a Tetris Attack clone, which seems to be conspicuously absent from the App Store.

This new project will require me to write a server for the game, which should make this an interesting (and more difficult) task.

Saturday, November 21, 2009

See glass

Turns out you can do callbacks with Cocos2d. Nice job hiding one of your most powerful features! Maybe they felt it was:
  1. Too difficult for new programmers
  2. Error prone, even for experienced programmers
  3. Just didn't really feel like documenting things that day
Today my main competitor set their price on the App Store to free! Thanks guys!

I really think devs are 100% shooting themselves in the foot by setting their price to free in an effort to gain popularity and convert that to sales. You can look at it as extremely low conversion rate advertising.

Friday, November 20, 2009

Stupid Errors

Today I got a fucking deadlock because a filename was blank. Sometimes Objective-C errors go way beyond cryptic, to where they make harder to debug the program than if it just said "ERROR: Something broke."

Now I have gravity animations woo.

I found Pinch Analytics the other day, does anyone know if it's any good?

Thursday, November 19, 2009


Well, now I have gravity and matching implemented.

The hardest part of making a puzzle game that is a nice to look at and play is making everything not happen instantly.

Today I was reading the SA iPhone apps thread and iPhone games thread. To quote Ted, "100 pages isn't a thread, it's a fucking research project", but I'm finding it quite informative.

They pointed me to the AppShopper Blog and Touch Arcade (yes, I hadn't heard of this yet).
I thought it was pretty interesting to see the number of apps approved per day in the store.

Wednesday, November 18, 2009


Today I fixed the bug with Cocos apparently projecting my 2d game with a 3d OpenGL flag that was causing my tiles to have random gaps between them ranging from 0 to 1 pixels. Argh. Here's the code for people who care:
[[Director sharedDirector] attachInView:window];
[[Director sharedDirector] setProjection:CCDirectorProjection2D];

I probably lost the ability to make my game wave-y, but whatever, now it looks right.

I also finally found the Cocos2d iPhone docs Now I can have some idea of what the hell I'm doing.

Monday, November 16, 2009

Big whiny crybabies throw a tempy tantrum

I got pieces moving around interactively with touches today, woo!

Some guy and some other guy quit iPhone development a few days ago.

I'm sure Apple is totally scared the iPhone is going to fail now. "Oh no! We've lost two high profile iPhone developers! Wherever are we going to find several thousand more to replace them?"

Ask the average iPhone user to name one iPhone developer. They'll say "uh... the guy who made Paper Toss?"

No one gives a shit about individual developers. Get over it.

Friday, November 13, 2009

Coordinates locked in

Argh I still don't like Objective-C. This is like a painful lesson in why Python is such a great language. Explicitly setting pointers to point to things, allocating memory for objects, declaring things twice in .h and .m files. All Gay.

I got my developer certificate thing from Apple. Boy, did they bury the instructions to get everything set up. I was expecting an email that said "click this link, 1, 2, 3, 4, now you're done!" But I had to go dig for it.

My app is reporting coordinates that were clicked on. It's a small step, but I'm making progress.

I bought geoDefense Swarm. It's definitely been worth my $2. I recommend it to anyone who likes tower defense games.

Tuesday, November 10, 2009

Apple logo glowing brightly

Well I came to Dallas to work on iPhone stuff with Ted, got next to nothing done, but he convinced me to use Cocos2d-iPhone as a framework for my game. I think I will end up saving way more time by using this than I lost from sitting around doing nothing for 4 days.

I also found the OpenFeint dev page. Even though I hate the name, it seems like it might be useful for adding multiplayer with low effort.

Random plug: geoDefense Swarm has to be one of the best tower defense games I've ever seen, and it's for iPhone! Screenshot:

Sunday, November 8, 2009

NS means NeXTstep

Working on iPhone dev with Ted. I just manage to draw two separate objects with OpenGL. It's too bad none of the Obj-C examples show how to do this. They mostly seem to focus on cramming all your geometry into a single triangle strip for efficiency.

Optimize-first design isn't really a development practice I want to adopt.

I guess Zen Bondage finally made a port to iPhone: Zen Bound.

Friday, November 6, 2009

ES means "Embedded Systems"

Today I learned more about OpenGL ES. It's still confusing, but less confusing. I also learned the guy who wrote the "butterfly" demo of texture atlasing for iPhone is a huge douchebag that writes code that is a million times more complicated than it needs to be to demonstrate a feature. The object coordinates and texture coordinates are stored in a single interleaved array! Ridiculous!

Tuesday, November 3, 2009


Today I got a custom texture loaded into an iPhone app and made it spin crazily.

It's the little things that count.

I found out how the iPhone (and other devices) can locate you based on wifi networks alone. Apparently some companies just drive around checking for wireless networks and save their locations. Also, it appears that whenever you get a GPS fix, and then query for location data, it uses the combination of your GPS+wifi listing to store new information about the wifi networks. I wish I had gotten in on the ground floor of that.

Tutorial on how to make this icon:and this button (programmatically):
As well as 8 confusing Objective-C warnings that I expect to be seeing a lot of in the future.

Monday, November 2, 2009


Today I found out that in order to have your OpenGL app run on all iPhones and iPod Touches, it has to be OpenGL ES 1.1. I'm not really sure why Apple is pushing OpenGL 2.0. I guess they have plans to phase out the old version and encourage developers to create games and graphics-intensive apps that only run on the newest hardware.

I've heard about Flash on the iPhone, but I remain skeptical. Business models that have the option for a third party to "flip a switch" and ban them make me nervous. And yes, I realize the irony of saying that as an iPhone developer, but I think Apple has less incentive to block a random app than to block Flash->iPhone development.

Jeff LeMarche's take on Flash on iPhone

My friend's company's app got approved today! MMA Underground (iTunes link)

MacBook Nub

I got my MacBook on Friday, and I've been enjoying learning about all its Mac-y weirdness. I've found a ton of things the Mac does better than any of the PCs I've used, here's a short list:
  • The power adapter light turns green when the battery is charged
  • Program installation is so easy, just drag a file to /Applications
  • A reasonable amount of software comes pre-installed
  • The design of the laptop is beautiful
  • The screen is way, way brighter than I could ever need
  • The multi-touch touchpad is extremely convenient
  • The magsafe adapter is something everyone should copy
However, there are negatives:
  • The laptop came with OS X 10.5 preinstalled and a 10.6 disk for some reason. Why wasn't 10.6 just installed already?
  • It's impossible to drag an item up very far with the touchpad because the hinge for "clicking" is at the top and quickly overwhelms your accuracy-strained finger
  • I don't like the keyboard, I like the one on my Dell laptop a million times more.
  • The arrow keys are squished :(
  • The mouse acceleration is all goofy, it's like it was designed for people who value the ability to select a specific pixel over people who just want to click buttons
I'm also confused, why is Apple able to provide so many programs out-of-box with a Mac and OS X, but it's an anti-trust issue if Microsoft does it? As someone on SA pointed out, Linux can read MS Office files out of the box, but MS Windows can't.

Thursday, October 29, 2009

PBRTs, the new rage?

Iconfactory just released Pickin' Time for the iPhone, another in a long line of PBRTs (plant-based reflex testers).

I'm sort of confused as to the apparently super positive reception this app has gotten, especially after all the trouble they've had with selling apps.
I don't want to be mean, but seriously, who writes a review like:

It's sort of like an inverse-bizarro YouTube where all the reviews are super coherent and all the words are spelled correctly. (or perhaps there is some shilling involved? eh?)

Convenient list of rejection reasons from the iStore: App Store Rejection Reasons
Thinking, Boxes, & What Kittens Can Do To Them - Wil Shipley's opinion on thinking outside the box -- "don't". PS I read tons of his blog today, it's great and I recommend it to any programmer.

Wednesday, October 28, 2009

Piracy is good for games

I've been reading some posts about iPhone app piracy. I think a lot of developers are missing an opportunity here. Pirates represent an awesome form of price discrimination. You can sell your app for $0.99 or fifty dollars or whatever, and then get an instant userbase from people who weren't going to pay for it anyways.

Say you write a multiplayer game. Within an hour of launch you will have:
  1. Instant playerbase, even if only one person has legitimately purchased your app, especially important for multiplayer "versus" apps
  2. Filled out highscore tables (so it doesn't look like a ghost town to those first purchasers)
  3. Hundreds (or more) of users to create content for you, by saving replays, creating levels, customizing characters, or whatever
  4. People for your legitimate buyers to chat with (even though every other word will be "fag")
  5. And cheap, viral PR to generate buzz about your game

I wish more people would write about how to take advantage of these benefits instead of just lamenting the losses.

Pro Strat

The iPhoneDevBlogOSphere is abuzz (probably) over the game StoneLoop's removal from the App Store.

blog post here

In summary: complain to Apple that all apps competing with you are infringing on a trademark and have Apple pull your competition for you.

Tuesday, October 27, 2009

Reading about failure

I spent a lot of today reading blogs about hard numbers on iPhone app sales. Initially, I was depressed, thinking I wouldn't be able to make even a reasonable amount of money with an app, but by the end I became convinced, that yes, there is room for one more good game priced even as high as $4.99.

The main difference I see between the games that did well and the games that flopped is marketing. You have to spend at least 50% of your time pushing your app hard through every form of media you can access.

How to Make Dapple in 6 Months - Owen Goss's explanation of where he spent his time when developing Dapple.
The Grand Review Site List - A review of iPhone app review sites by the makers of Up There. Good information if you want to promote your app.

Sunday, October 25, 2009

New iPhone Developer

I have decided to become an iPhone developer. I don't know Objective-C and I know very little about the app development process. I just bought a MacBook today, it will be my first Apple computer product ever.

Piracy and the App Store - App developer discovers his app is widely pirated, and pirates don't convert to pay users. I can't say I'm surprised, and I agree that piracy generally isn't worth fighting. I still had no idea that piracy was this rampant.


Thursday, January 29, 2009

austin usability, seriously?

Welcome to austin usability, the least usable usability site I've seen in a long time. If you go to the page, you're instantly greeted with a popup that blocks you from using the site.

When you're shopping for a usability company, what do you care about the most? I hope you answered "journalists' opinions of the company":

Here's their "what we do" page:

I like my version better:

Goddammit Google Reader

This just started happening today but now I can't fucking use Google Reader. First this dialog comes up:Ok, I don't really care why it doesn't work, just give me a way to make it work.  Maybe the settings will be useful:

Awesome, you just sit there are 0% forever. Maybe if I click Account settings...
Fuck! The fucking "go online" button just hangs the whole app.

What the fuck, Google? Argh.

Monday, January 26, 2009

Google App Engine argh

I have written and hosted my latest site: PixPlz using Google App Engine. I don't really recommend GAE to anyone unless you really, really value using a free service.

Here's a list of minor limitations you might run into:
  • no aggregate queries
  • no image handling
  • hard to port
  • index building
  • bizarre errors from simple commands
  • must sort on inequality filter first
  • random 1000 limits
no aggregate queries
This one is pretty frustrating if you ever like to gather statistics about a single damn thing your app is storing. I would like a total of the number of times all my images have been voted on, but if I try to loop through every image (which appears to be the only way to do it) I quickly run into Google's 5 second page timeout limit.

no image handling
I know that technically, there's an image library, but it doesn't do a damn thing if you actually want to handle images. Say someone uploads an image: want to know the filetype? Read the individual bytes to determine it. Want to know the dimensions? Yeah, read the bytes. You can do a few write-only changes like resizing, but you can't read any attributes about the image you're manipulating.

hard to port
Other people have written about this, but eventually I'll want to get away from GAE, and it gets harder and harder the more code I write.

index building
Want to query some data in a new way? Cool, just write the query, test it on your dev machine and push to production. Oh, wait, you have to sit and stare at a progress indicator for an indeterminate amount of time before you can actually use that query. This took over 5 minutes for 100 photos:
bizarre errors from simple commands
When I got up to about 150 photos, I started getting timeout errors from this GQL query:
photos = db.GqlQuery('SELECT * FROM Photo')

Yes, counting 150 photos is difficult for BigTable to accomplish, and results in an timeout error about 1% of the time.

must sort on inequality filter first
I wanted to make a page that showed the top rated girls, but not one that had maybe one or two "yes" votes, and were thus at 100% falsely. Simple, right? You just query for all the photos that have more than 5 votes and sort them by score. But wait, you have to sort by votes first, then score, giving you a useless top 10 board of mostly the oldest photos (because they have the most votes) thanks BigTable!

random 1000 limits
Can't return more than 1000 elements from a query, can't offset more than 1000 elements into a result set, can't handle uploads or any variables in memory bigger than 1MB. Google touts how well App Engine scales, but I can make any system scale if I just don't let you do anything with it.

Thursday, January 8, 2009


This sign up process is great way of indicating the steps you'll need to take, and that you'll need to pay at the end. (I really hate sites that never mention payment until you've filled out multiple pages of forms, only to be hit with a card card info screen)

from ShoutNow

Square Master

Look at this clever use of space:

Image from (the maker of Square Master)