Monday, September 17, 2012

Hack week: node.js, business model hacking, and more

A couple of weeks ago we had hack week 8 at SUSE. As usual the company took a break for a week and put some focused time of uninterrupted hacking on a broad range of ambitious, creative, hard, innovative, fun, and whatnot projects.


I started with an unusual project and did some business model hacking during the first part of the week. Together with a couple of other people we sat down and used the framework of the business model canvas to discuss the SUSE business model. It's an interesting exercise. I'm used to think from a technical point of view, and the canvas fits this way of thinking pretty well. It visualizes the key components of the business model like the value proposition, customer segments, key activities and resources as well as costs and revenue streams, and makes it easy to connect these. Based on this model it's pretty natural to see what variations of parameters and components of the model mean, and it's interesting to discuss how business models can be developed and changed overt time.

The second part of the week I spent on getting some experience with node.js. I chose a collaborative card board for virtual sticky notes as an example application and implemented a first working prototype of that. It quickly evolved into a combination of a bunch of technology, using HTML, CSS, jQuery, Redis, and socket.io, next to node.js. The code is in the sticky repository on Github, and a live instance is running on the Windows Azure cloud at sticky.azurewebsites.net.


Playing around with node.js was interesting. The totally asynchronous programming model makes sense. It's done with attitude, I like that very much. It also creates a number of practical problems, though. Synchronizing events can result in pretty ugly code. So this needs some additional tooling and helpers, where apparently no standard way of doing things has emerged yet. But this probably is only a matter of time.

One of the standard arguments for node.js is that you can use Javascript as the same language on the client and the server. I'm not sure I buy into that. It's two very different domains, and the code deals with very different objects. Manipulating the DOM is not the same as writing to a database, and the frameworks you use for that, like jQuery, dominate the code. It's certainly nice to be able to use the same language, but this wouldn't be a reason for me to switch.

When I did the first version of my prototype application I used standard AJAX calls for implementing the interactive parts. But this creates quite some overhead. Especially if the application is not focused on content, but much more on interactive elements, this becomes less and less practical. So I looked for alternatives, and settled on socket.io as a library, which abstracts direct two-way communication between client and server in a very nice model, using web sockets or whatever else is available. This made the code quite clear, and the interaction fast and simple. It also worked without any problems out of the box. Pretty impressive.

Finally I was looking for node.js hosting. There are a number of options out there. I had a close look at Nodejitsu. They have a very impressive command line client. I think it's the best one I have seen so far for operating a cloud service. But I ran into a few technical issues, and wasn't able to quickly get the app up and running. They are in beta, so I don't blame them for that. The solution I settled on was Microsoft's Windows Azure. It's a bit of a surprise, but they offer a great cloud platform, which can easily be used from Linux. Their web pages support node.js out of the box. You deploy the code by pushing to a git repository the service creates for you, and that's it. Their web console is very slick and it's fun to manage and monitor your applications there.

That's what I did at hack week 8, but I realize that I haven't reported what I did at hack week 7. So here is a brief recap.


I started with working on Inqlude, the Qt library archive. It's in a state, where it's sort of usable, but the information needs to be updated and completed. I got side-tracked during hack week and haven't found much time to work on it since then. That's something to pick up later. Especially around the release of Qt 5 and KDE frameworks 5, it would be great to have the library archive in a good shape, so that it can help people writing Qt applications to navigate through what's available in terms of libraries, frameworks, add-ons, and solutions.

The project I got side-tracked with was ownCloud. A group of people was working on integration with openSUSE and I joined them spontaneously. The result was an ownCloud administration command line client for deploying ownCloud to your local system or to a remote web space. It could easily be extended to also cover use cases like deploying to a NAS system, encapsulating the complexity and all the details you have to remember or read up right now in such a scenario. The code for the command line client is in the administration repository of the ownCloud project on Github and you can easily install the client from Rubygems. As a nice surprise I won one of the hack week prizes, which are given out for the best projects, as part of the ownCloud group.

Hack week is always a source of inspiration and motivation. It's one of the things how SUSE makes a difference. I'm looking forward to hack week 9.

Team Profile

What makes a great team? One important factor is that you have a balanced set of skills and personalities in the team. A team which only con...