<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><description>Gavin Montague is a web developer working in Glasgow, Scotland.</description><title>Cerebrum</title><generator>Tumblr (3.0; @leftbrained)</generator><link>http://cerebrum.leftbrained.co.uk/</link><item><title>Disabling iPhone backups</title><description>&lt;p&gt;iPhone applications like &lt;a href="http://www.magnetismstudios.com/FileMagnet"&gt;FileMagnet&lt;/a&gt; and &lt;a href="http://veiosoft.com/"&gt;DataCase&lt;/a&gt; have made me a happy camper. Those 350Mb of PDFs that I’ve never got round to reading are all now waiting for the delayed trains, delayed meetings, and occasional trips to the toilet that pepper my day. The iPhone’s a surprisingly decent e-book reader; I wouldn’t want to read War and Peace on it, but it’s good enough for 20-30 minute sessions.&lt;/p&gt;
&lt;p&gt;It seems however that Apple didn’t consider people might use their iPhones to store large numbers of files.  Each time I connected to iTunes the &lt;i&gt;entire contents&lt;/i&gt; of my phone was backed up regardless of the fact that no changes have been made since the last sync.  A full backup and sync was taking in the order of three to four hours.&lt;/p&gt;
&lt;p&gt;Terminal to the rescue:&lt;/p&gt;
&lt;pre&gt;defaults write com.apple.iTunes DeviceBackupsDisabled -bool true&lt;/pre&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/46585839</link><guid>http://cerebrum.leftbrained.co.uk/post/46585839</guid><pubDate>Tue, 19 Aug 2008 19:53:35 +0100</pubDate></item><item><title>Announcing NSScotland</title><description>&lt;p&gt;&lt;a href="http://www.nsscotland.com"&gt;&lt;img src="http://www.leftbrained.co.uk/images/posts/nsscotland.jpg" class="block" alt="NSScotland - like a sewing circle but with cooler laptops"/&gt;&lt;/a&gt;I don’t think there’s ever been a better time to be a Mac developer.&lt;/p&gt;

&lt;p&gt;Market share is up; the mobile world is starting to get interesting; the cock-up that is Vista has rattled faith in Microsoft and Apple finally seem to be making a play for the gaming and enterprise markets.&lt;/p&gt;

&lt;p&gt;With all that in mind, I’d like to announce &lt;a href="http://www.nsscotland.com/"&gt;NSScotland&lt;/a&gt;.  The plan is to organize a Mac-centric developer group in Scotland with regular talks and sessions.  There’re plenty of resources online if you’re into Cocoa or iPhone hacking but sometimes you just need to sit down and thrash out an idea over beer and some pizza: that’s what I’m hoping NSScotland can provide.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179284</link><guid>http://cerebrum.leftbrained.co.uk/post/41179284</guid><pubDate>Tue, 25 Mar 2008 21:54:00 +0000</pubDate><category>Apple</category><category>Cocoa</category><category>NSScotland</category><category>OS X</category><category>pet project</category><category>seminars</category></item><item><title>Mass attribute assignment in Rails</title><description>&lt;p&gt;Over on &lt;a href="http://b.lesseverything.com/2008/3/11/use-attr_protected-or-we-will-hack-you"&gt;less everything&lt;/a&gt;,
Steven Bristol makes the very good point that Ruby on Rails’ mass-assignment shortcut can be horrible, horrible
security hole.  In many ways it’s a modern version of PHP’s &lt;a href="http://uk.php.net/manual/en/security.globals.php"&gt;register globals&lt;/a&gt; setting and most of us remember what became of that “feature”.&lt;/p&gt;

&lt;p&gt;I do disagree with him on one point though; where he favours explicitly &lt;em&gt;hiding&lt;/em&gt; attributes with &lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001390"&gt;attr_protected&lt;/a&gt; I’d much rather people started with everything hidden and chose to explicitly &lt;em&gt;expose&lt;/em&gt; attributes with &lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001391"&gt;attr_accessible&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This has long been a bugbear of mine with Rails. So much so that the first plugin I wrote was explicit_assignment.rb, below&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
class ActiveRecord::Base
	attr_accessible
end
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;That might not look like much but it’s three powerful lines of code.&lt;/p&gt;

&lt;p&gt;Calling attr_accessible with no parameters in Base effectively means all application models start life completely ignoring calls to model.attributes = attrs.  If I want to use mass-assignment for any value I have to specifically ask for it.&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
class AppModel &lt; ActiveRecord::Base
	attr_accessible :a_small_series, :of_accessible, :attribute_values
end
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;The only issue I’ve had is that this does tend to screw up a number plugin models that rely on mass-assignment.  In this case all you have to do is read through all the plugins you use, make judgment calls on what should be accessible and update accordingly.  What?  You mean you don’t read every line of evey plugin you use?  Nah, me neither, so I usually just change the explicit_assigment plugin to:&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
class AccessibleRecord &lt; ActiveRecord::Base
	self.abstract_class = true
	attr_accessible
end
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;I then subclass all my application models from AccessibleRecord.&lt;/p&gt;

&lt;p&gt;Yes, this is perhaps a bit verbose for a framework that prizes terseness and DRYness above all else but, if you value security too, I think it’s worth the extra text.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179281</link><guid>http://cerebrum.leftbrained.co.uk/post/41179281</guid><pubDate>Wed, 19 Mar 2008 21:49:00 +0000</pubDate><category>Ruby on Rails</category><category>security</category><category>web development</category></item><item><title>Scotland on Rails</title><description>&lt;img src="http://www.leftbrained.co.uk/images/posts/scotland_on_rails.png" class="block borderless" alt="Scotland On Rails"/&gt;&lt;a href="http://www.scotlandonrails.com"&gt;Scotland on Rails&lt;/a&gt; has now opened for &lt;a href="http://scotlandonrails.com/register"&gt;registrations&lt;/a&gt;.  If you can get to Edinburgh on the 4th and 5th of April it’s definitely worth a look.</description><link>http://cerebrum.leftbrained.co.uk/post/41179277</link><guid>http://cerebrum.leftbrained.co.uk/post/41179277</guid><pubDate>Fri, 15 Feb 2008 12:20:00 +0000</pubDate><category>Conferences</category><category>Ruby</category><category>Scotland on Rails</category><category>web development</category></item><item><title>NetNewsWire</title><description>&lt;p&gt;It seems &lt;a href="http://www.leftbrained.co.uk/archive/2007/09/19/forgot-your-password-no-worries"&gt;my misgivings about NetNewsWire&lt;/a&gt; are now redundant.  I’m not going to use a system that stores plaintext passwords
&lt;em&gt;and&lt;/em&gt; payment details but I don’t have the any qualms about using a &lt;a href="http://www.rassoc.com/gregr/weblog/2008/01/09/newsgators-rss-clients-are-now-free/"&gt;free service or app&lt;/a&gt; with a big-ass security hole in it.&lt;/p&gt;

&lt;p&gt;I’ve shifted back from &lt;a href="http://www.opencommunity.co.uk/vienna2.php"&gt;Vienna&lt;/a&gt; to &lt;a href="http://www.newsgator.com/Individuals/NetNewsWire/"&gt;NetNewsWire&lt;/a&gt; and I’m much happier for it.  Vienna is a great product but I really missed NetNewsWire’s ability to sync feeds with the online reader and my mobile via Newsgator.  There’s just one slight hack that’s needed to make it a bit better…&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.leftbrained.co.uk/images/posts/netnewwire_panel.jpg" alt="Special Feed configuration in NetNewsWire" class="block"/&gt;&lt;/p&gt;

&lt;p&gt;In synch-mode NetNewsWire doesn’t fetch feeds from each source: it reads Newsgator’s cached copy.  This is generally a good thing; bandwidth costs are kept down for the authors and feed state is maintained between my devices.  However, there are some feeds that lose value when they’re stale: &lt;a href="http://status.slicehost.com/"&gt;server status logs&lt;/a&gt; and &lt;a href="http://www.hotukdeals.com"&gt;gone-in-a-minutes deals&lt;/a&gt; to name two.&lt;/p&gt;

&lt;p&gt;So, how to get the best of both world: 99% of my feeds reading from Newsgator and 1% coming in fresh?  NetNewsWire to the rescue!&lt;/p&gt;

&lt;p&gt;NetNewsWire doesn’t just consume regular feeds: it can read “feed-like” output from local Apple or Shell scripts. That’s what we’ll use here to bypass Newsgator’s cache; although calling the one-liner a script is a bit of an overstatement.&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;

#!/bin/sh  
#Saved in ~/bin/getfeed.sh
#Point a NetNewsWire "Special Subscription" at this script
#and pass the feed's URL as the first argument.
  
curl $1

&lt;/code&gt;
&lt;/pre&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179276</link><guid>http://cerebrum.leftbrained.co.uk/post/41179276</guid><pubDate>Sat, 26 Jan 2008 00:05:00 +0000</pubDate><category>howtos</category><category>NetNewsWire</category><category>Newsgator</category><category>shell scripts</category></item><item><title>Rebinding Spaces in Leopard</title><description>&lt;p&gt;&lt;a href="http://www.dribin.org/dave/blog/archives/2007/11/13/spaces/"&gt;Dave Dribin&lt;/a&gt; (&lt;a href="http://daringfireball.net/linked/2007/november#tue-13-dribin"&gt;via Gruber&lt;/a&gt;) writes about the problems with &lt;a href="http://www.apple.com/macosx/features/spaces.html"&gt;Spaces&lt;/a&gt;, the new OS X virtual desktop manager.  It’s an interesting read, but there’s one problem he mentions that’s readily fixable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One final gripe is the key bindings for Spaces. The only key bindings for switching desktops is Control + arrow keys … Ideally, I’d love to be able to configure “switch desktop” up/down/left/right; individually and to any modifiers + key I want.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src="http://www.leftbrained.co.uk/images/posts/spaces_shortcuts.jpg" alt="The shortcuts allowed by Spaces" class="block"/&gt;&lt;/p&gt;


&lt;p&gt;This was the first problem I hit with Spaces.  The key combinations Apple allow can’t be pressed with only one hand and that’s a major flaw. Dave wants &lt;strong&gt;Control + Option + e/d/s/f&lt;/strong&gt; but I wanted an even simpler combination of &lt;strong&gt;Alt + Space&lt;/strong&gt; to swap over (I only use two virtual desktops so the up-down-left-right navigation is overkill).&lt;/p&gt;

&lt;p&gt;The solution I use is to have FastScripts and Applescript rebind the shortcuts to something more agreeable.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.red-sweater.com/fastscripts/"&gt;FastScripts&lt;/a&gt; really deserves a full post to explain how useful it is but in a single sentence:  attach any script/program/whatever to any keyboard shortcut.&lt;/p&gt;

&lt;p&gt;First off, I set the Spaces shortcuts to the unwieldy combination of &lt;strong&gt;Control + Alt + Command + arrow&lt;/strong&gt; and &lt;strong&gt;F15&lt;/strong&gt; to swap over and get the overview, respectively. This keeps the “real” shortcuts out of my way in other applications.&lt;/p&gt;

&lt;p&gt;Next, I save a couple of Applescript one-liners to ~/Library/Scripts/Spaces where FastScripts can bind them to my shortcuts of &lt;strong&gt;Alt + Space&lt;/strong&gt; and &lt;strong&gt;Alt + Command + Space&lt;/strong&gt;.&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
//Swap.scpt 
//spoof a keypress of Control + Alt + Command + arrow
tell application "System Events" to keystroke \
(keystroke (ASCII character 29) using \
{option down, shift down, command down})
&lt;/code&gt;
&lt;/pre&gt;

&lt;pre&gt;
&lt;code&gt;
//Activate.scpt
//'activate' Spaces
tell application id "com.apple.spaceslauncher" to launch
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;All joined up, it works like this.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I press Alt + Space&lt;/li&gt;
&lt;li&gt;FastScripts intercepts and launches the linked script.&lt;/li&gt;
&lt;li&gt;The script sends Control + Alt + Command + arrow back to OS X.&lt;/li&gt;
&lt;li&gt;Spaces swaps desktop.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No problem, and it’s a simple matter to alter the FastScript trigger to use any shortcut you like.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179273</link><guid>http://cerebrum.leftbrained.co.uk/post/41179273</guid><pubDate>Tue, 13 Nov 2007 22:55:00 +0000</pubDate><category>Apple</category><category>Applescript</category><category>FastScripts</category><category>Leopard</category><category>OS X</category><category>Spaces</category></item><item><title>TextExpander and Applescript</title><description>&lt;p&gt;SmileOnMyMac have released &lt;a href="http://www.smileonmymac.com/textexpander/"&gt;TextExpander 2.0&lt;/a&gt; with some rather cool updates including&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Autoloading snippets from a url&lt;/li&gt;
&lt;li&gt;Selectively enabling snippets per application&lt;/li&gt;
&lt;li&gt;Scripted snippets.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s the last one that’s got me really interested.  TextExpander can now use the output of an Applescript as a snippet.  Which means I can 
drag out an update to my post about &lt;a href="http://www.leftbrained.co.uk/archive/2007/04/16/nesting-snippets-in-textexpander"&gt;nesting snippets&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the original post I looked at building an email signature from sub-snippets for your email, url and telephone number.  Now we can tie the sub-snippets into Address Book.app to ensure we have the most up-to-date information.&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;

set myName to "Gavin Montague"  --change  to your name
set theGroup to "phone"     	--change to "phone", "email", "address"
set theLabel to "home page" 	--change to item label "home", "work", etc.

tell application "Address Book"
    set myItems to run script (theGroup &amp; " of first person whose name =\"" &amp; myName &amp; "\"")
    value of first item of myItems whose label is theLabel
end tell

&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;You can &lt;a href="http://www.leftbrained.co.uk/files/addressbookscripts/AddressBookScripts.textexpander.zip"&gt;download some scripts&lt;/a&gt; if you want a sample set.&lt;/p&gt;

&lt;p&gt;The technique can also be extended to pull in other peoples details too.  My girlfriend’s mobile is now &lt;code&gt;jaemobile&lt;/code&gt;; my office address is &lt;code&gt;workaddress&lt;/code&gt; and it doesn’t matter if either one changes because I generally remember to keep Address Book up to date.&lt;/p&gt;

&lt;p&gt;That’s pretty cool but it’s just the tip of the iceberg.  Maybe an email footer that includes the number of unread emails you have (“Gavin has 100 unread messages, don’t reply unless you really need to”); perhaps a password generator script?  What dynamic snippets would be useful to you?&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179272</link><guid>http://cerebrum.leftbrained.co.uk/post/41179272</guid><pubDate>Sat, 20 Oct 2007 22:13:00 +0100</pubDate><category>Applescript</category><category>howtos</category><category>OS X</category><category>software</category><category>TextExpander</category></item><item><title>Computer Arts Magazine should not be allowed serverside</title><description>&lt;p&gt;Their designer-friendly description of Ruby on Rails:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ruby is a practical AJAX application which combines a front end, a database and a server…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="source"&gt;From &lt;a href="http://www.computerarts.co.uk/"&gt;Computer Arts Projects&lt;/a&gt;, January 2007&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179268</link><guid>http://cerebrum.leftbrained.co.uk/post/41179268</guid><pubDate>Tue, 16 Oct 2007 09:36:00 +0100</pubDate><category>Ruby</category></item><item><title>Even Microsoft hate Outlook 2007</title><description>&lt;p&gt;For my sins, I’ve been working on HTML email design and distribution for a client and that means learning all about
the kerfuffle over &lt;a href="http://www.campaignmonitor.com/blog/archives/2007/01/microsoft_takes_email_design_b.html"&gt;microsoft pushing email design back 5 years&lt;/a&gt;.  The short version of the story is that
Outlook 2007 uses the &lt;a href="http://msdn2.microsoft.com/en-us/library/aa338201.aspx"&gt;MSWord rendering engine&lt;/a&gt; where older versions used the Explorer Engine; the net result is that an HTML email will work in
Outlook 2007 or everything else, &lt;strong&gt;but not both&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As the XBOX 360 eshot below shows, it’s nice to see that Microsoft are having to eat their own dog food too.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.leftbrained.co.uk/images/posts/xbox_eshot.jpg" class="big" alt="Read this issue online if you can't see the images or are using Outlook 2007"/&gt;&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179267</link><guid>http://cerebrum.leftbrained.co.uk/post/41179267</guid><pubDate>Wed, 03 Oct 2007 13:30:00 +0100</pubDate><category>email</category><category>Outlook 2007</category><category>web development</category></item><item><title>Forgot your password? No worries...</title><description>&lt;p&gt;I’ve been meaning to upgrade to &lt;a href="http://newsgator.com/Individuals/NetNewsWire/Default.aspx"&gt;NetNewsWire 3.0&lt;/a&gt; and tonight I finally visited &lt;a href="http://newsgator.com/"&gt;Newsgator&lt;/a&gt; to make the purchase.  Unfortunately, I couldn’t remember my account details.  No worries: find the password recovery widget, click, enter email, typey-typey, click, wait for email.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;As you requested online, we are sending your NewsGator Online credentials to you.  They are as follows:&lt;/p&gt;
  
  &lt;p&gt;Username: &lt;strong&gt;&lt;my username&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Password: &lt;strong&gt;&lt;my plaintext password!&gt;&lt;/strong&gt;&lt;/p&gt;
  
  &lt;p&gt;Customer Support&lt;br/&gt;
  NewsGator Technologies&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’re a developer and that email doesn’t make your eyelid twitch then please take my advice:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don’t write any sort of login system until you know that plaintext passwords are bad.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m extremely wary about giving any sort of personal details to Newsgator now, which is a shame: I liked NNW. &lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179265</link><guid>http://cerebrum.leftbrained.co.uk/post/41179265</guid><pubDate>Wed, 19 Sep 2007 23:08:00 +0100</pubDate><category>Newsgator</category><category>security</category><category>web development</category></item><item><title>The Times They Are A-Changin'</title><description>&lt;p&gt;Slightly late announcement: the exciting news is that I’ve moved from being codemonkey for &lt;a href="http://www.designiscentral.com/"&gt;Design Is Central&lt;/a&gt; to being a codemonkey for &lt;a href="http://www.curiousgroup.co.uk"&gt;The Curious Group&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;I’ve had a fantastic couple of years at Central and I’ll be forever grateful for them taking a chance on the slightly confused looking chap from upstairs.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179260</link><guid>http://cerebrum.leftbrained.co.uk/post/41179260</guid><pubDate>Wed, 23 May 2007 19:04:00 +0100</pubDate></item><item><title>Nesting Snippets In TextExpander</title><description>&lt;p&gt;&lt;img src="http://www.leftbrained.co.uk/images/posts/textexpander.png" alt="TextExpander logo" class="block_alt borderless"/&gt;&lt;/p&gt;

&lt;p&gt;Here’s a little tip for OS X mini-application: &lt;a href="http://smileonmymac.com/textexpander/index.html"&gt;TextExpander&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For those who don’t know, TextExpander provides a systemwide handler which automatically explodes short ‘snippets’ into commonly used blocks of text .  If that didn’t make any sense, here’s an example with my email signature.  At the end of emails I type “&lt;code&gt;dicsig&lt;/code&gt;” which magically gets replaced by :&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;Gavin Montague
Web Development
Design Is Central

23 Argyle Court
1103 Argyle Street
Finnieston
Glasgow
G3 8DN
&lt;a href="http://www.designiscentral.com"&gt;http://www.designiscentral.com&lt;/a&gt;
+44 (0)141 847 0077 
+44 (0)7XXX XXXXX
&lt;/code&gt;
&lt;/pre&gt;

&lt;h2&gt;The tip&lt;/h2&gt;
&lt;p&gt;The current version of TextExpander allows snippets to be nested inside each other.  One snippet can call another, which can call another and so on.  Let’s look at the code behind my email signature.&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
&lt;strong&gt;%snippet:mme%&lt;/strong&gt;
Web Development
&lt;strong&gt;%snippet:dicname%&lt;/strong&gt;

&lt;strong&gt;%snippet:dicaddress%&lt;/strong&gt;
&lt;strong&gt;%snippet:dicurl%&lt;/strong&gt;
&lt;strong&gt;%snippet:dictel%&lt;/strong&gt;
&lt;strong&gt;%snippet:mymob%&lt;/strong&gt;
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;My email signature is really a compound snippet; it’s composed of six useful snippets (my name, company, office address, URL,
 telephone number and mobile) plus some fluff.&lt;/p&gt;

&lt;p&gt;Similarly, my mobile number, skype handle and home email all combine
to make up my personal email signature.&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
Gavin Montague
Web Design &amp; Development

&lt;a href="http://www.leftbrained.co.uk"&gt;http://www.leftbrained.co.uk&lt;/a&gt;
+44 (0)7XXX XXXXX
Skype:  gavinmontague
&lt;/code&gt;
&lt;/pre&gt;

&lt;pre&gt;
&lt;code&gt;
&lt;strong&gt;%snippet:mme%&lt;/strong&gt;
Web Design &amp; Development

&lt;strong&gt;%snippet:myurl%&lt;/strong&gt;
&lt;strong&gt;%snippet:mymob%&lt;/strong&gt;
Skype: &lt;strong&gt;%snippet:myskype%&lt;/strong&gt;
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Nested snippets make it easy to keep all your other snippets up to date. 
 If we move office I don’t have to update the snippets for my email signature, packing label, letterhead and so on separately; 
I just update the master copy in &lt;code&gt;dicaddress&lt;/code&gt; and I’m done.  If I change my mobile number I only have to update &lt;code&gt;mymob&lt;/code&gt; and both my email signatures are up to date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NB: &lt;/strong&gt;Yes, I really do have a snippet to generate my own name.  The number of people who received email from “Gaivn Monaygue” before I had 
TextExpander is quite embarrassing.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179259</link><guid>http://cerebrum.leftbrained.co.uk/post/41179259</guid><pubDate>Mon, 16 Apr 2007 12:35:00 +0100</pubDate><category>efficiency</category><category>howtos</category><category>OS X</category><category>TextExpander</category></item><item><title>SpinVox for GTD</title><description>&lt;p&gt;Amongst the free t-shirts, pens and diabetes-tacular sweets that were distributed at FoWA, &lt;a href="http://www.Spinvox.com/"&gt;SpinVox&lt;/a&gt; were offering free accounts.  I only read as far as “free” before signing up but it turns out that their mobile oriented speech-to-text services are a godsend for improving my &lt;a href="http://en.wikipedia.org/wiki/Getting_Things_Done"&gt;GTD&lt;/a&gt; workflow.  The overview is this:  I divert my incoming voicemail through &lt;a href="http://www.SpinVox.com/index.php?id=9"&gt;Spin-my-Vmail&lt;/a&gt; which convert my messages to text and emails them to me.&lt;/p&gt;

&lt;p&gt;One of the ideals of GTD is to have a single in-tray:  all input should flow to a single point where you can review and process it.  The fewer in-trays you have means less time spent processing and less chance of missing something important.  I don’t think it’s possible to get down to a single in-tray but it’s a good goal to have. SpinVox means my voicemail has effectively just become part of my e-mail.  One less in-tray and with the added bonus of never having to navigate the “Dial one to listen to the next message” menus ever again.&lt;/p&gt;

&lt;p&gt;Another service that might be of interest to GTD-ers is &lt;a href="http://www.spinvox.com/index.php?id=12"&gt;Spin-my-Memo&lt;/a&gt; which is basically identical to Spin-my-Vmail but aimed at the kind of people who use their own voicemail as a memory aid.  This service has the advantage of currently being &lt;a href="http://www.spinvox.com/index.php?id=52&amp;link=index%2Ephp%3Fid%3D52"&gt;free&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The quality of SpinVox’s transcriptions are really quite impressive: I’ve only managed to trip it up once with some obscure Scottish place-names.  If voicemail is an annoyance I urge you to give SpinVox a try; I’m getting it for free though so I might be biased.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179257</link><guid>http://cerebrum.leftbrained.co.uk/post/41179257</guid><pubDate>Mon, 05 Mar 2007 15:08:00 +0000</pubDate><category>Future of Web Apps 07</category><category>GTD</category><category>mobile phones</category><category>SpinVox</category></item><item><title>Thing I love about the Internet, part one</title><description>&lt;p&gt;Skype means you can attend a meeting without moving.&lt;/p&gt; 

&lt;p&gt;Skype also means you can attend a meeting wearing the t-shirt and shorts you put on a 5 kilometre run ago and not be asked to leave.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179255</link><guid>http://cerebrum.leftbrained.co.uk/post/41179255</guid><pubDate>Sat, 03 Mar 2007 00:24:00 +0000</pubDate></item><item><title>Future of Web Apps</title><description>&lt;p&gt;I’m slowly winding my way back north after &lt;a href="http://www.futureofwebapps.com"&gt;Future of Web Apps&lt;/a&gt; with a big-ass bag of schwag and business cards.  This year the overall messages seemed to be:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep it simple.  &lt;/li&gt;
&lt;li&gt;Cater for individuals first and the community second.&lt;/li&gt;
&lt;li&gt;We’ve yet to see the &lt;em&gt;really killer&lt;/em&gt; webapps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="first_up_the_hot8230"&gt;First up, the hot…&lt;/h2&gt;

&lt;p&gt;It was one of the most social conferences I’ve been to.  The &lt;a href="http://flickr.com/photos/callendercreates/398636795/"&gt;cards and stickers&lt;/a&gt; were a fantastic idea and made it very easy to approach people.  I’d love to see the idea expanded upon in future to maybe include more ‘types’ - perhaps “I’m looking to collaborate with…”, “I’ve got something cool to show you…”, “Let me convince you why XXX rocks..” , anything that gets people speaking to each other is worthwhile.&lt;/p&gt;

&lt;p&gt;There were some great speakers.  &lt;a href="http://simonwillison.net/2007/Feb/21/fowa/"&gt;Simon WIllison&lt;/a&gt; talked a mile a minute about &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt;; &lt;a href="http://www.techcrunch.com"&gt;Mike Arrington&lt;/a&gt; explained why it’s not a Bubble; &lt;a href="http://www.horsepigcow.com/"&gt;Tara Hunt&lt;/a&gt; used phrases like “Maslow’s hierarchy of needs” to discuss community building and &lt;a href="http://last.fm"&gt;Last.fm&lt;/a&gt; gave an overview of their dealings with downtime, not censoring their users and Ikea furniture&lt;a href="#footnote" name="ikea" id="ikea"&gt;*&lt;/a&gt;.  The best presentation of the two days came from an unlikely source:  &lt;a href="http://www.indexventures.com/"&gt;Ben Holmes&lt;/a&gt; gave us a peek into the brain of a VC and some hints about when, and when not, to take VC cash.  It’s not directly relevant to me today, but a boy can dream.&lt;/p&gt;

&lt;h2 id="and_the_not_so_hot"&gt;..and the not so hot&lt;/h2&gt;

&lt;p&gt;Lack of wifi was a bit of a bummer - apparently it was in place but BT cocked up.  I know some people, &lt;a href="http://www.carsonified.com/fowa/to-wifi-or-not-to-wifi"&gt;Ryan included&lt;/a&gt;, have mixed feelings about people tapping away on laptops during the talks. However, lack of connectivity caused problems for a couple of the speakers and I think it would have been useful for the people trying to make impromptu pitches during breaks.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"Fully Catered Lunch" != "Sandwiches"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I know that the sponsor spots are a necessary evil at these things and there were some pretty entertaining ones (&lt;a href="http://fotango.com/"&gt;Simon Wardley&lt;/a&gt;, in particular) but there did seem to be an awful lot of ad breaks.  Even two of the non-sponsored spots (Amazon and Adobe) seemed to be pitches for their own products. &lt;/p&gt;

&lt;p&gt;I think the worst move was making the final presentation a sponsor spot:  it really made the conference end on a “meh, time to go home” note.  In contrast, &lt;a href="http://2006.dconstruct.org/"&gt;d.construct&lt;/a&gt; had Jeffery Veen telling us that we’re trailblazers and the future of the internet is in our hands.  Who would you rather closed a concert - Jimmy Hendrix playing Voodoo Chile or Peter Andre reminding you to buy some Diet Coke?&lt;/p&gt;

&lt;p&gt;Overall, I’m glad I attended but I don’t think I’ll be going down for it next year: maybe &lt;a href="http://futureofwebdesign.com/"&gt;Future of Web Design&lt;/a&gt; will get my money instead.&lt;/p&gt;

&lt;p&gt;&lt;a href="#ikea" name="footnote" id="footnote"&gt;*&lt;/a&gt;To the guy sitting behind me during Anil’s talk who decided that a conference hall was the ideal place to take a ten minute phonecall - you’re an asshole.  Please die.  That is all.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179254</link><guid>http://cerebrum.leftbrained.co.uk/post/41179254</guid><pubDate>Fri, 23 Feb 2007 16:13:00 +0000</pubDate><category>d.construct 06</category><category>Future of Web Apps 07</category><category>seminars</category></item><item><title>Drawing earlobes on seagulls</title><description>&lt;p&gt;By way of an introduction to a post I’m going to make at some point, I’d like you to get acquainted with the little phrase above that I stole from magician and stand-up comedian extraordinaire &lt;a href="http://en.wikipedia.org/wiki/Jerry_Sadowitz"&gt;Jerry Sadowitz&lt;/a&gt;.  Try as I might, I can’t find the original source, so what follows is paraphrased from my failing memory. Hopefully it’ll still make sense:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
So I went into my GCSE art exam and and turned the paper over.  The topic was ‘fiesta’. We had five hours to paint something on that topic.  The guy next to me didn’t move.  Anyway, I start scribbling.  Fiesta: Brazil, streamers, carnivals, seagulls.  Brazil’s next to the sea, isn’t it?  Definitely seagulls.  The guy next to me still hasn’t picked up his brush.  I think he started making roll-ups.&lt;/p&gt;

&lt;p&gt;Four hours and fifty-five minutes later, I’ve been drawing constantly.  I’ve not put my paintbrush down once. With two minutes left the guy next to me pulls a toothbrush out of his jacket, dips it in the blue paint, splatters it over his paper, stands up and leaves.  I got a C, he got an A! I was there for five fucking hours &lt;strong&gt;drawing earlobes on seagulls&lt;/strong&gt; and I still got a C!
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="source"&gt;&lt;a href="http://en.wikipedia.org/wiki/Jerry_Sadowitz"&gt;Jerry Sadowitz&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;The jokes didn’t make it through from memory but hopefully the point did. Drawing earlobes on seagulls: spending time on details that don’t add anything to the overall package.&lt;/p&gt;

&lt;p&gt;More to come when I’m less sleepy.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179253</link><guid>http://cerebrum.leftbrained.co.uk/post/41179253</guid><pubDate>Tue, 20 Feb 2007 23:47:00 +0000</pubDate><category>efficiency</category></item><item><title>New business cards</title><description>&lt;p&gt;&lt;img src="http://www.leftbrained.co.uk/images/posts/business_card.jpg" class="big" alt="Gavin's new business card"/&gt;&lt;/p&gt; 

&lt;p&gt;Spurred on by the rapid approach of &lt;a href="http://www.futureofwebapps.com/"&gt;Future of Web Apps&lt;/a&gt; next week and &lt;a href="http://thehighlandfling.com/2007/"&gt;Highland Fling&lt;/a&gt; in April, I finally got round to 
getting some business cards printed. Green side is the front, white side is the back.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179251</link><guid>http://cerebrum.leftbrained.co.uk/post/41179251</guid><pubDate>Tue, 13 Feb 2007 13:16:00 +0000</pubDate><category>business cards</category><category>Highland Fling</category><category>Leftbrained</category></item><item><title>Bloody hell, where did that come from?</title><description>&lt;p&gt;&lt;img src="http://www.leftbrained.co.uk/images/posts/highlandfling.jpg" class="block" alt="Highland Fling 2007"/&gt;I’m not sure how I missed it until now, but it seems that Scotland has finally got a web conference that’s worth a look. When April the 5th comes round I’m off to Edinburgh for &lt;a href="http://thehighlandfling.com/2007/"&gt;Highland Fling&lt;/a&gt;. I can’t say I like the name seeing as (a) Edinburgh isn’t in the Highlands and (b) l hate the way this bloody country has to be so annoyingly Scottish at every opportunity&lt;a href="#footnote"&gt;*&lt;/a&gt;. I doubt the same conference in England be called ‘Markup &amp; Morris Dancing’.&lt;/p&gt;

&lt;p&gt;Onomastic gripes aside, i’m looking forward to it. The speakers are good, the topic is interesting and it’s a chance to meet local webfolk. There’s precious little in the way of meetups around here and &lt;a href="http://www.leftbrained.co.uk/archive/2006/09/01/scotland-reprezent"&gt;precious few locals attend the conferences further south&lt;/a&gt;.  So fair play to &lt;a href="http://www.azcazandco.com"&gt;Alan White&lt;/a&gt; for arranging Highland Fling.&lt;/p&gt;

&lt;p&gt;&lt;a name="footnote" id="footnote"&gt;&lt;/a&gt;*This is the same reason i want to hit &lt;a href="http://www.snp.org.uk/"&gt;&lt;acronym title="Scottish Nationalist Party"&gt;SNP&lt;/acronym&gt;&lt;/a&gt; spokespeople on the head with a rake. Any opportunity to cram in a pithy jock cliche, random stanza of Burns, or even a Sean Connery line or two. We get it: you’re &lt;strong&gt;Scottish&lt;/strong&gt;. Move on.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179249</link><guid>http://cerebrum.leftbrained.co.uk/post/41179249</guid><pubDate>Sat, 03 Feb 2007 17:46:00 +0000</pubDate><category>Highland Fling</category><category>seminars</category><category>web development</category></item><item><title>Pap This!</title><description>&lt;p&gt;A very quick variation of &lt;a href="http://www.leftbrained.co.uk/code/galarrhea"&gt;Galarrhea&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If disk space is at a premium, or perhaps you just want to show people the sites you’re planning on being “inspired” by, then you might like &lt;a href="http://www.leftbrained.co.uk/code/pap-this"&gt;Pap This!&lt;/a&gt;.  Galarrhea’s new sibling will capture whatever you’re currently looking at in Safari and prepare it for upload to Flickr.&lt;/p&gt;

&lt;p&gt;I’ve got Pap This! tied to its own &lt;a href="http://quicksilver.blacktree.com/"&gt;Quicksilver trigger&lt;/a&gt; for extra geeky points.&lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179247</link><guid>http://cerebrum.leftbrained.co.uk/post/41179247</guid><pubDate>Mon, 29 Jan 2007 10:23:00 +0000</pubDate><category>Applescript</category><category>Flickr</category><category>Paparazzi</category><category>software</category><category>websites</category></item><item><title>Nabaztag</title><description>&lt;div id="post_48_player" class="moviePlayer"&gt;
	&lt;p&gt;&lt;strong&gt;You need to upgrade your Flash Player&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;I’m in danger of losing my healthy cynicism and complete indifference towards my birthday.  My girlfriend got me the best present I’ve ever received:&lt;/p&gt;

&lt;script type="text/javascript"&gt;
	// &lt;![CDATA[

	var so = new SWFObject("/images/player.swf", "post_48_player", "320", "240", "8", "#000000");
	so.addVariable("pathToMovie", "/images/posts/under_my_skin.flv");
	so.write("post_48_player");

	// ]]&gt;
&lt;/script&gt;&lt;p&gt;I now have a cyborg rabbit that sings Cole Porter songs in a French accent!  All hail the &lt;a href="http://www.nabaztag.com"&gt;Nabaztag&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;The parent company, &lt;a href="http://www.violet.net/"&gt;Violet&lt;/a&gt;, offer a host of free and paid services, such as traffic and weather reporting and, more importantly, API for controlling his behaviour.  I’ve thrown together a quick site for &lt;a href="http://www.pokemybunny.com"&gt;sending audio messages to my rabbit&lt;/a&gt; but what I’m really interested in is using it as an ambient information display.  There are loads of possibilities here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Monitor websites&lt;/strong&gt;.  If one of my server doesn’t respond to pings my Nabaztag becomes unhappy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Who’s where?&lt;/strong&gt;  If a friend comes onto IM or posts to Twitter my bunny perk up and might read out the details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long jobs.&lt;/strong&gt;  We often leave the office computers on overnight to render video, compile code or run tests.  If the job finishes or hits an error a message comes in through the rabbit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;As an input device.&lt;/strong&gt;  Dial a position on your Nabaztag’s ears and it’ll check your email and read out a summary of your new messages.  Another combination might make the rabbit read out the headlines on Slashdot.  Another still to gets details of unprocessed sales that have come in through an ecommerce site.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I know that the obvious response to each of these possibilities is, “Just turn your bloody computer on, you big wendy” but that’s missing the point.  Computers are noisy, ugly and distracting:  I like the idea of an device that is quiet, good looking and blends into the background when it’s idle.  Ok, the Nabaztag is only capable of sending very basic signals but the concept is solid.  If you you want to see one of the high points of ambient device design then look at the &lt;a href="http://web.media.mit.edu/~stefanm/phd/cellularsquirrel/"&gt;Cellular Squirrel&lt;/a&gt; from MIT.&lt;/p&gt;

&lt;h2&gt;There are only three problems with the Nabaztag. &lt;/h2&gt;

&lt;p&gt;Firstly, Violet severely underestimated the number of new Nabaztags that would appear on Christmas morning.  The servers were down over Noel and service continues to be a bit patchy.  As all the input to each Nabaztag has to go through Violet servers, a lot of people spent two weeks with very expensive paperweights.  Fair play to Violet, though: to say sorry they’ve suspended fees for all services until February but several of the extra features in the &lt;a href="http://www.nabaztag.com/en/m-21-nabaztag-tag-the-second-first-smart-rabbit.html"&gt;latest generation of Nabaztags&lt;/a&gt; haven’t been activated yet and the customers good will only stretches so far.&lt;/p&gt;

&lt;p&gt;Secondly, the &lt;a href="http://help.nabaztag.com/fiche.php?langue=3&amp;fiche=29"&gt;API is still pretty weak&lt;/a&gt;: only very basic behaviours can be programmed.  I’d love to be able to check if a rabbit is currently online, send it ‘resting’ states and do a dozen other things that must be technically possible but aren’t publicly available.  On a promising note: Violet do seem to acknowledge the weaknesses in the API and have said that they want to beef up the API in future.&lt;/p&gt;

&lt;p&gt;The last problem, and in my opinion the more dangerous, is the number of shortcomings in the webapp from one’s litter of Nabaztags are managed.&lt;/p&gt;

&lt;p&gt;The interface isn’t fully localized into English.  There is an English language version, but it’s littered with spelling mistakes and poor grammar, and the occasional French phrase.  I appreciate that Violet is a French company, but if they want to be a hit worldwide they need to acknowledge that the web speaks English.  Although the snippets of French are sparse and the other mistakes don’t generally impede understanding, it does give a very sloppy impression.&lt;/p&gt;

&lt;p&gt;The Violet designers have embraced AJAX, but most of its uses are entirely pointless.  For example, the preference page triggers five AJAX requests on load just to pull in its basic elements.  There’s absolutely no gain from loading the page in this way and it may, in fact, be a contributing factor to Violet’s server problems.  Five extra requests per page view are bound to put a extra strain on the already taxed servers.  The way it’s been built also makes the site completely inaccessible, but that’s a rant for another day.&lt;/p&gt;

&lt;p&gt;The real killer problem in the site is a lack of good documentation.  The Nabaztag has three sets of lights that cycle through three colours and move through a huge number of patterns.  The lights are the primary means of reading data from your Nabaztag and here’s what the &lt;a href="http://help.nabaztag.com/fiche.php?langue=3&amp;fiche=22"&gt;online help section&lt;/a&gt; says about them:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Nabaztag mainly uses the lights on his tummy and nose to tell you things. 
    Different color animations are used to provide information.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m paraphrasing here but believe me: the section in its entirety doesn’t say much more.  There’s no chart or movies showing common patterns, no authoritative list of your bunny’s behaviours.  Most users end up on &lt;a href="http://nabaztag.forumactif.fr/index.htm"&gt;third-party forums&lt;/a&gt; asking about the more cryptic combinations of lights.&lt;/p&gt;

&lt;p&gt;All in all though, I’m very pleased.  The Violet servers are starting to recover from the surge of traffic and I’m dying start playing with my new toy. &lt;/p&gt;</description><link>http://cerebrum.leftbrained.co.uk/post/41179246</link><guid>http://cerebrum.leftbrained.co.uk/post/41179246</guid><pubDate>Tue, 23 Jan 2007 19:03:00 +0000</pubDate><category>Nabaztag</category><category>pet project</category><category>shiny things</category><category>Smart Objects</category><category>usability</category><category>web development</category><category>websites</category></item></channel></rss>
