Playing around with Apple’s App Store Data and NoSQL Databases and Some Random Fun Facts

I’ve been playing around with Apple’s App Store Data (Enterprise Feed) and initially tried dumping it into RavenDB. I like the idea of a Lucene powered NoSQL database but after about 5 hours I decided to punt on RavenDB for a couple of reasons.

- The RavenDB administration user interface was not intuitive to me
- RavenDB costs 999$ to use

The C# API to RavenDB was fine, but it did seem slow to insert all the data.

So I settled on MongoDB which did a marvelous job of inserting. I found a 3rd party GUI Tool called MongoVUE that seems decent enough although it costs money after two weeks. The first thing I did was find You Doodle in the App Store data and it was there safe and sound. Then I thought “What is the largest app in the Apple App Store?”…

Drum roll…

Answer: The Witcher 2: Assassins of Kings Enhanced Edition

Comes in at a whopping 21,040,027,421 bytes (that’s about 21GB – yikes, hope you have an iPad 3 or 4 with 64 or 128 GB :) )

And the smallest tiniest app…

Well that depends. If you throw out all the zeroes then it is…

HiCon Lite at a measly 16,623 bytes. I was skeptical so I downloaded it. Before I could blink it was ready to open on my device. This cute little app lets you take a photo and turns it black and white.

Anyway, I noticed a couple problems with Apple’s enterprise feed that I have notified them about.

- All the screenshots are not included
- They do not include release notes for past updates
- The app pricing is bundled with the itunes music and collection pricing which requires a staggering 200GB download. I wish that it was a separate file.
- The items in the data files are not sorted on primary key which required me to merge sort each file on the primary key before aggregating everything together
- Keywords are not included – I know this is a sensitive issue since this is how search works in the App Store, but come on, what if I want to make a search service for App Store apps? Guess I can do title, genre and description.
- Reviews are not included

It’s nice that they provide the data but it’s obviously some neglected process that isn’t given much love. Even the documentation on Apple’s website doesn’t match what’s in the files in some cases.

Perhaps I will post some more interesting tidbits once I get around to it.

Props to Amazon Customer Service

On February 1st I ordered a Crucial M4 512 GB solid state drive from Amazon Warehouse Deals. The drive arrived a couple days later and sat in my office for two months unopened. Tonight I decided I needed to get it installed and so I opened it up, stuck it in my computer and turned it on. Once I got into Windows I went to the disk manager to format this drive. To my astonishment I was looking at a Corsair solid state drive of 128 GB. I pulled out the drive and checked the labels. They identified the drive as a Crucial M4 512 GB drive, but the hardware interface does not lie, this is indeed a Corsair 128 GB solid state drive.

Amazon has a 30 day return policy but I figured what the heck, let’s see what they say. I called them and explained that someone had put a false label on the drive and that it was not what I ordered. Initially the lady on the phone pointed out the 30 day return policy, but then said let me put you on hold and see what I can do. Two minutes later she came back and said that return labels had been sent to my email address and that I would receive a full refund. Wow. I am impressed and thankful that they were understanding of the situation and that I am not out 340 USD for my purchase. Yes I should have tested the drive the moment I got it, but I have been crazy busy the last few months with no time to tinker with hardware.

I would definitely recommend Amazon to anyone, they are awesome. I have had similar positive experiences when dealing with their Instant Video department as well.

What not to do in Customer Service (Flickr)

I’ve enjoyed writing about my experience with tech products and decided I would keep posting my experiences (good or bad) about the tech services I am using as I try and grow Digital Ruby.

Recently I purchased a Flickr Pro account thinking that I would be able to upload and share full HD videos. I uploaded my first video and with eager anticipation loaded it on my iPad… and it was very blurry and fuzzy, definitely not HD. No problem I thought, I’ll just email them and get them to fix it. They responded with a cookie cutter email template saying all sorts of things such as use only supported video formats and so forth. I had already spent way too much time looking around on their site so all this information was useless to me.

My format was .mov (quicktime) and that was supported so finally I emailed them back saying please refund my money, your service does not work as advertised. I got an email the next morning stating that they cannot issue refunds, look at the terms and conditions, more cookie cutter garbage. I emailed back saying no problem, I will do a charge back. I haven’t heard back from them since :)

If you have a very unsatisfied customer and can’t resolve their problems, the right thing to say is “We are sorry we failed you. Here is your money back. We will try and do better in the future.” One thing that has always impressed my about Fog Creek Software is their commitment to customer service. Quote from their website:

The Fog Creek Promise – If you’re not satisfied, for any reason, within 90 days you get a full refund, period, no questions asked. We don’t want your money if you’re not amazingly happy.

I’m surprised that Yahoo’s new CEO Marissa Mayer would have such a counter productive policy on not refunding a customer who has had such a poor experience with their product. Ah well, thank goodness for charge backs.

*EDIT 2013-03-29 After initiating the charge back, they were very quick to issue the refund themselves. Pretty sad that it took that for them to initiate a refund.

My Horrifying Experience with Google AdMob

I recently put AdMob ads into my free iOS app, You Doodle Plus. While the click rates are good the ECPM is absolutely terrible. Here’s a visual to give you an idea (click through to see full size).

AdMob earnings graph

AdMob is clearly not a viable way to support an iOS app. Now let’s compare the AdMob earnings to my iAd earnings:

iAd Earnings

The eCPM in iAd is decent, about 1-2 USD, however the fill rate is horrible and the final earnings are close to what I’m making with AdMob (I added AdMob a week after I added iAd).

This begs the question, how in the world are people supporting free mobile apps with just advertising? The apps would have to go viral and get tens of thousands of downloads a day just to justify paying a developer or two and maybe a designer. Maybe that’s why a lot of advertising apps show popups every time you do anything, but what a bad user experience.

While I’m not very happy with the results of placing ads in my app, I thought “with such low eCPM, I should be able to make my own campaign and drive thousands of users to my apps!”. So I decided to run a campaign on AdMob to see if this could work. Here are the results of my campaign:

Admob campaign results

Here’s the sad summary: I paid 15$ EACH for two installs of my FREE app, You Doodle. I was completely stunned when looking at these results. I know I am not an expert marketer and I am sure my screenshots could be improved and all that but TWO installs? For a FREE app? AdMob simply does not work for generating installs and I am going to have to find other ways to get downloads of my apps.

You can’t even transfer extra unspent campaign funds without emailing Google and waiting 5-10 business days for the funds to transfer. Looks like it’s by design that money flows to Google as easy as pie, but money going AWAY from Google is tied up in some ridiculous process. I emailed Google asking that not only should those remaining funds be transferred but that I receive a full refund for all spent campaign funds because their service simply does not work. I’ll post here with the result of that email once I get a response.

In short, stay away, stay FAR away from campaigns on Google AdMob and be prepared to live off scraps if you want to make your living from showing AdMob ads.

*UPDATE* 2013-03-26 – I haven’t heard anything after 10 days, not looking good…
*UPDATE* 2013-04-07 – Still nothing and it’s been three weeks, I am floored. Google is too big to offer customer service it would appear. I turned my campaigns back on with a bid of 1 cent and will let them drain the remaining 35$ in the account. Yuck.

SSD Prices Keep Going Down

I bought another Crucial M4 hard drive from Amazon today. It’s been amazing to see how SSD prices have continued to drop over the past few years.

As of today, the 512 GB M4 had a 329$ price tag on Amazon.

Have a look for yourself:



You Doodle Plus Approved

We just released You Doodle Plus, and advertising supported version of You Doodle into the app store. This version contains all the features of the free version, unlocked and free for use. It will be interesting to see whether people like this model better than the in app purchase with no ads model.

Download You Doodle Plus Now

You Doodle Update

Well, it’s been just over six months since I shipped version 1 of You Doodle to the iOS app store. After six months, I’m getting about 3000 downloads a day and 75-100 dollars of in app purchases. So far I’ve put in about 600-800 hours (not really counting but I try and do a couple hours a day, more on the weekends). With what I’ve made so far versus my hours I think I am making about 4 dollars an hour. Not bad eh? I used to work at Burger King in high school and I made more than that.

Hopefully things will take off more as I add more features and make the app more stable and robust. I still feel like a newbie when it comes to mobile app creation and development, but I am starting to get the hang of it.

Ta ta for now…

Logging full NSException stack traces to your server

*UPDATE* I am using Crashlytics instead now and it’s awesome, go check it out!

Recently in You Doodle I discovered a couple of nasty crashes happening to users by looking in my Flurry Analytics error logs. Unfortunately flurry decides to truncate errors so you don’t get much useful out of it.

I decided I would write a logger to my own server and pass the full exception details. Here’s how I did it:

In my AppDelegate didFinishLaunching, I call this:

At the top of my AppDelegate.m file I have this function:

 

The logging to my server happens in DeviceLogRequest. Basically it does some magic and sends an http post request to a secure end point where the error details, including the full stack trace, are logged into my database for troubleshooting. You’ll still need to de-symbolicate crash addresses manually, but at least you will have the crash log!

Hopefully someone else finds this useful too!

My You Doodle Journey

I’ve spent at least 250+ hours of my life the past few months on You Doodle, a new app for iOS. I looked at all the drawing apps on the app store and realized most were filled with ads, had cluttered user interfaces and charged for features that should be free, like text and getting rid of ads. Right from the start I wanted to make the basic features free and keep ads out of the app.

Yesterday was a milestone for the app as I reached the 1,500 downloads in a day milestone. My long term goal is to get 10,000 downloads a day. To think that I am at 1,500 downloads a day after only 4 months absolutely astonishes me. People are using the app for all sorts of things such as note taking, sending photos to mechanics, highlighting text and more – in addition to the standard draw a mustache and tail on your friend. It always makes me happy when someone uses software for purposes that the original creator did not anticipate.

I don’t know how many nights I’ve been up until 1 or 2 am trying to fix a bug or polishing a feature or performance until it was top notch. “Just one more thing…” is great at an Apple reveal, not so great late at night with software bugs…

On top of this, I have a family that probably gets too often neglected AND a full time day job that I do my very best to give an honest days work to every day.

Part of me wants to just outsource everything when it’s a late nigh with a frustrating bug. I don’t want to do that ultimately. I was born to write software, and I don’t want to become just a manager. Perhaps I will outsource a Windows or Android version some day, but the app has no revenue stream – yet.

The last month I have been working on a new collage / picture frame feature that has tested my limits. A lot of complicated code has to work well together to allow the user to download a template, insert all their pictures into it and then save it or share it. Sounds simple in one sentence, but I have spent well over 50 hours on just this one feature! This will be the first in app purchase for the app and I really hope people like it enough to buy it. I think the feature is really neat.

So here’s an example of what I’ve been doing at 1 am in the morning:

You Doodle Collage

Thanks for reading, and good night…

Translating Resource Files

So we just released You Doodle on the iOS app store a few weeks ago and it’s doing fairly well. There are a lot of features I want to add, but one of the most important is to get the app localized into as many languages as possible. I got quotes from a few online companies for just the English to Spanish translation and the cost for just that averaged about 150 USD. That is too much for a very small software startup to pay for localization, especially if you multiply it by 5 or 6 for the top languages in the world.

My solution? We are going to be building a web app at translate.digitalruby.com that will allow you to upload iOS resource files, Visual Studio resx files and Android resource files. To start we are going to do iOS resource files first since that is our most pressing need. The translator will work by letting you upload your files. You can then use a free Bing API key to translate your file and then you can download the translated copy in whatever languages you specified.

I’m actually surprised such a tool does not already exist. At least I haven’t been able to find one after several hours of searching on Bing and Google…