Reverse-engineering old jewelry
Why was I up at 00:30 reading an ECMA spec from 1970 and a report from the Union Carbide Corp Nuclear Division? Because I found an old geeky bracelet from our summer cottage and of course I had to...
View ArticleBrace placement
Since the C language appeared in the 70’s, holy wars have been raged about how the code should be formatted. Since then, these disputes have inherited also to languages borrowing the C-esque language...
View ArticleWhy you need a localization tester tool
I’ve worked with four different translation agencies in different projects. In each case, we have occasionally received some faulty translations, where for example placeholders were missing or...
View ArticleUX Fails: Mac OS app switcher (and how to fix it)
A year ago, I did the switch from Linux to Mac OS at work. While the initial couple of weeks were painful, I’ve gradually grown to love the Mac environment. It’s a good balance of a Unix-like...
View ArticleSwearing in Unicode
Sometimes you just gotta swear, but don’t have the words for it. This is where grawlixes, or symbol swearing, comes in. For text-only locations such as chats, Unicode offers a wide variety of...
View ArticleEntropy of a MongoDB ObjectId
A MongoDB ObjectId is a globally unique ID that can be generated on any machine with high probability of it being distinct from any other ObjectId generated elsewhere. The contents is not random, but...
View ArticleISO certification for dummies
Wellmo recently received its ISO 27001 certificate, the primary standard for an information security management system (ISMS). I was closely involved in defining the processes and policies to obtain...
View ArticleComplex plurals
Pluralization is a key topic in localization, but its complexity is very often overlooked. Every localization library supports singular and plural forms, but many languages have more than two plural...
View ArticleContinuous localization
In a lot of development (especially outside the US), localization is a must. You can have people 100 km away that don’t speak the same language. Unfortunately localization is often a significant...
View ArticleBenchmarking AWS t2 instances
A couple of years ago I did some benchmarking on the AWS t1.micro instances. The t1.micro was AWS’s first performance burstable instance type, which are appropriate for non-continuous CPU usage. The...
View ArticleWhen to hard-code
Hard-coding is generally considered an anti-pattern and abhorred by experienced developers. Input and configuration data should be externalized from the code, or at the very least parametrized to a...
View ArticleBackup KeePass2 database on Linux
There are several instructions on how to use the KeePass2 trigger mechanism to create a backup of your password database when saving the database. However, all of the instructions I found were for...
View ArticleHybrid app testing using dynamic DNS
Hybrid apps simplify implementing cross-platform mobile applications in many ways. You only need to write the HTML once, and it should work on all platforms. However, you still need to test those...
View ArticleUsing Spark with MongoDB
I recently started investigating Apache Spark as a framework for data mining. Spark builds upon Apache Hadoop, and allows a multitude of operations more than map-reduce. It also supports streaming data...
View ArticleCoffeeScript woes
I recently wrote a piece comparing CoffeeScript, TypeScript and Dart. For the UI component of Wellmo, we decided upon using CoffeeScript. While this has been a great leap from JavaScript, we’ve had...
View ArticleModifying the pace of audiobooks
I’ve recently started listening to audiobooks. They’re a convenient way to enjoy books on your way to work or while driving. After listening to Mika Waltari’s The Egyptian, I took on The Hunger...
View ArticleTesting visual appearance with Cucumber + Watir
One of the great things about Cucumber and Watir is that it allows you to write functional tests that are decoupled of the UI. By using page objects, the definition of how the UI works is decoupled...
View ArticlesetImmediate, MessageChannel, postMessage broken on Internet Explorer 10
The JavaScript setImmedate function has been proposed and promoted as a faster alternative to setTimeout(fn, 0) (and cleaner than postMessage). While the HTML spec clamps setTimeout(fn, 0) to a minimum...
View ArticleShifting time in JavaScript
Many applications use the current time in their functionality. For example, they can show data for a certain period of time or show the current date within the application. Writing functional tests...
View ArticleSimple image devignetting
After Before With the prevalence of smart phone cameras today, they are often used instead of scanners as quick digitization methods for documents. Unfortunately this leads to excessive vignetting...
View Article