tag:blogger.com,1999:blog-257313123359142302024-03-21T06:33:57.052-07:00Michael Forrest's Ubuntu BlogWork-related blog from Canonical Design Team GUI Prototyping Guy.Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-25731312335914230.post-25529263881112150492010-08-09T16:28:00.000-07:002010-08-10T02:16:01.701-07:00Why would you give your music away for free?<img src="http://farm1.static.flickr.com/39/76676870_50edadbfb7.jpg" /><br />
<a href="http://www.flickr.com/photos/pleeker/76676870/">Photo (cc) Matt McGee</a><br />
<br />
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 so...so many groupies scrabbling for pieces of your hair while you dash through the crowd into pyrotechnic glory on the biggest stages on the planet.<br />
<br />
Your music is worth millions.<br />
<br />
So why would you give it away for free?<br />
<br />
Why?<br />
<br />
Well.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
But now... now things are different.<br />
<br />
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.<br />
<br />
<img src="http://farm5.static.flickr.com/4119/4860923756_4fa1657836.jpg" /><br />
<a href="http://www.flickr.com/photos/eckelon/4860923756/"><span class="Apple-style-span" style="font-size: x-small;">Image (cc) eckelon</span></a><br />
<br />
But what does this mean for the artist? What does this mean for your band?<br />
<br />
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.<br />
<br />
And there's another problem.<br />
<br />
Production is free. Distribution is free. But <b>attention</b> is more expensive than ever.<br />
<br />
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 <i>artistic</i> 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).<br />
<br />
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.<br />
<br />
<b><span class="Apple-style-span" style="font-size: x-large;">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. </span></b><br />
<br />
I am talking about the <b>Free Culture Showcase</b>.<br />
<br />
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.<br />
<br />
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. <br />
<br />
So if you make music, get involved.<br />
<br />
And don't just submit your B-sides, <span class="Apple-style-span" style="font-size: x-large;">send your </span><i><span class="Apple-style-span" style="font-size: x-large;">best song</span></i><span class="Apple-style-span" style="font-size: x-large;"> and </span><i><span class="Apple-style-span" style="font-size: x-large;"><b>get it heard</b></span></i><span class="Apple-style-span" style="font-size: x-large;">.</span><br />
<br />
<a href="http://soundcloud.com/groups/ubuntu-free-culture-showcase">http://soundcloud.com/groups/ubuntu-free-culture-showcase</a><br />
<br />
<b>Update: One more thing...</b><br />
<b><br />
</b><br />
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.<br />
<br />
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.<div class="blogger-post-footer"><a style="font-size:50%" href="http://mikebuntu.blogspot.com">source: mikebuntu.blogger.com</a></div>Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.com0tag:blogger.com,1999:blog-25731312335914230.post-91218779208899064832010-08-02T10:07:00.000-07:002010-08-04T02:50:12.577-07:00Ubuntu Needs a New Sound Theme<div>After the success of the wallpaper competition, and with the<br />
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<br />
in. As much as we love you The Old Ubuntu Startup Sound, it's time to say goodbye.</div><br />
<div>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.</div><br />
<h3 style="font-size: 12pt;">Here's the brief</h3>We need some sounds. Here's the list.<br />
<br />
<table bgcolor="#FFF2CC" border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" id="o9um" style="border-collapse: collapse; font-size: 1em; line-height: inherit;"><tbody>
<tr style="text-align: left;"> <td width="100%"><br />
<div><b>Desktop Ready</b></div>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.<br />
<br />
<div><b>Desktop Login </b></div>This is the 'Ubuntu Startup Sound'. Please.. keep it short :)<br />
<br />
<div><b>Instant Messaging</b></div><br />
<div>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]<br />
<br />
</div><b>Email</b><br />
<br />
<div>Getting an email is nice. It should have a nice little sound.</div><br />
<div><b>Error</b></div><br />
<div>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.</div></td> </tr>
</tbody> </table><br />
<h3 style="font-size: 12pt;">The Feeling</h3>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.<br />
<h3 style="font-size: 12pt;">Some Rules</h3><ul><li>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. </li>
<li>Audio should be submitted in the following format: 44.1KHz 16 bit Wav. No compression required.</li>
<li>Submission of audio should be provided via a <b>link to an uploaded zip, tar.gz or rar archive</b> <b>containing clearly labelled files</b>. </li>
<li>Ubuntu Code Of Conduct applies, no silliness.</li>
</ul><h3 style="font-size: 12pt;"><span style="font-size: small;">When's the deadline?</span></h3>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.<br />
<br />
<div><b>The deadline is therefore:</b><br />
<b><br />
</b></div><b><span style="font-size: x-large;">Monday 18th October 2010</span></b><br />
<br />
<div>Send your submission by adding a link to <a href="https://wiki.ubuntu.com/Design/SoundTheme/Submissions-11-04">this wiki page</a> or contacting anyone in the Canonical Design Team via email or Twitter or whatever you like.<br />
<br />
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.<br />
<br />
<br />
</div><div class="blogger-post-footer"><a style="font-size:50%" href="http://mikebuntu.blogspot.com">source: mikebuntu.blogger.com</a></div>Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.com8tag:blogger.com,1999:blog-25731312335914230.post-48172730325968910882010-06-11T02:20:00.000-07:002010-07-09T04:33:25.769-07:00Quickly Run with a Ctrl+R Keyboard Shortcut in GeditI'm all about workflow, so the first thing I wanted to do when trying <a href="http://launchpad.net/quickly">quickly</a> was to make sure I could hit a keyboard shortcut to build and run from within my editor.<br />
<br />
It was a bit fiddly, but here's something that works:<br />
<br />
In Gedit go to Tools=>Manage External Tools...<br />
<br />
Then add this:<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhYLcg6S7m58sYuZceNg-spWAQ0LiBUhCozR5g1PYd769kjP2EVsnPVa5pb8kfQztponad8BDVwKYAHw5Tm9DpQcTxiEaYybHzG1XGi1e8qWs_FL-jaSWzpZc9O7yeiFXmN3ql6TzjJA/s1600/Screenshot-External+Tools+Manager-1.png" ><img border="0" style="width:500px" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhYLcg6S7m58sYuZceNg-spWAQ0LiBUhCozR5g1PYd769kjP2EVsnPVa5pb8kfQztponad8BDVwKYAHw5Tm9DpQcTxiEaYybHzG1XGi1e8qWs_FL-jaSWzpZc9O7yeiFXmN3ql6TzjJA/+Tools+Manager-1.png" /></a><br />
<br />
<br />
Here's the code:<br />
<br />
<pre>#!/bin/sh
EHOME=`echo $HOME | sed "s/#/\#/"`
DIR=$GEDIT_CURRENT_DOCUMENT_DIR
while test "$DIR" != "/"; do
if [ -f "${DIR}/setup.py" ]; then
echo "Using quickly from ${DIR}" | sed "s#$EHOME#~#" > /dev/stderr
cd ${DIR}
quickly run
exit
fi
DIR=`dirname "${DIR}"`
done
echo "Couldn't find Quickly project folder!" > /dev/stderr
</pre><br />
Hope this helps you too.<div class="blogger-post-footer"><a style="font-size:50%" href="http://mikebuntu.blogspot.com">source: mikebuntu.blogger.com</a></div>Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.com0tag:blogger.com,1999:blog-25731312335914230.post-27597387084448365732010-03-24T04:31:00.000-07:002010-07-09T04:34:19.134-07:00It's Ada Lovelace DayI'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! <a href="http://grimaceworks.com/blog/296_Homebrew+Adventures">Homebrew Adventures</a> ;)<br />
<br />
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.<div class="blogger-post-footer"><a style="font-size:50%" href="http://mikebuntu.blogspot.com">source: mikebuntu.blogger.com</a></div>Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.com0tag:blogger.com,1999:blog-25731312335914230.post-57641061674207584212010-03-09T10:14:00.000-08:002010-07-09T04:33:45.432-07:00OS X Ubuntu USB CreatorI've spent some time attempting to make a Cocoa that lets you burn an Ubuntu ISO to a USB memory stick on OS X.<br />
<br />
I think I've got as far as I'm gonna get with it now, sadly.<br />
<br />
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIah8bCqPi-Cit6W5cnncBbXJneQLERQ_7EcGIJzFN9RkgLxOCdZFc2Ngc-JVWsgpKwFYiFi99RD2c_D9TD0qv1Z2rNimc4ptQD7omIwkItITafPNltOi8yVOstJMjGYwYYWdi2YWS1w/s400/Screen+shot+2010-03-09+at+18.07.26.png" /><br />
<span class="Apple-style-span" style="font-size: 19px; font-weight: bold;">How far I got...</span><br />
<br />
<ul><li>The UI is pretty concise</li>
<li>A USB stick gets detected when plugged in</li>
<li>The right signal is sent to the dd process and parses the progress for the progress bar</li>
</ul><span class="Apple-style-span" style="font-size: 19px; font-weight: bold;">Major outstanding issues</span><br />
<br />
<ul><li>It's really <i>SLOW</i>. I'm not familiar with how the dd command line utility works -- people keep talking about 'eraseblocks' and suchlike and my eyes glaze over..</li>
<li>It doesn't detect and inform the user when the write is complete</li>
<li>It doesn't seem to create a bootable device</li>
<li>I can't see how to automatically remount a device after I've unmounted it with diskutil</li>
<li>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 </li>
</ul><div>The project is on Launchpad here: <a href="https://code.launchpad.net/~michaelforrest/ubuntuusbcreator-osx/trunk">https://code.launchpad.net/~michaelforrest/ubuntuusbcreator-osx/trunk</a></div><div><br />
</div><div>It would be pretty awesome if you were able to help out. </div><div class="blogger-post-footer"><a style="font-size:50%" href="http://mikebuntu.blogspot.com">source: mikebuntu.blogger.com</a></div>Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.com9tag:blogger.com,1999:blog-25731312335914230.post-44021310842346116502010-03-05T04:15:00.000-08:002010-07-09T04:32:26.269-07:00Making the computer work for YOU<span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"><a href="http://en.wikipedia.org/wiki/Yukihiro_Matsumoto">Yukihiro Matsumoto</a> put it better than I ever could: </span><br />
<blockquote><span class="Apple-style-span" style="font-family: inherit;">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.</span></blockquote><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: sans-serif; font-size: 15px; line-height: 22px;">Ubuntu developers take note.</span><br />
<span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: sans-serif; font-size: 15px; line-height: 22px;"><br />
</span><br />
<span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: sans-serif; font-size: 15px; line-height: 22px;">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.</span><br />
<span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: sans-serif; font-size: 15px; line-height: 22px;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;">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.</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;">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.</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;">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. </span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><a href="http://en.wikipedia.org/wiki/Craig_Larman">Craig Larman</a> says this: "We do not <i>build</i> software. The bricks are laid when we hit compile. We are <i>designers</i>." We design the architecture. We design the interfaces. We invent ways to model reality in code.</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;">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. </span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;">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. </span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;">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.</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><b>Michael Forrest's Three Rules of Programming</b></span></span><br />
<br />
<ol><li><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><b>Always start by defining your interface. </b> Never start with the implementation. <i>Your interfaces and APIs should alway model your problem domain, NEVER the way the computer works</i></span></span></li>
<li><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><b>Name things correctly</b>. Never start typing until you have precisely the right method, variable or class name. <i>You only have to type your code in once. You, and others, have to read it thousands of times.</i></span></span></li>
<li><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><b>Annihilate hand-written repetitive code by writing scripts. </b>If you cannot eliminate repetition in your application code or data files, always write a script to generate those files automatically, and <i>never</i> edit those files by hand.</span></span></li>
</ol><br />
<span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><b>Michael Forrest's Three Rules of Workflow</b></span></span><br />
<br />
<ol><li><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><b>Optimise your workflow.</b> 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.</span></span></li>
<li><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><b>Don't run automated tests manually</b>. If you're not automatically running your tests, you're going to end up abandoning your tests.</span></span></li>
<li><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><b>Version-control everything with a distributed VCS.</b> I don't care if it's git, hg or bzr - if you're not using local version control, you <i>cannot </i>write good code.</span></span></li>
</ol><div><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><i>Some examples from my own processes</i></span></span></div><div><ul><li><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: sans-serif; font-size: 15px; line-height: 22px;">When I write Java, I <i>only</i> 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)</span></li>
<li><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: sans-serif; font-size: 15px; line-height: 22px;">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. <i>No broken windows </i>(to quote Larman again) (P2)</span></li>
<li><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: sans-serif; font-size: 15px; line-height: 22px;">I will always optimise the readability of my xml file before writing the class that consumes it. (P1)</span></li>
<li><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: sans-serif; font-size: 15px; line-height: 22px;">If the functionality of a method or class mutates over time, I will always use refactoring tools to rename it correctly (P2)</span></li>
<li><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;">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: <a href="http://michaelforrest-code.blogspot.com/2009/03/naming-conventions-and-asset-management.html">http://michaelforrest-code.blogspot.com/2009/03/naming-conventions-and-asset-management.html</a> (P3) </span></span></li>
</ul><div><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;">I await your feedback :)</span></span></div></div><div><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><br />
</span></span></div><div><span class="Apple-style-span" style="font-family: sans-serif; font-size: medium;"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-size: 15px; line-height: 22px;"><br />
</span></span></div><div class="blogger-post-footer"><a style="font-size:50%" href="http://mikebuntu.blogspot.com">source: mikebuntu.blogger.com</a></div>Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.com6tag:blogger.com,1999:blog-25731312335914230.post-77363323258296608932010-01-12T07:00:00.000-08:002010-07-09T04:33:10.695-07:00Draggy FistsIt 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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
<br />
<table><tbody>
<tr> <td><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsQyvBU72WHRb30DcRXtRanFqFEv7Kde2Rx4vxE9gW0az4F83xKWbPp1kgiw2X8q0t_A6shQeUIxQTfPXSEJ-yIULmtMf7lGdTiAW3EvajeAzzTWD_mvvo35f24IH7TzXJ6Iy_eL4q-g/s320/Screen+shot+2010-01-12+at+14.54.37.png" /><br />
</td> <td><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbF4LARkldQI78-odj29DOAQXtdzcnTbEaFnuHZd_EFZ9Jg5J-pMiPtYAIhBPEgljgjg8alhPH6OPAWXSLq7Qjf7tPaDcyjVCBUGYYb-sDFHmwsTvoxIl0Bi54qcGucwKA1WRD-0F1fA/s320/Screen+shot+2010-01-12+at+14.54.48.png" /><br />
</td></tr>
<tr><td><span style="color: #cc0000;">No thanks!</span><br />
</td><td><span style="color: #38761d;">Yes please.</span><br />
</td></tr>
</tbody></table><br />
It's the same thing when dragging windows. I don't like it!<br />
<br />
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.<br />
<br />
So let's just have a normal pointer during drag operations. Can we, can we please?<br />
<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/O9o5yfBP4jk&hl=en_GB&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/O9o5yfBP4jk&hl=en_GB&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><div class="blogger-post-footer"><a style="font-size:50%" href="http://mikebuntu.blogspot.com">source: mikebuntu.blogger.com</a></div>Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.com0tag:blogger.com,1999:blog-25731312335914230.post-24449632611728048752009-09-29T04:47:00.000-07:002010-07-09T04:33:18.779-07:00On the Ubuntu 9.10 default wallpaperThe first thing I did after installing Ubuntu 9.04 was to head straight for the Appearance settings to choose a desktop picture. Here's what I was offered:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih3xJKMVV4fjA0VL_pi99xas9B4g3oHz0r_t6nfCbdgJTyyrjDPLbBajguwG79z_vxmpsnCepArYO9BcwM-5l431IDPrrkIuIdVrehZCD8APFTSaHzApJns3XTlwj2ktP5Nx52ly1H-A/s1600-h/Screenshot-Appearance+Preferences.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 357px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih3xJKMVV4fjA0VL_pi99xas9B4g3oHz0r_t6nfCbdgJTyyrjDPLbBajguwG79z_vxmpsnCepArYO9BcwM-5l431IDPrrkIuIdVrehZCD8APFTSaHzApJns3XTlwj2ktP5Nx52ly1H-A/s400/Screenshot-Appearance+Preferences.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5386871008086943874" /></a><br /><br />Naturally, a panic ensued while I tried to work out how to synchronise filesystems between OS X and the VirtualBox Ubuntu installation so I didn't have to drown in brown every time I looked at Ubuntu.<br /><br />For Ubuntu 9.10 we asked people to submit images on <a href="http://www.flickr.com/groups/ubuntu-artwork">Flickr</a>, and selected 19 of these for inclusion on the CD. Here's what you get now:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDbtOBZxvhXhZC2nTzXlU3Bwu2xaqhMwHlWOXHXSCTuqXS4ROcRuLR5q739XQTyqoA0onofWHU4HA8Jd8FgI0ye7NpT9wGhcj90L3r55A9d-JD9u4043YIuNVytwYr9fQ1hyzjxGAMJg/s1600-h/backgrounds_window.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 281px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDbtOBZxvhXhZC2nTzXlU3Bwu2xaqhMwHlWOXHXSCTuqXS4ROcRuLR5q739XQTyqoA0onofWHU4HA8Jd8FgI0ye7NpT9wGhcj90L3r55A9d-JD9u4043YIuNVytwYr9fQ1hyzjxGAMJg/s400/backgrounds_window.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5386875277709843602" /></a><br /><br />Much nicer. <br /><br />Here's the default appearance on 9.04 and then 9.10.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFwes4RZwb91ALqMslMC07TLoJUu5vmLkllchKawMJ5-7mvNLvMtIJWZRC3hhHrXmMPXhsG8Rwtb0e9dU-faC8t7KChGc5bsJYREFOIRxxTV5HcqjJDl9FRmX9WgIffDo5J9J1zG_t7Q/s1600-h/jaunty_desktop.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 261px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFwes4RZwb91ALqMslMC07TLoJUu5vmLkllchKawMJ5-7mvNLvMtIJWZRC3hhHrXmMPXhsG8Rwtb0e9dU-faC8t7KChGc5bsJYREFOIRxxTV5HcqjJDl9FRmX9WgIffDo5J9J1zG_t7Q/s400/jaunty_desktop.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5386881320311549026" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUjG3Mc_7wnY6OOZDMtSYU0Apa_Q49-ywtfUrTMbyFgt9qW9eMf0p3X0Wk0HNGVVe46lEAIPZUthNo2QiKFdN8bqzUyoojkpA2Ro8_QsVCR1jc4PzzfY8edDAXiPsACpYTwmfHfyplNg/s1600-h/desktop.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 250px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUjG3Mc_7wnY6OOZDMtSYU0Apa_Q49-ywtfUrTMbyFgt9qW9eMf0p3X0Wk0HNGVVe46lEAIPZUthNo2QiKFdN8bqzUyoojkpA2Ro8_QsVCR1jc4PzzfY8edDAXiPsACpYTwmfHfyplNg/s400/desktop.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5386877304366581026" /></a><br /><br />It's not a quantum leap, but it feels like the lights have been turned on. The new default background is an organic version of the previous one - warmed up and subtly intriguing. The icons have been smartened up, the window title bar is darker yet somehow less intrusive, the 'panel' icons (top-right) are monochrome, and generally colour is being used more where it means something and less where it only adds visual noise.<br /><br />I feel that we've managed to move things forward. There is a lot of work to do on a million other aspects of Ubuntu so I hope people won't get fixated on things like the default desktop too much - these are matters of taste and there are no correct answers - you have to trust that we have a long-term vision and that decisions are made to move things in a certain direction. We don't think you'll be disappointed when things really start to come through over the next few releases.<div class="blogger-post-footer"><a style="font-size:50%" href="http://mikebuntu.blogspot.com">source: mikebuntu.blogger.com</a></div>Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.com5tag:blogger.com,1999:blog-25731312335914230.post-84238630551660216702009-09-29T03:04:00.000-07:002009-09-29T04:47:32.578-07:00So.. I got this new job..I always planned to make my millions and then spend them philanthropically, on a technological venture. Nanotech, bioengineering or artificial intelligence - some scientific enterprise for the benefit of humankind. <br /><br />Earlier this year, when the credit crunch was in full swing and I was never sure how my rent would get paid, and my creative attention continued to fracture and fray with a new idea coming every few days - ideas never really completed to perfection and production continuing to gravitate to 'proofs of concept' instead of actual works of art, earlier this year when loan terms were shouting out my dreams, and compromise (awful compromise) could no longer be avoided, earlier this year, all of a sudden, I received a phone call from a <a href="http://www.ivankamajic.com">balkan witch</a>. <br /><br />Ivanka (she's not really a witch) said she was putting together a team at a company called 'Canonical'. I'd heard through mutual friends that she was involved in some sort of altruistically-oriented company, and I'd seen a photo of the impressive view from her new office via Twitter. I didn't know that much about what she was actually doing.<br /><br /><a href="http://canonical.com">Canonical</a> is the commercial sponsor of <a href="http://ubuntu.com">Ubuntu</a>. Ubuntu is an operating system, like Windows (blaaaaargh) or OS X, but <em>free</em> and open-source (source as in source code, which means you can read or change the source code if you want, which you can't do that with commercial operating-systems as they think that they need to keep their source code secret so nobody can steal their work). I had been using Ubuntu as a Windows replacement on my home computer and second work laptop for a couple of years, so I knew what it was. Actually, I didn't really <em>use</em> it (I used, and still use, a Mac) - I ran certain applications on it and it had Windows XP on a VMware instance (this is how you should run Windows - as a virtual machine in a little sandboxed window, where it can't do any damage and its incessant idiotic securlty warnings become a source of mild amusement instead of irritated, impotent frustration). I had seen Ubuntu run productively as a primary operating system by <a href="http://www.experimeme.net/">one of the developers</a> in my team at LBi, so I knew it could work well (if you were sufficiently motivated to run an open-source operating-system). <br /><br />Canonical was started by Mark Shuttleworth, who made an absolute <em>shit-load</em> of money in the dot com boom. I tell people he invented the little padlock in your web-browser that lets you shop online. Obviously it's a bit more complicated than that. If you're interested, read his <a href="http://en.wikipedia.org/wiki/Mark_Shuttleworth">wikipedia entry</a>. Canonical is not your run-of-the-mill short-term-profit-oriented company. Mark wants to make something that will last, with the highest possible quality, and give it away for free. Windows isn't even on the map here - the idea is to compete with Apple and make the <em>best</em> operating system.<br /><br />So, was I interested? Well. It would certainly be a detour. I had quit my Flash job a year earlier in search of something more meaningful, in search of a way to make money from art. The thought of abandoning this plan made me very sad. I did not want to feel I was admitting defeat. But there were many upsides. I liked the idea of working with Ivanka. I liked the idea of meeting Mark (he's been to space, which is reason enough to want to meet him). I really liked the idea of learning from Mark - to see how he was making a techno-philanthropy project work in real life. The opportunity to be part of a design team instead of a technical team was also novel (albeit scary). So I decided that it chimed well with my long-term plans and would be a good way to spend my early thirties while my artistic enterprises baked away in the background. So, following an enjoyable job interview, I signed up.<br /><br />So here I am. I'm back doing Flash (after a frantic couple of weeks trying desparately to find a better way to produce prototypes than with Flash). I'm making a fake version of Ubuntu in which we prototype user interaction designs, and I'm working with some very good people. And finally, after a few months of intensity learning about how everything fits together, I'm ready to start talking about it. Because there are a great many things that need to be proposed, discussed, defended, developed and denied.<div class="blogger-post-footer"><a style="font-size:50%" href="http://mikebuntu.blogspot.com">source: mikebuntu.blogger.com</a></div>Michael Forresthttp://www.blogger.com/profile/02119796434211161732noreply@blogger.com0