<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>deferred until inspiration hits</title>
    <link>http://chrisroos.co.uk/</link>
    <language>en-us</language>
    <ttl>40</ttl>

    <description />
    
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/DeferredUntilInspirationHits" type="application/rss+xml" /><feedburner:browserFriendly>(Enter a personal message you would like to have appear at the top of your feed.)</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
        <title>A Letter to Adrian Gillan at Euroferries</title>
        <description>&lt;p&gt;I&amp;#8217;ve just sent this email to Adrian Gillan at &lt;a href="http://euroferries.co.uk/"&gt;Euroferries&lt;/a&gt; in response to his request that &lt;a href="http://twitter.com/adem"&gt;Adem&lt;/a&gt; &lt;a href="http://ademdjemil.co.uk/blog/?p=1867"&gt;remove one of his posts&lt;/a&gt;.&lt;/p&gt;
&lt;div class="email"&gt;
&lt;p&gt;Hi Adrian,&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve just seen your email to Adem (a friend of mine) published on his&lt;br /&gt;
blog&lt;sup class="footnote"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;.  I don&amp;#8217;t know what the allegedly libelous comments were&lt;br /&gt;
(Google have cached the page up to the early hours of the 6th Nov&lt;sup class="footnote"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
and a quick scan doesn&amp;#8217;t reveal anything terrible) but this just&lt;br /&gt;
doesn&amp;#8217;t feel like a friendly way to operate.  I know that Adem, and&lt;br /&gt;
many others (myself included), are excited by the possibility of this&lt;br /&gt;
new ferry service from Ramsgate and only want the best for the area.&lt;/p&gt;
&lt;p&gt;Anyway, I just wanted to suggest a slightly different approach you&lt;br /&gt;
might want to consider in future.  Rather than use these old school&lt;br /&gt;
heavy handed tactics why not jump into the comments on this (and many&lt;br /&gt;
others about Euroferries) post and correct people if they&amp;#8217;re pushing&lt;br /&gt;
mistaken ideas.  Taking it a little further, you could even start a&lt;br /&gt;
Euroferries blog and keep in touch with people that way.  If you&lt;br /&gt;
communicated in this way people wouldn&amp;#8217;t have to constantly guess at&lt;br /&gt;
what might be going on.  I&amp;#8217;d certainly be willing (as I&amp;#8217;m sure would&lt;br /&gt;
many others) to help you set this up if it&amp;#8217;s something you&amp;#8217;d be&lt;br /&gt;
interested in.&lt;/p&gt;
&lt;p&gt;Cheers, and all the best for the launch (next week, right?)&lt;/p&gt;
&lt;p&gt;Chris&lt;/p&gt;
&lt;p&gt;&lt;sup class="footnote"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; http://ademdjemil.co.uk/blog/?p=1867&lt;br /&gt;
&lt;sup class="footnote"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; http://209.85.229.132/search?q=cache:1Rr643QXJFAJ:ademdjemil.co.uk/blog/%3Fp%3D1166+adem+euroferries&lt;/p&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=5V4hFNSpcCg:NNIvWH1g8zk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/5V4hFNSpcCg" height="1" width="1"/&gt;</description>

        <pubDate>Sat, 07 Nov 2009 13:44:21 +0000</pubDate>
        <guid isPermaLink="false">urn:uuid:d84c23d6-1211-4551-bfc7-24d7d32a036d</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-11-07-a-letter-to-adrian-gillan-at-euroferries</link>
      </item>
    
      <item>
        <title>Things I Learnt at Interesting 2009</title>
        <description>&lt;p&gt;Some things I learnt at &lt;a href="http://russelldavies.typepad.com/planning/interesting2009/"&gt;interesting 2009&lt;/a&gt;.  Note.  Some of this stuff is probably made up.  If you want to see what actually happened you should read the &lt;a href="http://rooreynolds.com/2009/09/12/interesting-2009-forty-even-more-interesting-things/"&gt;coverage by Roo Reynolds&lt;/a&gt; (in theory my numbers match the numbers in Roo&amp;#8217;s list).&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Boats can fly.&lt;/li&gt;
	&lt;li&gt;The kids of today will feel sorry for us because we don&amp;#8217;t take steroids.  &lt;span class="caps"&gt;THEN&lt;/span&gt; &lt;span class="caps"&gt;THEY&lt;/span&gt; &lt;span class="caps"&gt;WILL&lt;/span&gt; &lt;span class="caps"&gt;DESTROY&lt;/span&gt; US.&lt;/li&gt;
	&lt;li&gt;We are all gentlemen.&lt;/li&gt;
	&lt;li&gt;Cheating in computer games is good, as long as you don&amp;#8217;t get caught.&lt;/li&gt;
	&lt;li&gt;Adventure books can be funny.&lt;/li&gt;
	&lt;li&gt;Stan Laurel&amp;#8217;s dad invented theatre.&lt;/li&gt;
	&lt;li&gt;God invented subduction zones for us to hide our nuclear waste in: they&amp;#8217;re like giant dustcarts.&lt;/li&gt;
	&lt;li&gt;Robots are all made of win (although not clear, I believe this is some advanced alien technology).&lt;/li&gt;
	&lt;li&gt;Twitter can blow bubbles.&lt;/li&gt;
	&lt;li&gt;Lilac doesn&amp;#8217;t exist.&lt;/li&gt;
	&lt;li&gt;Keyboards are string instruments (ok, so this is actually true but I had to think about it when it was being talked about, because I&amp;#8217;m an idiot).&lt;/li&gt;
	&lt;li&gt;r2d2 has been made into every product ever built.  Apollo 22 was actually made to look like the little fella.&lt;/li&gt;
	&lt;li&gt;Morse invented kazoos and chocolate.&lt;/li&gt;
	&lt;li&gt;Maps are better when they&amp;#8217;re a list of words, rather than, you know, a map.&lt;/li&gt;
	&lt;li&gt;Much loved girl comics from the 70s and 80s were written by famous horror writers, including Stephen King.&lt;/li&gt;
	&lt;li&gt;Francis Galton could smell maths.&lt;/li&gt;
	&lt;li&gt;Children&amp;#8217;s art is better than a lot of what&amp;#8217;s in the Tate Modern.&lt;/li&gt;
	&lt;li&gt;Magners isn&amp;#8217;t cider.&lt;/li&gt;
	&lt;li&gt;Origami is actually impossible and all origami seen on TV has been computer generated by a supercomputer running for weeks on end.&lt;/li&gt;
	&lt;li&gt;It&amp;#8217;s easier to buy strands of banana smell dna and upload them into yoghurt than it is to buy a banana flavoured yoghurt.&lt;/li&gt;
	&lt;li&gt;Conductors love coffee, chocolate cake and david beckham.&lt;/li&gt;
	&lt;li&gt;You can never record too much data about your daily life.&lt;/li&gt;
	&lt;li&gt;Breast shot is also the name of a waterwheel.&lt;/li&gt;
	&lt;li&gt;Cartoons are like films that play at about 1 frame per second for 6 frames.&lt;/li&gt;
	&lt;li&gt;India has superpowers.&lt;/li&gt;
	&lt;li&gt;Burn giant wooden men or kill goats.  It&amp;#8217;s up to you.&lt;/li&gt;
	&lt;li&gt;Writing a book takes ages so make sure you pick a fairly general topic (social web apps, or religion, I guess).&lt;/li&gt;
	&lt;li&gt;Having imaginary ponies doesn&amp;#8217;t stop you from going on stage and talking about said imaginary ponies.&lt;/li&gt;
	&lt;li&gt;Cycling around the UK takes you up someones wife&amp;#8217;s lane.&lt;/li&gt;
	&lt;li&gt;Bill and Ted, the musical, is being presented live in and around Oxford next year.&lt;/li&gt;
	&lt;li&gt;Darwin invented Chinese Whispers.&lt;/li&gt;
	&lt;li&gt;Making incomprehensible noise.  There&amp;#8217;s an app for that.&lt;/li&gt;
	&lt;li&gt;All train lines are built on top of underground rivers.&lt;/li&gt;
	&lt;li&gt;You shouldn&amp;#8217;t play Monopoly.&lt;/li&gt;
	&lt;li&gt;Some schools have now completely reversed the role of pupils and teachers with the pupils now teaching the staff.&lt;/li&gt;
	&lt;li&gt;John Prescott listens to his ipod at night while planting sunflowers.&lt;/li&gt;
	&lt;li&gt;Astrotagging is done by a little robot that comes out of your computer and sits on your desk.&lt;/li&gt;
	&lt;li&gt;1. Make clothes, 2. Make &lt;span class="caps"&gt;TED&lt;/span&gt; clone, 3. You&amp;#8217;re done.&lt;/li&gt;
	&lt;li&gt;France has the only bullet viewing platform, on top of the Eiffel tower.&lt;/li&gt;
	&lt;li&gt;Sunsets are caused by the sun disappearing.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All in all it was a great, and inspiring, day.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=6R1q3Y60DoM:1k8RtwliQhU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/6R1q3Y60DoM" height="1" width="1"/&gt;</description>

        <pubDate>Thu, 17 Sep 2009 13:40:43 +0100</pubDate>
        <guid isPermaLink="false">urn:uuid:b821c008-5e82-434c-b02e-39f3afa64ee6</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-09-17-things-i-learnt-at-interesting-2009</link>
      </item>
    
      <item>
        <title>Pouring Factlets Into Your Brain Holder via Your Ear Sieves</title>
        <description>&lt;p&gt;I was walking past &lt;a href="http://www.haysgalleria.co.uk/"&gt;Hays Galleria&lt;/a&gt; on the way to work the other morning and realised that I didn&amp;#8217;t really know anything about it.  I was listening to &lt;a href="http://listen.googlelabs.com/"&gt;streaming podcasts&lt;/a&gt; on my &lt;a href="http://en.wikipedia.org/wiki/Global_Positioning_System"&gt;&lt;span class="caps"&gt;GPS&lt;/span&gt;&lt;/a&gt; enabled &lt;a href="http://www.android.com/"&gt;Android&lt;/a&gt; &lt;a href="http://www.htc.com/www/product/g1/overview.html"&gt;G1&lt;/a&gt; and started thinking about receiving little factlets (I originally wrote factoid but apparently that means an unverified statement taken as truth&lt;sup class="footnote"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;) as I walk around.  I&amp;#8217;ve thought about this a bit more and think it&amp;#8217;d be really quite a good thing.  It&amp;#8217;d be like the audio tours you get in museums and the like but defined purely by where &lt;strong&gt;you&lt;/strong&gt; go, rather than you having to follow a pre-determined path.  So, assuming there&amp;#8217;s not already something similar out there (I wouldn&amp;#8217;t be surprised if there was) then I&amp;#8217;m going to build it.  Does this sound interesting to anyone else, specifically developer types that can help me actually build it?&lt;/p&gt;
&lt;p&gt;An off-the-top-of-my-head plan:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Store some geotagged audio somewhere.
	&lt;ul&gt;
		&lt;li&gt;Could we use &lt;a href="http://twaud.io/"&gt;twaud.io&lt;/a&gt; (directly or build on top of it)?&lt;/li&gt;
		&lt;li&gt;There is some &lt;a href="http://www.google.co.uk/search?q=geotagged+audio"&gt;prior art&lt;/a&gt; here&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;Create an Android application.  We&amp;#8217;d need to be able to:
	&lt;ul&gt;
		&lt;li&gt;Search for audio based on current location.&lt;/li&gt;
		&lt;li&gt;Stream and play audio.&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;Make the creation of geotagged audio easier.
	&lt;ul&gt;
		&lt;li&gt;Can we use text to voice to convert fragments of &lt;a href="http://en.wikipedia.org/wiki/Geotagging#Wikipedia"&gt;geotagged wikipedia articles&lt;/a&gt;?&lt;/li&gt;
		&lt;li&gt;Can we create a game that makes the generation of this audio content appealing to more people?&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;li&gt;Allow people to upload their own factlets when they&amp;#8217;re out and about.
	&lt;ul&gt;
		&lt;li&gt;twaud.io already enables uploading of audio, we&amp;#8217;d just need to geotag it.&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; Or does it?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=ugZ7flCN00I:6M1vByp_hEc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/ugZ7flCN00I" height="1" width="1"/&gt;</description>

        <pubDate>Mon, 14 Sep 2009 20:45:38 +0100</pubDate>
        <guid isPermaLink="false">urn:uuid:1d0b0f68-2e97-4d1b-8a3f-4f9c4b303900</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-09-14-pouring-factlets-into-your-brain-holder-via-your-ear-sieves</link>
      </item>
    
      <item>
        <title>Creating a Greasemonkey Script That Applies to the Firefox 'Problem Loading Page' Error Page</title>
        <description>&lt;p&gt;I found a few things when developing the &lt;a href="/blog/2009-06-24-down-for-everyone-or-just-me-greasemonkey-script"&gt;down for everyone&lt;/a&gt; greasemonkey script that might be of use to someone else wanting to customise the &amp;#8216;Problem loading page&amp;#8217; error page.&lt;/p&gt;
&lt;p&gt;I originally based my script on this &lt;a href="http://userscripts.org/scripts/show/4125"&gt;Server not found? Try and try again&lt;/a&gt; script.  Specifically, I used something like this to determine whether or not the error page was being displayed.&lt;/p&gt;
&lt;pre class="code javascript"&gt;&amp;#x000A;  if (document.documentURI.substr(0,14)=="about:neterror") {&lt;/pre&gt;
&lt;p&gt;Given this I was able to find, and use, this similar code from &lt;a href="chrome://browser/content/browser.js"&gt;chrome://browser/content/browser.js&lt;/a&gt; (paste that link into the location bar and search for about:neterror or the aboutNeterror constant).&lt;/p&gt;
&lt;pre class="code javascript"&gt;&amp;#x000A;  if (/^about:neterror/.test(document.documentURI)) { &lt;/pre&gt;
&lt;p&gt;I&amp;#8217;m still not exactly sure of the purpose of document.documentURI except that it appears to allow you to display one &lt;span class="caps"&gt;URI&lt;/span&gt; and actually render another (in this case it displays the &lt;span class="caps"&gt;URI&lt;/span&gt; you&amp;#8217;re trying to access but renders the error page).  This error page also appears to screw with &lt;a href="http://getfirebug.com"&gt;firebug&lt;/a&gt;.  If you want to see the value of documentURI you&amp;#8217;ll need to use this little bit of javascript in the location bar:&lt;/p&gt;
&lt;pre class="code javascript"&gt;&amp;#x000A;  javascript:alert(document.documentURI);&lt;/pre&gt;
&lt;p&gt;It turns out that you can&amp;#8217;t directly view the source of the &amp;#8216;Problem loading page&amp;#8217; error page: Press Ctrl-U, or select View &amp;gt; Page Source from the menu, and you&amp;#8217;ll be presented with the error page in a popup window.  In order to view the source you&amp;#8217;ll need to load it, using the chrome protocol, from &lt;a href="chrome://global/content/netError.xhtml"&gt;chrome://global/content/netError.xhtml&lt;/a&gt; (paste that into the location bar).  The error page (which lives in firefox-dir/chrome/toolkit.jar/content/global/netError.xhtml) is pretty empty as it uses javascript to read querystring parameters and populate it on the fly.  This allows the same error page to be used for multiple types of error.  You can see an example of changing the description in this link: &lt;a href="chrome://global/content/netError.xhtml?e=dnsNotFound&amp;amp;u=http%3A//example.com&amp;amp;d=I%20can%20see%20you..."&gt;about:neterror?e=dnsNotFound&amp;amp;u=http%3A//example.com&amp;amp;d=I%20can%20see%20you&amp;#8230;&lt;/a&gt; (paste that link into the location bar).&lt;/p&gt;
&lt;p&gt;I initially tried to add a button next to the &amp;#8216;Try Again&amp;#8217; button that appears on the page.  My first attempt was to create a xul:button (which is the type of the &amp;#8216;Try Again&amp;#8217; button) but that didn&amp;#8217;t work.  I don&amp;#8217;t remember the exact details but I don&amp;#8217;t think I was able to get addEventListener working in order to attach events to the button.  I was able to create a standard html button but the xul.css stylesheet didn&amp;#8217;t get applied and it therefore looked odd next to the &amp;#8216;Try Again&amp;#8217; button.  Comments in the source of the &lt;a href="http://userscripts.org/scripts/review/4125"&gt;Server not found? Try and try again&lt;/a&gt; script lead me to believe that the developer of that script ran into these same problems with the button.&lt;/p&gt;
&lt;p&gt;While digging through the firefox source files I noticed a few files that I found interesting/amusing and hadn&amp;#8217;t come across before: &lt;a href="about:mozilla"&gt;about:mozilla&lt;/a&gt;, &lt;a href="about:robots"&gt;about:robots&lt;/a&gt; and &lt;a href="about:crashes"&gt;about:crashes&lt;/a&gt; (I&amp;#8217;m not sure why but this link doesn&amp;#8217;t appear to work directly, copy and paste it to the location bar to see the page).&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=K79x1fsJRPU:2ctBjz8JPkI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/K79x1fsJRPU" height="1" width="1"/&gt;</description>

        <pubDate>Tue, 21 Jul 2009 07:50:54 +0100</pubDate>
        <guid isPermaLink="false">urn:uuid:42ef8f73-bda4-425f-9f79-0eb7beba5cc2</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-07-21-creating-a-greasemonkey-script-that-applies-to-the-firefox-problem-loading-page-error-page</link>
      </item>
    
      <item>
        <title>Down for Everyone or Just Me Greasemonkey Script</title>
        <description>&lt;p&gt;I hacked on this simple &lt;a href="http://en.wikipedia.org/wiki/Greasemonkey"&gt;greasemonkey&lt;/a&gt; script a while ago but never got around to writing about it.  It&amp;#8217;s probably easiest explained with a screenshot.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/chrisjroos/3658162176/"&gt;&lt;img src="http://farm4.static.flickr.com/3653/3658162176_d6819a620d_m.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If the webpage you&amp;#8217;re trying to access can&amp;#8217;t be loaded then you&amp;#8217;ll see that the standard &amp;#8216;page not found&amp;#8217; firefox error page but with an additional link to the useful &lt;a href="http://downforeveryoneorjustme.com/"&gt;Down for everyone or just me&lt;/a&gt; service.&lt;/p&gt;
&lt;p&gt;Get the script from &lt;a href="http://userscripts.org/scripts/show/50164"&gt;userscripts&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=YNaOjIXSsvo:aG5eWTFavXo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/YNaOjIXSsvo" height="1" width="1"/&gt;</description>

        <pubDate>Wed, 24 Jun 2009 21:07:18 +0100</pubDate>
        <guid isPermaLink="false">urn:uuid:4b5dd513-0c10-4892-8c84-1aa29aeac4c5</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-06-24-down-for-everyone-or-just-me-greasemonkey-script</link>
      </item>
    
      <item>
        <title>Apacherb Is Now Hostess</title>
        <description>&lt;p&gt;A little while ago I wrote about a utility called &lt;a href="/blog/2008-12-15-a-utility-to-manage-apache-virtual-hosts-on-a-mac-like-the-passenger-pref-pane-but-for-simple-static-sites"&gt;apacherb&lt;/a&gt;.  It took the concept of the &lt;a href="http://www.fngtps.com/2008/06/putting-the-pane-back-into-deployment"&gt;passenger preference pane&lt;/a&gt; and applied it to any local directory (rather than specifically rails apps).  I&amp;#8217;d always meant to turn the utility into a &lt;a href="http://rubygems.org/"&gt;gem&lt;/a&gt; but never quite got round to it.  Luckily, &lt;a href="http://interblah.net/"&gt;James Adam&lt;/a&gt; moved the code to &lt;a href="http://github.com/lazyatom/hostess/tree/master"&gt;github&lt;/a&gt;, tidied it a little (notably making it restart apache after a change), renamed it and gemifimibulated it.&lt;/p&gt;
&lt;p&gt;Install it with:&lt;/p&gt;
&lt;pre class="code shell"&gt;&amp;#x000A;$ gem install hostess&lt;/pre&gt;
&lt;p&gt;Executing it without any arguments will display some simple instructions.&lt;/p&gt;
&lt;pre class="code shell"&gt;&amp;#x000A;$ hostess&amp;#x000A;  Usage:&amp;#x000A;    hostess create domain directory - create a new virtual host&amp;#x000A;    hostess delete domain           - delete a virtual host&amp;#x000A;    hostess list                    - list hostess virtual hosts&amp;#x000A;    hostess help                    - this info&lt;/pre&gt;

&lt;p&gt;You&amp;#8217;ll need to run it as &lt;a href="http://en.wikipedia.org/wiki/Sudo"&gt;sudo&lt;/a&gt; as it writes the configuration into /etc/apache2 and restarts apache.&lt;/p&gt;
&lt;p&gt;To create a domain pointing at a local directory, you&amp;#8217;d do something like:&lt;/p&gt;
&lt;pre class="code shell"&gt;&amp;#x000A;$ sudo hostess create example.local ~/Sites/example.local/&lt;/pre&gt;
&lt;p&gt;This will register the local domain (the .local suffix is a convention rather than a rule) using &lt;a href="http://developer.apple.com/opensource/dirservices/"&gt;directory services&lt;/a&gt; and add the &lt;a href="http://httpd.apache.org/"&gt;apache&lt;/a&gt; &lt;a href="http://httpd.apache.org/docs/1.3/vhosts/"&gt;virtual host&lt;/a&gt;.  Open your browser and visit example.local to see your local site.  Good huh.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=ARht2bdK7Qo:cxdW2AeQ0Y8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/ARht2bdK7Qo" height="1" width="1"/&gt;</description>

        <pubDate>Tue, 23 Jun 2009 21:41:27 +0100</pubDate>
        <guid isPermaLink="false">urn:uuid:b37f5463-b2b5-4f07-b17e-6e014700ce80</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-06-23-apacherb-is-now-hostess</link>
      </item>
    
      <item>
        <title>Introducing Deliciolytics</title>
        <description>&lt;p&gt;I&amp;#8217;ve been playing around with this for a little while and although it doesn&amp;#8217;t do most of the stuff I&amp;#8217;d like I figure it&amp;#8217;s still worth allowing other people to use it: &lt;a href="http://deliciolytics.co.uk"&gt;deliciolytics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Its main purpose in life at the moment is to provide an aggregated feed of every bookmark in delicious for pages within your domain.  Feel free to go ahead and &lt;a href="http://deliciolytics.co.uk/domains/new"&gt;add your own domain&lt;/a&gt;.  You&amp;#8217;ll need to have a &lt;a href="http://sitemaps.org"&gt;sitemap&lt;/a&gt; and that sitemap will currently need to be at /sitemap.xml (it can be an index to actual sitemaps though).  After you add a domain it&amp;#8217;ll be in a pending state for up to five minutes before a task runs to &amp;#8216;normalise&amp;#8217; it.  After that you just have to wait until the task runs to download your urls (from the sitemap) and query delicious for any bookmarks against each of them.  This currently happens once every 24 hours.  Your best bet would be to subscribe to the bookmarks feed (click through to your domain and then through to bookmarks) and wait for the task to populate it with bookmarking goodness.&lt;/p&gt;
&lt;p&gt;You could easily launch a DoS attack by automating the process of adding domains but it be great if you didn&amp;#8217;t.  Thanks.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=gOX5oCd8-J4:33H4TbRkXtM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/gOX5oCd8-J4" height="1" width="1"/&gt;</description>

        <pubDate>Tue, 23 Jun 2009 21:03:47 +0100</pubDate>
        <guid isPermaLink="false">urn:uuid:42cacda7-e207-40b2-b618-bc643a320ec7</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-06-23-introducing-deliciolytics</link>
      </item>
    
      <item>
        <title>A Greasemonkey Script that inserts a Google Site Search form into every page</title>
        <description>&lt;p&gt;I often find myself wanting to use &lt;a href="http://google.com"&gt;google&lt;/a&gt; to search within a site I&amp;#8217;m visiting.  My current method is to navigate to the search box in &lt;a href="http://firefox.com"&gt;firefox&lt;/a&gt; (cmd-k) and type &amp;#8220;site:domain-of-site search-term&amp;#8221;.  That&amp;#8217;s a bit painful so I finally got around to creating a &lt;a href="http://en.wikipedia.org/wiki/Greasemonkey"&gt;greasemonkey&lt;/a&gt; script to make it easier.  &lt;a href="http://userscripts.org/scripts/show/47192"&gt;Install the script&lt;/a&gt; from the &lt;a href="http://userscripts.org"&gt;userscripts&lt;/a&gt; site.&lt;/p&gt;
&lt;p&gt;Once installed, you can hit ctrl-9 on any page (except google, that&amp;#8217;d be crazy) and a search form will appear at the top of the page ready for you to type into.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/chrisjroos/3470172619/"&gt;&lt;img src="http://farm4.static.flickr.com/3536/3470172619_99f12d3ca9.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The simplest thing is to type your search term and tap enter to view the google results.  However, it&amp;#8217;s often useful to restrict your search to more than just the domain of the site (I might want to search for things I&amp;#8217;ve said in twitter, site:twitter.com/chrisroos, for example) so there&amp;#8217;s a drop down list of url components that you can use to restrict which areas of the site you want to search.  Pressing escape within any of the fields in the search form will hide it again.&lt;/p&gt;
&lt;p&gt;A previous version of this script would display the search form at the top of each page all the time.  That didn&amp;#8217;t play nice with absolutely positioned elements already in the page though, hence my decision to only show it when you actually need it.  There&amp;#8217;s still work to do (one of the main problems is that the search form will currently be inserted into every frame on a page, including iframes) but I think it&amp;#8217;s useful enough to get out there.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=Qwthc98QvLY:a9ETneeyB2Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/Qwthc98QvLY" height="1" width="1"/&gt;</description>

        <pubDate>Fri, 24 Apr 2009 14:09:30 +0100</pubDate>
        <guid isPermaLink="false">urn:uuid:bdb63bd0-cf82-404b-9b48-83b10fa27195</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-04-24-a-greasemonkey-script-that-inserts-a-google-site-search-form-into-every-page</link>
      </item>
    
      <item>
        <title>Rails 2.3 and the ability to update created_at, created_on, updated_at and updated_on timestamps</title>
        <description>&lt;p&gt;The timing of the &lt;a href="http://groups.google.com/group/rubyonrails-security/browse_thread/thread/1d2fb5dc524f9ff4"&gt;automatically generated timestamps and attribute assignment in rails 2.3 security note&lt;/a&gt; &lt;sup class="footnote"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; was interesting to me because I&amp;#8217;d just spent a while really trying to get my head around &lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002226"&gt;attr_accessible&lt;/a&gt; and  &lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002225"&gt;attr_protected&lt;/a&gt; and the best way to test their effects in an app I was working on.  Although I intend to write about the testing separately, the conclusion I came to was that I wanted to test the behaviour (more specifically, I was interested in what I could/couldn&amp;#8217;t assign) of my objects and not that I was specifically using attr_accessible or attr_protected.&lt;/p&gt;
&lt;p&gt;Reading Alex&amp;#8217;s post made me wonder whether the &lt;a href="http://rubyonrails.org/"&gt;rails&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/API"&gt;&lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; ever guaranteed that the timestamps would be readonly: If that was the case then I can see arguments for not wanting to test the behaviour of your objects (because you&amp;#8217;re essentially testing the framework itself).  I couldn&amp;#8217;t find any mention of whether they&amp;#8217;d specifically be readonly so chose to do a bit of digging.  I created a &lt;a href="http://chrisroos.googlecode.com/svn/trunk/scratch/rails_timestamps_test/"&gt;script&lt;/a&gt; that allowed me to, with relative ease, run tests against rails apps created with different versions of rails.  Using this I was able to test the mass assignment of timestamps (created_at, created_on, updated_at and updated_on) against multiple versions of rails.  The conclusion I came to (and I&amp;#8217;d love for other people to replicate my experiment and prove/disprove my results) was that the created_at and created_on pair of attributes have always (at least as far back as rails 1.0.0) been assignable, while the updated_at and updated_on attributes have only recently become assignable.  While digging I managed to find the &lt;a href="https://rails.lighthouseapp.com/projects/8994/tickets/1612-cant-create-ar-models-with-custom-updated_xx-timestamp"&gt;lighthouse ticket&lt;/a&gt; (#1612) that requested the ability to set the updated_* timestamps and the &lt;a href="http://github.com/rails/rails/commit/63aac338332a06d3c9e28dde7954679703ec7620"&gt;rails commit&lt;/a&gt; that closed that ticket.&lt;/p&gt;
&lt;h2 id="replicating-my-experiment"&gt;Replicating my experiment&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;Get a copy of rails&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code shell"&gt;&amp;#x000A;  $ cd /path/to/code&amp;#x000A;  $ git clone git://github.com/rails/rails.git&lt;/pre&gt;
&lt;ul&gt;
	&lt;li&gt;Create a &lt;a href="http://www.mysql.com/"&gt;mysql&lt;/a&gt; database called rails_timestamps_test, and create a table within that database called people.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code sql"&gt;&amp;#x000A;  mysql&amp;gt; CREATE DATABASE rails_timestamps_test;&amp;#x000A;  mysql&amp;gt; USE rails_timestamps_test;&amp;#x000A;  mysql&amp;gt; CREATE TABLE people (id INTEGER AUTO_INCREMENT, created_on DATE, created_at DATETIME, updated_on DATE, updated_at DATETIME, PRIMARY KEY (id));&lt;/pre&gt;
&lt;ul&gt;
	&lt;li&gt;Get a copy of my test script&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code shell"&gt;&amp;#x000A;  $ cd /path/to/code&amp;#x000A;  $ svn co http://chrisroos.googlecode.com/svn/trunk/scratch/rails_timestamps_test&lt;/pre&gt;
&lt;ul&gt;
	&lt;li&gt;Run my script against rails 2.3 (run setup_rails_project.rb without any arguments to see the options) and hopefully see output similar to below (which means that the tests passed as expected).&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code shell"&gt;&amp;#x000A;  $ cd /path/to/code/rails_timestamps_test&amp;#x000A;  $ ruby setup_rails_project.rb 2.3.0 /path/to/code/rails&amp;#x000A;  &amp;#x000A;  *** Removing the rails app at /path/to/code/rails_timestamps_test/projects/rails-app-2-3-0&amp;#x000A;  *** Checking out the rails version tagged v2.3.0&amp;#x000A;  HEAD is now at beca1f2... Template#mime_type should not use Mime::Type when Action Controller is not included&amp;#x000A;  *** Creating the rails app at /path/to/code/rails_timestamps_test/projects/rails-app-2-3-0&amp;#x000A;  *** Vendorising rails from /path/to/code/rails to /path/to/code/rails_timestamps_test/projects/rails-app-2-3-0&amp;#x000A;  *** Generating rails_version_test.rb in /path/to/code/rails_timestamps_test/projects/rails-app-2-3-0/test/unit to ensure we are testing against the correct version of rails&amp;#x000A;  *** Copying assets to the new rails app&amp;#x000A;  ****** Linking /path/to/code/rails_timestamps_test/assets/person_test.rb to /path/to/code/rails_timestamps_test/projects/rails-app-2-3-0/test/unit/person_test.rb&amp;#x000A;  ****** Linking /path/to/code/rails_timestamps_test/assets/person.rb to /path/to/code/rails_timestamps_test/projects/rails-app-2-3-0/app/models/person.rb&amp;#x000A;  ****** Linking /path/to/code/rails_timestamps_test/assets/database.yml to /path/to/code/rails_timestamps_test/projects/rails-app-2-3-0/config/database.yml&amp;#x000A;  *** Running the rails version test to ensure that we're testing against the correct version of rails&amp;#x000A;  Loaded suite test/unit/rails_version_test&amp;#x000A;  Started&amp;#x000A;  .&amp;#x000A;  Finished in 0.000327 seconds.&amp;#x000A;&amp;#x000A;  1 tests, 1 assertions, 0 failures, 0 errors&amp;#x000A;  *** Running the timestamps test&amp;#x000A;  Loaded suite test/unit/person_test&amp;#x000A;  Started&amp;#x000A;  ....&amp;#x000A;  Finished in 0.078819 seconds.&amp;#x000A;&amp;#x000A;  4 tests, 8 assertions, 0 failures, 0 errors&lt;/pre&gt;
&lt;ul&gt;
	&lt;li&gt;Re-run the script against rails 2.2.2 (the last tag before 2.3) and you should see the same as above except for the last test which should now contain two failures.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code shell"&gt;&amp;#x000A;  $ cd /path/to/code/rails_timestamps_test&amp;#x000A;  $ ruby setup_rails_project.rb 2.2.2 /path/to/code/rails&amp;#x000A;  &amp;#x000A;  ... some lines snipped ...&amp;#x000A;  *** Running the timestamps test&amp;#x000A;  Loaded suite test/unit/person_test&amp;#x000A;  Started&amp;#x000A;  ..FF&amp;#x000A;  Finished in 0.069429 seconds.&amp;#x000A;&amp;#x000A;    1) Failure:&amp;#x000A;  test_should_be_able_to_set_updated_at(PersonTest)&amp;#x000A;      [test/unit/person_test.rb:35:in `test_should_be_able_to_set_updated_at'&amp;#x000A;       /path/to/code/rails_timestamps_test/projects/rails-app-2-2-2/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in `__send__'&amp;#x000A;       /path/to/code/rails_timestamps_test/projects/rails-app-2-2-2/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in `run']:&amp;#x000A;  FAIL: Couldn't persist the mass assigned updated_at attribute.&amp;#x000A;  &amp;lt;Thu Jan 01 00:00:00 +0000 2009&amp;gt; expected but was&amp;#x000A;  &amp;lt;Sun, 19 Apr 2009 09:23:46 UTC +00:00&amp;gt;.&amp;#x000A;&amp;#x000A;    2) Failure:&amp;#x000A;  test_should_be_able_to_set_updated_on(PersonTest)&amp;#x000A;      [test/unit/person_test.rb:28:in `test_should_be_able_to_set_updated_on'&amp;#x000A;       /path/to/code/rails_timestamps_test/projects/rails-app-2-2-2/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in `__send__'&amp;#x000A;       /path/to/code/rails_timestamps_test/projects/rails-app-2-2-2/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in `run']:&amp;#x000A;  FAIL: Couldn't persist the mass assigned updated_on attribute.&amp;#x000A;  &amp;lt;Thu, 01 Jan 2009&amp;gt; expected but was&amp;#x000A;  &amp;lt;Sun Apr 19 09:23:46 UTC 2009&amp;gt;.&amp;#x000A;&amp;#x000A;  4 tests, 8 assertions, 2 failures, 0 errors&lt;/pre&gt;
&lt;ul&gt;
	&lt;li&gt;Re-run the script against any other tagged version of rails you wish.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="notes-about-the-script"&gt;A couple of notes about the script&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;If you specify an invalid tag (i.e. a tag that doesn&amp;#8217;t exist in the rails repository) then the rails_version_test.rb will fail.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="code shell"&gt;&amp;#x000A;  $ cd /path/to/code/rails_timestamps_test&amp;#x000A;  $ ruby setup_rails_project.rb made.up.tag /path/to/code/rails&amp;#x000A;  &amp;#x000A;  ... some lines snipped ...&amp;#x000A;  Loaded suite test/unit/rails_version_test&amp;#x000A;  Started&amp;#x000A;  F&amp;#x000A;  Finished in 0.045543 seconds.&amp;#x000A;&amp;#x000A;    1) Failure:&amp;#x000A;  test_should_be_using_rails_made_up_tag(RailsVersionTest)&amp;#x000A;      [test/unit/rails_version_test.rb:6:in `test_should_be_using_rails_made_up_tag'&amp;#x000A;       /path/to/code/rails_timestamps_test/projects/rails-app-made-up-tag/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in `__send__'&amp;#x000A;       /path/to/code/rails_timestamps_test/projects/rails-app-made-up-tag/vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:94:in `run']:&amp;#x000A;  &amp;lt;"made.up.tag"&amp;gt; expected but was&amp;#x000A;  &amp;lt;"2.2.2"&amp;gt;.&amp;#x000A;&amp;#x000A;  1 tests, 1 assertions, 1 failures, 0 errors&lt;/pre&gt;
&lt;ul&gt;
	&lt;li&gt;If you specify a tag of rails that is anything other than a 3 part version number (e.g. the four part version 2.3.2.1, or the release candidate 2.1.0_RC1) then the version test will fail because the Rails::&lt;span class="caps"&gt;VERSION&lt;/span&gt; constant only contains the &lt;span class="caps"&gt;MAJOR&lt;/span&gt;, &lt;span class="caps"&gt;MINOR&lt;/span&gt; and &lt;span class="caps"&gt;TINY&lt;/span&gt; components and that&amp;#8217;s what we use to check the version our app uses.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;The supplied database.yml file assumes a mysql database running on localhost that has a root user with no password.  You can update this to reflect your actual environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;The projects are created in /path/to/code/rails_timestamps_test/projects/ with a name like rails-app-x-x-x (major, minor, tiny).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;In order to ensure we are testing against the correct version of rails, I symlink rails from /path/to/code/rails (after changing to the requested tag) into rails-app-x-x-x/vendor/rails.  The problem here is that if you re-run the script with a different rails version and then attempt to run a test from your first project that it will be using the recently specified version of rails.  Luckily, the rails_version_test will fail fast which means you shouldn&amp;#8217;t have to waste time wondering why something is not working as expected.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;I wonder whether it&amp;#8217;d be useful to extract the &amp;#8216;create a rails app from a specific version of rails&amp;#8217; functionality out of this script?&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;a href="http://www.eribium.org/"&gt;Alex MacCaw&lt;/a&gt; &lt;a href="http://www.madebymany.co.uk/a-rails-security-flaw-destroying-the-audit-trail-00820"&gt;raised the issue&lt;/a&gt; in reference to number eight in the list of &lt;a href="http://railspikes.com/2009/3/30/10-cool-things-in-rails-23"&gt;10 cools things in Rails 2.3&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=LUIbrh3-11A:izJImGqnJWc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/LUIbrh3-11A" height="1" width="1"/&gt;</description>

        <pubDate>Sun, 19 Apr 2009 08:39:23 +0100</pubDate>
        <guid isPermaLink="false">urn:uuid:866f3fd0-a5dd-4b6a-8800-9ff58940fd3d</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-04-19-rails-2-3-and-the-ability-to-update-created_at-created_on-updated_at-and-updated_on-timestamps</link>
      </item>
    
      <item>
        <title>Generating and Inserting a Rel=Canonical Link Into Pages With Firefox and Greasemonkey</title>
        <description>&lt;p&gt;I&amp;#8217;ve been &lt;a href="/blog/2007-12-14-web-pages-should-specify-their-canonical-url-permalink"&gt;thinking about this for over a year&lt;/a&gt; but have only recently got around to doing something about it.  I&amp;#8217;ve also chosen to use &lt;a href="http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html"&gt;rel=canonical&lt;/a&gt; rather than rel=bookmark.&lt;/p&gt;
&lt;p&gt;The magic is all in &lt;a href="http://userscripts.org/scripts/show/46797"&gt;this&lt;/a&gt; &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748"&gt;greasemonkey&lt;/a&gt; script.  It uses little rule objects to generate the canonical urls for, at the moment, &lt;a href="http://ebay.co.uk"&gt;ebay&lt;/a&gt;, &lt;a href="http://google.co.uk"&gt;google&lt;/a&gt; and &lt;a href="http://theyworkforyou.com"&gt;theyworkforyou&lt;/a&gt; and insert those urls into the page as a link element with rel=canonical.  Combining my script with the &lt;a href="http://www.facesaerch.com/widget/showcanonical.user.js"&gt;show canonical&lt;/a&gt; greasemonkey script (found on the &lt;a href="http://www.tripwolf.com/en/blog/2009/03/17/offtopic-canonical-a-powerful-seo-concept/"&gt;tripwolf blog&lt;/a&gt;) allows me to easily visit and use the canonical url in emails and the like.&lt;/p&gt;
&lt;p&gt;You should just about be able to see the relatively short canonical url compared to the large url generated by my searching from the firefox search box.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/chrisjroos/3440988983/"&gt;&lt;img src="http://farm4.static.flickr.com/3627/3440988983_1fe7b0518a_o.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I hope to expand the set of rules (if you wanted to create one right now I&amp;#8217;d suggest looking at the source of the script, the rules are defined towards the end of the script, and the &lt;a href="http://chrisroos.googlecode.com/svn/trunk/scratch/javascript-permalinks/test/rules/"&gt;rule tests&lt;/a&gt;) and possible have some central repository of rules that the script could use.  If you know of some sites that you&amp;#8217;d like to see canonical urls for, but don&amp;#8217;t want to create the rule, then let me know and I&amp;#8217;ll see if I can create it for you.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?a=ImlluPOv9Fg:i7Dg9ya93bQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DeferredUntilInspirationHits?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DeferredUntilInspirationHits/~4/ImlluPOv9Fg" height="1" width="1"/&gt;</description>

        <pubDate>Tue, 14 Apr 2009 14:14:00 +0100</pubDate>
        <guid isPermaLink="false">urn:uuid:fca91c96-2df9-4112-b7b7-8902fed60a6d</guid>
        <author>Chris Roos</author>
        <link>http://chrisroos.co.uk/blog/2009-04-14-generating-and-inserting-a-rel=canonical-link-into-pages-with-firefox-and-greasemonkey</link>
      </item>
    
  </channel>
</rss>
