2006-12-31

Google: left hand meet right hand

This is a very common problem in the software industry, so I won't pick on Google too hard. My last post about Google's Firefox extensions didn't get any responses, so I thought I'd spend a couple minutes to find out if Google already had plans to fix the problem.

I found the announcement of the extension made by Glen Murphy about a year ago, but didn't find any follow-up announcements on that blog by Glen.

I checked the FAQ, nothing too useful there. There were support contacts; an e-mail address and a discussion group. The discussion group had relevant information:

If you just signed up for Blogger, you've got a Blogger Beta account. Google hasn't yet updated their extensions to be compatible with Blogger Beta. Once they do,
you'll be able to do whatever you should be able to do with the
extension. Until then, I'm sorry to say you're stuck with the Web
interface. :(
My complaint is that Blogger is no longer in beta. There is no mention of this issue on the Blogger bug list, at least that I could find. Before you take something out of beta, shouldn't you make sure the other products from your company actually work with it?

Well, I'm hopeful that Google has already figured out this is a problem and that is why they are talking about more features and fewer products. See interview and Time article.

powered by performancing firefox

2006-12-29

Google Blogger Web Comments Firefox extension is broken

I decided I would play with some more Firefox plugins useful for bloggers and found a pretty nice one from Google, where this blog is hosted. The plugin adds comments to websites by looking for blog entries that link to that URL. This is pretty cool and works fairly well, but when I tried to create a comment (blog entry) using the extension, I got a login error. I use the new version of Blogger, so that could be the issue. I guess Google has the same problems as all of the other large companies when it comes to having one group talk to another.

If they use their own tools, I'd expect them to find this post quickly and fix their extension!

technorati tags:, , ,

Blogged with Flock

2006-12-28

Quick note on the prematurely declared death of XML

I was initially taken aback when I read Douglas Crockford's blog post from a couple weeks ago titled "XML on the Web is Dead". He starts:

At the XML2006 conference in Boston last week, I heard a number of people proclaim that XML on the web is dead. XHTML is not going to replace HTML as the web's official markup language because it turns out that resilience is more useful than brittleness. And JSON is quickly displacing XML as the preferred encoding for data interchange.

I agree with the attack on XML for data interchange. What is required for data interchange is something that works and works easily. The data is consumed in JavaScript and JSON also solves the nasty little sandbox problem, so it works. No argument from me there.

As far as markup, well, this jostled me a bit more. Sure, a parser that expects only well-formed XHTML will be brittle, but that is no reason not to generate well-formed XHTML source. XHTML adds value to developers by providing namespaces and better character encoding support, right? When the XHTML is well-formed, the parsing can be done quite small and fast. When it is not well-formed, the tag soup can still generally be handled by the browser parser with some extra work. That may go against the (misguided?) aspirations for a parser that would reject such bad XHTML, but it faces the realities of compatibility in computing platforms.

When I mention namespaces as a feature here, I'm not considering it a great feature that some folks come up with XML schemas that the web browser doesn't know. I'm talking aboug SVG, MathML, and other schemas known to the browser. I hope I'm not in the minority thinking these are useful for many web developers.

Douglas went on to group the reactions of folks at the conference into three categories.

The third was "Don't say it like that." XML is in decline on the browser, but it still has a role on the server. If we go around saying it's dead, people might start looking for better alternatives.

Well, life would be boring if we weren't always looking for better alternatives. The point that browser-side programmers are looking for easier ways to exchange data, seems quite valid and I think the choice of JSON is exactly right. I think it is time for JavaScript to get some more serious usage on the server-side and there is lots to talk about there. Maybe calling XML-on-the-web dead isn't that bad a thing to say.

XML and RDF haven't delivered all the tools necessary to turn everyday web programmers into clerics of the Semantic Web. They have delivered enough to be useful, living components on the web, even if they aren't given those names. I'm curious to know if anyone has done a good study of XHTML usage as Google did for HTML usage last year. I'd still expect to find its use frequent and growing.

2006-12-26

Blogging with Flock

I'm a bit of a nervous person. When Flock asks me for all of the usernames and passwords for my various social networking tools, it doesn't make me comfortable. Since this blog is about web-based collaboration, trying out some of the newer tools would seem to be a requirement. Now that Blogger is no longer in beta and is supported by Flock, it seemed appropriate to hit the "Blog" button on the first article I saw:

What Blogging Platforms Does Flock Support?

A table of supported blogging platforms is detailed at: http://wiki.flock.com/index.php?title=Blog_compatibility.

This is my second attempt to create this post. The first one was eaten when Flock crashed.

technorati tags:, , ,

Blogged with Flock

Characteristics of the winning WebOS

I'm going to predict the future for you here. Hopefully, like any good prognosticator, I'll leave my definitions vague enough and my time-line open enough that I'm almost guaranteed to be correct. What I'm going to tell you is the look of the web operating system, or WOS, that will ultimately "win".

The primary purpose of a WOS is to convert web services into a commodity. This is really just argument by assertion, but here goes anyway.

DOS is to disk as WOS is to ___?
The point of a computer operating system is to abstract all of the "interesting" parts of a computer in a way that allows application programmers to make use of them. Think back. Disk Operating System, or DOS, existed to read applications off of disks and to allow those applications to read and write to disks. Without a disk operating system, application providers would need to partner up with both computer and disk drive providers to deliver an application suite. Some amount of application code would need to exist in the ROM of the computer just to read the rest of the application suite off the disk.

This is largely the state of the web today. A complete web application utilizes a wide variety of web services for distribution, authentication, session management, search, etc. To deliver a web application today, you need to deliver an entire web server, or fleet of web servers. You can partner with other businesses for site hosting, back-end databases, and storage. You can utilize relatively common components, such as with LAMP. Nevertheless, as it stands, it is impossible to define a complete and relatively complex web application that can be freely moved from one operating environment to another.

Many of the critical services needed by a web application can be hosted by the local desktop. I argue a WOS must include a reference server, though I don't know if that is the only solution. What I do know is that one desktop server doesn't scale well to applications that could have users across the entire web. It is therefore critical the application just as easily makes use of commodity web services. That is the benefit of using a WOS. It provides the abstraction to make an web application that can scale without modification.

The interactions we can have with the web are much more interesting than the interactions we can have with disks, but I think the analogy holds. There are even some important interactions with disks that current desktop operating systems don't support, but that is a another story. I even go so far as to say that using a WOS should allow you move your applications to an entirely different web, off of the Internet and onto a private LAN. It is only some subset of the web that can be truly abstracted in this way and many web applications will have dependencies that don't allow them to work independent of the Internet.

That subset of services that can be made independent of the Internet is what is important to a WOS.

Growing the market for web services
I don't mean to say that a WOS developer should focus only on the server-side. A WOS must provide an environment where those web services can be consumed by a sufficiently large market. In this context, it can be critically important to provide a rich set of client services and template applications to simplify application development. Some people seem to get this secondary objective of a WOS confused, such as the blogger quoted below.

But what is a WebOS (not to be confused with another definition of the term, see here), or a Webtop, anyway ? Here’s a simple definition: WebOS is a virtual operating system that runs in your web browser. More precisely, it’s a set of applications running in a web browser that together mimic, replace or largely supplement a desktop OS environment.
The "webtop" functionality is important in the simplicity it provides in creating web application, but I think Wikipedia's definition is closer to correct. I struggle, however, to see where a webtop alone will significantly help generate the next killer web application. Web browsers already support tabbing and there are plenty of AJAX frameworks for producing rich interfaces. While a webtop and set of example applications seems necessary to be recognized as a WebOS, do any of these webtops offer sufficient benefit to application developers to lock themselves into one of them?

How a WOS will generate cash
Consumers want everything to be free. That is, they want it to cost them so little effort or resource that they don't even know they are paying. This is where a WOS has some real potential. A WOS can turn all of those profitless web application companies into differentiated web service providers. How?--by putting a line between what is scarce and what is abundant.

Software is abundant. Given enough time, someone is going to write this WOS of the future and make it open source, so there is little hope of making money off of selling one in the long term. Though there is little money-making potential for someone making just the software for a WOS, there is significant value for the service, content, and hardware providers. The existence of a WOS can increase the number of their consumers and provide the infrastructure they need for revenue, such as micropayments. The most successful WOS will turn the scarce service and content resources into commodities, maximizing their availability.

At first, nervous service and content providers may be reluctant to feed such an ecosystem where they are on level ground with their competitors. They will wonder if they will be able to sustain their value. Eventually, they will learn that there is still value in their brand, their services, and their content. Why? Brands are scarce, because attention is finite and it takes attention to build confidence. Services require resources and expertise, and are therefore scarce. Despite the seeming abundance of user-generated content and the high-availability of copies of any particular content, there is a finite amount of content available to sustain the value of any given brand. Though new markets can be generated on top of an existing consumer base, the ability to generate content that is suitable to an existing target market is limited to a finite set of content providers. In other words, people will get bored watching home videos of cats climbing the curtains.

With the scarcity of services and content, the abundant WOS will simply be the catalyst for revenue. The hardware is a story for another day.

The predictions
To conclude, here are the top 10 characteristics I see for the winning WOS:
  1. It will be a standard, not a single implementation.
  2. It will be implemented with open source software at least once.
  3. It will be packaged with a web browser, like Flock.
  4. It will make transparent use of free (community-based), fee-based, subscription-based, or advertising-based web services when local services aren't sufficient.
  5. It will make use of open identity services, like OpenID.
  6. It will provide namespace and tunneling services, like Paper Airplane.
  7. It will provide media playback, publishing, and subscription services, like Democracy and Broadcast Machine.
  8. It will work on any network, including a network of a single computer.
  9. It will be accessible, isolating the application presentation such that the interface can be implemented independent from the core application.
  10. It will provide bandwidth aggregation, like BitTorrent.
(Update Jan 6: link to my other posts on web operating systems)

2006-12-21

Pimp my blog with FeedFlare

I'm not one of those people that is obsessed about having my own unique CSS, so you won't see me waste much time with that. As long as the format is readable and the HTML in the post feed looks okay, I'm happy.

What does interest me is finding people who get something out of my posts. I have a grand vision for the web, as many other people more influential than me do as well. My first few entries have been a bit longer than I'd like, but they are such a small step towards sharing my vision. It has been a challenge to keep them even as short as they are. Of course, having a day job helps. Nevertheless, I've noticed that a few people have managed to discover and read these entries. I'm hopeful that I'll be able to participate in discussions on these shared interests in the future.

Quickly catching myself up with some of the recent blogging tools, I found a couple of interesting posts. One was from Robert Scoble with a great interview with Google's Marc Lucovsky talking about adding AJAX Search to your blog. I could use that to tie in other blogs talking about the same topics. The idea is to make it easier for someone, mostly me, to participate on a certain range of ideas. Well, that isn't going to be trivial, so I will move on for now.

The other post was from Matt McAlister on a new Del.icio.us publisher API. I'm a Del.icio.us user who scans for other people that bookmark items like I do. I add those people to my network. Putting the information of how many people bookmark my posts directly on my blog will save me some cycles. The first place I found information on the API was on FeedBurner, where they have added use of the API to their FeedFlare service.

I created a FeedBurner feed for my blog. The next step was to add the FeedFlare to my blog itself. One blogger pointed out that FeedBurner provides you with information that doesn't go with Blogger Beta. Followed the advice, I went to the FeedBurner forums to pick up the required snippet.

Simple enough for me. Actually, it was pretty darn simple. Sure, I've left out all of the issues of now having multiple feeds, so I'll never be able to tell just how many subscribers I have. Sure, I've given my e-mail address to half the Earth by now to get access to one web service after another. No, I don't have any guarantees those guys will be providing that same service to me tomorrow, but why shouldn't they? Should I really be expecting anything more?

(Update 2006-12-23: I saw today Del.icio.us posted information on their site about the new API. I probably won't look at it much, since I've already got it going with FeedFlare.)

2006-12-19

Defining a WebOS API

It has been a couple of years since everyone came around to realize that the web is the most important emerging application platform. All hands are now on-deck to fight the resulting API war. Because I am an embedded software developer, you might think I wouldn't have much of a role to play in this war. I hope you'd be wrong.

What might seem simpler to some might be harder to understand for others
Back in the day when computers were hard to use, many of the non-engineers that I know would make use of computers by writing small programs. Those programs might print their names across the screen or play sequences of musical notes. On occasion, those programs would be borrowed from a magazine and might encompass an entire adventure or arcade game. I wouldn't necessarily call this programming, but it meant that they understood how to edit a source file, invoke the compiler or interpreter, and run an application they could actually dissect themselves. How many of your friends not involved in writing software for a living can do this today?

Those were also days when people made backups of their floppy disks. Sure, part of that was because they had personal experience with data loss, but they also would lose smaller bits of data at a time to learn this lesson. What's more, their computers would still work without any time lost to restore a backup to a hard drive. How many of your computer using friends create a backup of their data today, let alone a bootable image with the programs required for using that data?

See also:
Microsoft BASIC Wikipedia entry
TRS-80 Model I Level II BASIC page
Don't get me wrong, I dread the idea of turning on my computer and seeing a BASIC "Ready" prompt looking back at me. I hope you'll admit, if not reminisce, that prompt let you at least know what state your computer was in and what it was "Ready" to do. The really good news is web browsers have given much of that know-what-state information back to computer users through the beauty of a hyperlink or URL. Typing a URL into the address bar of your favorite browser typically results in something you expect.

Since running web applications is easy, programming them should be easy too. If we can stay a little focussed, we might just find that is possible.

What is an API?
In the embedded world, I get pretty frustrated with how often a function call is confused with an API. I can accept that a collection of function call definitions could constitute an API, but a good API is often much more than that. An API is everything an application programmer requires to make use of a bundle of software that was created by someone else. So, a documented set of function calls into a library could be an API, but so could documented interrupt traps, messages, or even URLs. What is important is that you can give enough information to the application programmer to make use of your software bundle.

In the web application and web services worlds, there are lots of possible starting points for defining an API, all with various benefits and pitfalls. On the web services side, there are SOAP, XML-RPC, and many more. On the web application client side, there are Mochikit, Dojo, DOM, GWT, and many more. On the web application server side, there are Zope, Zend, Ruby on Rails, Mediawiki, Twiki, SharePoint, Blogger, Drupal, and many, many more. Gather it up and there is a lot of room for confusion.

Fortunately, as complicated as all of the support layers have gotten, the fundamentals of how most of the web works have remained relatively consistent. Data is fetched from URLs using HTTP's GET method and manipulated using two or three other HTTP methods. This thinking has been captured in the representational state transfer architectural style, or REST, as described by Roy Fielding's doctoral dissertation. Given average computer user's familiarity with fetching data using URLs and providing input using on-line forms, there is some potential for creating an API that people can understand.

A web service or web operating system REST API is somewhat akin to a desktop operating system call or software trap. In a system call, the application prepares some aspects of the CPU state then executes a CPU instruction to enter a more privileged set of code defined by the operating system. It is an important feature to not make these calls transparent, because this is where potentially sensitive information is moved to the network. These HTTP transactions are abstracted network transactions that most computer users can understand, because they already make these transactions frequently.

An early entry
YouOS has created something of an API for applications running within their WebOS environment. This API includes web application client library functions and server functions. YouOS has communicated their goals in the YouOS manifesto.
YouOS strives to bring the web and traditional operating systems together to form a shared virtual computer. To you, it's one giant computer that you and your friends can work on. To us, it's all the servers, routers, software, bandwidth, and engineers to keep this grand experiment in collaborative computing running.
I agree this is a noble vision for a web operating system, but this isn't necessarily in the best interest of consumers. At the least, some off-line capability, such as that described for Scrybe, should be included. Ultimately, there is also little reason to pay for storage and bandwidth if your home ISP connection is sufficient. I love the Amazon web services that YouOS utilizes to provide the scalability for Internet-wide software deployments, but locking customers into a single source provider for YouFS isn't in a consumer's best interest. Big players won't see a reason to use the service defined by YouOS because they can invest in their own infrastructure and new developers can't start small enough, which is confined to their desktop.

Provide an open source server implementation and client library
One answer is to provide an implementation of the server that is hosted locally. By continuing to use the HTTP interface definition, the location of the service, primarily data storage and retrieval, can instantly be made irrelevant. Further, it defines the necessary interface for authentication and provides a sandbox for web applications. A new developer who learns this environment can be given most of the lessons necessary to deploy their application across the Internet.

A pitfall that must be avoided is the creation of too many abstractions in the client library that are potentially more leaky than the HTTP interface. The programmer should be kept aware of the HTTP transactions that need to occur to perform their desired tasks. By providing a local server, significant services can be kept out of the client library.

I'm not saying that the client library should be avoided all together, but it shouldn't be seen as the entry to the operating system. The client library is more akin to libc for C programs or the standard template library for C++ programs, but with less need for portability. As long as a web application makes only the HTTP transactions supported by the web operating system, it should run just fine, no matter what language or client library is used.

Use microformatted XHTML, not a new XML schema
What shouldn't be avoided is defining the inputs and outputs of those HTTP transactions to be extensible, forwards compatible, and backwards compatible. A simple approach to this is to make use of microformatted XHTML for all queries and results. The server should still support HTML for robustness, but only generate XHTML. XHTML is something that every major web browser already knows how to parse and present. Microformats extend XHTML in a way that doesn't break that compatibility.

One huge lift from using microformatted XHTML is the ability to provide a service like Amazon's AWS Zone directly on-top of the web operating system services, without needing to understand the syntax of WSDL and SOAP. This self-documenting style is exactly what is necessary for those new to programming. This allows for cut-and-paste style experimentation to produce results that can be expected, such as how many people initially learned to produce HTML documents.

What all should a WebOS do?
Certainly it should provide data management so that you can get to your data wherever you are. I'd say it should go a bit further and define the paradigms for protecting and sharing that data with other users. Sharing content, especially media, is an area where Parakey seems a little bit more focused than the other WebOS entries. A WebOS should help you not only get to your data from everywhere, but publish and synchronize it with other users. (See: RSS, JXTA, and SyncML.)

A WebOS might need to handle some tasks where the programming environment of a web browser cannot execute tasks quickly enough. I've done plenty of assembly language programming in my career, but it is almost always only needed in a very small part of even complex algorithms. For the vast majority of software, the environment should optimize for ease of development. Dynamic type checking is better than static. Automatic memory management is better than manual. Programmers should only need to focus on the problem at hand. If the problem is the need to express some control flow, then just think about the software techniques required for that. If the problem is to create a high-performance video codec, something I do frequently, then worry about the individual machine cycles in your tight loops. Don't make programmers think about all of the problems at once.

The case of media manipulation seems to me to be one of those areas that is simply too intense for coding in JavaScript with today's interpreters. This is an instance where a proprietary interface, Adobe's Flex, seems to have an advantage over existing open source options. Hopefully, this is an issue that Parakey's JUL will address.

Should it also provide window management? This seems to be a popular function of the early WebOS entries, but I don't necessarily see the point. Web browsers already support multiple windows or tabs, though the idea of bringing up a desktop on remote computers in a predefined state has some appeal to me. What should be done by a web operating system is to clarify and distinguish the roles of software modules along the lines of the model-view-controller, or simiarly useful, pattern. This would allow web applications written against a WebOS to be immediately more accessible.

Conclusion
Some say that programming will always be difficult. This may be true for highly-optimized, widely-deployed, well-structured, and cutting-edge applications, but the definition of programming is a bit of a moving target. I'd be happy to get more non-engineering people introduced to a programming environment where creating the "Hello World" application is truly trivial and creating the next YouTube is truly possible. That environment, where you can be self-taught and all of the tools are at your fingertips, should be among the goals for any WebOS application programmer's interface definition.