Martin Ström

One (Two, Three, Four) — Unintentional Metallica cover band

The Unintentional Metallica cover band (by Konst & Teknik & Martin 2009/2013)

▶ Play

◣ Photoboth ◥

Photoboth is a new iPhone app that lets the user take a photo with both cameras in just one tap and therefore including the photographer in the photo too. The back and front photos can then be arranged and combined in many different (and fun!) combinations.
The app includes super simple sharing to Instagram, Twitter and Facebook.

Get the app here for a special introduction price right now, find more info here and follow Photoboth on Twitter here!


Copy Paste Character

Two weeks ago we (me and Konst & Teknik) launched—a site to make it dead easy to copy those special characters which otherwise can be hard to find. We just pushed an update and I realized I hadn’t mentioned it here.

The character you click will automatically get copied into your clipboard, thanks to the flash technique mentioned here. However, I wrote my own JavaScript class to handle the clipboard and the buffer of clicked characters since you can hold down ‹alt› to copy multiple characters at once.

Here’s the source for the copy buffer class in case anyone’s interested:

Multi-dimensional array sorter

The other day when working on some small updates on I wanted to sort the projects in a multi dimensional way, and take the other factors than the first into account. JavaScript’s Array#sort only supports one dimensional sorting so I wrapped my own sorter.

The results turned up pretty good (at least compared to the first test), or perhaps I just like recursing functions.

var sortOrder = {
  'cat-no': ['cat-no', 'name', 'type', 'year'],
  'name':   ['name',   'type', 'year', 'cat_no'],
  'year':   ['year',   'name', 'type', 'cat_no'],
  'type':   ['type',   'name', 'year', 'cat_no']

function sort(order) {
  var ordering = sortOrder[order], length = ordering.length;
  $$('#projects > li').sort(function(left, right) {
    left = Project.find(left), right = Project.find(right);
    return (function(index) {
      var a = left.getSortValue(ordering[index]),
          b = right.getSortValue(ordering[index]);
      return a < b ? -1 : a > b ? 1 :
        index < length ? arguments.callee(++index) : 0;
  }).each(function(project) {

CSS is in progress