Monday, May 25, 2009

Conferencing in Boston

I'm off to Boston tomorrow for the International Conference on Cognitive and Neural Systems where I'm presenting a poster on my unsupervised sequence learning model. Conferences always tend to melt my brain. There's just too much information to take in in a short period of time. This one is supposed to be especially neurosciency, so it should be interesting. I'll blog about it either during or afterward.

And if I happen to have any spare time at all, I'll try to check out a bit of Boston.

Friday, May 22, 2009

PetBook Preview

My newest app is just about ready for release. I'm just going to do a bit more testing and then release it Sunday evening. It's called PetBook, and it's an app for storing information and pictures associated with your pets. Here are a couple of screen shots:

You can store as many pets as you like, and for each pet, you can create a picture gallery from images taken with your phone's camera or downloaded from email or such sites as Flickr. The veterinary page let's you store contact information for the pet's vet, and includes a call button to phone the vet if a valid number has been stored. The vet page also includes editable lists for any medications the pet might be taking, along with dosages, and vaccines and their associated dates. The groomer page includes a groomer profile and one-touch calling, along with an editable appointment list.

There's a Notes feature for jotting down any miscellaneous information associated with the pet, and a feature to email all of a pet's profile information.

I debated spending more time to develop a weight tracker, but decided to just release it as is and add that feature in a future update. I'm planning on selling it at $2.99. My dog whistle app has sold steadily, and I think there's a good market for pet-related apps, but we'll see.

Monday, May 18, 2009


I have eagerly been waiting for WolframAlpha, the uber-hyped knowledge engine (or whatever the hell it's supposed to be, rather than a search engine). I was keeping a relatively open mind, but figured it would probably suck. I was ready to be proved wrong, but from what I've messed with so far, I haven't been.

Here it is.

Have a spin yourself. First the good things, which are pretty sparse. It does pretty well with comparison, especially of geographic and temporal landmarks. It seems to aggregate information mostly from sources like the CIA World Factbook and Wikipedia. I guess it's a little more efficient than opening up two browser windows and comparing two regions or cities side by side, but how often do I want to do that?

On the bad side, it's language parsing abilities simply blow. It can't handle clauses or changes in word order very well at all. I don't expect it to be able to elegantly parse natural language, but I expect it to be able to do as well as Ask Jeeves (which wasn't very well).

On some sample queries of things I'm personally interested in, it couldn't tell me how many Android users there are, or an estimate of how many iPhone users there were. It didn't know how many licks it takes to get to the center of a Tootsie Pop. If I just typed in "lafayette louisiana" it gave me some decent summary statistics, but if I asked it any specific questions about the area, e.g., how many restaurants are in lafayette, louisiana, it couldn't answer. I thought this was supposed to be a major feature of the engine, it's ability to derive information from sources that wasn't simply transparently available.

Ah well...what about math? It's great at that, right?

Well, I've been working a lot with a particular function which is used in engineering and neural modeling called the Naka-Rushton function. WolframAlpha hadn't heard of it. It also couldn't parse "logistic sigmoid" or "logsig". WTF?

Color me not impressed. Let me know when it gets to beta so I can see if it sucks any less.

Working With Images in Android

In a lot of my previous apps, especially my games, I've had to work quite a bit with images. But most of the time these were images that I'd created, and which I could simply drop into a resources directory associated with the app and access easily. I did very early run into out of memory issues, which seem to be very common. I overcame these by scaling down my images. At first I tried to reduce the file size, but what really mattered was the number of pixels, not the file size.

Anyway, for my newest app I'm including a customizable photo gallery, so that within the app the user can add photos which they've either taken with the camera or downloaded onto their SD card, the G1's equivalent of a hard drive. This has turned out to be a royal pain in the ass, primarily because I've found it a chore to emulate the SD card and use with the the emulator in Eclipse. Actually, I found some decent resources for actually creating the virtual card...the Android SDK comes with a "make SD card" command-line tool. But I'll be damned if I could figure out how to create a directory structure on the disk image. None of the tools I had would let me mount the image, and I couldn't find any resources describing how to create a directory structure from the command line. I found a site where someone talked about how to do it in a Mac environment, but try as I might to figure it out for my Windows environment, it was turning out to be more trouble than it was worth. I could push images to the emulated card, but they would show up as broken links in my emulator's gallery, and my app couldn't access them.

So I ended up just coding and testing the gallery function on my hardware phone, which is much slower and troublesome than coding in the emulator, but hey, it worked. Now I've got a portion of my app where a user can create a custom gallery from the images on their SD card, adding, removing, and setting a profile pic if they want.

I'd be interested to know about the experiences of any Android devs who have worked with this aspect of development. It's been one of the more unpleasant things I've tried to build, but at least I've got it working.

I also ran into the good ol' out of memory errors, but was able to effectively deal with them. At least so far. I haven't really load tested the app with gobs of photos. I'm hoping it won't crash, even with dozens of photos, but we'll see.

Oh, and this app better do well. My sales have been sucking pretty hard recently, even though my last couple of apps are sitting with 5 star ratings.

Friday, May 15, 2009

The Android Market: A Publisher's Perspective

Here's an interesting interview with Android developer Matt Kronyak. When asked about the Android Market's distribution method, he hits the nail on the head:
I think everyone recognizes that the Market needs some work. An open market is certainly a more competative market and will really give small to medium sized developers a chance to compete on an even playing ground. In comparison to the iTunes store I would say the open market model for the Android Market has the potential to be more profitable and fair for small developers.

The main improvements I would like to see in the Android Market include more specific categories, better ways for users to find and filter apps, a better rating system, and a way for developers to respond to user comments.

Sometimes users will leave a comment and give a bad rating for situations that the developer could help them with if only they had some way of contacting or responding to that user. Facilitating communications between developers and users would be the biggest improvement the Market could have.
Yes...lawd yes. I will get comments like "Has a bug" which doesn't do any good for either me or that user or future users. I do appreciate when users email me comments...the more specific the better. I also put up a bulletin board on my website for this purpose (though no one has used it). Matt is right that we need increased facilitation of communication, through the market, between users and developers. It would make everybody's life better.

Here's what he says about the rating system:
The Rating/Feedback system is a really weak point for the market right now. Users can buy an app, leave a review and then get a refund. Their review stays even if they never use the app again. Its also not clear what version of an app a comment is refering to. In many cases we see old comments that people do not update reporting a problem that was fixed a long time ago. For paid apps I would like to see comments removed from users who don’t actually own the app (users who refunded).

Another problem with the Rating/Feedback system is that there is now ay for the developer to get in contact with the user or to respond to their comment. Some comments are simply false, while others may be because the user doesn’t understand how to use the app correctly. If the developer could contact the user to help them out I think everyone would be better served (the app would get a better rating, the user would get the help he needs and have a better experience, and the market will sell more apps).
I agree in general, but I don't agree with the specific suggestion of removing comments from people who have uninstalled the app. If a user has downloaded an app, tried it and didn't like it for legitimate reasons, that's useful information for other potential downloaders to have. What we do desperately need is some way for developers to address comments. For the iPhone, developers have a huge amount of space for the app description, in which they can address common questions and inaccurate comments. Android publishers, on the other hand, get 325 characters. Not words...characters.
Just to give you an idea, this paragraph contains 325 characters. That isn't a lot of space. Speaking of spaces, they count spaces as characters. Try explaining what an app does, what features it has, and what various updates have fixed/changed all in 325 characters or less. It's not just difficult. It's downright impossibl
I initially published a concrete calculator. It sold about 20 copies before I got a 1-star review from a user who said that the calculations were incorrect. Sales disappeared after that. And guess what? He was flat out full of shit. The app simply calculates the volume of a's length x width x height. It wasn't incorrect, but a single spurious comment from some dickhead stopped my middling sales in their tracks. This week, I simply repackaged the app with a different name, icon, and a couple of small UI improvements, but the same math. It's currently got 5 stars and is selling several a day.

Anyway, I really do hope that they're working on the way the market is formatted. As it grows, it's going to become more and more important to be able to sift through the thousands of apps and find good ones. I find it ironic that Google is having problems instituting a good system for sorting and searching apps. They did a great job with the recent OS update; hopefully they've got good people working on market improvements.

Wednesday, May 13, 2009

Android Update

Golf Solitaire has been out for a couple of days now. It sold 8 copies the first day and 5 the second, which isn't stellar, but works just fine for me if it stays relatively steady for a while. I'm pricing it at $1.99, and have no plans to change the price in the foreseeable future. I think it's a solid, fun game and worth the two bucks. Plus, I put more work into it than any app before it. If sales slack off to fewer than 10/week, my plan is to then release a lite version, probably with the ability to only play the first two holes, and see if that leads to conversions. But I'll worry about that if/when it happens.

It turns out that with the upgrade to Cupcake, the market now requires the insertion of a piece of code in the app's manifest indicating its compatibility with different versions. It also turns out that if you had previously published an app without this code snippet, updating with the snippet bumps you to the top of the newest apps queue, which confers a nice advantage in terms of exposure. People tend to check out what's new, and if your app is out long enough, it soon gets buried under the heap of new content.

So I fixed a couple of small memory issues in my JoyBuzz and DogWhistle apps and rereleased them yesterday, bumping them up to the top of the list. DogWhistle had been selling 2-3 copies a day, but yesterday the bump got me 15 new sales. It's possible I should have waited a couple of months. The market will grow, and new Android phones are coming out, and Android is also opening in new countries. Most likely I'll keep Spades unupdated for a while and see if I can get a boost in the middle of the summer. A new analysis projects that the Android market will increase 900% by the end of this year, which some other analysts are saying is crazy...that 400-500% is more reasonable. Either of those numbers sound pretty good to me.

My ad revenue has leveled out between $5-10/day, but the sales from new/rereleased apps has bumped me back up to daily revenues of $20-30/day, which is nice. It's still not independent salary money, but it's nice supplemental income.

I've got a couple of conferences coming up, but I'm going to try to get at least one more app out the door before then. When I do, I'll report back on how things are going.

Tuesday, May 12, 2009

Star Trek: The Too-Much-Motion Picture

I saw the new Star Trek today, and I liked it all right. I wasn't exactly blown away. The actors were pretty well-cast, but I honestly didn't think any of them had the charisma of the original cast. Chris Pine seemed like a bit of a lightweight and Zachary Quinto was okay as Spock, but not great. On the plus side, the movie was generally well-directed and was filled with enough action so that you didn't question the sillier parts too much. The worst part was the villain, a jilted Romulan space miner from the future who seemed completely dull-witted and flat. Spoilers beneath the pic.

We tried to talk out exactly what happened with the events surrounding the destruction of Romulus, but even with looking it up on Wikipedia, I still can't figure it out.

The nearest star to Romulus is going supernova (suddenly?) and Spock is dispatched from the Federation with some red goo that supposedly can stop it. He makes it there, but not in time, and Romulus is destroyed. Nero sees this and thinks...what exactly? That Spock was incompetent for being late? Or malicious? This is kind of like swearing vengeance on the paramedic who rushes through traffic to try to save your mom, but doesn't quite make it in time, so you kidnap his own mom and kill her in front of him. This just isn't a comprehensible motivation for a villain. It's just flat-out stupid. Khan's motivation was similar, but a heck of a lot more understandable, and he was far more menacing and seemed far more intelligent than Eric Bana's knuckle-headed, one-note bad guy.

I guess I'm with Roger Ebert, who gave it 2 1/2 stars. He didn't completely hate it, but found it a pretty substanceless bubble-gum action movie. The original Star Trek was about taking us places we've never been and showing us things we've never seen before. It didn't always do a great job, but dammit, it tried. This movie simply doesn't take us anyplace new. For all the talk of a reboot, it's sorely lacking in any kind of originality. That said, it steps us through the paces pretty well, and fast and flashy enough that we don't dwell on the fact that there's really very little least until we get in the car and actually start thinking about it.

Saturday, May 9, 2009

Plants vs. Zombies Review

So I've been playing PopCap's new game Plants vs. Zombies. When I heard they were coming out with a new game called Plants vs. Zombies, I thought that sounded pretty cool. When I found out it was a real-time tower defense game, I was less enthused. I'm not a huge fan of the genre. But I downloaded the demo and liked it enough to purchase the full version. I'm pretty starved for new games since most new ones won't run on my old, creaky machine.

I'm glad I did. The game is pretty fun, and is chock full of variety. There are a ton of plant units: daytime flowers and nighttime mushrooms, units that fire in a line, others that catapult, others that boost firepower, etc., etc. There are lots of different types of zombies as well: armored, bungee-jumping, tunneling, etc.

The plot is loosely based on the idea that you're one of the last survivors of a zombie plague, protecting your house from waves of zombies. There are three main environments: your front lawn, your back yard (which has a pool), and your roof (which is slanted, so you need to use catapulting plants). The main campaign is pretty short, but there are gobs of mini-games and puzzles to offer replay value. Some are pretty banal (zombie whack-a-mole), but others are neat, such as the one where you actually play from the zombie side and eat all the target brains.

One feature that I initially thought was really cool but have become less enthused about is the Zen Garden, which allows you to grow money-producing plants which allow you to buy more upgrades. At first I thought once you tended the plants to a certain size and bought the garden-tending snail that collected coins for you that you could basically leave the garden up as a type of screen saver and generate money while you were away from your PC. But this isn't the case, or at least it's fairly limited. The snail falls asleep if you don't regularly poke him. You can feed him chocolate, which keeps him active for an hour, but that's not quite as cool as a feature that let's you build resources either overnight or while you're at work or school.

It has jogged my brain about including such a feature in a game of my own design, though. World of Warcraft famously had many player using bots to farm for gold and materials while they were away from their PCs. Players were banned and I'm sure Blizzard spent lots of time and resources trying to regulate such practices. But why not just integrate them into the gameplay? The idea of being able to generate resources while you're doing other things is inherently great. If you can make it into a screen-saver type of mini-function of a game, all the better. A garden or factory that produces materials for questing in a passive way seems really appealing. You put it on at night or during the day while you're away, and when you're ready to sit down and play, your inventory is full of materials to brew potions or craft weapons and armor.

Anyway, back to Plants vs. Zombies. The production values are up to PopCap's usual standards. It's a fun game, to be sure. I got it for $20 through their website, but I've heard it's half price through Steam. If they follow their usual pattern, they'll probably lower the price in a few months anyway. I'd recommend it if you're a fan of casual real-time play.

Friday, May 8, 2009

Android Income: How Low Can It Go?

For the month of April I was consistently making around $20/day in combined ad and sales revenue. As I've mentioned, the way I'm serving up ads in my apps, as dialogs between hands, has apparently habituated people to ignore the ads more and click through less. I've slid down to around $10/day for the past 10 days or so. I'm serving up between 200,000 and 250,000 ads per day, but seeing smaller and smaller click-through rates. The lowest daily rate per thousand ads so far has been $0.02. I haven't seen a 1 cent day, though I'm morbidly curious to know if it can go to fractions of a cent.

In the meantime, I'm trying to be a bit more patient about the release of new apps. I'm holding Golf Solitaire and trying to test it a bit more, hoping to release a more polished product with fewer bugs. I broke my neck trying to get Spades out to be first to market, and that was probably a good idea, but I don't think there's a dire rush on this app. Plus, I'm going to try to release it either Sunday night or early Monday morning. I don't have hard data, but it looks to me as if those are the days when the fewest apps are released (which means the apps will stay in the New Content section longer), while usage is still quite high.

One interesting trend I notice in my ad stats is the number of ads served by day of the week. I serve many more ads on Mondays and Tuesdays, while the number steadily declines throughout the week. It's lowest on weekends, which seems to indicate that people are playing card games on their phones either when they're at work or home, and are probably filling up their leisure time on the weekends with other stuff. So I'm going to try launching my new game on Monday, assuming that all those bored people at work are looking for something new to play. We'll see if it makes a difference.

In terms of tracking usage, I came across Flurry, and analytics package for mobile apps. I downloaded it, but haven't put it in any of my apps yet. Those with ads give me some idea of usage patterns, though it would be nice to have more detailed information. I won't by trying it with my new game, though.