What’s the future of the desktop hold?

Will the argument over Mac vs. Windows (or Linux) matter in 5 years?

Nova Spivack, founder of Twine, believes change is afoot. The desktop of the future is going to be a hosted web service he suggests.

I quickly read the post (it’s too long). It’s nothing you can’t find elsewhere in terms of ideas (nothing revolutionary). The part that is of interest to me is how he barely discusses the revenue model for this new platform. Right now, the desktop offers a clear model for consumers. I buy a notebook or desktop with the operating system of my preference, and optionally buy software (from applications to games). The second generation iPhone has demonstrated that people are willing to pay for good quality installable applications and not live entirely on “web applications.” The game industry is in the billions every year. 

I have no disagreement with the concept or benefit of web applications. I honestly haven’t found many that I’m interested in using full time. Furthermore, I have found even fewer that I’d be willing to pay a subscription for. Can all vendors be supported by advertising alone? No, that’s not a sustainable path for every application. So, who pays for these applications? Do they have access to your private data (anonymously?) and resell it for marketing purposes (again, advertising, but behind the scenes). Eh, that might sustain a few more businesses.

Furthermore, and speaking from experience, integration of disparate applications (via web services or whatever), is far from a simple task. Not only is there a technical challenge of integrating from protocol perspective (standards often take too long to develop, and leave little in the way for creative-types to flourish), but there’s also the user experience of having multiple different (unique) applications.

Software as a service is going to be hot. There’s no doubt about it.

But, what about the enterprise? What about 99.999% uptime? Few (if any) web application vendors can really guarantee that type of uptime. What’s acceptable though may vary from business to business, but if you’re “web top OS” is down for 4 hours for your enterprise, how much revenue do you loose?

My prediction: there won’t be a winner in the webtop as he describes it. The market is too large for that. So, developers would be forced to choose a platform for their development. Sigh.

What web applications do you use today? I’m not talking about e-mail or RSS readers — something else. Do you use Google Docs for example? For work or home?

Don’t wait to chase your dream ….

Interesting post from Gary Fong about designing a better suitcase, before others ….

Have you ever come up with something that you decided would be a great invention, but didn’t do for various reasons? What about software in particular? Ever had a software application in mind, yet either no time or talent (or resources) to develop it?

JavaScript ASP.NET Data Templates (or, I was missing Data Templates in Silverlight …)

After you taste Data Templates in Silverlight and WPF, you won’t want to go back to your old way of building user interfaces. I mean seriously, do you like the idea of building a user interface by custom drawing a list box using various owner-drawn techniques like exist in Win32? I certainly don’t. Admittedly, there’s a certain amount of excitement and energy when the list box finally looks the way you wanted, after 20 hours of tweaking! :)

So, I was experimenting with some HTML and JavaScript the other day and really wanted something like a Data Template. Nothing as powerful — but just the concept that if I just bring up the data, why can’t I easily specify the look and feel with a reusable block of HTML-like syntax?

Now, certainly I could have used one of the many ASP.NET techniques for creating a user interface template on the server — building all of the HTML and sending it to the client. That’s so old school! I wanted the server to send just the framework/shell, and send the data independently — unformatted, so that it could be both programmatically accessed and converted to a user interface. I could have used XSLT I suppose, if I again wanted to learn it, and I was comfortable retrieving data from the web server as XML. However, I didn’t want to relearn XSLT and I wanted JSON objects from the web server.

My templates were born.

There are a few pieces to creating a working system. First, a template file is needed:

<div style=""font-size: 80%">
  <h1>
    <%{Path:"Name"} %>    
  </h1>
  <div style="margin-left:20px;">
    <%{Path:"Folders", Template:"Folder"} %>  
  </div>  
  <ol>
    <%{Path:"Files", Template:"File"} %>
  </ol>
</div>

Simple enough. The syntax should be roughly familiar to those of you with Silverlight or WPF data binding experience. Within the <% and %> a JSON object is constructed that maps to the property (name) and any sub-templates that should be applied to a property (for endless and potentially recursive fun!).

These files, by default are placed in the App_Data folder in ASP.NET and are named TEMPLATENAME.template. By setting the default file type handler for these files to HTML, you can even edit them with Intellisense!

image

image

Then, to power the template functionality, the templates must be downloaded and the JavaScript object must be downloaded:

<asp:ScriptManager ID="ScriptManager1" runat="server">   
    <Scripts>
        <asp:ScriptReference Path="~/DataTemplate.js" />
        <asp:ScriptReference Path="~/DataTemplateDefinition.ashx?ID=folder,file" />
    </Scripts>
</asp:ScriptManager>

The second ScriptReference automatically downloads a JavaScript file containing the code necessary to construct the data templates.  By default, they’re automatically set to be cached (you could change the code as needed).

Finally, to construct the HTML…

var templating = new WiredPrairie.Data.Template();                        
var output = templating.toHTML(sampleData, "Folder");

var dd = $get("dyndata");
dd.innerHTML = output;

The sample web page has an empty DIV element with an ID of dyndata — although it could be anything you want.

    <div id="dyndata">
    
    </div>

The code has been tested in Firefox 3.0 and IE 7. It requires the Microsoft ASP.NET Ajax JavaScript libraries.

Download here.