• Some Unsollicited Blackberry Advice

    John Cheng is Blackberry’s new CEO and has said that Blackberry will focus on what it’s good at: phones with keyboards:

    “I personally love the keyboards,” Chen said in an interview yesterday with Bloomberg Television’s Jon Erlichman at the International Consumer Electronics Show in Las Vegas. In the future, the company’s phones will “predominantly” have physical keyboards, he said, rather than touch screens.

    Things are not looking so good for Blackberry right now and a renewed focus on physical keyboard phones is likely not going to be enough.

    As I see it, the major problem with Blackberry phones is software. Blackberry’s hardware has always been solid and its hardware keyboards excellent and battery life, in smart phone terms, very good. Blackberry OS 10 is supposedly a step up, but getting an OS up to par — especially in terms of available applications — this late in the game is pretty damn difficult. And frankly, with Blackberry’s current downward momentum, I don’t see this happening.

    android What if Blackberry would drop Blackberry OS and start producing Android phones? Supposedly Blackberry has great features for the enterprise and I’m sure there’s a market for that, so take Android, add the special Blackberry enterprise sauce, add a solid hardware keyboard and start moving those phones. Ideally, also inherit Blackberry phones’ great battery life.

    Want to bet they’d have more success than their current strategy?

  • Candy Crush Level 23

    Every Dutch kid experiences this at some point in their early childhood: Sinterklaas — think Santa Claus, but three weeks earlier and more racist — is not real. The boat with Sinterklaas, his black “friends”, and all those presents — it’s all an act. In reality, your parents bought you all those presents.

    You feel betrayed when you find out. You’ve been lied to your whole life. What’s next — the easter bunny is not real either?

    At a certain age you assume you found out about all the lies. All the myths and fairy tales.

    But as it turns out, I was wrong. I’m 30 years old and I just realized that is there still a myth kept alive and everybody is still pretending.

    Read more

  • Callback-Free Harmonious Node.js

    For a long time, JavaScript has been my go-to language. Of course, in the browser, but on the server too. When I started with JavaScript I spent a lot of time finding ways to reduce “callback hell”, but eventually I just gave in: code generators and systems that require a patched JavaScript engine are just not the way forward — they’re not “native” JavaScript solutions.

    So, for years I wrote callbacks like everybod else until I they became part of my muscle memory. They’re manageable, but you have to do a little more work.

    A few weeks ago I did some work with Python, after a long Python break, and: Wow — Python code is succinct. You can actually do stuff like this:

    output = subprocess.checked_call(["ls", "-l"])
    

    and output would contain the output of running ls -l. If it would fail, it would raise an exception. Insanity! I had gotten so used to the node.js way that it seemed it was the only way to do it:

    subprocess.exec("ls -l", function(err, output) {
        if(err) {
            return callback(err);
        }
        ...
    });
    

    Believe it or not, in Python you can perform IO inside of a regular for-loop, something that is not generally recommended in JavaScript. Did I suffer from JavaScript callback Stockholm Syndrome all this time?

    Then, after seeing some reference to the upcoming EcmaScript 6 (next version of JavaScript) generator feature, I found Tim’s post about generators vs fibers. Now, I don’t find fibers all that interesting, but the generators captured my interest, especially since you can enable support for them in node.js 0.11.x already using the --harmony flag. Then I found TJ Holowaychuk co module and I knew:

    There is a callback-free node.js future in sight.

    Read more

  • Deploying WordPress Using nix-docker

    Yesterday I wrote about nix-docker, a way to use Nix to provision Docker images in a nice way. Today I spent a little bit of time on a sample nix-docker configuration to deploy WordPress to a Docker container to demonstrate that nix-docker is not just a toy, but can be used to deploy a “real” complex-ish system implementing best practices like storing all state (mysql data, uploads, logs) that needs to persist between container restarts in a volume.

    The result can be found here. It’s ~130 lines long, but quite a bit of that is comments. It implements the following:

    • MySQL storing its data in the Docker volume /data under /data/mysql
    • Apache with PHP5 enabled listening on exposed port 80 and storing logs in /data/log
    • WordPress with an extra theme (to show how to do that), configured to store uploads in /data/uploads so that they, too, survive container restarts.

    That’s it!

    The result is a container that stores all important data in a volume, which you can mount from the host machine for easy back-up. To use:

    # nix-docker -b -t wordpress-app wordpress.nix
    # mkdir -p /data
    # docker run -v /data:/data -p 80:80 -t -i wordpress-app
    

    And voila!

    wordpress screenshot

  • Declaratively Provision Docker Images Using Nix

    I like Docker. If you don’t understand why, read the 3.5k word epic that I wrote about it at InfoQ. In this post I’ll assume you’ve read my InfoQ article, or are at least somewhat familiar with Docker and its features. Here’s two features that I care about in particular:

    • It makes applications portable to any cloud provider that supports Ubuntu 12.04+ (and in the upcoming 0.7 release CentOS too), which is basically every cloud provider in existence (although I hear that Google’s doesn’t yet support it. FAIL).
    • It makes trying out applications super simple: you no longer have to set up a hundred libraries and services that the applications to be able to run, everything comes in a single package, ready to run and ditch if it doesn’t work.

    After playing with Docker a while and deploying some apps with it, one thing that I feel could some help is the provisioning aspect of it: how do get your application and its dependencies into a container image? Read more

  • Opening the LogicBlox Gates

    As you may remember, I changed jobs at the beginning of the year and now work at LogicBlox, a very exciting company that aims to change the way software is developed by making it much more declarative using the LogicBlox smart database. Until last week, only customers and academic collaborators could have a peek to see what LogicBlox is all about, but, finally, this is now changing step by step. I’m personally extremely happy about this, because it’s just not as much fun to work on something that you can’t share with the outside world (at least for me).

    Read more

  • Zed Update

    It’s been quiet around the Zed editor project for a while, but over the past days I’ve put some time into it again. As it turns out, I ended using it less and less over time. The reason is simple: it was too much hassle to get started editing files. The procedure always consisted of cloning the Zed repository on the remote server where I wanted to edit files, cd ing into the right directory and then firing up a Python script to start the WebFS server. Then figuring out if the server want to edit files on is directly accessible from the Zed editor over HTTP or I have to open up some ports on a firewall. Bleh. Too much hassle.

    Last week I figured out a way to improve this situation while reading a ZeroMQ book. Even though I did not end up using ZeroMQ (which is amazing by the way) to keep dependencies low, it did lead me onto the idea of a proxy solution. But before I get into the technical nitty gritty, let’s have a look at what the flow looks like now.

    Read more

  • Who Needs Git When You Got ZFS?

    I’ve been playing a little bit with ZFS, Oracle’s (previously Sun’s) next-generation file system. Originally developed for Solaris, but since it’s open source also ported to Linux (as of 0.6.1 considered stable for production use) and Mac. While called a file system, ZFS is also a volume manager, so also takes over the job of partitioning your disk as well. Why is ZFS cool? It includes protection against data corruption, built-in support for RAID, snapshots and copy-on-write clones, and flexible and efficient ways of transferring data, e.g. for backups. To show what’s possible and push the limits somewhat, I’ll show how we get implement various features of Git, the version control system (or any version control system, for that matter) using ZFS. Of course, I’m not seriously suggesting you’d ditch a “proper” version control system, but it gives a good sense of what’s possible at the file system level.

    Read more