Google Play Vs. iTunes Match

I signed up for the Google Music beta a while ago and promptly forgot about it. I was either too busy to check it out or unimpressed with the feature set. I recently took another look at it after it was renamed to “Google Play.” It’s suddenly making a bit more sense now that I’m trying it out again.

Google Play (I’m really just talking about the music part) lets you upload all of your music to Google’s servers. This step seems kind of dumb but I guess for legal reasons they can’t just recognize your music and use their own copies of songs. I’m sure they’ve got the technology to do it. Anyway, once your music is uploaded you can play it from “the cloud.” While this seems like something so simple that Dropbox could do it, it’s the details that matter. In this case, Google offers a pretty neat interface to listen to your music (and buy more, if desired).

I haven’t used iTunes Match personally, but from what I’ve read, it seems to do something similar. iTunes Match will scan your music library and “match” them up with songs in their database. If a song isn’t on your iPhone but is in your library, you can download and listen to it from your device. So far, it doesn’t seem like there’s a desktop component of iTunes Match besides iTunes (meaning you can’t listen from a website). Also, iTunes Match costs money.

What I like about Google Play is that there is a web interface, so I can listen to all of my music at work without having to download iTunes. I complained earlier on Twitter about how there isn’t a native app for iOS that lets you listen to your Google Play stuff, but there does happen to be a web based player that seems okay. iTunes integrates more easily with your library (no need to actually upload stuff) but seems more rigid about re-downloading music.

Overall, it seems like Google Play is the better service. If it had a native app for iOS it would be the clear winner. Eventually I would like to lower the amount of space on my phone that I’m using for music, which would allow me to have more apps, photos and videos. Hopefully the two services continue to develop and compete with each other to the point where they’re both improving.

Thoughts on Textbooks on iBooks

I was thinking about the latest news from Apple, that they were partnering with textbook publishers to bring cheaper textbooks directly to the iPad while at the same time releasing an application for anyone to publish iBooks for the Apple Bookstore.

Perhaps I am being cynical, but it’s always appeared to me that the main business model of a textbook publisher is to slightly tweak versions of a textbook, altering page numbers and quiz questions in order to force students to buy newer editions instead of used ones. Perhaps the industry is thinking that iBooks will eliminate the used book market, and they’re probably right. But this could also have some negative (for publishers) side effects as well.

Apple is lowering the distribution costs of textbooks dramatically. Assuming that schools actually pay for a set of iPads for each student, it becomes trivially easy (with the iBook publishing software) to create free textbooks for schools. Who would want to give textbooks away for free? Teachers. There are cases of teachers self-publishing for their own schools, but for this idea to really work, I think teachers would need to collaboratively create a textbook that meets either regional or national standards and release it for free on iBooks. If you don’t believe this will happen, take a look at Khan Academy.

Previous attempts to create free textbooks have been hit or miss. I am not quite sure how popular Wikibooks are in the classroom. The problem is probably that of traction and scale. Previously, no one has created a standard for e-textbook distribution. Apple is doing that with iBooks. The beautiful part is that they’re bootstrapping it with traditional publishers who are probably digging their own grave.

Of course, this could play out in a number of ways. Maybe iBooks will prove to be too costly for most public schools to adopt (I’m guessing this is very likely). If only private schools or schools with a lot of funding can support them, it may not become worthwhile to create free textbooks for all.

What I’d hope to see is a slow adoption of iPads in the classroom using iBooks as textbooks. Once a critical mass of schools is using iBooks, free textbooks will be developed and adopted by certain school districts and spread to others.

I’m glad to see that Apple is trying to “disrupt” (I lose some points here by using a word I hate) the textbook industry, and it’s awesome that they’re partnering with that industry to do it. I’m really looking forward to seeing how this plays out, hopefully for the benefit of our education system.

Conditional GETs in App Engine

I’m currently working on an app in Google App Engine that polls feeds periodically and then does stuff with them. I suppose I could use that pubsubhubbub thingy but I have a feeling that most feeds aren’t using this yet.

Anyway, I did a quick naive implementation of polling about every hour or so. Apparently the feed parser I’m using is pretty inefficient because it’s eating up a lot of resources (relatively speaking) on App Engine. I remembered that the http protocol is pretty smart, and there’s a way to figure out if stuff has changed since the last time you grabbed it.

Google’s urlfetch doesn’t seem to support conditional GETs (someone tell me if I am wrong). I looked around and found a few tutorials on how to accomplish this in Python using urllib2. The tutorials weren’t exactly what I wanted, so I had to change a few things here or there. Here’s a snippet of code that I’m using:

import urllib2
feed = Feed.get() #my feed object has a etag, last_modified and url property
req = urllib2.Request(url)
if feed.etag:
    req.add_header("If-None-Match", feed.etag)
if feed.last_modified:
    req.add_header("If-Modified-Since", feed.last_modified)
try:
    url_handle = urllib2.urlopen(req)
    content = url_handle.read()
    headers = url_handle.info()
    feed.etag = headers.getheader("ETag")
    feed.last_modified = headers.getheader("Last-Modified")
    feed.put()
except Exception, e:
    logging.info(e) #just says 304 didn't change
    return
dostuffwith(content)

This handles my use case, which is doing work if the feed is new, and ignoring it if it hasn’t been modified. I could probably wrap this into a function that returned false if it the file hadn’t changed, and the content if it was new… Probably will do that next.

SXSW 2011 Panel Proposal: “Quitters Always Prosper” Please Vote!

I submitted a panel proposal to SXSW again this year entitled “Quitters Always Prosper: The Iterative Career Process.” Here’s the proposal as seen on the official panel picker:

Quitters Always Prosper: The Iterative Career Process

You just graduated from college and started your first real job. But it isn’t what you thought it was. Somehow, somewhere along the way, you made an error in judgment, or your company flat out lied to you about your job. What do you do?

Hear from a panel of young professionals who were in this same position and quit before they hit the one -year mark. They’ve since moved on to greener pastures and have found their true calling, or are at least a step closer. They are part of a larger movement who believe in an iterative career path.

Disillusioned employees: share your pain and ask the panel how and why they made their decision to quit. Learn the warning signs of a bad fit during the interview process and in the first few days on the job. Know that you aren’t alone, and there’s something you can do about it.

Employers: learn how to decrease new employee turnaround. Discover the best incentives to retain great talent. Learn when and when not to hire.

When the going gets tough, quit!

Questions Answered:

  1. What are the warning signs before I accept a job that it is not a good fit?
  2. What alternatives are there for reconciliation before sending in my resignation?
  3. What should I do before quitting (e.g. securing a new job, etc)?
  4. How do I explain my short stay to a potential new employer?
  5. What should I learn from my bad experience, and how should I apply it to the next job?

As many of you know, I quit my job at Microsoft after about 6 months. There were a lot of reasons why, and it boils down to the fact that it just wasn’t a good fit. I’ve noticed a disproportionate number of my cohort from grad school who also left their first jobs after graduating within one year. I thought it would be interesting to do a panel on the subject and try to get to the bottom of this phenomenon.

I think It’s of interest not only to people who aren’t happy at their jobs, but also employers who struggle with retention rates, especially among younger employees. I think it’ll be an interesting panel. While I moderated a SXSW panel at this year’s conference, I was thinking that I could either moderate again (it’s very fun and stressful) or be a panelist, since I’ve experienced it myself.

I’d really appreciate it if you could take the time to vote for my proposal, leave a comment, and spread the word! As with my last panel, I think the subject is something that people think about, but often do not talk about. If we can get a room of like-minded people together, I’m confident that people can be inspired to make tough decisions and get more out of life!

SXSW Student Startups Podcast Up!

SXSW just posted their audio recording of the Student Startups panel that I moderated! Here it is in embedded form, or you can download it, too!

[audio:StudentStartups.mp3]

Oh man, I sound super nervous (I was). Please let me know what you thought of the panel if you didn’t get a chance to attend and you’re hearing it now for the first time!

Thanks again to my panelists, Ben, Ellen and Marc! They did a terrific job!