Google AppEngine App issues on Snow Leopard 3

I always seem to trip up on these language version issues. I spent way too much time on this so, as usual with such things, I thought it was worth a post. Early this week I upgraded my work machine (MacBook Pro) and the new machine came packed with Snow Leopard. Today, I had some free time so I figured I’d modify this “lab” project that a few of us worked on at Comcast Interactive Media a few months ago.

I use the GoogleAppEngineLauncher application to start/stop the apps and it seemed to launch fine once I had the code checked out from SVN. However one part of the application, which loaded some remote data and stored it in the DataStore didnt seem to work anymore. Stilling digging through what could have gone wrong, I ended up isolating the issue with the invocation of urllib2. Looking through Google’s documentation, I tried switching to URLFetch which fixed that part. But a couple of lines later, I tripped over another issue. This time the error was a lot more explicit with some message mentioning a missing __init__ in the 2.6 version of Python. So I tried switching the Python location in the /usr/bin/python to the 2.5 version but that didn’t work. Turns out to switch the Python version on the launcher, you have to set the value in the Preferences panel for the application as mentioned here. Ta daa! That worked.

Note, if you are using the command line dev_appserver.py script to run your application, check out this post here

Dispelling the FUD! Silverlight is NOT on the iPhone! 5

This is crazy, do any of these bloggers actually read the announcements? My Twitter/RSS-feed streams are clogged with Silverlight on the IPhone items like here, here and here, and thats just not the case. So lets please get the facts right: Silverlight IS NOT on the iPhone. Or rather the browser plugin called Silverlight isnt.

Here are the facts. Microsoft User Experience Platform Manager Brian Goldfarb stated:

“We’re translating the content to support the MPEG2 v8 [decoder] format that the iPhone format; we’re moving it to their adaptive streaming format. So it’s the same IIS smooth streaming content, the same server, the same point of origin, but now I can get that content to play without any code changes, without any real work, on the iPhone. That’s the critical thing for our customers.”

Microsoft, Adobe and Apple have all proprietary adaptive streaming formats. For a better understanding read this article on Apple’s adaptive streaming on NewTeeVee.

Now in all honesty, thats cool. So you place a bit of video that silverlight can adaptively stream and if an iphone requests that, IIS will handle that as well. I am not sure but Adobe’s solution may need the Flash Communication Server to step in. But the perception of “free” only works if you are resigned to use IIS anyway, which I am sure a lot of Silverlight shops are anyway. But there is that difference.

However the titles of the posts I read and the followup comment are so WRONG. Silverlight isnt on the iPhone, video that Silverlight could play now plays on the iPhone.

Crazy!

Web applications vs. “real” applications and a thoughts on moving off the webpage browser for apps idea 0

There is an interesting discussion brewing over a couple of blogs. Part of it began when PPK wrote a rather strongly worded post titled “Apple is not evil. iPhone developers are stupid” where he accused some of the developers jumping into the whole native app for the iphone of not really considering the advantages of HTML5 and the powerful Safari browser on the iPhone for their applications.

Of course the iPhone native app camp had to respond and I am sure there are a few responses now online. The one I found that Aral Balkan linked to was by Faruk Ateş made some points around why the App Store in all its craziness is still worth the pain, but they centered around JavaScript performance (which I dont think is as bad esp for the apps that constitute 90% of the app store), HTML layout issues (which I dont agree with really) and making your application available at a place where users are actually looking for applications (some merit here).

Similar discussions also seem to be happening on the Google Chrome OS front (except that in that case there isnt a real option except web apps). For example, after Chrome’s public demo, in a followup Q and A session, Google’s Sergey Brin responded to a question saying that Chrome OS will not support any native application at all. Apple had encouraged developers to write web apps for the iPhone before the native app SDK was announced, but Sergey seemed to indicate that one reason may have been that Apple’s own native apps seemed to fragment user experience since the native apps felt different than the web ones.

I have to say I have yet to be convinced of the web-apps as native-apps concept. This week I have been halfway in the process of transitioning from one computer to another at work, and I was surprised at how much of my data is already on the cloud, between Google Docs, EverNote, DropBox, Flickr, etc, I had very little actual data to move across. That part of the dream is awesome. But using that data in apps is a different story. For one thing, there are very few guidelines for how web apps should look and work making the look and feel widely different and something that we learn from scrach on every new application. And network latency is often very painfully apparent, and I am not even talking for the data, its probable as you switch from one state of an app to another, you are looking at a blank screen for quite a few seconds before the UI gets loaded in, and then tries to load the data.

In a recent labweek project at CIM, we wrote a web application optimized for the iPhone for browsing Comcast On Demand content. The application, while functional, did not work nearly as elegantly as a native iPhone app especially on a device with spotty connectivity. I shudder to think what would happen if my Google NetBook was on a saturated network like AT&Ts right now. I imagine it would only take a few instances of “waiting…” messages to do something that traditionally was instantaneous to piss of a fair number of users (including me). Add to that html’s behavior of rendering incomplete content which then pops into the final look once images and icons get loaded, poor javascript animation (even if they are because of a poorly written piece of JavaScript code) would make the experience a far cry from what I have gotten used to in native applications like that on OSX or (even) Vista.

Perhaps part of the problem remains that we are trying to overload the browser metaphor. The web browser was written to browse documents, and HTML5 continues to move it in that direction. Maybe what is really needed is what I call an Application Frame, a browser that has no concept of a page. There are a number of features that this would need:

  • A concept of state changes that dont involve the entire page to reload, nor rely on crazy JavaScript dom manipulation. Something that looks, for example, similar to Flex’s States metaphor. The application frame should automatically handle transitions by default unless the developer overrides that.
  • The ability to proactively cache an entire application at the application startup, not just page 1 of a 5 page application
  • Ability to add launch icons to the desktop/start menu (I think JNLP does this right now)
  • Ability to override close action of the window that sends it into a windowless background process mode
  • Notification APIs that allow the application that was set as a background process to be recalled into the window mode
  • Ability to leverage system icons without having to package them into the app

I am sure there are more but these are the ones that come immediately to mind. Note that all this happens without an install process. The end user requests the application from a URI and the server can send back a new HTTP Header (something like Content-Type:Application/FrameContent) and then proceeds to send markup and javascript that defines the app UI. The Application Frame can even keep some browser behavior, like history of recently invoked applications, bookmarks, etc. Also the markup should include html and also higher order markup similar to widgets in, say, XUL or Flex.

Couple these with things that are now becoming part of HTML5 like built in databases and web workers and we could finally realize the dream of a “real” application sent to the end user by a webserver at the time of launch. But until that, I still think the web-application may not do it for me. Chrome may prove me wrong, but thats something time will tell.

Update: PPK has a new post up responding to the avalanche of passionate native app folk. Pretty fair points there.

So long Engineering, hello User Experience 6

Today was my last day as Lead Software Engineer at Comcast Interactive Media (CIM), and tomorrow I start my new role as a User Experience Technologist / Principal Application Developer for CIM. Its been an awesome 5 years in engineering but its time to move to newer domains.

The decision to move to UX was definitely not something I just woke up to. I have always considered myself an engineer, and have a Masters in Computer Engineering to back that up. Heck, this blog is a testament to my love for programming. I love learning new technology, and am fascinated by programming concepts and domains. However for me programming is the means to an end. My end goal has always been to get ideas down to working apps and getting them out there in front of the huge user base Comcast has. That was the most gratifying part of working on different projects like the Fan, the Comcast.net portal and more recently microchannels within Comcast.net and Fancast.com.

A while back I wrote a post on the need for creative technologists, and that feeling is something that has steadily grown over the last couple of years. The new technologies are enabling a much richer experience for an end user but there is a lack of experience designers who investigate the new platforms. And these platforms are more than just pure technology, they include things Facebook, OpenSocial, Yahoo Homepage, etc. It is something I hope I can bring to the table in my new role. And just for effect, I will re-insert Grant Skinner’s Venn diagram on where UX fits in the engineering/design world:

UX

Thankfully it feels like the perfect time to be at this position. Off the shelf technology and instant on solutions like Google App Engine promise to reduce the temporal gap between ideation and functional prototypes. And with a strong initiative within CIM to encourage grassroots innovation, it seems like the perfect storm of awesomeness :) . Personally this position also will help me grow in areas I have traditionally not dabbled in, be it more middleware/backend programming or business and finance. I am very thankful to CIM for enabling me to explore this direction.

I am a little emotional about no longer being called an Engineer, but hopefully I wont be an outcast from the engineering team, even if I do wear a beret and occasionally talk about shades of teal ;) . This blog will still be called Code Zen, and I will continue to release open source libraries (the 0.6 release of OpenPyro is coming up btw), but I think now I can be a little less bashful about commenting about user experiences and methodologies. I will be learning a lot in the next few months and as always, will share it all here.

Color me excited ;) !

My FlashCampPhilly presentation: Some interesting libraries to consider for your next app 0

Last Saturday, Philadelphia was host to its first ever FlashCamp event. The event brought together some of the biggest names in Flash and Flex in the neighborhood and beyond (special kudos to Rob Hall for organizing the event from vision to a lot of very hard work). I did have one session at the event as well, as I walked through some of the libraries I have started using in a lot of my projects, including the soon to be alpha-ed Espresso Reader. These libraries included: