Sunday, September 12, 2010

I hear the barrier to entry to getting into the car manufacturing business is low, too

This article is hilarious. It sounds like a perfectly normal business-y article until to you get to this gem:
The barrier to entry on the Instant concept is apparently low, and Yahoo and Microsoft's Bing have both tested the waters, according to a report in Search Engine Land.
(emphasis mine)

So apparently Dawn Kawamoto, "Technology Reporter" for Daily Finance, thinks the barrier to entry to searching the entire internet instantly is low.

I don't even know what to say.

Saturday, September 11, 2010

How to make a terrible landing page

I'm interested in advertising Kittyball to help promote it to a broader audience than "people who search kitty in the App Store and scroll waaay down", so I was looking to spend a few hundred dollars on ads. I happened to see an ad on Gamasutra for GAO, so I clicked it. Here's what I got:

Admire the graphs! Gaze in awe at the pile of logos! Marvel at screenshots of tables! Apply for GAO advertiser account!


Why should I apply if I have no idea what I'll get?

So I sent GAO this email with their "contact us" form:
RE: GAO: your landing page sucks :(

I clicked an ad banner for your site from Gamasutra ( )
and *nothing* on the landing page tells me why I should do business with
you. What will it cost me? What benefits will I get? Why are you better
than your competitors? I have no idea!

I see that you've got some reach, but I have no frame of reference for that
so I don't care.
You've got some clients, but they're not me, so I don't care.
You've got "cutting edge functionality" but I don't care.
I can apply for an account, but why?
and they helpfully replied with:
Good day,

We are pleased to have confirmation that our landing page only appeals to
people who care.

Best Wishes,

Valera Koltsov
Game Advertising Online
Thanks guys! Guess I'll take my money elsewhere!

A good landing page should directly tell the viewer what benefits they will receive. A good landing page answers the question of "why should I give you my money?"

Friday, September 10, 2010

Project Ten Dollar

EA has begun a new initiative to try and stop (or at least slow) used game sales  I don't think this is going to work as well as they hope.

A and B go to GameStop to buy a game:

Here's the old flow:
1) A buys game for $60
2) A beats game and sells to GameStop for $40, game "costs" him $20
3) B buys game for $50 from GameStop, GameStop nets $10 for holding the game and B saves $10, and most importantly EA thinks they're losing $60

Here's the new flow in EA's magical fairyland:
1) A buys game for $60
2) A sells game to GameStop for $40
3) B buys game from GameStop for $50, goes home and sees that some of it is disabled, missing, or inaccessible, curses GameStop, never buys a used game again, and only buys New, Quality Electronics Arts Games(r).  EA Wins, hooray!

Here's what is going to really happen:
1) A looks at used games price list, sees that game is only worth $10 used in buyback, now he can't save anything by selling back, so the game is worth less to him
2) A buys a different game
3) B is faced with a choice between "broken" used games, or used games that have full functionality, B buys a different game.  EA blames pirates for drop in game sales.

Thursday, August 19, 2010

Kittyball go!

My game, Kittyball, just went live!

After several months of work, and all of Sarah's art contributions, it's nice to finally see it up for sale!

Tuesday, August 17, 2010

New Project

I have started a project to create a site for developers and designers to share and collaborate on UI mockups and designs.

In the past, I have found it extremely frustrating to work on UI design with the current tools available.  Trading zips of files through email and giant PDFs of mockup screens on shared storage are terrible ways to work.

It's hard to keep track of different versions.
It's hard to keep track of comments everyone has made.
It's hard for more than 2 people to be involved in the process.
It's hard to highlight changes.

I'm going to solve all of those problems.

Kittyball submitted!

I somehow forgot to mention this when I did it, but I submitted KittyBall to the App Store on Monday, August 9th.  I guess we'll see what Apple thinks of it.

Tuesday, August 3, 2010

The Modern Liberal Goal Part 2: Work as a game

So the question is:
If the liberal goal [everyone only has to work as much as they want to] is achieved, what is there to do for someone seeking to become wealthy? What can we do with an army of people who don't ever have to work for a living?
Now we've got two types of people in the world: those producing less than they consume, and those producing more.

The government subsidizes people who are overconsuming, so they never have to work if they don't want to.

So what's a future capitalist to do?

We have to make them want to work.

We can do this in two ways: make work fun, or make work easy.

How do we make work fun?
Make it into a game! People will put enormous effort into games voluntarily.

We've already got some great business models for this:

Work hard for free!
Open source software and Wikipedia use this model.
"Hey, give us tons of skilled labor and get no money in return!"

Work hard for social benefits!
Facebook, Twitter, LinkedIn, MySpace, and every social networking site ever.
"Hey, give us tons of information to help target ads!"

Work hard to create value for paying users!
Zynga, Chinese MMOs (see slide 16 of this excellent presentation). We can make a free-to-play gameworld where our non-paying users add value for our paying users to take advantage of.
"Pay for our game, you can kill noobs!"
noobs: "noooo *adds value*"

How do we make work easy?
Bring it to them! Who minds working from home? Idiots, that's who. All the cool people want to work from home.

What have we got?

Use the massively parallel processor in your head to solve problems!
Amazon's Mechanical Turk lets you solve a single tiny task and get a single tiny amount of money.
"Transcribe this for a quarter!"

Write an essay for $10!
Demand Studios will pay you to write essays for them, which they then spam all over the internet and place ads on. It solves two problems: how do we fill the internet with more crap, and how do we get people to write more crap?
"Write some crap!"

Make some media and we'll sell it and give you a cut!
Infinite stock photography sites do this, as well as the Envato network for sounds, music, graphics, and other media.
"Make a song, we'll give you a few dollars per download!"

Ok, that's enough examples!
Yay! I hope you're convinced that our brave new world of consumers is not necessarily a bleak dystopia. Sure, the government will take a ton of our money, and redistribute it to the less worthy, but that doesn't mean we can't still extract some value from them!


Today I started at Amazon.
Amazon is strangely a software company that sells retail products.  I'm not sure how that happened, but I assume Jeff Bezos is to thank for it.

Thanks, Jeff Bezos.

So now I am officially a Software Design Engineer - Gift Cards User Experience.  If you have any questions about being an SDEGCUE, feel free to ask me.

Sunday, August 1, 2010

The Modern Liberal Goal

A while ago, I tried to answer a simple question as a thought experiment: “what is the goal of the ‘modern liberal’ philosophy?”

I believe the answer is “everyone only has to work as much as they want to”.
Why do I believe that?
In the United States, we have had a history of creating social welfare programs, and they tend to stick around. Welfare, Medicaid, WIC (the modern food stamps), unemployment, and disability are generally targeted at the poor and disadvantaged. Medicare and Social Security are targeted at the old, who often become poor as a combination of reduced earning ability and increasing health costs. Unemployment, in particular, simply gives money to people who aren't earning any. It's stated purpose is to help people "get back on their feet", but for practical purposes, it can be collected for a year (at least in Texas) without having to do anything in particular.

These welfare programs spring out of a philosophy of "need". I think there's a certain level of guilt that comes from rightfully earning the things we need, and continuing onward to earn things we want, while other people fail to even meet their own basic needs. Governments then codify this guilt into programs to take money from those who've earned it and give it, in varying forms, to those who haven't.

In a republic, these programs have a fair amount of stickiness due to taking money from a few voters and giving it to many voters.

Why do I think it is likely to happen?
Technology has given the most intelligent a massive lever with which to move the world and create value. A rich person today wields more power than nations of the past. Thanks to these forces, there is more marginal wealth per person at the top. Bill Gates easily met his own needs many years and many dollars ago. If we take 99% of his money, we can provide for probably tens or even hundreds of thousands of people. I think there is social pressure to do this.

Along with amplifying the top tier's ability to create wealth, technology also lowers the bar for the poor to meet their basic needs. Food is cheap compared to any time in human history. It becomes easier and easier for one person to meet their own needs.

Marshall Brain's Manna provides in interesting guess as to two alternative futures, one ruled by the tyranny of the rich, who provide for the poor, but restrict their freedom to virtually nothing, and a more communist society where everyone is "rich" by pooling resources.

If the liberal goal is achieved, what is there to do for someone seeking to become wealthy? What can we do with an army of people who don't ever have to work for a living?

I'll tell you tomorrow.

Sunday, June 6, 2010

KittyBall evolved!

The evolution of KittyBall, in screenshots (all art is done by the lovely and talented Sarah Householder):

(March 28, 2010)
The very first prototype, just some debug lines with Box2d physics, and placeholder art. Creates lines just in time as you move to the right, crashes after 30 or so lines:

Added KittyBall art, first test of texturing the ground with custom tiles:

Figured out how to fill the ground in with OpenGL ES polygons. This method is fragile and had to be replaced later:

Filled the sky with a nice blue gradient:

Fixed the ground fill, added cute background clouds on a parallaxed scrolling layer:

Experiment with tinting the sky to match the time of day, pulled for final version:

KittyBall shoots stars out when he bonks the ground:

Added a sun in the background, as well as a rotating sky tint (that's what broke the ground filling), also pictured is the "you are tapping the screen" spiral, which looks like ass (because I made it), so it's also gone in the final version:

First pass at adding a DogCube enemy to chase you.  Thanks random dog image I found online! :

Playing around with adding some kind of rain or snow effect.  Didn't like the look or additional visual complexity, eventually pulled for final:

DogCube achieves full cuteness:

Added indicator to show how close DogCube is to getting you, and signs to mark your progress through the level:

Improved the sign:

Added placeholder background mountains, more parallaxed layers:

Mountains get cute upgrade:

Added more ground tiles, pause button:

(June 6, 2010)
Hey, it's the moon!  Sign is fixed to match overall look and feel:

Sunday, May 2, 2010


Now that I'm married, development can continue! Worked on adding signs to add distance measurements so a player can see how far they've gotten (if their eyes can track a rapidly moving sign). Adding polish to a game is a very time-consuming but rewarding part of game development.

iPhone OS 4.0's "double-tap to show running tasks" feature is very helpful in getting impromptu screen captures to inspect features.

Wednesday, April 21, 2010

Worked around

I found a workaround which is to completely redo the entire way I was planning to show an end-of-game screen. Stupid Cocos2d. It's been nothing but helpful up to this point, but I could not figure out how to unpause it.

The game is now functionally complete, so I'm basically looking at polish + market + ship.

Tuesday, April 20, 2010


Argh, I am totally stuck on a bug with ReplaceScene. Cocos2d seems to have problems with a scene replacing itself.

I may eventually have to just work around this bug.

Monday, April 19, 2010

Fucking clown shoes

So my apartment was burglarized on Friday when I wasn't home. My iMac (with all of my pictures from the past 3 or 4 years, not backed up because I'm an idiot) among many other things were taken, mostly electronics. It got me thinking, all of these devices have network cards in them, why the fuck do the manufacturers not track these things when they show up on the net?

Imagine the day where stealing an Internet-enabled device is useless because it phones home as soon as it hops online. Sure, measures could be taken to circumvent phoning home, but it would really be bad news for small time criminals. I know software that does this exists, but why isn't that shit considered part of the base functionality? It's such a stupid omission.

If Apple tracked every unique IP address per computer and gave me access, I could just find out exactly where that machine got online, call the police and say "it's near / at this address". Done. Would probably even be able to recover my pictures with some good HD tools. Unfortunately it's not the future yet, so we're stuck dealing with the police who don't really give a shit and have better things to do. Thus, electronics will continue to be an awesome reason to break into people's homes. Suck.

It's a game!

My game is now an actual game instead of a tech demo. It can be played, it has a victory (really a loss) condition, and it can be restarted. Woo!

I feel like this app will mostly serve as a learning experience and I'll be able to do much cooler stuff in the future in a lot less time.

Wednesday, April 7, 2010

Tech Journalists

This is the most ridiculous (iPad) article. I can't believe someone got paid to write that. Ugh.

OpenGL and Cocos2d

Turns out it's reasonably tricky to draw raw polys correctly in a multi-layered Cocos scene, but I figured out how to do it. Now the ground in the game is repaired and I can work on the boss monster.

I think I may localize this game by not having a single word in it.

Monday, April 5, 2010

Particle effects

I am adding particle effects left and right. They have to be the cheapest way (in a Cocos2d game) to add visual appeal for the programming effort.

I also found out that a 1024x1024 PVRTC 4bpp texture makes the simulator run at 30fps, but the 3gs still runs at a totally smooth 60fps.

I think the hardest part of iPhone development is never having the assurance that you're going to sell enough copies to make it all worthwhile. Sigh...

Wednesday, March 31, 2010

iPad Applications

With the iPad about to launch I've been doing some thinking about the sorts of apps we'll see on the device. I think iPad-specific apps will be a completely different beast than iPhone apps. The iPhone has pretty limited screen real-estate (320x480 or transpose if rotated) and while the iPad is "only" 1024x768, it comparatively allows a significantly larger amount of stuff to be slapped onto the screen. A lot of iPhone apps are made by single people without a designer behind them. The bad bunch of these (and there's a lot of them) have either extremely basic or straight-up-shitty UI design.

With all the extra space on the iPad screen, I think the quality of apps will have to go up. With iPhone you can make a minimal or relatively shitty UI because there just isn't that much of it on the screen at any given time. Most of the iPhone screen is dedicated to showing content, so if the UI sucks it doesn't always detract from the overall experience too badly. That just won't be the case with the iPad. Poorly laid out components, tons of whitespace, crappy art assets, etc. - all these things will stand out even more on the iPad.

There are tons - TONS - of simple news aggregators on the App Store. 20 apps that could have been combined into 1 (like sports apps which follow University X basketball, baseball, football, etc. 1 app for each sport) which have almost no UI at all. It works because they show whatever data and it fits and looks nice. But what happens when you up the res on that? A totally blank screen. I just don't think that will fly anymore on iPad. Perhaps I'm wrong - but it will be interesting to see what comes after the first round of (probably polished) apps.

Monday, March 29, 2010

Progress Report

I forgot to say how the game was doing!

It's going great! Game development is strange, I look forward to getting better at it. After coming from the UI-centric world of HTML/CSS/JS, it's very different to care about sprites and physics engines, and a bunch of other stuff the user only perceives indirectly.

Now I'm stuck on how to combine OpenGL primitives with Cocos2d draw calls. Cocos seems to want to stomp my polys no matter what I do :(

Good job Google App Engine

After my complaining previously, Google has fixed one of my complaints! Now you can store images as blobs and retrieve them as such instead of awkwardly storing them in your database. No more arbitrary image size limits!

Also bonus feature, task queues! Now you can actually have web apps do something when a user isn't specifically requesting it. Pretty neat.

Now if only they would fix the other six problems, that would be great!

No, you can't break it into sections

Pretty much everyone who read my previous entry said "hey, can't you break the image into sections?"

No, you can't break it into sections.

The whole point of the algorithm is that it turns multiple images into one high quality image. To do this, it has to align images precisely. If you sacrifice any part of the image during alignment, you will not get a precise match.

Wednesday, March 24, 2010

super... project abandon!

Well, I have abandoned yet another project. Yay!

This time it was a super-resolution app. The idea was: you take several photos with your iPhone camera, it processes them, and returns one really high-quality photo. Turns out there is no way in hell that you will have enough ram to complete that task. Just allocating the floating point array to process photos took 36mb out of an allowed 24.

If someone is super interested, I still have the code laying around.

Time to work on the simplest game I can so I can finally get a project out.

Friday, March 19, 2010

Apple and Naming Conventions

For those not familiar with Cocoa (Mac OS, iPhone) development, Apple has strict naming schemes for their libraries. They actually have an entire document dedicated to this (seen here). Methods that return a boolean are "shouldPerformAction", actions which are about to happen will look like "willDoSomething", actions that just completed will look like "didDoSomething", etc. A lot of Cocoa criticism comes from the fact that this causes a lot of the method / variable names to be extremely verbose. "Can row x in a table be selected?" becomes

(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

"Trim this string" becomes:
[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]

I initially disliked this when first starting iPhone dev, however after a number of months it's really grown on me. Yeah some of the lengthy stuff is annoying, but it really makes a lot of the code REALLY CLEAR on what's happening and that is extremely valuable.

Anyways, sometimes this naming scheme breaks down and that's what I'm here to complain about. When the user taps a row on a table (like in the email or iPod app) the following method is called:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

There's also others that follow this:
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath

Some cells have a little blue circle with a > inside of it, this is called a UITableViewCellAccessoryTypeDetailDisclosureIndicator (yeah). When tapped, the view slides over to a more detailed view of the data. For example you tap a row in the Recent Calls list and it calls the number back, tap the blue circle and it brings up contact information for that person. So what method is called when this is tapped?
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath

Huh? Not at all what you'd expect. I figured I'd be looking for "didTapAccessoryButtonForRowAtIndexPath". There's no "did" in this. Instead of "...RowAtIndexPath..." we have "...RowWithIndexPath...". Why is this so different? I know this sounds like a tiny nitpicky thing, but Apple has put literally thousands of man hours into standardizing this shit. It makes no sense that this single method name is so different from the others.

Now, it didn't take me more than a few seconds to find the method name I was looking for, so I'm not complaining about it destroying my productivity or anything, but it just doesn't make any sense for this to be so deviant.

Saturday, March 13, 2010

new idea

I had an idea today:

Mechanical Turk is a great way to take a little bit of thinking from a lot of people and apply it to one big project. But what about *really* boring stuff, like recognizing whether a photo is of a mouse or not?

I give you Mousewheel v1.0. It features massive arrays of lab mice, tv screens, and buttons that dispense treats. Three mice are shown an image and trained to respond a certain way to it. For example: if we are searching for mice in photos, they push "yes" if there's a mouse, and "no" if not. The majority gets a food pellet each. Mice with low accuracy are ground up and fed to the other mice in order to serve them better.

The cost of running a single mousenode is far cheaper than a mechanical turker. Watch out Amazon, I'm coming for you!


We're saving multiple images, woo!

I am amazed at how complicated I made this problem. I had to keep track of some files, and what project they belong to. I realized I could just use folders, and just name everything the timestamp of when it was created. I guess I was so caught up in database-think, I thought everything had to have a magical uniqueid.

Monday, March 8, 2010

Things I have learned

It is hard to debug UI issues, because you can never tell if that white screen you're looking at is really the widget you think it is, or maybe it didn't load and that's the background, or maybe it loaded and it's just colored entirely white, or maybe something white is on top of it, or maybe your code is in an infinite loop and it erased the last UI element, but hasn't loaded the new one.


I got the phone taking a picture without any of the camera interface crap, and saved it to memory. Now to take a million photos and save them all.

Saturday, February 27, 2010

Virtual Currency

What's the difference between real currency and virtual currency?

The only thing I can really come up with is that there are laws pertaining to real currency.

I keep waiting for someone to make a decent virtual currency exchange. I think all you would have to do is get some VC funding and get a few major players onboard with you. As soon as a large enough currency allows you to trade for real money or goods, you'll be able to do all your business government tax-free. You'll still have to pay Facebook or Microsoft or Apple or whoever, but not your local or federal government.

It is a brave new world we live in where every company is trying to build their own money system.


I have switched to primarily developing an app that will let people share sketches in a more... asynchronous way. I now have an app that I can scribble a white line on. Woo!

Hilton has agreed to work with me on our iSketch clone, and I think we'll get a lot accomplished, I'll be doing server dev, marketing, support, and some client-side, and he will do the majority of client-size.

I think that a major mistake many app developers make is to follow these three steps:
1) produce quality app
2) ???
3) profit!

Except when 3 never materializes, they blame anything and anyone for it. "The app store is broken!" "Apple is fucking us again!" "The users don't appreciate quality apps!" "Rargh!" Step 2 is actually marketing. If you took the best product in the world and stuck it on a random shelf at Wal-Mart, you could expect only a handful of sales, at best. This is what you're doing on the App Store.

Friday, January 29, 2010

Threading woo!

Fixed an annoying UI bug where UI updates done outside the main thread fail to update until an event propagates into the main thread. Now a user can "login" to the game.

Wednesday, January 27, 2010

Woo ski trip!

I finally got back into development after a long bunch of trips and wedding planning.

Now my app has the beginnings of a UI. All I have to write is 50 other things and it will be working!