Salt and Pepper — Running native code within the browser with Google Native Client

When the web started off in 1989 at CERN, it was just a collection of static HTML documents, the first browsers were little more than document viewers, and computing still happend largely on big servers connected to many thin-client workstations. Much has changed over the last 20 years. Computing has moved from a the server-terminal model to the personal computers we know, and as web browsers are rapidly transforming from document viewers into sandboxed Javascript runtime environments, something amazing is happening: computing is moving back to a client-server model, with servers located in the cloud serving web applications running in the browser sandbox.

With browsers transforming into target platforms for general application development, there comes a desire for software running at near-native speed, something which a highly dynamic language like Javascript still has a hard time to deliver (even though Javascript runtimes have improved speed tremendously over the last years). It is not surprising that Google has come up with their own answer to this problem: Google native client (NaCl) allows native C/C++ code to be compiled to run directly in the browser and has been part of Chrome since version 14 (November 2011). In this blog post, I’ll take a closer look at this technology and explore how it works. Weiterlesen

Enslaving eZ Publish

Web applications of all sizes rarely come without the need for editable text content. Implementing a complete content editing solution might yet be still oversized. So why not make use of one of the better known content management solutions available to the open source community – eZ Publish?

As a full blown content management system, eZ Publish does not only supply a quite powerful content repository, but also an ideally tailored content editor that supports all relevant features such as content versioning, publishing workflow or roles and permissions management.

Testing your ExtJS 3.4 components with Jasmine

Developing your own ExtJS components for your application is more fun and results into more resilient code if you write them hand-in-hand with test code. A solid test basis can also facilitate the task of refactoring your software.

Although, test driven development is easy for javascript code, how can ExtJS 3.4 components be tested? Which parts of our components should be tested to accomplish a successful refactoring?

Gaming the game: Using Selenium to automate playing

An online acquaintance described it like this:

„You build your tool to reduce grinding. After a while, building the tool becomes a game in itself. One where you make the rules“

Multiplayer online games nowadays heavily rely on small repetitive tasks to regulate the pace in which you proceed in your competition with other players. Duel a player once and win to earn a point. You have enough energy to duel 10 times. Then you have to wait to regain your energy. If the designer did a good job, it’s fun at first. After a while it gets boring, but you have to do it to compete.

A sane architecture for Android apps

Building native Android apps is fairly simple: just throw some Java code together, add some XML to it and there you have it: a cool new Android app. But also sadly in most cases an unmaintainable Android app in the long run.

For many developers this seems to be just fine but I often asked myself why the code I wrote got more and more messy with every feature I added. I refactored a lot of the code step by step but it still felt very ugly.


Pimp my Backbone.View (by replacing it with React)

I’ve been using Backbone.js in a couple of projects now and my feelings about it are quite diverse. On the one hand, I like how it provides you with guidelines on how to structure your frontend code. Although splitting model and view is a very basic idea in software development, it also is very powerful. Backbone.js is of great help by providing collections which aggregate model instances and by being able to sync these models with a server via RESTful APIs. On the other hand, it always (and I hope that it’s not just me) seems to be a pain in the b*** to figure out the best way to implement a proper view lifecycle and to keep track of all registered event handlers. If you aren’t careful when removing or even just re-rendering views, you can seriously mess up event handling and prevent proper garbage collection. If you are just a little sloppy, this leads to a slow frontend with an always increasing memory footprint.
I’m not saying that Backbone.js is bad in handling UI events, just that you have to care about too many things that are common to most web applications. This article describes an alternative to the Backbone.View component.


Beyond Tellerrand 2013

On Monday and Tuesday I was attending the „Beyond Tellerrand“ conference in Düsseldorf – a curated conference targeting frontend development, design and creativity. Or to sum it up: about shaping the experience for users on the web.

the conference mug

the conference mug

After having visited the really inspiring „sister“-conference „Play! Beyond Tellerrand“ (which is more code-focused) a year ago I was very glad and excited that I could go to Düsseldorf this year (thanks Mayflower!). When I arrived at Capitol Theater and checked in I was surprised by the adorable location: a lot of open space, people were chatting everywhere, everything was branded with this year’s artwork, the staff was so friendly, there were artists and sponsors giving small exhibitions, … Weiterlesen

Connectivity for the (occasional) road warrior

When you have a virtual machine that connects both to the host directly and to the network via bridging, you can run into troubles with DNS resolution if you use DHCP on both network interfaces. Since the solution is somewhat cryptically hidden in the DHCP client manual, here’s a walkthrough.

Supplementing your Online Shop with Apache SOLR

Nowadays, if you want to have an online shop, you have a choice between a number of software solutions, from small and slim to large and comprehensive. Oxid eShop, Shopware, Magento, XT-Commerce are a couple of the more well-known solutions. Every vendor tries to provide the best experience for their target audience, so a couple of compromises is made to cover all use cases. All have in common a web-frontend with an underlying database. The latter is one such compromise. A database in itself is a compromise between storage and retrieval. Since all shopping systems come with a built-in search facility based on the database, searching is subject to a compromise.

To cater all but the most basic needs with a search facility, it needs to be tuned to find the right data, be fast at it and present the results in a meaningful manner. That is where Apache SOLR comes into play. Its main focus is on being a search engine, it does not suffer from the drawbacks that databases have.


A shift of mind

You must be the change you want to see in the world

– Mahatma Gandhi


As things change fast, reacting to these changes is not a matter of some new actions but a challenge for a real shift of mind. To realize the necessity of shifting your mind again requires being aware of your underlying mental model. Which means recognizing that you have a mental model and qualifying it against a changing reality in order to detect possible misfits. A learning organization needs individual learning and both are woven into another in a multitude of complex relations.

I’m following Peter M. Senge’s The Fifth Discipline which I try to break down into some main points and sentences that might serve as a basic guideline for systems thinking and personal mastery, two concepts widely discussed in the book. As I would like to keep reading easy and do not intend a political career, I only mark quotations I literally took from the book. Weiterlesen