Showing posts with label iTunes. Show all posts
Showing posts with label iTunes. Show all posts

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...


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, October 21, 2008

Create Genius Playlists in iTunes on the go using ooTunes ... thank you Applescript

I've been taking a break from the pain of getting a firewall-avoiding/live-video-playing ooTunes iPhone app finished to spend some time on the ooTunes Media Server.  I've fixed a number of longstanding bugs and added a few new features.

One major new feature is that (as promised) I've finally added Genius Playlist creation to ooTunes!  What this means is that when you're listening to a song on random in ooTunes, and you decide that you want to make a Genius playlist from it, it's as easy as dragging that track to the "Genius" playlist.  Well, I say it's "that easy", but that's not exactly correct (and it wasn't trivial to get working):

Caveat Emptor -- or six
  1. This is currently only working in a regular browser (not on the iPhone yet).
  2. This only works on Mac's (sorry PC, you've had a rough couple of years, I know).
  3. This only works on Mac's when you turn on "User interface scripting" also known as "Support for Assistive Devices"... 
  4. It requires iTunes to be brought to the front and may even have message boxes popup in iTunes on your ooTunes server computer.
  5. It may not work on non-english versions of iTunes. 
  6. You have to already have the track in your iTunes library, and "Genius" has to be updated since that track was added.

So why all the caveats?
1. Because I haven't come up with a clean way to do drag/drop on the iPhone like I can in a regular browser
2. I have to use AppleScript to create the Genius Playlist in iTunes, there's no equivalent commands for the windows COM interface to iTunes.
3 and 4. There is no menu command or shortcut key or AppleScript Library entry in iTunes to allow access to the "Start Genius" feature of iTunes... it's almost like... oh, I don't know... Apple DOESN'T WANT YOU TO BE ABLE TO DO THIS?!?... so it's fragile (could stop working with the next version of iTunes) and annoying (the Applescript has to simulate clicking a mouse on the button, which means iTunes has to be at the front, and a message box may appear if the track can't be used to create a Genius playlist).  
5. The button can't be found by anything but name so it's not going to work for other languages unless "Start Genius" is never translated to your language in iTunes.
6. Unfortunately, you can't create a genius playlist from any old song... I was hoping to make it so you could find music you DO own that's similar to music you DON'T own (ie, from pandora, last.fm, seeqpod, radio, etc.)  But you simply can't.  You must have the track in your iTunes library already, and you have to do the "Update Genius" after adding any new tracks, if you want them to work with the Genius Playlists.

So, there you go, I've made good on my promise, now try it out (although you can't in the demo cause I don't have enough legal tracks there for iTunes to make any suggestions... sorry!)

So there you have it, it'll only get better (hopefully).

Oh, and so no-one has to reinvent the wheel, here's a download of the applescript ooTunes uses (more or less).  Feel free to do what you like with it but, but please leave the comments in there and the copyright notice with the link to this post! 


(*

(C) Steven Woolley 2008, as part of ooTunes Media Server (see ootunes.com)

  

How to create an Genius Playlist in iTunes using applescript.  More info and issues discussed here:

http://ootunes.blogspot.com/2008/10/create-genius-playlists-in-itunes-on-go.html 

Feel free to use this code however you'd like, but please keep this comment intact so I hear feedback, etc., since I'd like to hear about updates, improvements, suggestions, etc. 

*)


set pid to "4B62C662B53FFB94" -- set this to your track's persistent id... or use some other method to get your "seed" track


set app_name to "iTunes"

tell application "iTunes"

try

with timeout of 10 seconds -- don't want to hang forever if, for instance, iTunes has a dialog box already open

set cur_track to (first track of playlist named "Music" whose persistent ID is pid)

reveal cur_track

end timeout

on error theError

return "Can't find track!"

end try

end tell


tell application "System Events"

tell process app_name -- this needs Assistive Devices support enabled see: System Preferences -> Universal Access -> "Enable access for assistive devices"

try

set b to first button of window app_name whose help is "Start Genius." -- that's about the only way to get the "Start Genius" button, but it will break on non-english versions (I'm guessing)

tell application "iTunes"

activate

end tell

click b

with timeout of 1 second -- this is a hack to "test" if the "can't create genius playlist..." dialog opened.  If it does, we'll timeout (hopefully) and then close the dialog so it doesn't freeze future applescript interaction

tell application "iTunes"

activate

end tell

end timeout

return ""

on error theError

if theError is "iTunes got an error: AppleEvent timed out." then

key code 36 -- close the dialog 

return "Can't create genius list from that track!"

end if

return theError

end try

end tell

return "Error creating genius playlist!"

end tell