Monday, 9 August 2010

Why would you give your music away for free?

Photo (cc) Matt McGee

You're an up and coming band. You're gonna get signed soon. You'll get played on the radio. You'll tour the world. You're gonna teach Nigel Godrich and Brian Eno a thing or two in the studio. You're gonna have many groupies scrabbling for pieces of your hair while you dash through the crowd into pyrotechnic glory on the biggest stages on the planet.

Your music is worth millions.

So why would you give it away for free?



Back in the 20th century, when recording technology was new, it was expensive. It was expensive to make recordings and it was expensive to distribute them. This meant that the means of production were controlled by a select few.

This recording technology was powerful. Never before had it been possible to expose so many people to the artistic output of a few small groups of individuals. That euphoria you see when you look at Elvis or The Beatles - the screaming, fainting teenage girls worked up into a breathless furore, experiencing excitement beyond excitement --- that's not all down to the talent of the artists. Part of it is the technological context. It's the outcome of the opportunities that the technology made available.

Those who control the means of production are in a comfortably lucrative position. They can hedge their bets, take risks, develop talent and go with their gut. (They are also in a position to ruthlessly exploit the artists from whose talent they profit, but that's not what I want to talk about here). They can be pretty sure that they can get a good return on their investment.

But now... now things are different.

Nobody controls the means of production. Nobody controls the distribution of art. Millions of enthusiasts now have access to music production technology that fifty years ago could not have been dreamt of. We don't even have to pay for it any more. We can get open source music software, tinker with it, improve it, and make sounds nobody in the universe has ever heard before. And to share our work we don't need to badger a record label or high profile DJ for a decade, we just put it on Facebook, SoundCloud, Myspace, Jamendo - wherever, and anybody in the world can hear it.

Image (cc) eckelon

But what does this mean for the artist? What does this mean for your band?

Well. It means that the golden era is over (if there ever was one). It means that there's really not anybody around who wants to take the risk to develop untried talent - the margins are too fine.

And there's another problem.

Production is free. Distribution is free. But attention is more expensive than ever.

When your average social networking site is host to the work of millions upon millions of bands, then how will anybody ever hear your work? You could come up with the next YouTube viral I suppose (though such work is not typically notable for its artistic merit per se). You could hire a marketing firm (might be a bit pricey). You could pay for some internet ads (actually surprisingly effective, but still costs a fair bit).

Attention is about copies getting made of something. It's about having something experienced by many minds. It's about people talking about something they've heard when a conversation happens to swing that way. It can be viral or it can be expensive, and it's usually the latter.

So when an opportunity comes along for several million copies of a song you've made to be distributed throughout the world, for free, then you should pay attention. 

I am talking about the Free Culture Showcase.

We have a rare opportunity here. How many other wealthy benefactors are there in the world who are willing to ship your work across the globe to millions of people for free? I'm not just talking about CDs here. Ubuntu gets factory installed on laptops, and those laptops go into homes, and when somebody first boots up the music player on their new computer, your song could be the first thing they hear. And they might just like it.

You just need one person in the world to give you that break. They might be a record producer with an ear for talent or they might be a technologist who needs some demo content for their free operating system.

So if you make music, get involved.

And don't just submit your B-sides, send your best song and get it heard.

Update: One more thing...

This isn't some 'unsigned band competition'. This is an opportunity for any band or producer to get some serious exposure, bedroom tinkerers and seasoned stadium rockers alike, whether you've got a few fans on myspace or a regular Rolling Stone cover story. Of course if you are signed, you'll have the added complication of getting your record label to agree to this. Point them here.

And please, if you're not a musician yourself, bring this blog post to the attention of anyone you might know (or even just met once) who you think has that gift.

Monday, 2 August 2010

Ubuntu Needs a New Sound Theme

After the success of the wallpaper competition, and with the
Free Culture Showcase's growing momentum, we are turning our attention to Ubuntu's sound theme. Since we're moving towards visually a slicker desktop theme, we'd like the sounds to fit
in. As much as we love you The Old Ubuntu Startup Sound, it's time to say goodbye.

We want to reduce the number of sounds you'll hear on a default Ubuntu installation, with an emphasis on making sound a usability feature instead of an annoyance. So we're clipping out things like 'button-pressed' and 'service-logout', and working towards shorter and less intrusive, more refined audio set.

Here's the brief

We need some sounds. Here's the list.

Desktop Ready
Your computer's booted up and it's waiting for your password. You might be in another room making a cup of tea so this sound can be a little bolder than our general minute-to-minute sounds.

Desktop Login 
This is the 'Ubuntu Startup Sound'. Please.. keep it short :)

Instant Messaging

When somebody wants your attention, you need to hear about this or you might miss them. We want a 'new conversation' sound that serves this purpose. We don't want foghorns or big intrusive sounds but something that cuts through the hubbub would be of benefit in this context. We'd want this 'new conversation' sound to be played once and then replaced with a much softer tone for subsequent messages. [Note that we may not be able to use the 'new conversation' sound straight away, but we'd like to get there and having the right sound will help push this]


Getting an email is nice. It should have a nice little sound.


Let's try to be careful here. Sometimes a subtle audio nudge is all that's needed to let the user know they tried to do something they weren't supposed to. We're not punishing here, and we're not training dogs, but sometimes a little audio cue can help people get back on track.

The Feeling

We want a theme that is subtle, restrained and professional. We want Ubuntu to have an air of distinction and maturity, and the sound theme is a big part of that.

Some Rules

  • We need flawless production quality and audio that is effective across output devices of a broad range of fidelity, from laptop speakers to hi-fi systems. 
  • Audio should be submitted in the following format:  44.1KHz 16 bit Wav. No compression required.
  • Submission of audio should be provided via a link to an uploaded zip, tar.gz or rar archive containing clearly labelled files
  • Ubuntu Code Of Conduct applies, no silliness.

When's the deadline?

Be ready in time for the next Ubuntu Developer Summit. UDS-N starts 25th October 2010 so we'll set the deadline one week sooner to give us a chance to consolidate everything.

The deadline is therefore:

Monday 18th October 2010

Send your submission by adding a link to this wiki page or contacting anyone in the Canonical Design Team via email or Twitter or whatever you like.

We'll have a session or two there where we collaboratively evaluate the various offerings. From these sessions we'll prepare a shortlist and then live with each of these sound themes for the next few weeks before picking a winner.

Friday, 11 June 2010

Quickly Run with a Ctrl+R Keyboard Shortcut in Gedit

I'm all about workflow, so the first thing I wanted to do when trying quickly was to make sure I could hit a keyboard shortcut to build and run from within my editor.

It was a bit fiddly, but here's something that works:

In Gedit go to Tools=>Manage External Tools...

Then add this:

Here's the code:

EHOME=`echo $HOME | sed "s/#/\#/"`
while test "$DIR" != "/"; do
    if [ -f "${DIR}/" ]; then
        echo "Using quickly from ${DIR}" | sed "s#$EHOME#~#" > /dev/stderr
        cd ${DIR}
        quickly run
    DIR=`dirname "${DIR}"`
echo "Couldn't find Quickly project folder!" > /dev/stderr

Hope this helps you too.

Wednesday, 24 March 2010

It's Ada Lovelace Day

I've always liked Ada. She was the first to see the musical potential of computers. Here, look at this old blog post in which I mention her. As proof! Homebrew Adventures ;)

A tip of my hat to Ada then. And tips all round to that small elite of nerdy girls who hold their own in a man's world.

Tuesday, 9 March 2010

OS X Ubuntu USB Creator

I've spent some time attempting to make a Cocoa that lets you burn an Ubuntu ISO to a USB memory stick on OS X.

I think I've got as far as I'm gonna get with it now, sadly.

How far I got...

  • The UI is pretty concise
  • A USB stick gets detected when plugged in
  • The right signal is sent to the dd process and parses the progress for the progress bar
Major outstanding issues

  • It's really SLOW. I'm not familiar with how the dd command line utility works -- people keep talking about 'eraseblocks' and suchlike and my eyes glaze over..
  • It doesn't detect and inform the user when the write is complete
  • It doesn't seem to create a bootable device
  • I can't see how to automatically remount a device after I've unmounted it with diskutil
  • I'm not amazingly confident that once I've detected the device a volume resides on I'm not then going to end up destroying all the data on the wrong drive 

It would be pretty awesome if you were able to help out.  

Friday, 5 March 2010

Making the computer work for YOU

Yukihiro Matsumoto put it better than I ever could: 
Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.
Ubuntu developers take note.

My experiences with the Ubuntu codebase so far have been that far too much emphasis is being placed on how the machine works, with little emphasis on modelling the real world or coming up with APIs and toolkits that work nicely from a human perspective.

We have driver code with giant switch statements to detect pin configurations of different chipsets on different motherboards, with new lines being hacked in whenever a new laptop comes out or some manufacturer decides to cut corners by wiring some connector to pin 3 instead of pin 2.

At the other end of the spectrum, we have inflexibly hacked UI code where any change to a view requires changes in two other files, often involving adding in mappings that could be implicitly determined or even removed entirely with a better approach to templating.

The phenotypical results of the underlying architectural problems are rife. My file-system suddenly became read-only yesterday. I hadn't done anything - I'd just walked across the room to talk to someone for two minutes. Sure, it's alpha, but seriously... how could this happen? Another time, during a UDS session while listening to something in my headphones, not realising until somebody told me that, embarrassingly, the sound was also coming from my laptop speakers. 

Craig Larman says this: "We do not build software. The bricks are laid when we hit compile. We are designers." We design the architecture. We design the interfaces. We invent ways to model reality in code.

If you write code by laying bricks - by placing one switch condition after another, you are not programming, you are doing what the computer should be doing. If you copy-and-paste, you are doing what the computer should be doing. 

Object-oriented code can be understood as a way of creating structures that allow the computer to reuse code across all the different places it needs to, allowing you to edit the code only ever in one place. If any change to an application's behaviour requires the same code to be edited in two places, then your code design is wrong. 

Dynamic languages vastly simplify the process of constructing concise code. In verbose languages like Java, C# or ActionScript 3, the programmer's intent is buried beneath layers of boilerplate code, braces, nestings and mappings (usually created automatically by the IDE these days). Python, Ruby, or even Processing, allow us to strip away all this noise and crystalise our intentions.

Michael Forrest's Three Rules of Programming

  1. Always start by defining your interface.  Never start with the implementation. Your interfaces and APIs should alway model your problem domain, NEVER the way the computer works
  2. Name things correctly. Never start typing until you have precisely the right method, variable or class name. You only have to type your code in once. You, and others, have to read it thousands of times.
  3. Annihilate hand-written repetitive code by writing scripts. If you cannot eliminate repetition in your application code or data files, always write a script to generate those files automatically, and never edit those files by hand.

Michael Forrest's Three Rules of Workflow

  1. Optimise your workflow. Make it so you can hit a single keyboard shortcut after any code change that will show you the results of that change within 4 seconds.
  2. Don't run automated tests manually. If you're not automatically running your tests, you're going to end up abandoning your tests.
  3. Version-control everything with a distributed VCS. I don't care if it's git, hg or bzr - if you're not using local version control, you cannot write good code.
Some examples from my own processes
  • When I write Java, I only ever generate method names by typing the call first, in context, and then letting Eclipse generate the function definition automatically with a keyboard shortcut. (P1)
  • I will stop and walk around for half an hour trying to think of the best name for a class or method, if one doesn't come to mind immediately,  even if the implementation is trivial, and my deadline is in an hour. If you don't do it straight away, you won't do it. No broken windows (to quote Larman again) (P2)
  • I will always optimise the readability of my xml file before writing the class that consumes it. (P1)
  • If the functionality of a method or class mutates over time, I will always use refactoring tools to rename it correctly (P2)
  • If there is a naming convention that can be used, I will build this in throughout my process. For a detailed example see this blog post, which I implore you to read: (P3) 
I await your feedback :)

Tuesday, 12 January 2010

Draggy Fists

It always feels dangerous to mess with the mouse pointer when working with Flash as it has a tendency to vanish entirely if you you miss a mouse eve due to the mouse button being released outside the Flash window.

This has resulted in my fake version of Ubuntu feeling more solid than the real thing in a way that I haven't put my finger on it until just now.

I just added the grabby-hand drag cursor when an icon is being dragged and it feels awful. I thought it might convey useful information but it just makes things feel cheap.

No thanks!
Yes please.

It's the same thing when dragging windows. I don't like it!

It's great to have the cursor show that a copy-action will be performed, or something will be deleted - there is a lot of scope for showing useful information in the mouse cursor. But we need to tone down the noise or it will drown.

So let's just have a normal pointer during drag operations. Can we, can we please?