Music: buy it, don't stream it.

Streaming music services make it trivially easy to have access to more music than you could ever need: virtually the entire output of Earth's musicians, thousands of hours added every day, a near-infinite cornucopia of sound. Awesome, no?


I want to convince you that the old way – buying music, either digitally or on physical media, and all the limitations that implies – is better. Not just better for musicians – which it certainly is – but better for you.

Buying music forces you to ask yourself if you'll enjoy it enough to make the purchase worthwhile: the cost prompts you to consider the return on investment. That means thinking about what you like, and why you like it, and in doing so you learn something about yourself. What kind of person are you? Do you need comfort, cheer, inspiration, excitement? Do you have anger to express, regrets to consider, love to give? What needs does this music address?

Buying music encourages you to get value from that purchase by repeated listening, and in doing so gives you the opportunity to discover new depths in the music, depths you wouldn't appreciate if you weren't committing to it. When the music fails to deliver – when it's disappointing, when the album has two good tracks and ten of filler, when two times through is enough – that tells you something too. Learn from your mistakes. 

Ideally, you end up with a relatively small amount of music you love, not a functionally infinite amount of music, some of which you like. However you listen, you'll still only explore a minute fraction of all the music out there: as with all experiences, it should be not about trying to minimise the amount you're missing out on – which is, inevitably, almost everything – as much as maximising the value of that you do experience.

Pictures from an exhibition

We held an open studio on Friday night: Sandra presented her sound installation, Arzu a video she made using images from her previous show, and I showed a bunch of prints and animations from the last month of work. Thanks to everyone who came out on a cold night, and to Heiddi for the photography. And of course thanks to Marina and  Sam from Fjúk who made it possible.

Geospheric 5: Core Sample

Readying my tiny prints for exhibition on Friday. I'm showing them in groups of 16: today I'm printing close-ups of the core. Thinking I'd love to turn this into a procedural landscape generator, low-poly Turner atmospherics of mountains and volcanoes.

Geospheric 3: Attractors, aurora, daylight

The wind-pattern simulation is challenging to get right: I refactored my code to give me a more flexible way to build "attractors" – nodes which push wind this way or that – and to be able to easily adjust their parameters in real time. That makes it much easier to balance the effects of multiple attractors. After I've finished this piece I'll do some more work using this new particle system. 

I've also done a first pass on building the aurora. I need to give it more size variation: at present all aurora particles are the same size, and they all go from white to green to red – that's not how the actual aurora looks. More work on that tonight.

I've build a daylight setting which lowers the brightness n the night side for the core/mantle/crust elements, and I've been exploring larger sizes for those elements. It gets quite exciting as the triangles get larger.

Geospheric 2: atmosphere

I want to explore how the earth has characteristic weather patterns, prevailing winds which go in different directions at different latitudes. (I'm not rendering any land masses for this project, so the (considerable) effect of the continents on wind patterns isn't something I'll do). 

I can create a simplified model of the Earth's atmospheric circulation by creating fields which impart vectors at different latitudes. The fields need to impart more energy at their centre and tail off at the edges: which Wikipedia and, tell me is a normal or Gaussian distribution.

Five of these fields, placed at the centre of the five main prevailing currents turn 6,000 randomly placed particles into a reasonable approximation of large-scale wind patterns. There are a bunch of complexities to deal with (for example, when a particle is travelling northwards and reaches the pole, I have to flip its longitude by 180° and invert the latitude vector) and I'm not showing particles on the "dark side" of the earth away from the camera. I still need to work on the display of the faster particles, but even so the effect is quite appealing.

Calculating and rendering 6000 particles is less CPU-intensive than putting 2000 random triangles on the screen for the other spheres. I can get 30fps just fine: rendering to screen is much more expensive than maths, even "hard" maths like trigonometry and square roots.

I know you want a gif.

Work in progress: Geospheric

Iceland is explicitly geological. Earthquakes and volcanoes, mountains, glaciers, geysers, the aurora: our precarious existence on an only moderately stable rocky sphere is everywhere apparent.

I'm exploring the concentric spheres of geological activity: the inner and outer core, the lower and upper mantle, the crust riding on top: and above that the atmosphere and the ionosphere, where the magnetic field generated in the core interacts with the solar wind to produce the aurora. 

Main challenge here is rendering time. I'm trying to build this as a live-rendered animation: at 25 frames per second I only have 40 milliseconds to output c. 10,000 elements. Send more computing power!

New series: Weft

In general I'm interested in emergent patterns created by multiples: simple shapes or movements, iterated hundreds or thousands of times. Waves, snowdrifts, flocks of starlings, schools of fish: each element follows simple rules, but the overall effect can be complex, surprising, beautiful. 

For this series I want to explore that way that translucent fabric drapes, folds over itself. Each "thread" is a simple bezier curve with four control points. Each point has a semirandom vector which evolves over a thousand threads, and I render two pieces with random colours.

As with Orrery, my approach is to render hundreds of images and edit a selection. As I refine the process I should get more "successful" renders, although even now my yield is better than 10%. These images are challenging to print: moiré patterns and oversaturation are a problem. Printing straight from PDF tends to create too much opacity: PDF->PNG at 300(printed)ppi seems to give the best results so far.

Orrery 6: Prints!

Getting digital work out of the computer and into the real world isn't trivial. I've lugged a 2.5kg projector halfway across the world, and I've also send six of the Diurnal images to Fracture to be printed on glass. Both ways are pretty expensive.

For Orrery, I'm starting small: I purchased a Canon Selphy photo printer, delivered in two days from Reykjavik. It's a cute little printer optimised for printing 100 x 148mm snapshot-sized colour photographs. It does what it does well, at the cost of flexibility and consumables: once you've purchased the printer itself (~26,000 Icelandic kronur, c. 200 Euros), a 108-print paper + ink set costs ISK6900/ ~50 Euros, or < 50 Eurocents per print. That's not bad for nice-quality small prints, done in about a minute each in the comfort of your room.

Orrery 5: Randomness, Recoverable

Stepping away from the computer as always produces new ideas. While running, I realised that I could dramatically improve my figure-yield by changing the way I randomise the orbital characteristics: instead of just multiplying each of the six parameters by a random value (between, say 0.999 and 1.001) each time, I can precalculate a random walk of values for each parameter which is guaranteed to return to 0 by:

  • generating a randomised set half of [total iterations] long;
  • copying it & multiplying each element in the copied set by -1;
  • shuffling the full-length set.

C. 50,000 random values later, done! Works well, and allows me to explore some higher-randomness spaces with reasonable yields (I still don't get 100% yield: not sure if it's accumulated floating-point errors or some other issue). 

Five rows in the figures below, with descending mutation values: from 0.005 in the first row to 0.001 in the last. Interesting to see how somewhere between 0.003 and 0.002 it becomes "rational".

Orrery 4: Only The Fit Survive

Extending my exploration of randomness. Reducing the mutation values to two-one-thousandths of their previous values yields almost perfect figures, but nine out of ten fail to reconnect at the end of the orbit. By comparing moonlet positions at start and end and writing out only those where the absolute x + y delta is < 2 pixels, I can render out about three "successful" slightly-mutated figures per minute.