The Not-So-Straight & The Not-So-Perfect

The not-so-straight and the not-so-perfect is the lovely thing of life. And there’s somebody out there trying to make the world straight and perfect…When the world will be straight and perfect in their eyes, will that be straight and perfect, or will it be worse?

Analogue People in a Digital Age Twopair Films

Aphex Twin on Smartphones

I don’t have any phones. They’re just not good for anything. They’re handy for loads of stuff, but I can’t think of anything that’s better because you’ve got them. I think there’s a risk of people becoming zombies with Facebook and social media. It’s really awful, that side of things.

Aphex Twin ‘Syro’

Barcelona 2014

14-08_2117_lomo-lca_kodak-colorplus-200_13.jpg 14-08_2117_lomo-lca_kodak-colorplus-200_05.jpg 14-08_2117_lomo-lca_kodak-colorplus-200_35.jpg 14-08_2116_olympus-mju-ii_kodak-gold-200_20.jpg 14-08_2117_lomo-lca_kodak-colorplus-200_09.jpg 14-08_2117_lomo-lca_kodak-colorplus-200_32.jpg

More photos in the Barcelona 2014 set.

Preferences in User Interface Design

Jef Raskin on “Modes, User-Preference Settings, and Temporary Modes”, in The Humane Interface:

Facilities for setting user preferences constitute an example of modes and are a major source of frustration. Ironically, these features are usually touted as a benefit. Present user interfaces are often so difficult to use that a user may feel an urge to rearrange them. Microsoft specifically recommends that such facilities be provided: “Users, because of their widely varying skills and preferences, must be able to personalize aspects of their interface … such as color, fonts, or other options.” [from Microsoft’s Windows Interface Guidelines, 1995]

… By providing preferences, we burden users with a task extraneous to their job function. … Time spent in learning and operating the personalization features is time mostly wasted from the task at hand.

… Customization sounds nice, democratic, open-ended, and full of freedom and joy for the user, but I am unaware of any studies that show that it increases productivity or improves objective measures of usability or learnability. Adding customization certainly makes a system more complex and more difficult to learn. I suspect that if you were to take a user survey, more people than not would be in favor of lots of personalizable features … [but as] has been observed in a number of experiments, an interface that optimizes productivity is not necessarily an interface that optimises subjective ratings.”

See also: Avoid Preferences from Getting Real.

(I’m looking at you, Slack)

Array Controllers in Ember.js

An array controller is a wrapper for a collection of objects, and provides convenient methods for dealing with its contents.

An array controller’s model is typically set in a route, for example:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return [
      {name: 'red'},
      {name: 'yellow'},
      {name: 'blue'}
// (The Index ArrayController is setup implicitly)

Setting an array controller’s model sets up its content property, which forms the basis for other properties and methods.


arrangedContent is an important property, defined as “the array that the [array controller] pretends to be”. It provides a way for sorted/filtered content to be stored separately from the original content. In this way, sorting/filtering is not destructive, and the content (in its original form) can still be retrieved.

By default, when an array controller has no sortProperties, arrangedContent and content are the same. When sortProperties are added, the sorted content is stored in arrangedContent whilst the original content remains untouched.

It’s important to note that an array controller should be treated just like an array, with its items referencing those in arrangedContent. Accessing items on an array controller itself, is effectively the same as accessing items in arrangedContent (an important difference is discussed in below).

This is best illustrated with some examples. Given the route above, the following #each loops all result in the same output:

index template:

{{#each}} {{name}} {{/each}}

{{#each content}} {{name}} {{/each}}

{{#each arrangedContent}} {{name}} {{/each}}

Setting sortProperties results in sorted output from arrangedProperty and therefore from the array controller instance itself:

App.IndexController = Ember.ArrayController.extend({
  sortProperties: ['name']

index template:

{{!-- Sorted by name --}}
{{#each}} …

{{!-- Not Sorted --}}
{{#each content}} …

{{!-- Sorted by name --}}
{{#each arrangedContent}} …

Item Controllers

Adding an itemController property to an array controller wraps each item in an instance of the referenced controller. However, this only applies when accessing items through the array controller instance itself. Items accessed via arrangedContent or content remain unwrapped. This is the key difference when accessing items via arrangedContent versus accessing them via the array controller instance itself.

The following example demonstrates this concept:

App.IndexController = Ember.ArrayController.extend({
  itemController: 'color'

App.ColorController = Ember.ObjectController.extend({
  isActive: true

index template:

{{!-- Names rendered --}}
  {{#if isActive}} {{name}} {{/if}}

{{!-- Nothing rendered --}}
{{#each content}}
  {{#if isActive}} {{name}} {{/if}}

{{!-- Nothing rendered --}}
{{#each arrangedContent}}
  {{#if isActive}} {{name}} {{/if}}

Nothing is rendered in the loops that iterate over content or arrangedContent because the items are not wrapped in an item controller and therefore isActive is inaccessible.

{{#each itemController='…'}}

{{#each}} helpers, when supplied with an itemController property, wrap each item in a new instance of the referenced controller. This operates entirely independently from the itemController property on an array controller: an array controller will not have access to any item controller created via an {{#each}} helper.

This becomes particularly important when implementing a computed property on an array controller that depends on properties on an item controller. See the example.

For more information:


Man on bus holds old 1980s ghetto blaster

London, 2014

Don Norman’s Law

If you think something is clever and sophisticated beware—it is probably self-indulgence.

Don Norman The Psychology of Everyday Things

The Putter

A short film about assembling scissors at Ernest Wright and Son (via Vicki Turner).

David Shrigley Tableware

Absolutely love these pieces by David Shrigley for Soho’s Sketch restaurant. Seen in an interview with Shrigley in City A.M’s Bespoke magazine.

Salt and pepper shakers with 'Dust', 'Dirt', and 'Nothing' written on them Shrigley teapot and accessories

Bali 2014

A few thoughts and photos from my trip to Bali with Helen last month.

Sanur and Ubud

Our first stay was right on the beach, in the resort of Sanur. It’s a quiet place, particularly compared to Denpasar (the capital) and Ubud, our second destination…


The view from our hotel beach in Sanur, looking south. (Excuse the photo quality, it was taken on a disposable.)


The view at breakfast: a fisherman wading out at sea.

Ubud is further inland, about 40 minutes north of Sanur. It’s known for its arts scene and there were plenty of market stalls selling handcrafted goods. We of course took our chance to do a bit of bartering! (We bought a couple of kites and a small wooden owl!)


A market seller un Ubud prepares flower petals to sell for for Hindu offerings.

We stayed at Uma, a luxury hotel located a short distance from the centre. The whole experience was pretty amazing: the room, the food, and the pool were all top notch!


On our last morning we went on a short guided walk through the local rice fields in Ubud.


Hinduism is a huge part of Balinese life, so there are temples (Pura) and offerings everywhere. Many temples are in spectacular locations: on the edge of a cliff, on a lake, or on a rock heading out to sea.

Uluwatu Temple

Pura Luhur Uluwatu.


The Kecak dance at Pura Luhur Uluwatu.


Pura Ulun Danu Bratan.

Rice Fields

Rice fields make up a big part of the landscape in Bali. We hired a driver who took us on a trip round some windy mountain roads to check out the Jatiluwih rice terraces, the largest in Bali. The terraces were vast, and the views spectacular (unfortunately difficult to capture on camera!).

14-05_5798_olympus-mju-v_kodak-200-8_29 14-05_5798_olympus-mju-v_kodak-200-8_30


We went on a few guided tours to various places on the island. One of my favourites was a bike ride down a mountain. It was a great chance to explore some of the mountain villages that we’d previously driven through.


Overlooking a mountain village at the start of our bike ride. Those decorated arching bamboo poles (Penjor) were up to celebrate Galungan, an annual festival celebrating the victory of good over evil.

Dog’s Bollocks

The gentleman that let us have a tour of his house.


A girl at a coffee plantation.

We also went white water rafting, and snorkelling, which included a boat ride on one of these: 14-05_5803_kodak-disposable_kodak-disposable-800_24

Jukung boats at Padang Bai, where we explored the coral reef and swam with the fishes.


The food in Bali was pretty good. Lots of rice and some really good barbecued fish and meat. Unfortunately, no matter how careful we were with what we ate, we still managed to get a bout of Bali Belly, which was rather uncomfortable for the last few days of the holiday (and plane ride!). Luckily it didn’t really stop us from doing much.


Barbecued ribs at Naughty Nuri’s.


The bar at Naughty Nuri’s.


We saw quite a few of these mischievous monkeys, particularly around Uluwatu. They will grab almost anything (mostly sunglasses), even flip flops off your feet! Fortunately we had been forewarned, and left all our loose items in the car.


View more posts in the archive