The mainstream API of the future

Google’s Gears announcements today highlight the huge amount of activity happening right now with cross-platform web/desktop hybrid application platforms.

These API platforms are universally rough and will change a lot, but they’re functional today. The time for a major wave of new desktop applications is near — replacing the Windows 9x/NT generation that’s still widely in use. That will create a ton of opportunities for small and large software companies alike.

The 9x/NT Windows API is no longer appealing. And Microsoft is unable, for a number of reasons, to take their own mantle with the next generation (.NET/Vista).

So there’s a vacuum that’s beginning to be filled by a ton of interesting new desktop application platforms, which have their roots in the web: Adobe Apollo, Google Gears (with some collaboration with Adobe), and potentially tools similar to Joyent Slingshot or LINA or just straight apps-on-VMs. And Microsoft is trying to stay in the game with things like Silverlight 1.1, which is available across two OSs and several browsers, which would have been unthinkable just a few years ago.

Unfortunately, for a platform today to be ubiquitous, it’s got to run in so many different environments, that it’s hard for it to be anything but open source. Which is why Google is going that route for key portions of Gears, and why the announcements today are so important for independent software developers in placing their platform bets.

The game-changer would be if Bill (or Ray) could put out an “Embrace Open Source as a Tool” memo, which could turn the company on a dime like the “Internet Tidal Wave” memo did 12 years ago this week.

But, unfortunately, I don’t see that happening.

So while it’s not a question about whether we’ll have a shift in platforms — and clearly open source is going to play a key deciding role this time — we’ll have a while to wait until we see decisively which platform(s) have won.

Feedsparks gains caching and flexibility

Feedsparks, a widget for tracking your FeedBurner subscribers, has gotten some updates and a move to a new, better-hosted location. These improve performance and formatting, especially for embedding in web pages, like what you see on the right sidebar of


New Features:

  • Supports dynamic height resizing (when used on iGoogle)
  • Uses new Google Gadgets image caching features to speed loading of sparklines and icons. This helps take a load off Joe’s awesome sparklines service, which this widget uses.
  • You can now choose a display name that’s different from Feedburner’s id. For example, “Leancodecom,Leancode” grabs the data for the Leancodecom feed from FeedBurner, but displays it in the widget simply as “Leancode”.
  • You can choose how many characters to include in the name, before it gets truncated with an ellipsis ….
  • Code now hosted on Google Code with a MIT License.

You can grab this new version here Add to Google. Eventually, users of the old version will be “aliased” to the new version.

Feedsparks, while not in the same league as dayssince, has gotten good use with 45,000 page views and 25,000 visits from 12,000 or so users in the past month. About 30% of that is from iGoogle, the rest from the widget embedded directly on people’s web pages to publicize their feed subscriber counts. Definitely worth the time to create it — most of the initial coding was done in a 11pm-4am geek session, with probably 30 hours invested in refinement and bloggi .. I mean, documentation, since then.

Current users — please let me know if anything is amiss (or just missed). Everyone’s ideas and feedback are welcome in the comments. Thanks!

Widgets vs. Gadgets

I’ve been waffling, often referring to Feedsparks or Days Since as “widgets”, even though they’ve been written first to the Google Gadgets platform. I wanted to use the general term, since the intent is to have these ported to as many platforms as possible in time.

But what should the general term be? Well, the world is a bit split:

Google Gadgets
Microsoft Gadgets
Yahoo Widgets
Netvibes Widgets
Pageflakes Flakes

What a mess. And overall usage of the terms across all meanings is similar.

Possibly because I’ve done a lot of stuff in the hardware/driver space, I tend to think of gadgets more as personal electronic devices — more like the Wikipedia definition of Gadget. So I thought “widget” (which has a history of implying “Window Gadget” in X Windows and elsewhere) was a better term. And I’m certainly not going to stoop to writing “widget/gadget” everywhere.

So should we all stick with trying to make the generic term for these things “widget”? Or is “gadget” the better term?

Next time, we present an erudite discussion of “soda” vs. “pop” …

Days Since Widget – v17

The Days Since widget just got its first update since Monday. Google caches your copy of the widget, so the changes may take a while to propagate. Most of the changes are as planned from the previous post:

  • Switch to an easier-to-understand calendar day (counters turn over at midnight). The widget previously used a 24-hour day for each reminder. But since hours/mins are not visible, that created a guessing game as to when the counters would turn. Refreshing your page at midnight (plus or minus a few leap seconds since 1970) should show incremented counters.
  • The widget now has smaller icons and text, to get more reminders in the space (closer to a normal 1 line spacing). This is also more calibrated to other widgets (which tend to select small fonts).
  • Get Firefox and IE, at least, to look nearly identical. The main differences affecting this widget are differences in how they render tables, especially with a span inside that has its own padding/margins. Firefox expands the size of the cells to fit, IE needs a little push.
  • Fix pluralization on the screenshot, and author’s email in metadata

Did not make any change to detect “enter” in the reminder textbox. You still have to hit the “add” button.

Please let comment here if you see any problems, or have additional feedback on features, etc. Especially cool would be any interesting and/or funny uses for it. The lifehacker thread has a good one…

Days Since widget – planned updates

Days Since was written over the weekend, and then had the good fortune to hit lifehacker‘s front page on Tuesday (in one day, it went from near-zero to over 3000 pageviews, and 1000 unique visitors using the widget). But that means there’s some obvious opportunities for refinement. Thanks for all the comments and suggestions!

Here’s what’s planned for an update.

  • The widget currently uses a 24-hour day for each reminder. But since hours/mins are not visible, that creates a guessing game as to when the counters will turn. Switch to an easier-to-understand calendar day (counters turn over at midnight).
  • Shrink the reset button and counter down, to get more reminders in the space (closer to a normal 1 line spacing).
  • Get Firefox and IE, at least, to look nearly identical
  • Fix pluralization on the screenshot.
  • Look at getting “enter” in the reminder textbox to submit the “add” form
  • Fix author’s email, as it currently goes to a black hole — bug or feature? ;)

And I’ve got one call for testing help: Two people reported loosing data when moving the widget.

Because Days Since stores all its data in the widget settings, if you remove it from iGoogle and re-add it, it’s expected to loose any data you have there. But moving the widget on the iGoogle page should be fine (and I’ve and seen no problems in my testing). I’m looking to find out if it’s something expected (like browsers with cookies turned off) or something more insidious (lost data with particular steps or particular browsers). If anyone has used Days Since and lost reminders when you’ve moved it around on the page, please drop a comment with detail on how you got it to happen.

Somewhat separately, as pointed out by SeT over on the lifehacker thread, it also makes sense to have a sister widget with “Days Until”. Basically like Caleb’s existing Countdown widget, but with this codebase — several reminders per widget. Everything needed is there, except fitting calendar date entry into the UI.

Days Since iGoogle gadget v0.16

If you’re like me, perhaps you

  • Forget how long it’s been since you actually bathed your little ones?
  • Forget to water those poor, thirsty plants?
  • Would like to track how long you’ve stayed away from something bad (like caffeine)?

If you’re an iGoogle user, here’s a widget to help you. It’s in beta form right now. Feedback (especially browser compatibility reports or message file translations) are very welcome!

Add Days Since to your own iGoogle page!

The basic idea and usage model behind Days Since has affinity with Getting Things Done and other time management techniques. Get the noise of remembering your recurring todos out of your head, and onto paper — or in this case, your iGoogle dashboard.

Interested? See more at Days Since

Scaling rails: nginx plus mongrel cluster

Ezra just put up a nice set of slides for his RailsConf 2007 presentation. Scaling Rails apps is tricky, and the state of the art has been moving fast (just seems like months ago that apache was back at the front of the pack). Ezra provides background and a picture, based on hard-won experience with EngineYard, on things have been, and where they’re headed.

Ezra recommends Nginx as the load balancing reverse proxy (replacing Apache or lighttpd), and Mongrel (cluster) as the clustered application server for dynamic pages. And he introduces more about Swiftiply to increase Mongrel’s already excellent performance.

There are warnings and some suggestions to attack Ruby/Rails weak spot – memory consumption. And some great thoughts on making use of VMs to partition your applications for scaling and maintenance from day 1. A presentation worth reading through.

I haven’t been doing much with VMs in the past year. It’s the source of some guilt, since my RORVM post still gets search-related hits every day. And I haven’t had anything useful & additional to say, since I develop on my Macbook, then deploy to hosted accounts where I can’t load an arbitrary VM image.

Nginx, Mongrel, Deprec, and Amazon’s hosting services are all great innovations for scaling Rails apps. I’m looking forward to following their evolution.