Wednesday, March 11, 2009

App store reviews now separated by version!

Since the last two posts were complaining (about apple) I'll restore some balance...


Apple really does seem to be listening to developer feedback. One of the annoying things for developers and reviews of their apps is that they are cumulative for all versions of the app, so if someone has a rough start, it's hard to shake the early reviews. Well, now in the reviews, they've added "Average for all versions" as well as (presumably) average for the current version! This will of course also mean that it works the other way, if for some reason your app blows up after the second update (after having lots of great feedback) then would-be buyers will also see that the the current version maybe isn't as good as it used to be. It doesn't go as far as letting developers actually RESPOND to the feedback, but it certainly is a step in the right direction. Here's a couple of images from my own app's page.







Also of note, it appears that they now show the total number of ratings, not just those with actual textual reviews. Though I still think they should separate the non-text reviews from the averages since they are highly biased downward by asking for a rating when an app is deleted :(

Note, I haven't yet upgraded to iTunes 8.1 yet so this is a feature for everyone, not just the newly upgraded.

I hope they also made the dang thing load a bit faster (and cache old pages a bit less) but I won't hold my breath since those are typically mutually exclusive demands.

Oooh, it also has a last modified date by all the reviews, I like it!

One more request (since I'm pretty sure steve jobs read this blog): LET DEVELOPERS SEE THE INTERNATIONAL REVIEWS FOR THEIR APP please, instead of having to resort to some crazy screenscraping hack which is undoubtably slowing the store down for everyone else...

Friday, March 6, 2009

Blogs... where people go to complain...

iTunes app store feedback is a fun little forum. It's like the rest of the internet, mostly garbage, some nice spots, and of course, noone really controls it. Well, I've been a bit baffled by some of the reviews I've had for the ooTunes Radio iPhone app. So I almost posted this as feedback (with a 3 start "neutral" rating). Then I decided against it (thanks rob :) Instead, I've resorted to using more *'s and ALL CAPS to make sure people don't just skim over my app store description (hey, some people are liking it enough to buy it without thinking twice... actually over 2000 people :) The beautiful thing is that I'm getting much more feedback directly than in the app store. However, I'd love for more people to contact me... customer service can be a real adventure (and time sink!) but I've always liked talking to people.

Here's what I'd post as my own feedback. It was fun to write:


My goodness gracious! Hi, this is Oogli. I don't exist as a real person. But really, I would be a nice guy if I did!
Okay, I've spent the last 2 years of my life, in every waking moment working to make this app and the server a reality. Some may call me an idiot, great. Please do it to my face (see the "ooTunes Radio Support" link). I cannot honestly believe the number of people who are still "surprised" that the ooTunes server costs extra money! I can't believe it (unless you bought my app on day 1) there are two places in this long (poorly written) description that have stated in no unclear terms (sold separately see: http://ootunes.com)

I don't understand why people are able to read all about all the features (many of which require using a server, not because I'm trying to get rich from it, but because they are TECHNICALLY IMPOSSIBLE TO DO without having a server running on YOUR computer) but FAIL to see the SOLD SEPARATELY text??? I'm not trying to rip people off!!!! I want everyone to be happy, I want to keep working to make my software perfect, I want to live a long(ish) and happy, not-overly-stressful life. However, I'm finding that it is quite difficult given the circumstances:


  1. I can't advertise my Server software here more than I already am, this is Apple's store, they don't get anything from people purchasing my server software, this is not an advertisement.
  2. I can't respond to people here. Please contact me!!!! (see the "ooTunes Radio Support" link) I answer every email I get! I want to help you!!! I want you to tell me why I'm a fool, then you can tell the rest of the world.
  3. If you feel as though you were ripped off, tell me to my face (or by electronic mail, rather)! I'll make it right!
  4. Please check your facts before you post reviews. I've heard several people tell me that "all these streams are available elsewhere for free". Please tell me (and any potential customers where, so we can move on with our lives!), or that the web-browser is only available with the server? It's not. Try again, or ask me how to use it.
  5. If you have trouble with the software, it's my fault. Please tell me so I can improve it. I'm listening, and working hard on it. See the "ooTunes Radio Support" link.
  6. If you like my software, thanks! I sincerely appreciate your business. I'd still love to hear what I can do to improve it! (then you can tell the world)
  7. That feels better...


Wednesday, March 4, 2009

A bug report for the app store review process

Summary:

Horrible subjectivity, inconsistency and unpredictability of app store review process.

Steps to Reproduce:

-(BOOL) willAppleDoTheRightThingForDevelopers{
App *myapp = [App appWithMuchHardWorkAndLateNights];
while ([[Users of:myapp] count]){
do {
[myapp submitForReview];
sleep(rand()*1000+FIVE_DAYS);
if ([Reviewer feelslikeapproving:myapp] && ![Reviewer insteadOfReviewingUpdatesChoosesToRejectForSomethingPrevious2ReviewersMissed] ) return YES;

[I WTF];
[I cantFindReferencedAttachment];
[I respondToRejection];
[I hearNothingBack];
[I didntInfringeTrademark];
[I haveNoRecourse];
[I curseApple];
[I prayAndroidSucceedsImmensely];
[I franticallyMakeChangesAndResubmitSoMyUsersWillStillRespectMe];


}
} while ([I amSane]);
}
return NO;
}


Expected Results:

YES

Actual Results:

?

Regression:


Notes:

While the tone of this is somewhat sardonic, the realities of the frustration are 100% accurate.

Suggested improvements:

Some sort of estimated time til review (there has to be an internal queue for reviews why can't we see something giving us a rough estimate that becomes more accurate as it gets closer to review?)

A more thorough review upon first submission, so that future updates can focus on what's new, not digging up old skeletons.

If old skeletons must be brought into the matter, why not also review the actual update so fixing the first won't result in a second rejection when the new features are actually reviewed?

Since it's expected that a review can't possibly be 100% thorough for all apps, give developers a "warning" for something that's already been accepted but shouldn't have been, by saying "fix this by the next submission (if the issue is NOT serious... which in most cases it wouldn't be or it would have been found in the first n reviews!

Some means of quick turnaround with questions on clarifications from the review. I honestly got a review that said "see attached image" with no attachment! I responded asking for the attachment and still haven't heard back. In fact, I have never heard back from anyone about any requests for clarification I've made. Going on weeks now!

Provide a more concrete set of review guidelines. It was very frustrating to have an app rejected for using the word "demo" on a button, when nowhere do the guidelines state this, and the only place I could find information on it was on ars technica!

While I'm going, how about a way to respond to reviews, or more encouragement for people to contact the developers before leaving a damning review.

That's all for now, if there's a better venue for this, please let me (and all the other developers) know!

Saturday, November 15, 2008

Performance improvements...

One of the reasons that I originally wrote ooTunes was because I was very put off with the poor performance of other alternatives.  I tried DOT.Tunes (it was using 10% of my cpu all the time, and resyncing with my iTunes library took minutes).  I tried slimserver and found that in order to keep the slimserver database in sync with my iTunes library I had to run a 1 hour long sync.  I chose to do this during the night, since it bogged down my computer and made playing music from the library skip and buffer.  I spent a lot of time tacking on additional functionality (like marking songs played when I played them, etc.) but it was obnoxious not to be able to see changes to a playlist for as much as 24 hours.  So, ooTunes was born.  I spent a lot of time writing and optimizing the code that reads the iTunes library.  It now is parsed in under 5 seconds, without freezing up my computer, and that's on a library with 14,000 tracks!  This means, what you see through ooTunes is basically what you have in your iTunes library.  If it isn't, reload  the page, and it will be.  


Well, I spent several of the last few days further increasing the pageload speed.  I found that a lot of the time when refreshing the page (usually re-reading the iTunes library is the biggest part of that, though it only re-reads it if there have been changes since the last read), was spent reading online playlist from mp3tunes and pandora.  Many people don't use these so they wouldn't be seeing the slowdown, but for me, it was taking an extra few seconds each time I reloaded.  So I made changes to do a better job caching those as well.  (the demo will now load about twice as fast as it used to, on a fresh login!)


The other area that I've spent (probably too much) time optimizing in the last few days is the load speed on the iPhone or iPod touch.  I found it a bit frustrating on my large library (granted, I also have a not-yet-released feature of my photo library being loaded, which is something like 2000 more playlists to render) but I still thought it could use some speedup.  So I've reduced the image sizes using some cool compression tools that compress images losslessly, and more importantly, I ditched the dependency on Scriptaculous/prototype on the iPhone!  I seriously regret ever having started using Scriptaculous, it brings in something like 60kb (compressed) of javascript libraries for a few tasks (mostly the drag and drop of songs on playlists, etc. in the regular browser)... and there's no fine grained modularity (no way to say, I only want this feature, give me the bare minimum javascript library!)  So, the iPhone interface now loads in about half as much time as it used to (at least on my own library).  There is still a lot of room for improvement, but I'm pleased with the progress that's been made.


I also made some needed changes to the interface on the iPhone.  No longer do you have to tap 10 times to get a song to play (it's still more than anyone would like but I've reduced it as much as I can, tapping a song once now loads the song and one more time on the quicktime play button and it should begin playing).  Radio stations and movies are even better.  One tap and they are playing!   (the reason is that they don't do back to back playlists so they don't require the little play button to be pushed).  I wish apple would give us some REAL javascript controls for the embedded quicktime player, but it doesn't seem to be top on their priorities.  However, it's much better now that I fixed my own problems.  


Now if only I could have made more progress on MooTunes.  It's coming along but my love for "speed optimizing" just overwhelmed my love of making tons of money!


Also, please send me your suggestions and requests for improvements!  I would have probably never made some of these changes if someone wouldn't have spoken out about it!


Tuesday, November 11, 2008

App store rejects... it's time for change!

In following a thread on the macrumors forums about another app (castcatcher) that was rejected (an update actually) on grounds of using too much bandwidth.  This one maybe is a bit too close to home for me, so it's got me a bit more worried than the "pull my finger" app that didn't make the cut. Is anyone aware of a petition to apple to be more open about their acceptance of apps? (too lazy to google but strangely not lazy enough to not write about this).

It seems that if enough registered developers signed a reasonably written, petition (and had some of the major developers of major indy apps) sign on, they may be able to be heard. My guess is that those with a lot of success are scared to "bite the hand that feeds them" but the uncertainly is extremely demoralizing to a developer. I'm not going to stop developing because of the fear, but it does certainly make me want to hedge my bets and not "risk everything" on the hopes that my apps get accepted into the store. True innovation, however probably does require more of the "risk everything" attitude. It may simply take getting some exposure on the front of a few of the apple news sites, and a few big developers in an "open letter" to bring about some change. Does the NDA override our right to unite and beg for some clearer groundrules? Is there any reason the SDK can't include the same tests that Apple themselves are using to vet applications (if such things truly exist? Things are appearing more subjective these days... and admittedly some have to be judgement calls, but something like bandwidth usage is easily implemented in a test suite).

Wednesday, October 22, 2008

ooTunes, internet radio, last.fm, and airtunes

A recent request from a potential ooTunes user was whether ooTunes could be used to listen to windows media streams in iTunes, so that the audio could be played on their home stereo using airtunes (and the apple airport express).  Well, I'd been meaning to make a way to listen to a stream from ooTunes remotely but in iTunes, which would solve that issue, so I spent some time last night doing just that.  

Basically, you click the little "info" link* (the  at the beginning of the track in ooTunes), then click the "Play in iTunes" link which will download a .pls playlist which can be opened in iTunes to play that stream!

The latest version of ooTunes will let you listen to any of the internet radio stations compatible with ooTunes right through iTunes (even remotely) so you can pipe them to your stereo connected by Airtunes!

In fact, it will probably even let you listen to whatever stations you want (this includes last.fm streams, internet radio, etc.) on your appleTV as well (though I don't have one to test it on!).  If you have one, test it out and let me know if it works or not!

* You may also see the little "$" link there in the top corner.  That's so you can search for the lowest price on that song or album, if you were interested in buying it.  One day I hope to have that working with the currently playing song on a station, but the makers of that technology have been pretty unresponsive to requests from a little guy to license it.  Just FYI.

Tuesday, October 21, 2008

Some bugs fixed...

I finally took some time to fix some longstanding issues with ooTunes.  The biggest one is that now you can tell ooTunes to use a local address when you're on the same network as your ooTunes server... which is a) much faster and b) should work with routers that are dumb and can't connect to a local computer using a remote address).  It's off by default but if ooTunes detects that your router isn't working with local addresses, it's turned on automatically.  You can manually turn it on/off on the "remote access" preference page.  There are also some optimizations to speed up logging in, and more info about your current ip (both local and remote) on the "remote access" preference page.  If nothing else  I hope it will prevent lots of support emails asking "why can I connect from my iPhone, but not locally"?