Microsoft’s Live integration – We need an API

So Microsoft has released an initial version of their Windows Live integration. If you can’t be bothered to read the article, here’s the summary interesting to tech folks:

Microsoft’s new Windows Live software suite includes an updated electronic mail program, a photo-sharing application and a writing tool designed for people who keep Web logs.

Taking this point by point:

  • Better integration with Hotmail – Presumably things like mail notification. Ok, we have that in the most part; there’s notifiers e.g. GMail in Pidgin and the sidebar. I’ll talk more about this in a minute.
  • Photo sharing – Here we fail currently. The default in GNOME when you plug in a camera is that the photos sit on your hard drive, viewable only by you and just waiting to be lost when you drop your laptop. We need someone to fix this – I had some suggestions for part of that. Conduit looks useful for transferring bits, but doesn’t look like it is attempting to solve the problem of helping a normal person get started putting photos online by default.
  • Blog tool – eh, we have tons of those. The web editors for most of them are basically good enough anyways. Not important.

Ok, so overall, they win on photos. Now, we have a vision for the Online Desktop (as relates to GNOME/Firefox/Linux/Free Software). Part of that vision is:

Open source doesn’t have an agenda like this; our online desktop will be integrated with anything and everything users want to use.

In other words, it’s easy for Microsoft to do photo integration because they can just hardcode the OS to integrate with Windows Live Mail or Windows Live Photos, not everything else. A problem we’re running into now is that we just haven’t yet defined what the framework is for integrating with different kinds of online services. Havoc says:

a) add separate APIs to list, watch changes in, and get named
properties of each type of object; this can be merged into the Online
Desktop data model perhaps. For each type of object the implementation
will be different, since we’ll have to talk to or scrape a different
app.

Yes, we need to do this. This API question is an instance of the larger problem I see, which is how do we make the desktop integrate in a generic way with the websites you use, and if you don’t yet have a service, how do we make finding one possible?
The mailto: handler we have is basically a perfect example of an application waiting for this integration API. The mailto handler has no way to know whether you use Yahoo! Mail, Hotmail, GMail, or whatever.

Of course, it isn’t just the mailto handler. To get the experience right for photos, it’s crucial, as I talked about above. Another example is the IM client. What I would love is that on a new account, if I log into GMail, the IM client automatically appears, configured to use Google Talk. It must likewise work for Yahoo! Mail.

What I would really like to do from this point on in the Online Desktop effort is to for each feature we add, try to integrate with at least 2 services in the feature category. As most programmers know, there usually isn’t a big difference in effort between supporting the case of 2 versus an arbitrary (but reasonable) N.

So, back to the API. Actually first, let’s think about what the user experience should be instead of starting by coding the D-BUS API we made up in our head. Here’s a screenshot from a related application, Mugshot:


Now, Mugshot’s list of “websites I use” is subtly different in that right now it’s really “websites I use that my friends will be interested in”. For example, the desktop should have E-Bay integration (bid watching apps) but I’m dubious about the value of stacking things I’m bidding on to my friend’s desktops. There is also the technical issue in that honestly right now it’s a lot of work to add a service to Mugshot; a lot of that work is in the stacking support.

However, the more I think about it, the more I do think it makes sense to ultimately have a UI similar to the Mugshot one. From this flows some technical decisions such as that we’re storing it online, we can use the data model to retrieve it. We do need to figure out the problems I mentioned above – how do we have private services? And how do we scale the UI to support a long tail of services? The current list is already fairly big, and if we added even a few more photo sites and such it’d be unwieldy. Also, how do we encourage the user to list (and maintain!) their infos? It needs to be a key part of the experience. They need to understand why we want say their EBay or Last.fm username.

One other detail – passwords – some people thought Mugshot stores your passwords to retrieve data. It never has, and likely never will. Though if we wanted to do social network importing from other sites, we’d probably need to do that. Sigh. Anyways, ignoring that: In my opinion, we should concentrate on unifying the logins outside of Firefox first. As Alan Cox mentioned, there are some gotchas in doing syncing to the web browser. If we can fix the few key programs (mail,IM,photos) to share your Google and Yahoo! logins, we’ll be doing pretty well.

So the executive summary is here – I don’t feel we have a coherent answer yet for this problem. Responses welcome if you have other ideas – it’s actually a complex and hairy problem, involving a big cross between desktop apps, the web browser, and web sites, which is why it isn’t solved yet.

Transformative web applications

Steven Garrity discovers how different using Google Docs is compared to desktop word processing. While I use Google Docs a bit, I wouldn’t say it’s really changed my life a lot because I guess I just don’t write very much, at least compared to other people.

Let me jump off the Google fanboy wagon for a minute and talk about something different. What has changed things significantly for me, in terms of desktop->web transition, is Last.fm. Years ago when I was working on Rhythmbox, someone mentioned Last.fm to me, and I took a quick look, but I wouldn’t say I really understood it. I guess at the time I was too busy inventing more complex ways to badly implement a database. Sigh =/

Anyways, so fast forward a few years and someone again (I forget who now) pointed me to Last.fm and I subscribed, gave it a try. Last.fm is a lot of things (music wiki and concert calendar to name two), but what I use it for is as a personalized radio of music I like that I can access from anywhere there’s a web browser. I don’t have to deal with backing up my music, or carrying it around with me (though support for caching some of my Last.fm radio on my iPod would be nice).

I would say I’m probably more extreme than most Last.fm users in that lately I haven’t been bothering with owning or buying music much at all anymore. I mostly just like something I can listen to on random when I’m working or driving. But even if you still own music (and their scrobbler supports this very well), Last.fm is a great example of how truly transformative the web can be versus a disconnected desktop application. It would in theory be possible to show you a concert event calendar customized by the music you listen to with a desktop music player, but it’s just hard. Or the social network of like-musically-inclined people. It would be impossible to do the streaming music legally right now without some sort of business backing.

It’s actually kind of unfair to compare Last.fm with a desktop music player because really, they aren’t the same thing at all. One’s a service, and one is software.

The Java consumer brand

Jonathan, you’re on crack. Java is a good brand – to a wide swath of programmers. The idea of trying to turn it into a consumer brand has completely failed. I’d say if normal people know it at all, it’s one of thirty other popups that appears periodically on their Windows desktop and asks to update itself.
Totally, completely irrelevant. If you go to java.com, all you see is games and links to other stuff like Google Maps.

No normal person cares whether it’s Flash, Java, JavaScript, or an army of hamsters powering things like YouTube. All they care is that it works. Putting the Java logo all over the place won’t change that.

The smartest people on Earth

  1. The writers for the Onion
  2. The Firebug developers
  3. NASA rocket scientists

Seriously though…Firebug is amazing. Quite easily the most pleasant software for development I’ve ever used. I’m sure almost everyone who ever programs in javascript/css/html out there has heard of it, but if you’ve been living under a rock and are still debugging by using alert() or something…well, you should install it. That is all.

The Central Question in Computing

I am coming to believe that the software development industry in general has essentially an obsession with software that simply exists to “box” other software. Virtualization is a multi-billion dollar subsector that is the most obvious example. But this boxing obsession isn’t something really new.

I know I refer to this fairly often, but take a look again at the top two Linux applications according to Mugshot statistics. Both Firefox and GNOME Terminal are “boxes”. The entire purpose of existence of those two applications is to contain (launch,control) other applications. They are a means – not an end.

Further examples abound. The “window manager” is a literal display of the metaphor: it actually draws visible boxes around other software. And besides the window manager, the other most visible component of GNOME on my screen (in terms of pixels) is the task list applet – again – it’s just drawing boxes around the names of other software.

What actually started me thinking along these lines was Miguel’s post about .NET security, in particular how Microsoft implemented this CAS system that basically no one ended up using. CAS is a great example of a “box” for other software (in fact a huge swath of the general computer security industry is all about boxes). Probably a few very bright Microsoft engineers spent quite a bit of time on that, but it just didn’t end up being useful.

A lot of the Linux community spends a huge amount of time discussing “packages” – also just boxes. I posted about the endless nature of this particular boxing before. Someone should explain to me sometime why .spec files and debian/{control,rules} couldn’t just be replaced with something that looks a lot more like just a jhbuild moduleset, and put the stuff like descriptions on a web page somewhere.

Anyways, getting closer to the point I’m trying to make here – I think the entire development industry would be better off if we spent less time creating boxes. Don’t get me wrong – boxes are useful sometimes! I’m not dismissing virtualization for example – being able to just “turn on” a few more servers is really cool.

What I think would help for a lot of software development projects is to keep a central goal in mind. I have a proposal for that goal, which I am calling

The Central Question in Computing:

How does this software help my sister buy more shoes on Ebay?

To this end, one thing I changed recently in the online-desktop session is to start the browser by default. When I made the change, it was almost an afterthought. I was trying to set things up so that the sidebar started by default, and I realized – hey, why don’t I just start the browser too?

Bryan mentioned how I had observed that for my sisters, Marc Andreessen’s famous quote about Netscape reducing Windows to a set of device drivers has already arrived, in fact has been true for some time. For them, Windows is right now really nothing more than a glorified launcher for Internet Explorer to get to Ebay.
I had to ask myself – why aren’t we to the point where when they get to the computer, Ebay is right there instead of having to go through multiple boxes.

The Andreessen quote brings another one to mind, from one of my favorite authors, William Gibson:

The future is already here – it is just unevenly distributed.
So, launching the browser by default was one small change that I made recently, but it was a huge perspective shift for me. The desktop used to look like this:


Traditional desktop

And now:


Online desktop

I’ve been working recently on some code to further reduce the pointless work my sister would have to do to get to Ebay. It’s of course more general than that – in fact I think it’s turned out amazingly well. I know I’m being vague, but I’ll post more about that hopefully in the next few days when it’s ready for general consumption. It’ll have been worth the wait.

But until then – ponder this – what did you do today to help my sister buy new shoes?

What is the Online Desktop?

It’s pretty simple – the online desktop is this task list. Which is just a start (please add more!). It isn’t a single product you can download, though we’ve been working on prototyping components such as the GConf synchronization, a new sidebar, etc.
I’m excited by discussion like this that shows developers are interested. If you are looking to jump in – a really cool yet discrete project would be implementing the pick-a-service dialog from that todo list. In other words, the thing that should appear from F-Spot if you plug in a digital camera, but don’t have a photo site in your accounts.

Right now, you can get a person’s contact network from the data model, and then enumerate the “external accounts” (sites used) by those people. In fact, this is exactly how the BigBoard Photos Stock works. What you’d need to do is have some way of tagging services by what kind they are (e.g. photos). Then code the widget to query those, uniquify it, order it by some criteria, then just stuff it all in a treeview.

Firefox multilanguage

Mozilla supporting IronPython and IronRuby seems like pretty big news…not sure how I missed it. I’m going to have to pay closer attention to happenings in Mozilla-land.
So if I understand correctly, the way it would work is that Tamarin would include a translator from CIL bytecode to Tamarin bytecode? So finally when a website includes: <script lang=”text/python”>, what would happen is that the code would be compiled via IronPython (which itself was originally in CIL form, now translated to Tamarin) to CIL, and then Tamarin would translate that to its bytecode, and execute it?
Wow…why aren’t they just using Mono directly?

Targets

Really good mail from Bill Nottingham about target markets for Fedora. It is pretty crazy how much software in general is written without thinking about who will be using it, why they’ll want it, and how it will be used.
A current example of the wrong way (in my opinion) to create software is OpenSolaris’ NetworkManager-type program. They call all this work design, but really almost all of it is the engineering implementation design, especially this thread. It has very little to do with how people use the software; there are some sentences to the effect of “oh yeah, there will be GUI popups or something”. The UI page doesn’t exist yet even. To be fair to them, maybe I’m looking in the wrong place, but I didn’t see any non-engineering design.
Having been next to Bryan, Seth and Dan when they were working on NetworkManager, I saw firsthand how a good interaction design and an understanding of the target market is key. For example, in the initial design, they made a decision not to support static IP addresses. That may seem crazy to a programmer, but the target market (Fedora wireless users) basically never uses static addresses. Thus, no need to support them, and the design became much simpler.
Nowadays, I wouldn’t even try to write real software unless I had a good interaction designer on the team. From the start. Not like someone pulled in 70% of the way through to double check the widget spacing on all the incomprehensible popup dialogs I’d created.

Quick (or not so) thoughts

Pyro is the right technology

If you haven’t seen it, Pyro Desktop is a cool project. Alex is spot on about developers and HTML/JavaScript in particular. It’s not that are current desktop APIs are necessarily bad – but they are different. Someone who wants to code something cool that may be coming from a OS X or Windows background will have to drop down for a week while they learn the APIs.

A window manager, or…?

Now, what confused me honestly is that Pyro seems mainly to be focused on being a compositing window manager. Maybe I’m just getting old, but I don’t find the desktop bling that interesting – from any source, Compiz/Pyro/whatever. Sure, it looks pretty, but at the end of the day it feels like there are just a few things (fade-in menus) that are definite improvements, and everything else is just “because we can”. Maybe it’s also because I’m an all-windows-maximized+alt-tab person. I also don’t use workspaces.

The apps

What I thought was missing from the Pyro demo was the apps. To someone who’s not a developer, it looks like a desktop theme. The Flickr feed I see on the website is more interesting to me. Certainly, if I was going to start a project like the Big Board part of the Online Desktop now, it would make a lot of sense to write it using Firefox/Pyro. I had to spend at least a solid week of work on the HTTP library in BigBoard alone. One thought is it may be interesting to embed Firefox iframes inside Big Board.

-JavaScript

If you’re like me, you acknowledge JavaScript’s ubiquity, but you still hate its crazy prototype “object system”. Enter Google Web Toolkit. I can definitely imagine the future of application development being HTML+CSS+Java (or another sane language).

Online Desktop

Havoc had a good summary. One thing I think that should have been stressed more strongly is that in a lot of cases, being online is just a matter of changing workflow or defaults for existing regular GNOME apps, not just dropping them. For example, changing F-Spot to make it easier to get your photos online – getting your account info (or pointing you to some samples if you don’t have one), but still having a good local photo tool for picking which photos to upload, fixing redeye, etc. I think there was actually a talk about this which I missed.

Hotwire

Gave a lightning talk on Hotwire and talked to a few people about it. Seemed like people were interested, but it’s really hard to get people to switch. But I think it’s been successful in letting me prototype out some shell ideas. I have been having some different UI ideas lately though, and am also pretty frustrated right now with the Python runtime (not the language) – the GIL is a serious brick wall for improving Hotwire.
Update – Just discovered POSH when googling for the GIL link – this may be exactly what I need.

Photos

Haven’t seen many people blog their GUADEC photos (I’m sure it’ll happen en masse after the conference), but I tossed my current photo set online.


Beach


Victoria square


Hackers in Etap