<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4240786176156966898</id><updated>2011-10-28T11:38:41.608+01:00</updated><category term='apache'/><category term='firefox'/><category term='PHP'/><category term='xampp'/><category term='addons'/><category term='technology'/><category term='Google Chrome'/><category term='android'/><category term='jQuery'/><category term='CSS'/><category term='news'/><category term='software'/><category term='photography'/><category term='web apps'/><category term='AJAX'/><category term='web development'/><category term='mobile phones'/><category term='music'/><category term='CodeIgniter'/><category term='django'/><category term='life'/><category term='web browsers'/><title type='text'>MATT'S RANDOM STUFF</title><subtitle type='html'>This is my dumping ground for thoughts, ideas, links and ramblings about everything and nothing in particular!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>89</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-644079114917466302</id><published>2011-06-22T15:00:00.000+01:00</published><updated>2011-06-22T15:00:48.224+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Upgrading from CyanogenMod 6.1 to 7</title><content type='html'>I've been running CyanogenMod 6.1 pretty much since it came out last year. It's served me extremely well and I've had very few problems with it. However, I bought a new 16Gb class 10 SD card a while ago which I wanted to replace for the existing one and have been itching to get me some Gingerbread action since Cyanogen moved up to version 7 a couple of months back.&lt;br /&gt;&lt;br /&gt;Several things put me off doing it sooner. I had apps2ext set up (using the command line tool by DarkTremor) and I'd read some reports about compatibility issues between CM7, DT and some versions of ClockworkMod. There was also a suggestion that you couldn't use Titanium Backup to upgrade apps and data from CyanogenMod 6 to 7. Plus the fact that the only reliable source of information on these sort of things is the XDA forums, where&amp;nbsp;most of the relevant threads run to over 100 pages, meant that it was never going to be a very quick process!&lt;br /&gt;&lt;br /&gt;(I should point out before I go any further, just for the benefit of anyone reading this who is unfamiliar with the whole custom ROM thing on Android - what I'm talking about here is &lt;i&gt;not&lt;/i&gt; the standard method of upgrading an Android phone to a newer version! If you stick to the standard ROM that comes preinstalled on your phone, as 99% of people do, then upgrading is pretty much a one-click affair. Custom ROMs, on the other hand can be a bit trickier to deal with, especially when you start messing around with extra hacks like apps2ext. But I'm a sucker for punishment. Or, more accurately, I'm still using a phone - the HTC Desire - with a relatively small internal storage and I like to have a lot of apps, so the built in apps2sd isn't enough.)&lt;br /&gt;&lt;br /&gt;Anyway, after eventually getting to the point where I felt I knew enough to take the plunge, I wrote a bulleted list of things to do, just to make sure I didn't miss anything along the way. It looked something like this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use Gparted on Linux to format new SD card with 15GB FAT32 and 1GB ext3 partition&lt;/li&gt;&lt;li&gt;Make sure all phone apps/data backed up in Titanium&amp;nbsp;&lt;/li&gt;&lt;li&gt;Boot into recovery and do full Nandroid backup to old SD card&amp;nbsp;&lt;/li&gt;&lt;li&gt;Back up old SD to computer (using Linux to include ext3 partition)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Take out old SD card&amp;nbsp;&lt;/li&gt;&lt;li&gt;Download CM7, GApps &amp;amp; DarkTremor to computer&amp;nbsp;&lt;/li&gt;&lt;li&gt;Copy CM7, GApps &amp;amp; DarkTremor to new SD card&amp;nbsp;&lt;/li&gt;&lt;li&gt;Insert new SD card into phone&amp;nbsp;&lt;/li&gt;&lt;li&gt;Boot into recovery and do factory reset/full wipe (but not SD card!)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Install CM7 from SD (still in recovery)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Install GApps from SD&amp;nbsp;&lt;/li&gt;&lt;li&gt;Reboot and sign in to Google&amp;nbsp;&lt;/li&gt;&lt;li&gt;Reboot into recovery&amp;nbsp;&lt;/li&gt;&lt;li&gt;Install DarkTremor 2.7.5.2&amp;nbsp;&lt;/li&gt;&lt;li&gt;Reboot&amp;nbsp;&lt;/li&gt;&lt;li&gt;Open terminal and run DarkTremor commands: su, a2sd cachesd&amp;nbsp;&lt;/li&gt;&lt;li&gt;Reboot&amp;nbsp;&lt;/li&gt;&lt;li&gt;Copy SD card contents (FAT32 partition) from computer to new SD card in phone&amp;nbsp;&lt;/li&gt;&lt;li&gt;Restore apps and data using Titanium&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Simple enough right?!&amp;nbsp;That's when the fun started...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Partitioning the new SD card was fairly straightforward. I followed &lt;a href="http://forum.xda-developers.com/showthread.php?t=535914"&gt;this guide on XDA&lt;/a&gt;&amp;nbsp;(ignoring the bit about creating a disk image to run Gparted on Windows as I was using Linux).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next I backed up all my apps, app data and system data using Titanium Backup (just in case there was a chance I could restore anything from it after I'd upgraded), then rebooted the phone into recovery. (I'm currently using&amp;nbsp;ClockworkMod 2.5.0.7. There's a newer version but reports suggested it didn't work well with DarkTremor so I stuck to the older version..&lt;br /&gt;&lt;br /&gt;Once in recovery, I did a nandroid backup (for the uninitiated that's a &lt;i&gt;full&lt;/i&gt; system backup saved to the SD card, which, if anything goes wrong, you can use to restore your phone to the exact state it was in previously).&lt;br /&gt;&lt;br /&gt;I powered off, took the SD card out of the phone and copied all the files from it onto the computer. Then&amp;nbsp;I downloaded the latest stable version of CyanogenMod 7 (7.0.3) for the HTC Desire, plus the latest recommended Google Apps package, and the latest stable version of DarkTremor. Then I copied these onto the new SD card along with the Titanium Backup folder off the old SD card before inserting it into the phone and booting into recovery.&lt;br /&gt;&lt;br /&gt;In recovery, I performed a factory reset to wipe the phone's internal storage. This feels like the point of no return (although it's not really, as I could have always reinserted the old SD card and done a nandroid restore to get everything back to its original state).&lt;br /&gt;&lt;br /&gt;After rebooting into recovery again, I flashed CyanogenMod and Google Apps, before rebooting the phone fully.&lt;br /&gt;&lt;br /&gt;Everything loaded up fine and I was prompted to enter my Google credentials. Having done so, and without going through the further steps of setting up Google sync etc, I powered off and booted back into recovery where I installed DarkTremor, then rebooted again.&lt;br /&gt;&lt;br /&gt;Again everything was fine. I went through the setup process, then opened the Terminal Emulator app and ran the 'a2sd cachesd' command to tell DarkTremor to move apps and dalvik cache to the ext partition of the sd card. Another reboot, and all seemed fine again. I installed the 'Quick System Info' app to keep an eye on storage levels and also Titanium Backup to restore my apps.&lt;br /&gt;&lt;br /&gt;However, I started running into issues like apps force closing or the phone randomly rebooting when I tried to install certain apps. I ended up doing a factory reset and starting again, but ran into the same problems. Initially I suspected it was Titanium causing the problems so I just used it to restore the apps rather than apps + app data, but this didn't seem to solve it. Another factory reset and more of the same. This time I thought perhaps it was DarkTremor causing the problems, so I installed an app called S2E (simple2ext) from the Market that does pretty much the same thing as DT (without some of the more advanced features I didn't use anyway) but with a nice simple to use GUI. But again the same problems cropped up. I decided the finger of blame must still be pointing at Titanium so after yet another factory reset I set about resintalling my apps but this time completely from scratch - I simply used the list of backed up apps in Titanium as reference, then installed and configured them manually from scratch.&lt;br /&gt;&lt;br /&gt;This solved everything, so in the end I really should have just listened to the advice about not using Titanium to upgrade restore from CM 6 to 7! It was a pain, to be sure, as manually installing and reconfiguring over 100 apps is a big deal, especially when many of them are quite involved like Tasker, Launcher Pro and Titanium Media Sync.&lt;br /&gt;&lt;br /&gt;However, several days later with everything back up and running and my normal sleep pattern restored, I was glad I upgraded. Gingerbread is so much nicer than Froyo, both in terms of visual gloss and performance. And CyanogenMod 7 adds a lot of really nice extra features and enhancements too. The only downside I've noticed so far compared to the previous version is that the auto brightness doesn't seem as responsive, but having said that there is a facility in CyanogenMod to customise this so I just need to spend a bit of time tweaking it I guess. Whether I will do or not depends whether I can be bothered between now and the end of August when my contract us up and I can upgrade to a new phone......&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-644079114917466302?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/644079114917466302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=644079114917466302' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/644079114917466302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/644079114917466302'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2011/06/upgrading-from-cyanogenmod-61-to-7.html' title='Upgrading from CyanogenMod 6.1 to 7'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1492406905833005120</id><published>2011-04-07T17:31:00.002+01:00</published><updated>2011-04-07T17:33:50.681+01:00</updated><title type='text'>CSS media queries</title><content type='html'>Media queries from a few sites, just for comparison...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://colly.com/"&gt;colly.com&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;@media (min-device-width:1024px) and (max-width:989px),&lt;br /&gt;screen and (max-device-width:480px),&lt;br /&gt;(max-device-width:480px) and (orientation:landscape),&lt;br /&gt;(min-device-width:481px) and (max-device-width:1024px) and (orientation:portrait)&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;@media (min-device-width:1024px) and (max-width:509px),&lt;br /&gt;(max-device-width:480px) and (orientation:portrait)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://hicksdesign.co.uk/"&gt;hicksdesign.co.uk&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width: 500px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width: 800px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (min-width: 1024px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;----&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/*layouts smaller than 600px, iPhone and mobiles*/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media handheld and (max-width: 480px), screen and (max-device-width: 480px), screen and (max-width: 600px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/*layouts larger than 900px*/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (min-width: 920px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (min-width: 1350px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (min-width: 1500px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/*Just iPhone*/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen and (max-device-width: 480px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/*iPad styles*/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen and (min-device-width: 768px) and (max-device-width: 1024px)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://alistapart.com/d/responsive-web-design/ex/ex-site-FINAL.html"&gt;alistapart.com/d/responsive-web-design/ex/ex-site-FINAL.html&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media (max-width: 600px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media (max-width: 400px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media (min-width: 1300px)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://simplebits.com/"&gt;simplebits.com&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width: 800px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width: 650px)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://mediaqueri.es/"&gt;mediaqueri.es&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width:64em)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width:48em)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width:20em)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width:23em)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://hardboiledwebdesign.com/"&gt;hardboiledwebdesign.com&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (min-device-width : 768px) &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (max-device-width : 1024px) &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (orientation : portrait)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen and (max-width : 480px)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hardboiled CSS3 Media Queries&lt;/b&gt;&lt;br /&gt;(&lt;a href="http://stuffandnonsense.co.uk/blog/about/hardboiled_css3_media_queries"&gt;http://stuffandnonsense.co.uk/blog/about/hardboiled_css3_media_queries&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* Smartphones (portrait and landscape) ----------- */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (min-device-width : 320px) &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (max-device-width : 480px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* Smartphones (landscape) ----------- */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (min-width : 321px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* Smartphones (portrait) ----------- */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (max-width : 320px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* iPads (portrait and landscape) ----------- */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (min-device-width : 768px) &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (max-device-width : 1024px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* iPads (landscape) ----------- */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (min-device-width : 768px) &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (max-device-width : 1024px) &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (orientation : landscape)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* iPads (portrait) ----------- */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (min-device-width : 768px) &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (max-device-width : 1024px) &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (orientation : portrait)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* Desktops and laptops ----------- */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (min-width : 1224px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* Large screens ----------- */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media only screen &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;and (min-width : 1824px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* iPhone 4 ----------- */&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;only screen and (-webkit-min-device-pixel-ratio : 1.5),&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;only screen and (min-device-pixel-ratio : 1.5)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://yiibu.com/"&gt;yiibu.com&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;media="screen, handheld"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;media="only screen and (min-width: 320px) and (max-width: 640px)"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;media="only screen and (min-width: 640px)"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://stunningcss3.com/code/bakery"&gt;stunningcss3.com/code/bakery&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (min-width: 1200px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width: 760px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width: 550px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (max-width: 400px)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@media screen and (-webkit-min-device-pixel-ratio: 2) and (max-width: 480px)&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1492406905833005120?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1492406905833005120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1492406905833005120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1492406905833005120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1492406905833005120'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2011/04/css-media-queries.html' title='CSS media queries'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3927286982256419448</id><published>2010-08-06T09:15:00.001+01:00</published><updated>2010-08-06T09:16:59.132+01:00</updated><title type='text'>Add a desktop shortcut to a BBC radio station (Windows)</title><content type='html'>&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Open BBC iPlayer in Google Chrome.&lt;/li&gt;&lt;li&gt;Click on the 'Radio' tab.&lt;/li&gt;&lt;li&gt;Under 'Radio Stations' click a station.&lt;/li&gt;&lt;li&gt;Click 'Listen Live'.&amp;nbsp;The player will open in a popup window.&lt;/li&gt;&lt;li&gt;Right click on the title bar of the popup window and select 'Show as tab'.&amp;nbsp;The player window will change to a standard Chrome window with tab and toolbars.&lt;/li&gt;&lt;li&gt;Click on the page menu (the page icon to the right of the address bar) and select 'Create Application Shortcuts'.&lt;/li&gt;&lt;li&gt;Tick 'Desktop' (or wherever you want the shortcut to be placed).&lt;/li&gt;&lt;li&gt;Click 'Create'.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now test the newly created shortcut by clicking it. It should open the radio player in a new Chrome 'application' window and start playing automatically.&lt;/p&gt;&lt;p&gt;You can resize the application window to fit the player, and next time you open it it should remember this window size.&lt;/p&gt;&lt;p&gt;You can change the icon from the rather fuzzy BBC icon it has by default to something a bit nicer:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Create a 32px x 32px image.&lt;/li&gt;&lt;li&gt;Save it as a .ico file (I use the ICO Photoshop plugin but there are free/online tools that'll let you do this).&lt;/li&gt;&lt;li&gt;Right click on the radio player shortcut and&amp;nbsp;select 'Properties'&lt;/li&gt;&lt;li&gt;Click the 'Change icon' button.&lt;/li&gt;&lt;li&gt;Find the new icon you created and click 'Apply'.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_juNfFnT8BTc/TFvETW8A4nI/AAAAAAABwYw/4awSUjqLl5o/s1600/radio3.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_juNfFnT8BTc/TFvETW8A4nI/AAAAAAABwYw/4awSUjqLl5o/s200/radio3.png" width="187" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3927286982256419448?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3927286982256419448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3927286982256419448' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3927286982256419448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3927286982256419448'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/08/add-desktop-shortcut-to-bbc-radio.html' title='Add a desktop shortcut to a BBC radio station (Windows)'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_juNfFnT8BTc/TFvETW8A4nI/AAAAAAABwYw/4awSUjqLl5o/s72-c/radio3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-185607610248221875</id><published>2010-07-16T23:38:00.000+01:00</published><updated>2010-07-16T23:38:38.075+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Rooting my HTC Desire</title><content type='html'>Well, that was easy!&lt;br /&gt;&lt;br /&gt;Actually I've been trying to do it for weeks, but each time I've run into problems with drivers on Windows, not behaving properly, and the phone not being recognised.&lt;br /&gt;&lt;br /&gt;Then I came across the latest one-click root procedure from unrEVOked today and thought this looks more like it. There are actually two methods, detailed &lt;a href="http://myhtcdesire.com/modding/how-to-root-your-desire-easily-method-1"&gt;here&lt;/a&gt; and &lt;a href="http://myhtcdesire.com/modding/how-to-root-your-desire-easily-method-2"&gt;here&lt;/a&gt;&amp;nbsp;- I started with the Windows version but again ran into trouble with the drivers. So I decided to try the Linux route (root?!).&lt;br /&gt;&lt;br /&gt;My wife has Ubuntu 10.04 installed on her netbook so I guessed I didn't need to mess around with live CDs and all that.&lt;br /&gt;&lt;br /&gt;Here's what I did:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to&amp;nbsp;&lt;a href="http://unrevoked.com/recovery/"&gt;http://unrevoked.com/recovery/&lt;/a&gt;&amp;nbsp;and click 'Download for Linux'&lt;/li&gt;&lt;li&gt;Save the package somewhere (Downloads folder)&lt;/li&gt;&lt;li&gt;Go to the folder where the downloaded package is and unpack it.&lt;/li&gt;&lt;li&gt;Open a console application&lt;/li&gt;&lt;li&gt;Navigate to the download location (cd Downloads)&lt;/li&gt;&lt;li&gt;Type 's&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px; line-height: 19px;"&gt;udo ./reflash' to launch it as super user&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px; line-height: 19px;"&gt;Plug the phone in to the computer (select charge only)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px; line-height: 19px;"&gt;Go into settings &amp;gt; applications &amp;gt; development and tick 'Enable USB debugging'&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px; line-height: 19px;"&gt;Wait for the phone to be rooted - it takes 30 seconds or so. When it's done it'll reboot.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px; line-height: 19px;"&gt;Simple as that!&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;It doesn't wipe any data, settings or apps - in fact the only way of telling whether it has worked is that you'll see a new app in the app launcher called 'Superuser Persmissions' (which just shows a blank screen if you open it, by the way).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;To double check I downloaded Titanium some apps from the market that require root permissions, and they work!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;So now I have a rooted HTC Desire. Next step is to install a custom ROM. I'll keep you posted!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-185607610248221875?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/185607610248221875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=185607610248221875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/185607610248221875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/185607610248221875'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/07/rooting-my-htc-desire.html' title='Rooting my HTC Desire'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2787630754943107511</id><published>2010-06-18T09:16:00.000+01:00</published><updated>2010-06-18T09:16:17.194+01:00</updated><title type='text'>Less heat more light please</title><content type='html'>I &lt;a href="http://twitter.com/mattots/status/16300066342"&gt;posted something on Twitter&lt;/a&gt; a few days ago that, while some may think it hypocritical coming from someone who has had their fair share of fanboy moments, is actually the truth.&lt;br /&gt;&lt;br /&gt;It stems from this whole iPhone vs. Android thing that has been going on in our office ever since I got my Android phone a few months ago, and which, I have to confess was at least in part of my own making (although even if I'd said nothing I don't doubt there would have been some people who would still have kicked up a fuss).&lt;br /&gt;&lt;br /&gt;But it goes beyond phones and highlights something that has been bugging me for a while now. It's this whole thing of slagging off, either directly or indirectly, people, products, companies, ideas, etc. that don't tally up with your own particular views, preferences or lifestyle choices.&lt;br /&gt;&lt;br /&gt;It's nothing new, and it can be found across every part of society, but it seems to have been implicitly sanctioned among techie circles as if its somehow ok to be derogatory if you're talking about technology. Just look at the vehemence with which people will not only defend their particular brand of phone or computer or games console, but also belittle and ridicule the competition as if it was so completely ridiculous that anyone could possibly have a different opinion or make a different choice. And of course, what is implied is that the people who have made those different choices and hold those different opinions are therefore somehow a bit retarded or stupid or deluded or whatever!&lt;br /&gt;&lt;br /&gt;Competition is good and healthy and necessary, don't get me wrong, that's not what I'm arguing against. Nor am I suggesting that people shouldn't hold opinions or defend their choices. But what I am saying is that when that spills over into arrogance, pride, or antagonism, it turns sour and has a detrimental effect all round.&lt;br /&gt;&lt;br /&gt;Not only is it unpleasant, I think it is actually damaging for the whole industry if these sorts of things take a hold. Far better that people learn to see the good and appreciate the best across the board. My choices are my choices. My opinions are my opinions. Other people are not only entitled to their choices and opinions, they are also just as right about them as I am about mine. That's because most of what lies behind those choices and opinions is purely subjective - what I prefer, rather than what is objectively better. People can - and do - argue at great length over whether this or that technology is better than another, but often the reality is not that one is better, it's simply that they are different. 'Better' depends on your frame of reference.&lt;br /&gt;&lt;br /&gt;Anyway, what I am trying to say, in a very roundabout and garbled way, is: lets all just learn to get along. Let's look for the positives rather than the negatives. Let's realise that everyone has got something worthwhile to bring to the table. No-one has it all, no-one is the winner. All common-sense stuff really once you step away from the heat of it all and look at things objectively.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2787630754943107511?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2787630754943107511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2787630754943107511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2787630754943107511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2787630754943107511'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/06/less-heat-more-light-please.html' title='Less heat more light please'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5610591591204240105</id><published>2010-06-10T14:33:00.003+01:00</published><updated>2010-06-10T20:26:37.174+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>The great iPhone vs Android debate</title><content type='html'>I've been feeling the need to write this blog entry for some time. I don't blog about much these days - Twitter is so much easier; but trying to say what I want to say in 140 characters is not quite possible.&lt;br /&gt;&lt;br /&gt;Let me be clear - I don't hate Apple and I don't think iPhones are rubbish. Yes, there are things I dislike about Apple's way of doing things, but equally they do a lot of things very, very well - the iPhone is a good example of this.&lt;br /&gt;&lt;br /&gt;However, since getting my Android phone I have encountered an awful lot of myths about Android, both implicit and explicit, among iPhone users, and I feel compelled to try and dispel/counter them as best I can.&lt;br /&gt;&lt;br /&gt;I guess the fact that I am the only person amongst my work colleagues with an Android phone while the vast majority have iPhones, iPods and Macs of various descriptions means there is an inevitable bias towards Apple products, along with the fact that I've always been the sort of person to side with the underdog rather than jump on the bandwagon, tends to get me more worked up than I might otherwise be in a different environment, but nevertheless, I want to try and keep a level head and be reasonable and balanced in what I say.&lt;br /&gt;&lt;br /&gt;There are a number of perceptions of Android (the operating system itself and Android phones more generally) that crop up repeatedly:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Android is geeky&lt;/b&gt;&lt;br /&gt;Of course, there's nothing wrong with being geeky. But quite where this idea comes from I'm not sure. Well, I have an idea.&amp;nbsp;It's partly the name 'Android' which obviously has a rather techy, geeky, Trekky kind of sound to it - clearly that means nothing, but it may have contributed to the perception to some extent. Partly its the fact that Android is open source and therefore has quite a techy community around it, coupled with the fact that early versions of the OS were still fairly 'beta' compared to the iPhone which came onto the market as a fully finished, packaged product. The situation today is quite different. Yes, Android is still open source, and there is still a large techy community around it, but the OS is no longer anything like beta and can hold its own against the iPhone OS any day, if not surpassing it in some areas. Also, the early adopters of Android did tend to be the geekier types - simply because of the open source, beta thing. But that doesn't mean it's geared towards geeks, or that it is better suited to geeks. Yes, geeky types may well find Android more appealing because of the fact they can play around with the code etc in a way they can't with the iPhone, but that isn't a reflection on the OS as a whole.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;iPhones just work&lt;/b&gt;&lt;br /&gt;The implication of course is that Android phones require more time and effort to set up, configure and generally use. I can say quite categorically that my HTC Desire couldn't have been simper to set up, configure and start using. I took it out the box, pressed the power button, it asked me to enter my Google, Twitter, Facebook and Flickr usernames and passwords, and that was that, done, ready to go. There was literally nothing else to do.&lt;br /&gt;&lt;br /&gt;Now obviously there are plenty of options and settings if you really want to get stuck in and customise the phone. Although to be honest, even as someone who quite enjoys that sort of thing, I've not found the need to as everything works so well already. But I like the fact that the options are there should I decide I want to change something - they're there but don't get in the way, which is key. I sometimes hear the argument that giving people too many options is a bad thing. It's only bad if you force them on the user and confuse them. With Android, the options are there, but if you're not into that sort of thing you can completely ignore them and get on with your life - in fact you don't even need to know they're there.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;There are more apps for the iPhone&lt;/b&gt;&lt;br /&gt;True, but there are also over 50,000 apps for Android. There are plenty of pointless apps for iPhone just as there are for Android. Most worthwhile apps are available for both, and in fact Android has some notable apps that are not and probably never will be available for iPhone (Google Nav for example).&lt;br /&gt;&lt;br /&gt;More apps doesn't therefore&amp;nbsp;necessarily&amp;nbsp;equate to better, and anyway, as Android grows in market share the number of apps is increasing exponentially.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More people use iPhones than Android&lt;/b&gt;&lt;br /&gt;The gap is closing fast, actually. But regardless, this in itself means very little. Android was launched later than iPhone, and has taken some time to get to the point where it is mature enough for operators and phone manufacturers to embrace it. Things are changing apace now though, with new Android phones being announced almost weekly. There are also moves to use the Android OS in other applications like cars and household appliances.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;No-one cares about 'openness'&lt;/b&gt;&lt;br /&gt;One of the things touted by some Android users over iPhone is the fact that its an 'open' system - open source, not controlled tightly by Google in the way iPhone is by Apple. Anyone can develop apps for Android without having to get them approved. This IS a good thing in many ways (although there are obviously advantages with the iPhone approach as well). It's true that on the face of it, the Jo Public doesn't care whether the OS is open source or not, so its not an argument one way or the other really.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Multitasking is bad&lt;/b&gt;&lt;br /&gt;iPhone 4 will have multitasking so this is a bit of an old one now. However, there are still myths about this - Steve Jobs even misquoted Larry Page recently saying that some apps can cause battery drain because they don't work well with multitasking. This has been taken by many pro-Apple bloggers to be an admission that multitasking in Android is somehow not up to par, but in fact it was simply an acknowledgement that there are some sub-par apps out there that haven't been built to play nicely with the multitasking environment. That's certainly no indictment of multitasking, but only of those apps.&lt;br /&gt;&lt;br /&gt;The reality is that multitasking in Android works absolutely fine. It isn't complicated or geeky in any way shape or form - just as its not on a desktop computer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've not covered all the arguments here by any means and this isn't meant to be exhaustive or a proper side by side comparison or anything like that - just addressing some of the common arguments against Android. Doubtless this will generate a veritable storm of comments on Twitter!&lt;br /&gt;&lt;br /&gt;One last thing... does it matter? No! There are far more important things to worry about in life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5610591591204240105?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5610591591204240105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5610591591204240105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5610591591204240105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5610591591204240105'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/06/great-iphone-vs-android-debate.html' title='The great iPhone vs Android debate'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4125457472160252128</id><published>2010-05-06T13:52:00.001+01:00</published><updated>2010-05-06T14:06:38.822+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>My Android apps</title><content type='html'>For what it's worth, here's a list of my currently installed Android apps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-threebanana-notes-pmz.aspx"&gt;3banana Notes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.dk-logisoft-aircontrol-wqxB.aspx"&gt;Air Control&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.lysesoft-andexplorer-jww.aspx"&gt;AndExplorer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-google-zxing-client-android-xzA.aspx"&gt;Barcode Scanner&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-miromind-bartenderlite-AAwm.aspx"&gt;BarTender Lite&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-motalen-batterytime-xqqF.aspx"&gt;BatteryTime Pro&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.uk-co-johnsto-android-beebplayer-jwAn.aspx"&gt;beebPlayer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-sirma-mobile-bible-android-jFDC.aspx"&gt;Bible&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-beanie-blog-znnx.aspx"&gt;Blogaway&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-jamesots-android-checkredirect-jBi.aspx"&gt;Check Web Redirect&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-thisisglobal-player-classic-iCix.aspx"&gt;Classic FM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-dropbox-android-Dqpw.aspx"&gt;Dropbox&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-dayspringtech-envelopes-zBmi.aspx"&gt;Easy Envelope Budget Aid&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-facebook-katana-qitA.aspx"&gt;Facebook for Android&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nimbu.amorvi.com/2010/04/add-the-nexus-one-gallery-to-htc-desire/"&gt;Gallery3D (Nexus One gallery)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-google-android-apps-maps-jw.aspx"&gt;Google Maps&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-google-android-stardroid-xBC.aspx"&gt;Google Sky Map&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-eclipsim-gpsstatus2-zF.aspx"&gt;GPS Status&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nimbu.amorvi.com/2010/04/add-full-voice-to-text-to-htc-desire/"&gt;HTC_IME mod (keyboard with voice to text button) &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.pl-immortal-instafetch-iqwA.aspx"&gt;InstaFetch Lite&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-tni-keepscreenlite-qjwB.aspx"&gt;KeepScreen&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.fm-last-android-jwmx.aspx"&gt;Last.fm - Personal Radio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.net-flixster-android-jwpw.aspx"&gt;Movies&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-google-android-maps-mytracks-iwn.aspx"&gt;My Tracks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.org-openintents-filemanager-pAx.aspx"&gt;OI File Manager&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-bonfiremedia-android_ebay-xzn.aspx"&gt;Pkt Auctions eBay&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-google-android-apps-localdirectory-qm.aspx"&gt;Places Directory&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-bwx-bequick-zmDq.aspx"&gt;Quick Settings&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.org-nyquil-rss2gr-qxxw.aspx"&gt;RSS to Google Reader&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-probeez-profiles-xtEz.aspx"&gt;Setting Profiles Full&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-seesmic-xjCE.aspx"&gt;Seesmic for Twitter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-shazam-android-wFn.aspx"&gt;Shazam&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-biggu-shopsavvy-xqE.aspx"&gt;ShopSavvy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.ch-pboos-android-sleeptimer-qFwi.aspx"&gt;SleepTimer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.net-everythingandroid-smspopup-zmA.aspx"&gt;SMS Popup&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-kmagic-solitaire-DxC.aspx"&gt;Solitaire&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.org-zwanoo-android-speedtest-zBiq.aspx"&gt;Speedtest.net Speed Test&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-spotify-mobile-android-ui-qiqj.aspx"&gt;Spotify&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-twitter-android-CDnF.aspx"&gt;Twitter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.org-patillo-android-txtpad-wAjE.aspx"&gt;TxtPad Lite&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.com-luke-uktvguide-wmAm.aspx"&gt;UK TV Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nimbu.amorvi.com/2010/04/add-voice-search-to-htc-phones/"&gt;VoiceSearch &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://uk.androlib.com/android.application.nextapp-websharing-pznj.aspx"&gt;WebSharingLite File/Media Sync&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4125457472160252128?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4125457472160252128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4125457472160252128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4125457472160252128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4125457472160252128'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/05/my-android-apps.html' title='My Android apps'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4655499764359169478</id><published>2010-04-13T09:53:00.000+01:00</published><updated>2010-04-13T09:53:01.516+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>Inline-block and hasLayout in IE5 - IE7</title><content type='html'>&lt;a href="http://www.brunildo.org/test/InlineBlockLayout.html"&gt;http://www.brunildo.org/test/InlineBlockLayout.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4655499764359169478?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4655499764359169478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4655499764359169478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4655499764359169478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4655499764359169478'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/04/inline-block-and-haslayout-in-ie5-ie7.html' title='Inline-block and hasLayout in IE5 - IE7'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2064164887720776254</id><published>2010-04-09T14:45:00.000+01:00</published><updated>2010-04-09T14:45:52.434+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile phones'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>First 2 weeks with the HTC Desire</title><content type='html'>So, 2 weeks with my new Android-powered HTC Desire. What's the verdict? Well, if you follow me on Twitter you'll already know that I'm quite taken with it, to put it mildly!&lt;br /&gt;&lt;br /&gt;For the iPhone lovers reading this, yes I know I rant and rave about it and constantly go on about how its so much better than the iPhone. To be honest, my hands-on experience with iPhones is limited to the occasional play in an Apple store or phone shop (neither of which I spend much time in if I can help it!) and odd occasions when I've borrowed one off a work colleague to try something out briefly. So I can't honestly compare the two side by side, at least not from personal experience. Plenty of other people have already done that and reached their own conclusions. I can however tell you about my experience of Android as an operating system, the HTC Desire as an Android-powered handset (and one of the newest and best at that), and the Sense UI (HTC's tweaked version of the Android interface and core apps.&lt;br /&gt;&lt;br /&gt;I honestly can't fault anything - handset, OS, UI or apps. It surpasses my highest hopes and expectations by a long way, which is surprising considering the amount of time (6 months or more) I spent reading, researching, asking questions and generally procrastinating about what phone to go for. I was tempted by the Nexus One but decided in the end that the Desire had the edge. But this isn't a comparison between the N1 and Desire any more than its a comparison between the iPhone and Android (and besides, I've never used an N1 anyway).&lt;br /&gt;&lt;br /&gt;The handset itself is really nice. I particularly like the soft-touch back which helps with gripping the phone. The overall build quality, finish and attention to detail is great. The only minor gripe I would have is that when taking the back off / putting it back on again to access the battery, SIM and SD card (which I've only done once mind you) I was a bit worried about breaking it, particularly the plastic clips that attach it to the body of the phone. This is a common thing with many handsets - even when everything else is beautifully designed and engineered, accessing the battery is still a bit of a primitive affair using a thumbnail and brute force!&lt;br /&gt;&lt;br /&gt;The optical trackball is a nice touch although I've only needed to use it a couple of times. The 4 physical buttons along the bottom front edge are extremely useful (Home, Menu, Back, Search) and really make navigating around very easy.&lt;br /&gt;&lt;br /&gt;I was particularly impressed with how quick and easy the phone was to set up when I initially took it out the box and switched it on. All I had to do was enter my Google, Facebook, Twitter and Flickr account details (all optional of course apart from the Google account, but it just so happens that I use all 4) and that was it! Everything just worked - no messing around with settings or anything. There was a quick start guide in the box, which I didn't need apart from just checking the order in which to plug things in and switch it on the first time in case there was anything I needed to take note of (there wasn't). The full user manual is on the SD card in PDF format but I've not needed it - everything is as about as intuitive and straightforward as it could possibly get.&lt;br /&gt;&lt;br /&gt;The interface is extremely slick, and looks amazing on the 480x800 AMOLED screen (this is one thing all the iPhone users who have seen it have immediately commented on!). HTC have added some very useful features to the Android core apps, including built-integration between your contacts (phone/Google), Facebook, Twitter and Flickr. HTC's 'FriendStream' app/widget is a useful if no-frills way of keeping track of friends activity via the various social networks (although I tend to flit between using that and standalone apps for each service). The integration between these services in the People app (contacts) is very nice indeed, with the ability to 'link' contacts across your social networks and address book, which in turn automatically pulls in their profile picture and status updates. And of course, your address book is automatically synced with Google Contacts. (You can sync multiple Google accounts including Apps accounts, but I've not bothered syncing my work contacts as I already have the ones I need in the main Google contact list anyway.)&lt;br /&gt;&lt;br /&gt;Having 7 home screens to add apps, widgets and shortcuts to at first seemed like overkill - how would I be able ot fill them all up? But believe me, its easy. For a start there a number of very useful widgets such as HTC's FriendStream (which shows status updates from Facebook, Twitter and Flickr), Bookmarks (a list - or thumbnails - of your internet bookmarks), music players, calendars, clocks, weather etc etc etc.&lt;br /&gt;&lt;br /&gt;And of course, apps. The Android Market is accessible directly from the phone and contains something like 30,000 apps and growing rapidly (over 9,000 apps were added last month alone!). Most apps are free but there are paid apps as well (most of which have a free version too), although very few cost more than £1 or £2. (You get a refund too if you uninstall, which is nice!)&lt;br /&gt;&lt;br /&gt;Admittedly, there are more apps for iPhone at the moment - this is to be expected given the fact that its been around for longer than Android. However, most predictions see the Android Market catching up within the next year. A slight drawback of not having the all-seeing eye controlling exactly what apps are allowed, means that anyone can write and submit an app to the Market. This means that there is a lot of crap. And Google do need to put some work into making the market more easily searchable (ie. filtering by certain criteria etc.) but even as it stands, it's pretty easy to find what you want. And most things are very well catered for. Most of the big iPhone apps have an Android equivalent, either created by the same people or an equivalent alternative. I have yet to come across anything I need to do on my phone that isn't catered for by a decent app.&lt;br /&gt;&lt;br /&gt;Multi-tasking is a big plus. I frequently jump around from one app to another with the Desire's 1Ghz processor and 576Mb of RAM it's seamless and super-fast. Not that I'd recommend listening to Spotify while playing a first-person racing game mind you - I've tried and while the game was fine, the music did start to stutter a bit.&lt;br /&gt;&lt;br /&gt;The camera (5MP with auto-focus, face recognition, touch-screen-to-focus, digital zoom, and flash) is pretty good - much better than any other phone cameras I've used - the quality is perfectly adequate for viewing on a computer screen without it looking like its come from a phone. You can upload directly to Flickr, Facebook, Twitter, Picasa, or send via email or bluetooth direct from the photos app - which links directly into the camera, so you can have a photo on the web within 30 seconds of taking it. It also does HD video although I've not tried it yet, but the reviews all say its good.&lt;br /&gt;&lt;br /&gt;That's enough for now I think. I was going to save this and come back to it later, but I think if I do that I might not get round to it, so I'll just post this as is, accepting that I've not covered half of what there is to talk about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2064164887720776254?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2064164887720776254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2064164887720776254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2064164887720776254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2064164887720776254'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/04/first-2-weeks-with-htc-desire.html' title='First 2 weeks with the HTC Desire'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4321413728339130608</id><published>2010-04-09T08:53:00.001+01:00</published><updated>2010-04-09T08:53:05.826+01:00</updated><title type='text'></title><content type='html'>&lt;div style='margin-top: 25px;	border: 0px;	min-height:50px;	overflow: auto;	font-size: 11px; width: 456px; line-height: 16.8px; float: none'&gt;&lt;A href="http://lifehacker.com/5511793/make-qr-codes-in-a-jiffy-with-googl" target="_new" style="text-decoration:underline; color: #2388BD;"&gt;http://lifehacker.com/5511793/make-qr-codes-in-a-jiffy-with-googl&lt;/A&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4321413728339130608?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4321413728339130608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4321413728339130608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4321413728339130608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4321413728339130608'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/04/httplifehacker.html' title=''/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4638055207954730601</id><published>2010-01-11T14:30:00.003Z</published><updated>2010-01-11T15:02:07.413Z</updated><title type='text'>Pimp my Firefox</title><content type='html'>Well, my week in Chrome was nice, but as I &lt;a href="http://mattots.blogspot.com/2010/01/google-chrome-week-1.html"&gt;posted on Friday&lt;/a&gt;, it just didn't quite live up to what I wanted from a web browser. Yes, &lt;a href="http://sixrevisions.com/infographs/browser-performance/"&gt;the statistics&lt;/a&gt; certainly seem to show Chrome as the winner in the performance stakes at least, but if you take into account other factors like the level of extension support, customisability, memory usage, etc. the results could look pretty different and, as I concluded in my previous post, it's these very things that have led me to revert back to using Firefox, at least for now.&lt;br /&gt;&lt;br /&gt;So, being the inveterate extension-junkie that I am, here's an update on my latest browser configuration.&lt;br /&gt;&lt;br /&gt;(I should point out that even though I have a lot of extensions installed, I'm quite particular about them. For a start, they must be stable, have good reviews and ratings and a good track record of usage. Secondly, I only install extensions that provide some specific functionality that I particularly need or want.I'm not into just downloading things for fun; I'm looking to make my web browser look and work the way I want it to. And finally, I'm always mindful of the need to constantly keep an eye on what I have installed, get rid of it if I don't make much use of it or it doesn't work properly, switch to something else if another extension does it better, and regularly update everything. I realise there's a performance hit with having a lot of extra stuff installed, so I'm always trying to keep a balance between browser enhancement and speed.)&lt;br /&gt;&lt;br /&gt;Currently installed extensions:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/search?q=adblock+plus&amp;amp;cat=all&amp;amp;advancedsearch=1&amp;amp;as=1&amp;amp;appid=1&amp;amp;lver=3.5&amp;amp;atype=0&amp;amp;pp=20&amp;amp;pid=5&amp;amp;sort=&amp;amp;lup="&gt;&lt;b&gt;Adblock Plus&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Speeds up browsing and makes pages cleaner by blocking ads from loading and displaying.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/11922"&gt;&lt;b&gt;AFOM&lt;/b&gt;&lt;/a&gt; &lt;br /&gt;Automatically recovers memory leakage to make Firefox run faster&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.avg.com/gb-en/avg-internet-security-9#tba1"&gt;&lt;b&gt;AVG Safe Search&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;This gets installed automatically with AVG antivirus. Some people find it annoying, and while it can be removed (using a hack, admittedly) I find it reassuring to have that extra level of security.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/271"&gt;&lt;b&gt;ColorZilla&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;As a web developer I find this one of the most useful extensions. An unobtrusive statusbar icon gives you an eyedropper to select (and copy) any colour off web pages, along with the option (highly configurable) of displaying various bits of info such as element name, size, DOM path etc to the element you're hovering over in the statusbar.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2497"&gt;&lt;b&gt;CookieSafe&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Lots of options to configure how Firefox handles cookies. Personally I disable all cookies by default, then only allow the sites I trust and visit regularly. If I make a one-off visit to a site and need cookies, I can enable them temporarily just for that visit or session.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/26"&gt;&lt;b&gt;Download Statusbar&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Replaces the downloads window with a neat, configurable statusbar.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;&lt;b&gt;Firebug&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Loads of web developer tools. I've added the 'Inspect element' icon (spectacles) to my toolbar for quick checking of information relating to page elements.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1320"&gt;&lt;b&gt;Gmail Manager&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Until recently I was using &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/173"&gt;GMail Notifier&lt;/a&gt;, but this one just seems a little nicer with a few more features.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/55308"&gt;&lt;b&gt;goo.gl lite&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Adds a toolbar button that, when clicked, automatically copies a shortened version of the URL (using Google's new URL shortening service) to the clipboard. Essential if you're using a Twitter client that doesn't have URL shortening built in (which would obviously be ideal, but you can't win them all!)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gears.google.com/"&gt;&lt;b&gt;Google Gears&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Required in Firefox for various Google applications/features.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748"&gt;&lt;b&gt;Greasemonkey&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;I don't make a huge amount of use of this at the moment except for Flickr - there are a bunch of really nice userscripts that make browsing and using Flickr so much better (Flickr Multi Group Sender, Flickr Auto Page, Flcirk Group Pool Admin - Warn + Delete, Flickr Tag Autocomplete, Flcirk Filter Hearts, FlickrZoom2)&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4762"&gt;&lt;b&gt;Hide Menubar&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Until recently I was using &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3895"&gt;Personal Menu&lt;/a&gt;, but that just has far too many options and is unnecessarily complex. This extension achieves exactly what I need so much more simply - auto-hides the menu bar and lets you temporarily display it by pressing Alt. I've also customised Friefox's toolbars so everything else is displayed on a single toolbar - nav buttons, followed by location bar (which doubles as a search bar with the aid of keyword searches and a config tweak - see http://kb.mozillazine.org/Location_Bar_search), followed by a few extra icons (goo.gl lite, Web Developer and Firebug inspect element buttons), followed by the bookmarks toolbar (which I limit to one or two items I need quick and frequent access to (To save space I've deleted the title if they've got a decent favicon. If I need more than one or two items here I'll put them inside a folder so there's just a single folder icon on the toolbar itself)).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/249"&gt;&lt;b&gt;Html Validator&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Essential for web developers - a statusbar icon shows the validation status of every web page, including local ones, and clicking it opens the source code with the validation report.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2076"&gt;&lt;b&gt;JSView&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Provides quick access to javascript files used by the current page.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3383"&gt;&lt;b&gt;KeyScrambler&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;See my last post - its a nice extra layer of security but I'm in two minds about it, as it is a bit laggy.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7674"&gt;&lt;b&gt;Locationbar Limit&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Lets you show more items in the location bar dropdown, so saving scrolling if you're searching through a lot of results.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4014"&gt;&lt;b&gt;Locationbar2&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Emulates a feature built in to Chrome, where the domain of the current page is highligheted, and URL segments are selectable.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/539"&gt;&lt;b&gt;MeasureIt&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Statusbar icon which, when clicked, allows you to drag out a rectangular box/ruler over any area of the current page, showing the dimensions.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/722"&gt;&lt;b&gt;NoScript&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;I use this in a similar way to CookieSafe - set all scripts as blocked by default, then only allow scripts on sites I trust and visit regularly, then just temporarily for other sites. You have fine-grained script control so if you don't want to allow scripts for a particular advertising service included in a page you don't need to.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/42"&gt;&lt;b&gt;OpenBook&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Enhances Firefox's built-in bookmark management by allowing customization of the 'Add bookmark' dialogue, such as automatically opening the bookmark tree, etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1759"&gt;&lt;b&gt;Organize Status Bar&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Essential if you have as many extensions as me!!! Lets you organize what icons are displayed and where.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3818"&gt;&lt;b&gt;Resizeable Textarea&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Forces all textareas to be resizeable.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4810"&gt;&lt;b&gt;Speed Dial&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Create a new tab/start page showing thumbnail links to all your favourite sites. You can have multiple tabs as well if you like (I have one for 'Work' and one for 'Personal'). Loads of customisation options.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7269"&gt;&lt;b&gt;Unsorted Bookmarks Folder Menu&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Adds a link to Firefox's 'Unsorted Bookmarks' folder in the&amp;nbsp; bookmarks menu. Simples!&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/13878"&gt;&lt;b&gt;Vacuum Places Improved&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Optimizes Firefox's places.sqlite database - really makes a big difference to browser speed if your history file is quite large.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;&lt;b&gt;Web Developer&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Absolutely essential for web developers. End of.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2410"&gt;&lt;b&gt;Xmarks&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Bookmark backup/sync. A million times better than Google Bookamarks.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1833"&gt;&lt;b&gt;Yoono&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;I've only just discovered this so it's still 'on trial' but it's an integrated social networking sidebar for Firefox. Seems pretty good at the moment and I think I prefer this to loading a separate app like Digsby when I've got the browser opan all day anyway.&lt;br /&gt;&lt;br /&gt;Finally, here's a screenshot of how my browser looks:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_juNfFnT8BTc/S0s9B4Ay09I/AAAAAAAAyj4/oGlzFSiurA0/s1600-h/ff.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_juNfFnT8BTc/S0s9B4Ay09I/AAAAAAAAyj4/oGlzFSiurA0/s400/ff.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4638055207954730601?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4638055207954730601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4638055207954730601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4638055207954730601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4638055207954730601'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/01/pimp-my-firefox.html' title='Pimp my Firefox'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_juNfFnT8BTc/S0s9B4Ay09I/AAAAAAAAyj4/oGlzFSiurA0/s72-c/ff.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1964139366050180875</id><published>2010-01-08T10:08:00.000Z</published><updated>2010-01-08T10:08:53.612Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><title type='text'>Google Chrome - week 1</title><content type='html'>Well, it's been just over a week since I decided to try using Google Chrome as my main web browser. How have I found it? Will I stick with it?&lt;br /&gt;&lt;br /&gt;To be honest still I'm torn between Chrome and Firefox. There are pros and cons to both. Here's &amp;nbsp;a quick list of where each browser scores, from a fairly non-technical perspective (i.e. I'm sure there all sorts of things 'under the hood' that could affect the comparison but which I don't know enough about):&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Chrome&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Significantly faster startup time&lt;/li&gt;&lt;li&gt;Separate processes for each tab and extension (if one crashes you can carry on using the browser)&lt;/li&gt;&lt;li&gt;Memory is periodically 'cleaned' to prevent memory usage constantly creeping up (although it uses more memory overall)&lt;/li&gt;&lt;li&gt;Looks nicer!&lt;/li&gt;&lt;li&gt;Web search integrated into address bar (although FF similar, though not quite so good, with search keywords)&lt;/li&gt;&lt;li&gt;Searching browsing history searches page content, not just titles&lt;/li&gt;&lt;li&gt;Generally, Google apps (which I use a lot of - who doesn't?) work better with Google browser&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Firefox&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Uses less memory overall (although memory leaks do tend to mean it increases over time)&lt;/li&gt;&lt;li&gt;Several key extensions not available for Chrome (yet), e.g. Web Developer, Colorzilla, NoScript, CookieSafe&lt;/li&gt;&lt;li&gt;Better bookmark management (e.g. tags)&lt;/li&gt;&lt;li&gt;Sorting options for history&lt;/li&gt;&lt;li&gt;Right-click to view images/background images (have to open developer console in Chrome)&lt;/li&gt;&lt;li&gt;Toolbars are customizable (particularly important with extensions - Chrome's extensions all get added into the main toolbar and move around randomly! Plus FF has the added advantage in this respect of a status bar for extension icons etc.)&lt;/li&gt;&lt;li&gt;As a colleague pointed out yesterday, from a web development and browser compatibility point of view, Firefox is the most widely used browser (if you treat each major version of IE as different browsers) so it makes more sense to use it as your primarily browser when developing sites.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So, the jury is split! I expect Chrome to catch up with Firefox in many of these areas, although having said that, I know that the Firefox developers are already looking into many of the things where Chrome has taken the lead, such as separate processes, better search integration, etc. for future versions, so nothing is a foregone conclusion!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1964139366050180875?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1964139366050180875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1964139366050180875' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1964139366050180875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1964139366050180875'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/01/google-chrome-week-1.html' title='Google Chrome - week 1'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3187843908886910440</id><published>2010-01-05T14:17:00.001Z</published><updated>2010-01-05T14:18:37.949Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='addons'/><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Chrome'/><title type='text'>Google Chrome extensions</title><content type='html'>&lt;div&gt;This week I finally made the big switchover from Firefox to using Google Chrome as my web browser of choice. I'd tried several times before, but the lack of extension support in Chrome put me off as I'm a bit of an extension junkie, as those of you who know me will testify!&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, with extensions now supported in the Beta version of Chrome and soon to be in the main release version too, I decided to make a serious attempt at switching over. I was already convinced about the browser itself - it wins hands down on the speed and stability stakes, compared to Firefox which, while it started out so well, has just got slower and clunkier as time has gone on (partly a result of all those extensions, but by comparison Chrome hasn't seemed to be affected too noticeably yet).&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Admittedly, Chrome's &lt;a href="https://chrome.google.com/extensions"&gt;extension gallery&lt;/a&gt;&amp;nbsp;is still in its infancy. There are a number of things that are not yet catered for and many of the existing extensions are still in the early stages of development and quite buggy. However, there seems to be just about enough to work with and obviously over time things will improve.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I started out by making a list of all the addons I've got installed in Firefox and then searched for&amp;nbsp;equivalent Chrome extensions.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's the list as it stands at the moment:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table border="1" cellpadding="5" cellspacing="0"&gt;&lt;thead&gt;&lt;tr&gt; &lt;th&gt;Firefox&lt;br /&gt;&lt;/th&gt; &lt;th&gt;Chrome&lt;br /&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt;Adblock Plus&lt;br /&gt;&lt;/td&gt; &lt;td&gt;AdBlock&lt;br /&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;AFOM Addon&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Not needed in Chrome as memory leaks are not such an issue&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;AVG Safe Search&lt;br /&gt;&lt;/td&gt; &lt;td&gt;WOT&lt;br /&gt;&lt;/td&gt; &lt;td&gt;However, Chrome's built-in security features make the need for this less urgent.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Colorzilla&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;One of my most-used FF extensions. However, the various functions are fairly well covered by Pendule and Chrome's built-in developer tools.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;CookieSafe&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;This is one that I'd really like to see ported over to Chrome as soon as possible (I'd do it myself if I knew how!). In FF I disabled all cookies and then just enabled them on a per-site basis only when absolutely required, and temporarily unless for trusted sites I visited regularly.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Download Statusbar&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;No need for this as Chrome already shows download status in a fairly unobtrusive way.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Fasterfox Lite&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Chrome is already a lot faster so no need for this at the moment.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Firebug&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Firebug Lite&lt;br /&gt;&lt;/td&gt; &lt;td&gt;However, Chrome's built-in developer tools provide all the Firebug-like functionality I need at the moment.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;GMail Notifier&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Google Mail Checker Plus&lt;br /&gt;&lt;/td&gt; &lt;td&gt;The Chrome extension is actually much nicer than the FF one, although still has a few bugs.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Greasemonkey&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;It is possible to &lt;a href="http://lifehacker.com/5180010/enable-user-scripts-in-google-chrome" target="_blank"&gt;enable userscripts in Chrome&lt;/a&gt;, but as the only Greasemonkey scripts I used in FF were for Flickr, I've managed to find Chrome extensions for Flickr that do most of what I want anyway. Still, a standard way to add userscripts would be handy.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Html Validator&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;There are several validators for Chrome, including HTML Validator, but none currently works with locally hosted pages, like the FF one, which is a shame.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;JSView&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;I never used this all that much anyway, but occasionally it was handy for quick access to scripts. The lack of an equivalent for Chrome is not a big deal though.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;KeyScrambler&lt;br /&gt;&lt;/td&gt; &lt;td&gt;KeyScrambler Pro&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Although I do like the added layer of security this provided, I did often find it a bit slow meaning I'd sometimes find myself typing garbled text into the browser. You can use the Pro version of KeyScrambler which works with a whole host of desktop applications, but I'm not about to fork out for it at the moment,&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;NoScript&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Like CookieSafe, this is another one I'd really like to see ported to Chrome. FlashBlock provides some of the functionality (blocks Flash and Silverlight) but not all.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;OpenBook&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Chrome's bookmarks don't seem to have a tagging mechanism so this is fairly redundant. It would be nice to see more bookmark features in Chrome though.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Organize Statusbar&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;A must if like me you had so many extensions installed. Chrome doesn't have a status bar, but it would be extremely useful to have some way of customising and managing extension icons in the toolbar and address bar as currently there's no way to arrange them and they swap order for no reason every time you open the browser!&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Personal Menu&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;See above. Thankfully Chrome has a much more minimal interface which minimises the need to mess around with the built-in menus etc.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Profile Switcher&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;I'm not sure if Chrome even supports profiles yet. This was handy at home with my wife and I using the same browser. However, as I've just bought her a netbook this won't be a problem in the future!!&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Resizeable Textarea&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Always Resize&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Chrome supports resizing textareas by default anyway, but this extension makes even locked textareas resizeable.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Speed Dial&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Speed Dial&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Not quite as feature-rich as the FF one yet, but nonetheless does the job.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Split Browser&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Never made too much use of this anyway, but Chrome's nifty ability to drag a tab out into a new window makes this less necessary anyway.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Unsorted Bookmarks Folder Menu&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Not needed due to the different way Chrome handles bookmarks. It was a bit of a hack for Firefox anyway!&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Vacuum Places Improved&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;FF got slower and slower the more pages were stored in it's history. However, even after importing my browsing history from FF into Chrome, it's still incredibly fast, so no need for this.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Web Developer&lt;br /&gt;&lt;/td&gt; &lt;td&gt;-&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Number one on the wishlist of FF extensions for Chrome. Chris Pederick is apparently looking into the possibility but its a complex extension so could take a while even if he does decide to give it a crack! However, Chrome's built-in developer tools do cover a lot of the more useful functions, and Pendule has a few more, so its not the end of the world.&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;XMarks Bookmark Sync&lt;br /&gt;&lt;/td&gt; &lt;td&gt;XMarks Bookmark Sync&lt;br /&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In addition, I've found a number of additional Chrome extensions that are proving (or look) useful, either in covering some of the fucntionality of one or more of my old Firefox extensions, or providing other functionality:&lt;br /&gt;&lt;br /&gt;Fittr Flickr&lt;br /&gt;Facebook To-Go with Instant Notifications&lt;br /&gt;RSS subscription extension&lt;br /&gt;Flickr Gallery Plus!&lt;br /&gt;Chromed Bird&lt;br /&gt;Google Calendar Popout&lt;br /&gt;AutoPager Chrome&lt;br /&gt;Slideshow&lt;br /&gt;Google Apps Shortcuts&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3187843908886910440?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3187843908886910440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3187843908886910440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3187843908886910440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3187843908886910440'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2010/01/google-chrome-extensions.html' title='Google Chrome extensions'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3086881492721910076</id><published>2009-10-31T10:22:00.000Z</published><updated>2009-10-31T10:22:01.771Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='addons'/><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><title type='text'>Speeding up Firefox</title><content type='html'>If you use Firefox and have found it slow starting up or laggy typing into the address bar, install the oddly named 'Vacuum Places Improved' add-on from &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/13878"&gt;https://addons.mozilla.org/en-US/firefox/addon/13878&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It adds a little icon to the status bar allowing you to defragment Firefox's places.sqlite database file with a single click- that's the file that holds all the information about your browsing history etc.&lt;br /&gt;&lt;br /&gt;I've installed it in FF on all the computers I use and noticed a considerable improvement. On my laptop the places.sqlite file was initially 25Mb and after 'vacuuming' its 15Mb. On my desktop, Firefox had almost ground to a halt, often taking over a minute to start up, and when you clicked into the address bar it took around 10 seconds before you could actually type anything! After 'vacuuming', FF starts up in 10 seconds and typing into the address bar is fine.&lt;br /&gt;&lt;br /&gt;I highly recommend this if you use Firefox and notice any performance issues. Obviously its not going to solve memory leak (FF's other big problem) but it's a big help nonetheless.&lt;br /&gt;&lt;br /&gt;Just to explain - the extension doesn't delete anything, it just optimises the file that holds all the data so that that data can be found more quickly.&lt;br /&gt;&lt;br /&gt;You can set the statusbar icon to be hidden and only reappear a certain number of days from the last 'vacuum' to remind you to run it, or it can set to automatically run every x number of days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3086881492721910076?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3086881492721910076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3086881492721910076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3086881492721910076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3086881492721910076'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2009/10/speeding-up-firefox.html' title='Speeding up Firefox'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-6949587645770858655</id><published>2009-10-08T20:16:00.001+01:00</published><updated>2009-10-10T10:37:49.597+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='xampp'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Changing the document root in XAMPP</title><content type='html'>I know this has been covered many times before but I've found myself Googling for this info a number of times now and thought if I wrote it here then at least I'd know where to look next time!&lt;br /&gt;&lt;br /&gt;After installing XAMPP on Windows, the document root, by default, is set to C:/xampp/htdocs (that is, if you installed xampp into the root of the C: drive).&lt;br /&gt;&lt;br /&gt;In this particular case I wanted to change the root directory to the sites directory in my Dropbox (C:/Documents and Settings/[username]/My Documents/My Dropbox/sites/)&lt;br /&gt;&lt;br /&gt;To do this, open xampp/apache/conf/httpd.conf and edit the 'DocumentRoot' setting (line 188 in the version I have) to the required path (as above). Several lines below where it says "This should be changed to whatever you set DocumentRoot to" (line 215) change the Directory path to the same thing.&lt;br /&gt;&lt;br /&gt;Open xampp/php/php.ini and edit the 'doc_root' setting (line 804) to be the same path as above.&lt;br /&gt;&lt;br /&gt;Save both files and restart apache. This should do the trick.&lt;br /&gt;&lt;br /&gt;UPDATE: As pointed out in the comments, I'd forgotten about my MySQL data. To move the MySQL data into Dropbox:&lt;br /&gt;&lt;br /&gt;Open xampp/mysql/bin/my.ini and:&lt;br /&gt;- under [mysqld]:&lt;br /&gt;    - change datadir (line 30) to the full path to the mysql data directory on Dropbox.&lt;br /&gt;    - change log_error (line 45) to the same path as above PLUS '/mysql.err'.&lt;br /&gt;    - change general_log_file (line 48) to the same path as above PLUS '/mysql.log'.&lt;br /&gt;    - change slow_query_log_file (line 50) to the same path as above PLUS '/mysql-slow.log'.&lt;br /&gt;- below where it says "Uncomment the following if you are using InnoDB tables"&lt;br /&gt;    - change innodb_data_home_dir (line 137) to the same path as above.&lt;br /&gt;    - change innodb_log_group_home_dir (line 139) to the same path as above.&lt;br /&gt;   &lt;br /&gt;Move contents of xampp/mysql/data into the new mysql data directory in Dropbox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-6949587645770858655?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/6949587645770858655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=6949587645770858655' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6949587645770858655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6949587645770858655'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2009/10/changing-document-root-in-xampp.html' title='Changing the document root in XAMPP'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2073916203286887173</id><published>2009-06-26T10:51:00.001+01:00</published><updated>2009-06-26T11:06:51.928+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><title type='text'>Running SQL queries within query result loops in CodeIgniter</title><content type='html'>This took me a while to figure out but it's pretty obvious really. Initially I thought I'd have to run row-specific queries in the view itself (inside the results loop) but the solution is just to change where the result 'processing' happens from the view to the controller, allowing you greater control over what gets passed to the view in the first place.&lt;br /&gt;&lt;br /&gt;Where you'd do something like this in plain old PHP:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #cfe2f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$result = mysql_query("SELECT value FROM table");&lt;/div&gt;&lt;span style="background-color: #cfe2f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;while ($row = mysql_fetch_assoc($result)):&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: #cfe2f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mysql_query("SELECT id FROM table WHERE field='" . $row['value'] . "'"); &lt;/div&gt;&lt;div style="background-color: #cfe2f3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;endwhile;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;in CodeIgniter you put the following code in your controller function:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #cfe2f3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$query = $this-&amp;gt;Model-&amp;gt;function($params);&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cfe2f3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$result = $query-&amp;gt;result();&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$foo = array(); &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cfe2f3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;foreach ($result as $id =&amp;gt; $object):&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cfe2f3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($object as $key =&amp;gt; $value):&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cfe2f3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $foo[$id][$key] = $value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; endforeach;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $foo[$id]['bar'] = $this-&amp;gt;function($params);&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cfe2f3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;endforeach;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cfe2f3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$this-&amp;gt;data['foo'] = $foo;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cfe2f3;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$this-&amp;gt;load-&amp;gt;view('baz', $this-&amp;gt;data);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;then in the view:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #cfe2f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;foreach ($foo as $key =&amp;gt; $row):&lt;/div&gt;&lt;div style="background-color: #cfe2f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $row['item1'];&lt;/div&gt;&lt;div style="background-color: #cfe2f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $row['item2'];&lt;/div&gt;&lt;div style="background-color: #cfe2f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &amp;nbsp; print $row['bar'];&lt;/div&gt;&lt;span style="background-color: #cfe2f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;endforeach;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Basically, instead of passing the result of the &lt;i&gt;main &lt;/i&gt;query direct to the view and looping through it there, you loop through the query results in the &lt;i&gt;controller &lt;/i&gt;instead, and build up a two-dimensional associative array of results, to which you can add additional row-specific query results. Then in the view you just loop through your custom array.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt;&amp;nbsp; You need to initialise the array (&lt;span style="background-color: #cfe2f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$foo = array()&lt;/span&gt;) before the foreach loop in the controller, otherwise if the query returns an empty result you'll get an error!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2073916203286887173?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2073916203286887173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2073916203286887173' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2073916203286887173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2073916203286887173'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2009/06/running-sql-queries-within-query-result.html' title='Running SQL queries within query result loops in CodeIgniter'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-7022782580122332723</id><published>2009-02-05T17:20:00.001Z</published><updated>2009-02-05T17:20:58.768Z</updated><title type='text'>Speed Dial + Foxmarks? Would be nice!</title><content type='html'>I use Foxmarks to synchronise my Firefox bookmarks across all the computers I use (it also works with IE and Safari now I believe) and it&amp;#39;s great. You can create different profiles as well which you can switch between as required, so when I&amp;#39;m at work I use my &amp;#39;work&amp;#39; profile with access to all my work-related bookmarks. At home I use my &amp;#39;home&amp;#39; profile which has all my non-work bookmarks. But if I&amp;#39;m working from home as I was today I can easily switch profiles so I have all my work bookmarks at home! This includes all my bookmarklets which is great.&lt;br&gt; &lt;br&gt;I also use Spped Dial which is a great and highly configurable way of having quick access to my most-visited sites whenever I launch a new window/tab. It&amp;#39;s a bit like Chrome&amp;#39;s dashboard but you can define which sites you want to show rather than it just displaying whatever you&amp;#39;ve been looking at a lot recently, which is better I think (the Speed Dial way I mean!).&lt;br&gt; &lt;br&gt;But working from home today made me think how nice it would be if my Speed Dial &amp;#39;home page&amp;#39; worked the same way as my bookmarks - so I could switch to my work Speed Dial page instead of my home one. At the moment there is no way to do this (unless there is some clever clogs way of doing it using Dropbox etc.).&lt;br&gt; &lt;br&gt;Of course, with the steady march of Google towards world domination we&amp;#39;ll probably have everything in the browser synced through Google in a couple of years - albeit using Google Chrome....&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-7022782580122332723?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/7022782580122332723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=7022782580122332723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7022782580122332723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7022782580122332723'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2009/02/speed-dial-foxmarks-would-be-nice.html' title='Speed Dial + Foxmarks? Would be nice!'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2114037531732677216</id><published>2009-01-27T13:59:00.001Z</published><updated>2009-01-27T13:59:12.665Z</updated><title type='text'>Run IE6, 7 and 8 on the same machine</title><content type='html'>Note to self:&lt;br&gt;&lt;br&gt;&lt;a href="http://blog.case.edu/jeremy.smith/2008/03/07/ie_6_7_and_8_running_on_same_machine"&gt;http://blog.case.edu/jeremy.smith/2008/03/07/ie_6_7_and_8_running_on_same_machine&lt;/a&gt;&lt;br&gt;&lt;br&gt;Presumably it will still work with the final version of IE8 when it gets released.&lt;br&gt; &lt;br&gt;(As as aside, I&amp;#39;ve been using Tredosoft&amp;#39;s &lt;span style="font-style: italic;"&gt;MultipleIEs&lt;/span&gt; for a couple of years now and it works pretty much flawlessly. Extremely handy for testing purposes.)&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2114037531732677216?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2114037531732677216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2114037531732677216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2114037531732677216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2114037531732677216'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2009/01/run-ie6-7-and-8-on-same-machine.html' title='Run IE6, 7 and 8 on the same machine'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1270853570769869335</id><published>2009-01-20T09:27:00.001Z</published><updated>2009-01-20T09:27:20.324Z</updated><title type='text'>Taming the information overflow</title><content type='html'>News feeds and activity streams are becoming ever more popular as the amount of online information we share and consume grows.&lt;br&gt;&lt;br&gt;I am starting to wonder, however, where all this is going. The amount of information is only going to keep increasing, and at some stage it is going to become too much.&lt;br&gt; &lt;br&gt;Do I really want - or need - to know exactly what every person I&amp;#39;ve ever met is doing or thinking right now? Sure, to a certain extent it can be useful and/or interesting, but there must come a point at which it is actually more of a distraction.&lt;br&gt; &lt;br&gt;There is only so much information we can take in. Filtering of content is a partial solution, but only partial.&lt;br&gt;&lt;br&gt;It will be interesting to see what happens!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1270853570769869335?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1270853570769869335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1270853570769869335' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1270853570769869335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1270853570769869335'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2009/01/taming-information-overflow.html' title='Taming the information overflow'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8605333981490398376</id><published>2009-01-15T09:26:00.001Z</published><updated>2009-01-15T09:26:39.134Z</updated><title type='text'>Google to drop Notebook</title><content type='html'>Along with several other less-well-known-about Google services, its been announced that development of Google Notebook is to stop.&lt;br&gt;&lt;br&gt;This is a great shame as I really like this little tool, especially in conjunction with the Google Notebook extension for Firefox.&lt;br&gt; &lt;br&gt;Although Google Notebook will remain active (at least for the time being), I think I&amp;#39;ll have to start searching for an alternative.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8605333981490398376?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8605333981490398376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8605333981490398376' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8605333981490398376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8605333981490398376'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2009/01/google-to-drop-notebook.html' title='Google to drop Notebook'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-7557433614534536027</id><published>2009-01-14T09:48:00.001Z</published><updated>2009-01-14T09:48:43.764Z</updated><title type='text'>The all-in-one social network?</title><content type='html'>&lt;a href="http://www.readwriteweb.com/archives/diso_dashboard.php"&gt;http://www.readwriteweb.com/archives/diso_dashboard.php&lt;br&gt;&lt;/a&gt;&lt;br&gt;This sounds like exactly the sort of thing I&amp;#39;ve been waiting for, although the details are obviously still pretty vague. One of the growing frustrations of internet use these days is the barriers that exist between different services and applications. I want to be able to link things, move things around, and generally customize my web experience (and web presence) the way I want it without having to be bound by the limitations imposed by each service.&lt;br&gt; &lt;br&gt;There are a few inroads being made already - Facebook allows you to set up data imports from Twitter, Flickr, Blogger, Wordpress etc. (but the amount of customisation is limited); Twitterfeed lets you automatically post to Twitter every time you update your blog (or anything with an RSS feed); Digsby does a very good job of combining all your email and IM accounts as well as Twitter, Facebook etc. into a single desktop app; Flock (the web browser based on Firefox) does an admirable job of pulling together a lot of different web services into one place - although the level of customization is fairly limited and you&amp;#39;re stuck with a few pre-defined apps.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-7557433614534536027?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/7557433614534536027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=7557433614534536027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7557433614534536027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7557433614534536027'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2009/01/all-in-one-social-network.html' title='The all-in-one social network?'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2157637080462170670</id><published>2009-01-03T17:11:00.001Z</published><updated>2009-01-03T17:11:52.928Z</updated><title type='text'>Make scaled images render nicely in IE</title><content type='html'>A colleague just noted &lt;a href="http://www.joelonsoftware.com/items/2008/12/22.html"&gt;this blog post&lt;/a&gt; in his RSS feed and I thought it was worth sharing on here (and for my own future reference).&lt;br&gt;&lt;br&gt;If you force an image to a certain size via its width and height attributes in HTML or CSS, most browsers will handle this ok and display the scaled image reasonably nicely, but in IE the edges often look pixelated and jagged.&lt;br&gt; &lt;br&gt;To fix this, just add the following to your CSS:&lt;br&gt;&lt;br&gt;img { -ms-interpolation-mode:bicubic; }&lt;br&gt;&lt;br&gt;I shall be adding this to my reset stylesheet ASAP.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2157637080462170670?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2157637080462170670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2157637080462170670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2157637080462170670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2157637080462170670'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2009/01/make-scaled-images-render-nicely-in-ie.html' title='Make scaled images render nicely in IE'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5093289186935689853</id><published>2008-12-29T09:46:00.001Z</published><updated>2008-12-29T09:46:36.380Z</updated><title type='text'>It's magic! Experiencing the power of Foxmarks...</title><content type='html'>I came in to work this morning and fired up the old &amp;#39;Fox as usual, with the thought at the back of my mind that I needed to add that Gmail bookmarklet I blogged about yesterday.&lt;br&gt;&lt;br&gt;But I was genuinely surprised to see it was already there! Magic? No. &lt;a href="http://www.foxmarks.com/"&gt;Foxmarks&lt;/a&gt; of course!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5093289186935689853?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5093289186935689853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5093289186935689853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5093289186935689853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5093289186935689853'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/its-magic-experiencing-power-of.html' title='It&apos;s magic! Experiencing the power of Foxmarks...'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5199584359819049454</id><published>2008-12-28T12:13:00.001Z</published><updated>2008-12-28T12:13:58.875Z</updated><title type='text'>Learning to lose the mouse!</title><content type='html'>I always used to marvel at people who were able to use a computer almost solely from the keyboard. But it never seemed worth learning all the keyboard shortcuts to be able to become a keyboard wizard!&lt;br&gt;&lt;br&gt;Over the years I have picked up the odd shortcut here and there - mainly for things like Photoshop where you tend to be constantly chopping and changing between tools. But one area where I&amp;#39;ve been quite slow to pick up keyboard habits is, oddly enough, web browsing, despite the amount of time I spend doing it!&lt;br&gt; &lt;br&gt;Only with increasingly using a laptop (and finding that the right &amp;#39;mouse&amp;#39; button is wearing out!) have I started to take browser keyboard shortcuts - and general keyboard navigation - more seriously.&lt;br&gt;&lt;br&gt;&lt;a href="http://lifehacker.com/software/feature/hack-attack-mouseless-firefox-139495.php"&gt;Lifehacker&lt;/a&gt; have a useful article (rather old now actually but still just as useful) introducing the most useful Firefox keyboard shortcuts.&lt;br&gt; &lt;br&gt;As something of a Firefox extension addict, the &lt;a href="http://forums.mozillazine.org/viewtopic.php?t=72994"&gt;Keyconfig &lt;/a&gt;extension is certainly highly recommended by me - simply to resolve the inevitable conflicts over shortcuts that arise from installing multiple extensions.&lt;br&gt; &lt;br&gt;&lt;a href="http://lifehacker.com/software/bookmarks/hack-attack-firefox-and-the-art-of-keyword-bookmarking-196779.php"&gt;Keyword bookmarking&lt;/a&gt; is another very handy feature. In relation to my last post, it&amp;#39;s really handy to be able to simply press Ctrl+L and type &amp;#39;gm&amp;#39; (as I have set it up) to get an instant Gmail Compose window pop up. About 10 times quicker than any other way of doing it!&lt;br&gt; &lt;br&gt;I think it&amp;#39;s one of those things where you have to make a bit of an initial effort (old habits die hard, of course) but in very little time that effort is repaid many times over in time saving. The same lesson has been recently learned in getting used to using &lt;a href="http://www.launchy.net/"&gt;Launchy &lt;/a&gt;- at first I was continually wanting to use the mouse and click on programs in the Quick Launch bar. Now &amp;#39;Alt+Space&amp;#39; is second nature! Similarly, using &amp;#39;Alt+Tab&amp;#39; to switch applications rather than constantly having to move down to the taskbar, etc. etc.&lt;br&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5199584359819049454?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5199584359819049454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5199584359819049454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5199584359819049454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5199584359819049454'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/learning-to-lose-mouse.html' title='Learning to lose the mouse!'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-185122789647380699</id><published>2008-12-28T09:38:00.002Z</published><updated>2008-12-28T09:39:10.157Z</updated><title type='text'>Add a 'Compose new Gmail' Bookmarklet to Firefox</title><content type='html'>This is a modified version of the 'GmailThis' bookmarklet which automatically adds the title and url of the current page into the email. I don't often need to send URLs to people, but being able to instantly open up a compose window in a popup is very useful.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Right click on your bookmarks toolbar and select 'New Bookmark...'&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the 'Name' field put 'Gmail' or something.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the 'Location' field put:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new,monospace;"&gt;javascript:(function(){m='&lt;a href="http://mail.google.com/mail/?ui=1&amp;amp;view=cm&amp;amp;fs=1&amp;amp;tf=1&amp;amp;to=&amp;amp;su=&amp;amp;body=%27;w=window.open%28m,%27addwindow"&gt;http://mail.google.com/mail/?ui=1&amp;amp;view=cm&amp;amp;fs=1&amp;amp;tf=1&amp;amp;to=&amp;amp;su=&amp;amp;body=';w=window.open(m,'addwindow&lt;/a&gt;','status=no,toolbar=no,width=575,height=545,resizable=yes');setTimeout(function(){w.focus();},%20250);})();&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Save it.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-185122789647380699?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/185122789647380699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=185122789647380699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/185122789647380699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/185122789647380699'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/add-compose-new-gmail-bookmarklet-to.html' title='Add a &apos;Compose new Gmail&apos; Bookmarklet to Firefox'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1839428421856310477</id><published>2008-12-27T22:30:00.001Z</published><updated>2008-12-27T22:30:09.530Z</updated><title type='text'>Goodbye Posterous - it was nice knowing you but I've just discovered Twitterfeed!</title><content type='html'>New technology is a fickle and ever changing thing...&lt;br&gt;&lt;br&gt;Posterous seemed like a great idea until about half an hour ago. Blogging via email is nice (but Blogger does it already so no brownie points there). But having it auto-post to Twitter each time I posted a new blog entry was what won me over.&lt;br&gt; &lt;br&gt;But then I came across a problem. I wanted to set up &lt;a href="http://www.twitter.com/line2nowhere/"&gt;a new Twitter account&lt;/a&gt;, specifically related to my railway-related interests. And I wanted to set up a new blog on Posterous to mirror my existing &amp;#39;&lt;a href="http://line2nowhere.blogspot.com/"&gt;Line to Nowhere&lt;/a&gt;&amp;#39; blog on Blogger. And I wanted to have Posterous autopost to my new Twitter account and my railway blog on Blogger each time I posted to the new Posterous blog. (In other words, two different online &amp;#39;identities&amp;#39;, each with seperate blogs, Twitter accounts etc., all managed through Posterous.)&lt;br&gt; &lt;br&gt;Trouble is you can&amp;#39;t do that with Posterous at the moment, unless you create two seperate Posterous accounts and then make sure that you always post to each one from a different email address. Which is a hassle and it kind of cancels out the simplicity of it all. (But then, maybe not everyone has such diverse interests as me?!)&lt;br&gt; &lt;br&gt;Then I discovered &lt;a href="http://twitterfeed.com"&gt;Twitterfeed&lt;/a&gt;. You create an account (using OpenID) and then set up as many different RSS-to-Twitter feeds as you want. You just give it the URL of an RSS feed and the Twitter account you want it to auto-post to (you have to supply your Twitter username and password but a quick Google suggests that its a fairly reputable service), and how frequently you want it to update, and off it goes and does its stuff!&lt;br&gt; &lt;br&gt;Since I have no need to post via email to Flickr or YouTube or Vimeo or any of the other blogging services supported by Posterous, and because Posterous doesn&amp;#39;t allow me to easily differentiate my online identites, Blogger + Twitterfeed is actually the ideal solution for me right now.&lt;br&gt; &lt;br&gt;So I now have the following setup:&lt;br&gt;&lt;br&gt;&lt;a href="http://mattots.blogspot.com"&gt;mattots.blogspot.com&lt;/a&gt; + &lt;a href="http://twitter.com/mattots"&gt;twitter.com/mattots&lt;/a&gt;&lt;br&gt;&lt;a href="http://line2nowhere.blogspot.com"&gt;line2nowhere.blogspot.com&lt;/a&gt; + &lt;a href="http://twitter.com/line2nowhere"&gt;twitter.com/line2nowhere&lt;br&gt; &lt;/a&gt;&lt;br&gt;I can post to either blog via email (I just post to a different address for each), and Twitterfeed automatically updates the relevant Twitter account every 30 minutes. Simple.&lt;br&gt;&lt;br&gt;(Oh yes, and if I just want to post direct to either Twitter account, &lt;a href="http://www.naan.net/trac/wiki/TwitterFox"&gt;Twitterfox&lt;/a&gt; lets you log into and switch between multiple Twitter accounts, so that&amp;#39;s no problem.)&lt;br&gt; &lt;br&gt;Sorted.&lt;br&gt;&lt;br&gt;For now at least!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1839428421856310477?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1839428421856310477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1839428421856310477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1839428421856310477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1839428421856310477'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/goodbye-posterous-it-was-nice-knowing.html' title='Goodbye Posterous - it was nice knowing you but I&apos;ve just discovered Twitterfeed!'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-7828880171037925763</id><published>2008-12-27T20:17:00.001Z</published><updated>2008-12-27T20:17:58.764Z</updated><title type='text'>
Blogger-users, meet Posterous!  </title><content type='html'>&lt;br /&gt;For those of you who follow this blog on Blogger, you may have noticed the &amp;quot;Posted via email from Matt&amp;#39;s Random Stuff&amp;quot; link at the end of recent posts and wondered what it&amp;#39;s all about. Well, clicking the link would have answered the question for you, but if you&amp;#39;ve not got that far yet then simply go and check out &lt;a href="http://www.posterous.com"&gt;Posterous&lt;/a&gt; or see a carbon copy of this blog post at &lt;a href="http://mattots.posterous.com"&gt;mattots.posterous.com&lt;/a&gt; and all will be revealed.&lt;br&gt;  &lt;br&gt;My current setup allows me to send an email to &lt;a href="mailto:post@posterous.com"&gt;post@posterous.com&lt;/a&gt; from any of my email addresses and the contents of the email are instantly posted to my blog on Blogger and Posterous with the email subject as the post title. At the same time, the subject line and a link to the blog post on Posterous is posted to my Twitter account.&lt;br&gt;  &lt;br&gt;At the moment this is all I need to do, but Posterous lets you do much more than that - check it out.&lt;br&gt;&lt;br&gt;It&amp;#39;s still in the early stages of development really so I imagine there are going to be a lot of new features being rolled out as time goes on.&lt;p style="font-size: 10px;"&gt;  &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;   from &lt;a href="http://mattots.posterous.com/blogger-users-meet-posterous"&gt;Matt's Random Stuff&lt;/a&gt;  &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-7828880171037925763?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/7828880171037925763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=7828880171037925763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7828880171037925763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7828880171037925763'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/blogger-users-meet-posterous.html' title='&#xA;Blogger-users, meet Posterous!  '/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1361583182842482170</id><published>2008-12-20T15:17:00.001Z</published><updated>2008-12-20T15:17:03.840Z</updated><title type='text'>
TinyTwitter would be great if it actually worked on my phone. But it doesn't!  </title><content type='html'>&lt;br /&gt;Accepting the fact that I won&amp;#39;t be getting an iPhone any time soon means having to scout around for decent apps that will work on my Sony Ericsson W950i. That&amp;#39;s a bit of an contradiction in terms really, as there aren&amp;#39;t really any truly decent apps for UIQ3 (unless someone can prove to me otherwise). Still, I was looking for a Twitter client that would work with my phone and after trying several, most of which either blatantly didn&amp;#39;t work or were just plain rubbish, I found TinyTwitter, which seemed to be okay. And it works, except for one small thing - I can&amp;#39;t send tweets! It just gives an error. Quite annoying really. I presume its some sort of big or incompatibility with my phone.&lt;p style="font-size: 10px;"&gt;  &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;   from &lt;a href="http://mattots.posterous.com/tinytwitter-would-be-great-if"&gt;Matt's Random Stuff&lt;/a&gt;  &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1361583182842482170?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1361583182842482170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1361583182842482170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1361583182842482170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1361583182842482170'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/tinytwitter-would-be-great-if-it.html' title='&#xA;TinyTwitter would be great if it actually worked on my phone. But it doesn&amp;#39;t!  '/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1614751340716803405</id><published>2008-12-19T14:34:00.001Z</published><updated>2008-12-19T14:34:25.785Z</updated><title type='text'>
Christmas shopping - Ugh!  </title><content type='html'>&lt;br /&gt;Why oh why do I always leave my Christmas shopping till the last few days before Christmas? I really ought to have learned my lesson by now! Next year I intend to get it all done before December even comes around. Some hope, I know!&lt;p style="font-size: 10px;"&gt;  &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;   from &lt;a href="http://mattots.posterous.com/christmas-shopping-ugh"&gt;Matt's Random Stuff&lt;/a&gt;  &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1614751340716803405?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1614751340716803405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1614751340716803405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1614751340716803405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1614751340716803405'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/christmas-shopping-ugh.html' title='&#xA;Christmas shopping - Ugh!  '/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3343699368760568782</id><published>2008-12-19T09:12:00.001Z</published><updated>2008-12-19T09:12:25.514Z</updated><title type='text'>
I want an iPhone - no, I REALLY want an iPhone  </title><content type='html'>&lt;br /&gt;I&amp;#39;m sorry, but I just can&amp;#39;t hold it in any longer. Until now I have managed to contain my craving, but it has finally got the better of me.&lt;br&gt;&lt;div&gt;&lt;br&gt;However you look at it, even with the fairly minimal hands-on experience I have had of these beautifully crafted pieces of technology, there&amp;#39;s just nothing else to compare to them.&lt;br&gt;    &lt;br&gt;Unfortunately there&amp;#39;s no way I can afford one and I&amp;#39;m tied in to another 15 months on my current crappy phone&amp;#39;s contract. Sigh.&lt;font color="#888888"&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;p style="font-size: 10px;"&gt;  &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;   from &lt;a href="http://mattots.posterous.com/i-want-an-iphone-no-i-really-w"&gt;Matt's Random Stuff&lt;/a&gt;  &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3343699368760568782?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3343699368760568782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3343699368760568782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3343699368760568782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3343699368760568782'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/i-want-iphone-no-i-really-want-iphone.html' title='&#xA;I want an iPhone - no, I REALLY want an iPhone  '/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5387158326715063670</id><published>2008-12-18T16:05:00.001Z</published><updated>2008-12-18T16:05:54.019Z</updated><title type='text'>
Could Posterous replace Blogger?  </title><content type='html'>&lt;br /&gt;So could it? For me, I mean. My first impression was that Posterous would post to my Blogger blog and post a link to it in Twitter, when actually, while yes it does post to Blogger, the link it posts to Twitter points to the blog post on Posterous itself, not on Blogger.&lt;br&gt;  &lt;br&gt;It&amp;#39;s not a big deal, but the question this begs of course is, why use Blogger at all if my blog is just being duplicated in two places?&lt;p style="font-size: 10px;"&gt;  &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;   from &lt;a href="http://mattots.posterous.com/could-posterous-replace-blogge"&gt;Matt's Random Stuff&lt;/a&gt;  &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5387158326715063670?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5387158326715063670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5387158326715063670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5387158326715063670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5387158326715063670'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/could-posterous-replace-blogger.html' title='&#xA;Could Posterous replace Blogger?  '/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4203224535361299992</id><published>2008-12-18T14:57:00.004Z</published><updated>2008-12-18T14:59:59.258Z</updated><title type='text'>Twitter - a second chance</title><content type='html'>&lt;p&gt;OK, maybe I was a bit hasty with my earlier blog post slamming Twitter as a total waste of time. As my boss said, it was a bit of a "grumpy old man" post really, wasn't it!&lt;br /&gt;&lt;br /&gt;I think maybe I was approaching things from the wrong angle. I guess there are lots of things in life you can look at and call a waste of time, but then if you look at it differently it makes more sense.&lt;br /&gt;&lt;br /&gt;From one point of view, Twitter is indeed solving a problem that didn't exist - no-one was going around saying "I really need to be able to post messages of less than 160 characters to all my online friends". But then, the same thing could be said for the vast majority of things we have come to accept and rely on in modern society. Who needed the telephone when you had the postal service and word of mouth? Who needed email when you had the telephone? Who needed mobile phones when we had landlines? Yes, sure, from our perspective we look back and say "Of course these things were needed - how did we manage without them?" But it's all about perspective.&lt;br /&gt;&lt;br /&gt;OK, so philosophising (is that a word?) aside, why the change of heart?&lt;br /&gt;&lt;br /&gt;Well, I was at a client meeting this morning and a colleague was "preaching" about the benefits of Twitter for building customer relationships. And the client was getting quite excited about the idea. And it suddenly started to click. Even if it doesn't have any direct, quantifiable benefit, the benefits are gradual indirect, incremental. And isn't that true of all relationships? They don't happen overnight, and you can't neceesarily quantify them. But they're still just as real. Twitter might not in and of itself have any greta power to change anything, but as one tool in a wider arsenal of resources, maybe it can make a difference after all - whether that is simply keeping in touch with friends, or building relationships with customers.&lt;br /&gt;&lt;br /&gt;I've posted this from my email using &lt;a href="http://posterous.com/"&gt;Posterous&lt;/a&gt;, and it might just be another reason why I start using Twitter again. But that's for another post!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4203224535361299992?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4203224535361299992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4203224535361299992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4203224535361299992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4203224535361299992'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/twitter-second-chance.html' title='Twitter - a second chance'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5994521232865530343</id><published>2008-12-17T21:59:00.000Z</published><updated>2008-12-17T22:06:21.891Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><title type='text'>A close call</title><content type='html'>I just went to switch on my desktop PC earlier this evening and was confronted with a nasty surprise - all my programs were crashing about 30 seconds - 1 minute after launching. I restarted several times but the same thing kept happening.&lt;br /&gt;&lt;br /&gt;My first thought was 'virus' and a quick Google search (on the laptop) seemed to confirm my suspicions.&lt;br /&gt;&lt;br /&gt;However, when I called my brother - the tech guru! - for advice, he thought it might be the memory and suggested I simply remove the memory modules and replace them again and see if that fixed it.&lt;br /&gt;&lt;br /&gt;Which, I'm relieved to say, did fix it! Phew! I really didn't want to have to face a Christmas sorting out an infected hard drive!&lt;br /&gt;&lt;br /&gt;But it does prove that sometimes the good old "give it a kick / drop it" technique for fixing things works for even the most advanced of modern technology!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5994521232865530343?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5994521232865530343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5994521232865530343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5994521232865530343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5994521232865530343'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/close-call.html' title='A close call'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3806832765968979172</id><published>2008-12-15T09:28:00.001Z</published><updated>2008-12-15T09:33:12.383Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Hallelujah</title><content type='html'>I was very pleased that Alexandra won X-Factor on Saturday night. She was clearly the best singer in the competition. It's arguable whether she's a better singer than Leona Lewis, the 2006 winner, but she's probably a lot more versatile as evidenced by the wide range of styles she tackled throughout the competition.&lt;br /&gt;&lt;br /&gt;The winner's single, a cover-version of Leonard Cohen's 'Hallelujah', seemed a slightly odd choice at first, but Alexandra's rendition is absolutely incredible.&lt;br /&gt;&lt;br /&gt;Seems like the Christmas number one is already guaranteed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3806832765968979172?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3806832765968979172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3806832765968979172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3806832765968979172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3806832765968979172'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/hellelujah.html' title='Hallelujah'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3748444732704135681</id><published>2008-12-15T09:00:00.000Z</published><updated>2008-12-15T09:27:57.863Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Recursion</title><content type='html'>Recursion is one of those things self-taught programmers (or designers who dabble a bit in programming, like me) tend to overlook. That was certainly the case for me. Apart from the occasional situation where I needed to loop an indefinite number of times (and ended up cheating and using an iterative loop with an artificial end-point instead) I wasn't really aware of what it was.&lt;br /&gt;&lt;br /&gt;But having realised it was something that I needed to get my head around, I rooted around on the web for a decent - and simple - tutorial.&lt;br /&gt;&lt;br /&gt;(Those of you with a programming or mathematical background are probably laughing at the thought that it wouldn't be immediately obvious to anyone, but it took me a while to grasp the concept. However, once you do get it, its actually really straightforward. The key, for someone like me who generally writes very linear, one-dimensional code, is that you have to use a function to create a recursive loop - unless you want things to get extremely complicated!)&lt;br /&gt;&lt;br /&gt;The test was to rewrite a piece of code I wrote a while back to display a nested list of web pages in a CMS. Previously I'd cheated by setting a limit on the number of nesting levels, but I wanted to allow an unlimited number.&lt;br /&gt;&lt;br /&gt;In fact, the recursive version of the code is about 10 times simpler than the original iterative version and took me all of about 3 minutes to write - including thinking time!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3748444732704135681?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3748444732704135681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3748444732704135681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3748444732704135681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3748444732704135681'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/recursion.html' title='Recursion'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8186513173630405649</id><published>2008-12-11T14:00:00.001Z</published><updated>2008-12-11T14:00:59.205Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>Send SMS from Gmail Chat - if you're in the US that is!</title><content type='html'>When I saw the red message at the top of Gmail today telling me I could now &lt;a href="http://lifehacker.com/5107072/gmail-labs-gets-sms-in-chat-again++for-real-this-time"&gt;send SMS messages from Gmail chat&lt;/a&gt;, I thought "That sounds good!"  And why not? No more SMS charges texting people unless I'm away from a computer - which really isn't very often at all these days.&lt;br /&gt;&lt;br /&gt;But oh, when I clicked the Labs icon and scrolled down, what did I behold... "Only available for US mobile numbers". Darn!&lt;br /&gt;&lt;br /&gt;Maybe they'll roll it out to non-US mobiles soon. I hope so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8186513173630405649?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8186513173630405649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8186513173630405649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8186513173630405649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8186513173630405649'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/send-sms-from-gmail-chat-if-youre-in-us.html' title='Send SMS from Gmail Chat - if you&apos;re in the US that is!'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-7750943538441171892</id><published>2008-12-11T11:30:00.001Z</published><updated>2008-12-11T14:01:16.298Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><title type='text'>Converting Vimeo and YouTube embedded HTML to XHTML</title><content type='html'>Handy if, like me, you can't bear to put a site live without that nice &lt;a href="http://users.skynet.be/mgueury/mozilla/"&gt;green tick in the Firefox statusbar&lt;/a&gt; on every page!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ken-blog.krugler.org/2008/06/14/converting-vimeo-embedded-html-to-xhtml/"&gt;Convert Vimeo embed code to XHTML&lt;/a&gt; (instructions)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tools4noobs.com/online_tools/youtube_xhtml/"&gt;Convert YouTube embed code to XHTML&lt;/a&gt; (generator)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-7750943538441171892?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/7750943538441171892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=7750943538441171892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7750943538441171892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7750943538441171892'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/converting-vimeo-and-youtube-embedded.html' title='Converting Vimeo and YouTube embedded HTML to XHTML'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-6907125329138133439</id><published>2008-12-08T14:49:00.001Z</published><updated>2008-12-11T14:01:27.826Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>Search unread items in Google Reader??</title><content type='html'>Does anyone know whether its possible to search &lt;i&gt;unread &lt;/i&gt;items in Google Reader? There's an option in the dropdown to search &lt;i&gt;read&lt;/i&gt; items but not unread items. is:unread doesn't work. So is there some other way of doing this?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-6907125329138133439?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/6907125329138133439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=6907125329138133439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6907125329138133439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6907125329138133439'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/search-unread-items-in-google-reader.html' title='Search unread items in Google Reader??'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5990774552417775782</id><published>2008-12-05T22:28:00.000Z</published><updated>2008-12-05T22:53:11.244Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>Twitter - the biggest waste of time ever?</title><content type='html'>Well ok, so posting the odd 'tweet' is perhaps not the biggest time-waster in the history of the universe (although I suppose it depends on how many tweets you send!), but in the last few months since I took the plunge and created a Twitter account, I have come to the conclusion that the whole thing is simply a waste of time.&lt;br /&gt;&lt;br /&gt;Yes, I know people rant on about it being a great tool for businesses to 'get the word out' and 'build relationships with customers' or just for friends to 'hang out in cyberspace', but I just don't really see it that way.&lt;br /&gt;&lt;br /&gt;For one thing, the vast majority of Twitter users are techy people - the kind of people who'll install the latest gadgets and adapt the latest web services because it's 'cool'. The overwhelming majority of normal web users don't use it and aren't interested. &lt;br /&gt;&lt;br /&gt;But secondly and more importantly, it doesn't actually acheive anything that can't be acheived just as well - or better - with existing tools: email, blogs, Facebook, etc. Those things are just as 'real-time', just as accessible, as a tweet and, crucially, because they're not forced into the confines of a ridiculously small number of characters, can generally convey the message far better. Just because it's good to be brief and to the point doesn't mean that you can say everything that needs saying in 140 characters or less!&lt;br /&gt;&lt;br /&gt;There's an online Google maps 'mashup' called &lt;a href="http://twittervision.com/"&gt;Twittervision&lt;/a&gt; which displays live tweets from Twitter on a world map. Sure, it's cool in one sense, but just spending a few moments watching the sorts of things people are tweeting about is all the evidence you need to see that it's mainly just fluff.&lt;br /&gt;&lt;br /&gt;If you want to promote a product or service, write a blog post. If you want to ask a question, send an email. If you want to chat with a mate, use IM... Come on, it's not rocket science! &lt;br /&gt;&lt;br /&gt;Next thing you know they'll be coming up with a TV channel where the programmes can only be 15 seconds long... oh, they've &lt;a href="http://www.15secondtv.co.uk/"&gt;already done it!&lt;/a&gt;!!&lt;br /&gt;&lt;br /&gt;Maybe I sound like a grumpy old man, but it's not that I don't like new technology... if it serves a valid purpose and solves a problem. I just think that things like Twitter solve a problem that never existed!&lt;br /&gt;&lt;br /&gt;I'm sure there'll be plenty of people ready to disagree with me, but that's ok, I'm not out to win any arguments here - just say what I'm thinking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5990774552417775782?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5990774552417775782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5990774552417775782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5990774552417775782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5990774552417775782'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/twitter-biggest-waste-of-time-ever.html' title='Twitter - the biggest waste of time ever?'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8447105767089987219</id><published>2008-12-05T21:46:00.000Z</published><updated>2008-12-05T21:46:52.740Z</updated><title type='text'>Introduction to Firebug</title><content type='html'>Estelle Weyl has a great &lt;a href="http://www.evotech.net/blog/2007/06/introduction-to-firebug/"&gt;introduction to the Firebug extension for Firefox&lt;/a&gt; on her website.&lt;br /&gt;&lt;br /&gt;I have to admit, to my shame, that I've had Firebug installed for perhaps a couple of years and yet never actually taken the time to understand how it works or what exactly it does! I just knew it was one of those things I "ought" to have as a web developer!! But reading this has opened my eyes to just what a powerful tool Firebug really is. I try to avoid javascript if I can help it but even just for HTML and CSS it has some very useful features.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8447105767089987219?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.evotech.net/blog/2007/06/introduction-to-firebug/' title='Introduction to Firebug'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8447105767089987219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8447105767089987219' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8447105767089987219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8447105767089987219'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/introduction-to-firebug.html' title='Introduction to Firebug'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3175022022818831933</id><published>2008-12-05T19:55:00.000Z</published><updated>2008-12-05T19:55:54.493Z</updated><title type='text'>Uninstall AVG Safe Search</title><content type='html'>Instructions for &lt;a href="http://www.technipages.com/firefox-3-cant-uninstall-avg-safe-search-extension-because-uninstall-is-grayed-out.html"&gt;how to uninstall the AVG SafeSearch extension in Firefox&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3175022022818831933?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.technipages.com/firefox-3-cant-uninstall-avg-safe-search-extension-because-uninstall-is-grayed-out.html' title='Uninstall AVG Safe Search'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3175022022818831933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3175022022818831933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3175022022818831933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3175022022818831933'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/uninstall-avg-safe-search.html' title='Uninstall AVG Safe Search'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1089551225579625757</id><published>2008-12-04T11:13:00.001Z</published><updated>2008-12-04T11:31:37.305Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><title type='text'>Foxmarks, Google Bookmarks, Delicious....???</title><content type='html'>I think its about time I decided on a single solution for managing my bookmarks. At the moment I have different sets of Firefox bookmarks saved on three different computers (desktop, laptop and work), and a Delicious account (which I use with the Delicious Firefox extension).&lt;br /&gt;&lt;br /&gt;I started using Delicious a while ago but I've never quite got into the swing of it, and since I don't want to share my bookmarks it seems a bit unecessary. Foxmarks seems a simpler solution if all I want to do is synchronise my Firefox bookmarks across computers.&lt;br /&gt;&lt;br /&gt;But if I'm going to start syncing bookmarks, what about my history? It would be quite nice to be able to search back through my browsing history on all the machines I use. But does this mean installing the Google Toolbar? I really don't want another toolbar.&lt;br /&gt;&lt;br /&gt;I think I'm going to give Foxmarks a try and see how I get on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1089551225579625757?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1089551225579625757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1089551225579625757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1089551225579625757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1089551225579625757'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/foxmarks-google-bookmarks-delicious.html' title='Foxmarks, Google Bookmarks, Delicious....???'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-6528638957138287148</id><published>2008-12-03T10:14:00.000Z</published><updated>2008-12-03T10:14:06.941Z</updated><title type='text'>Magic/Replace</title><content type='html'>&lt;a href="http://cleanupdata.com/"&gt;Magic/Replace&lt;/a&gt; is a free web-based tool for making changes to all of the rows of a data table at once. You can paste in a spreadsheet, CSV or TSV file, make your changes in a single row and it intelligently applies the same changes to all rows. So for example, you can make all email addresses lowercase, or combine forename and surname into a single column, or change middle names to initials, or reformat dates....&lt;br /&gt;&lt;br /&gt;There's a good video demo on the site.&lt;br /&gt;&lt;br /&gt;This has already been added to my 'Resources' bookmarks folder.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-6528638957138287148?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://cleanupdata.com/' title='Magic/Replace'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/6528638957138287148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=6528638957138287148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6528638957138287148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6528638957138287148'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/12/magicreplace.html' title='Magic/Replace'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2437263291883300522</id><published>2008-11-24T09:35:00.000Z</published><updated>2008-11-24T09:35:34.566Z</updated><title type='text'>Happy people don't watch TV!</title><content type='html'>According to a new study, reported in the New York Times, &lt;a href="http://www.nytimes.com/2008/11/20/health/research/20happy.html?_r=1&amp;amp;em"&gt;happy people watch less TV than unhappy people&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Given that we didn't have a TV for the first 18 years of my life, does that mean I'm less happy now than I was then?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2437263291883300522?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nytimes.com/2008/11/20/health/research/20happy.html?_r=1&amp;em' title='Happy people don&apos;t watch TV!'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2437263291883300522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2437263291883300522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2437263291883300522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2437263291883300522'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/happy-people-dont-watch-tv.html' title='Happy people don&apos;t watch TV!'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-6571801102723086415</id><published>2008-11-24T09:08:00.000Z</published><updated>2008-11-24T09:09:30.691Z</updated><title type='text'>"A complex system that works is invariably found to have evolved from a simple system that worked..."</title><content type='html'>I thought this quote, quoted on the &lt;a href="http://www.37signals.com/svn/posts/1414-a-complex-system-that-works-is-invariably"&gt;37 signals blog&lt;/a&gt; was so quotable it was worth quoting here:&lt;br /&gt;&lt;blockquote&gt;A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over, beginning with a working simple system. &lt;cite&gt;- John Gall&lt;/cite&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-6571801102723086415?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/6571801102723086415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=6571801102723086415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6571801102723086415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6571801102723086415'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/complex-system-that-works-is-invariably.html' title='&quot;A complex system that works is invariably found to have evolved from a simple system that worked...&quot;'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4303146557557549249</id><published>2008-11-21T13:44:00.000Z</published><updated>2008-11-21T13:44:48.670Z</updated><title type='text'>Train fares rise again</title><content type='html'>&lt;a href="http://news.bbc.co.uk/1/hi/uk/7741162.stm#"&gt;BBC News&lt;/a&gt; report that rail fares are set to rise by an average of 6% in the new year. Now where have I heard that before?&lt;br /&gt;&lt;br /&gt;When will the government realise that you can't have a successful public transport system without serious public investment? Public services will never pay for themselves, that's the simple conclusion that countries like Germany reached years ago, and look at their public transport system.&lt;br /&gt;&lt;br /&gt;Yet Britain seems intent on turning every public service into a profit-making business, even though the figures can never add up without either driving passengers off the trains (through sky-high prices), or cutting back the very service they should be providing (the policy Dr Beeching pursued back in the '60s).&lt;br /&gt;&lt;br /&gt;We should just bite the bullet and realise that public money is the only way to properly pay for a decent public service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4303146557557549249?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://news.bbc.co.uk/1/hi/uk/7741162.stm#' title='Train fares rise again'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4303146557557549249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4303146557557549249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4303146557557549249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4303146557557549249'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/train-fares-rise-again.html' title='Train fares rise again'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3781768239709651099</id><published>2008-11-21T09:43:00.000Z</published><updated>2008-11-21T09:43:12.479Z</updated><title type='text'>Google SearchWiki</title><content type='html'>According to the &lt;a href="http://googleblog.blogspot.com/2008/11/searchwiki-make-search-your-own.html"&gt;official Google blog&lt;/a&gt;, Google are working on what could end up being the biggest wiki in the world - bigger than Wikipedia.&lt;br /&gt;&lt;br /&gt;The idea seems to be that when you're logged in to Google you can basically add notes to items in Google search results pages as well as reordering the results. These changes would only affect your own searches, but there'll also be a "See all notes for this SearchWiki" link allowing you to see what other people have added. Essentially one huge wiki tied directly in to Google search.&lt;br /&gt;&lt;br /&gt;This is pretty significant, as it could seriously redefine the way we think about and interact with the web. Search - and by definition, Google - have become central to the whole web esperience, but until now mainly as a simple portal into other sites. With the development of SearchWiki, the search engine will become far more than just a gateway, it will become a repository of information in itself. Its possible to even foresee a time when you'd do a Google search but instead of clicking on the links to visit the sites you'd just read what people have added to the wiki about the sites.&lt;br /&gt;&lt;br /&gt;Is that a good thing for the web or not? It's certainly a good thing for Google, but we'll have to wait and see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3781768239709651099?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://googleblog.blogspot.com/2008/11/searchwiki-make-search-your-own.html' title='Google SearchWiki'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3781768239709651099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3781768239709651099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3781768239709651099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3781768239709651099'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/google-searchwiki.html' title='Google SearchWiki'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-265502269267955848</id><published>2008-11-21T09:13:00.002Z</published><updated>2008-11-21T09:32:45.124Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>Gmail gets themes!</title><content type='html'>I know just about every techy blog out there (and probably quite a few not so techy blogs as well) have been buzzing about this for the past couple of days but I might as well add my bit as well!&lt;br /&gt;&lt;br /&gt;For anyone who is reading this and doesn't already know, Gmail now has themes, like iGoogle. You get a choice of about 30 different visual styles, some of which are quite pleasant and some not so pleasant!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-265502269267955848?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/265502269267955848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=265502269267955848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/265502269267955848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/265502269267955848'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/gmail-gets-themes.html' title='Gmail gets themes!'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4340457727758605811</id><published>2008-11-20T09:12:00.000Z</published><updated>2008-11-20T09:12:15.375Z</updated><title type='text'>Windows Vista Sidebar on XP</title><content type='html'>Found &lt;a href="http://joshoon.deviantart.com/art/Windows-Sidebar-Real-one-Pack-75626472?loggedin=1"&gt;this&lt;/a&gt; simple package for installing the Windows Vista sidebar on Windows XP on deviantART the other day. It's a doddle to install and works fine, although I did have to copy all the dll files from Alky's Libraries folder into the Windows Sidebar folder to avoid getting annoying alerts about missing dlls.&lt;br /&gt;&lt;br /&gt;A lot of the gadgets are of very questionable quality (or usefulness) but a few are quite handy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4340457727758605811?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://joshoon.deviantart.com/art/Windows-Sidebar-Real-one-Pack-75626472?loggedin=1' title='Windows Vista Sidebar on XP'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4340457727758605811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4340457727758605811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4340457727758605811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4340457727758605811'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/windows-vista-sidebar-on-xp.html' title='Windows Vista Sidebar on XP'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4006769925578106244</id><published>2008-11-19T10:01:00.000Z</published><updated>2008-11-19T10:01:00.102Z</updated><title type='text'>15 Helpful In-Browser Web Development Tools</title><content type='html'>Smashing Magazine have a useful article: &lt;a href="http://www.smashingmagazine.com/2008/11/18/15-helpful-in-browser-web-development-tools/"&gt;15 Helpful In-Browser Web Development Tools&lt;/a&gt; which does what it says on the tin really!&lt;br /&gt;&lt;br /&gt;One additional point to make about the Colorzilla addon for Firefox, and something which many people seem to overlook or not realise, is that you can configure the status bar display to show various things in addition to colour codes, including the dimensions of elements, and, most useful of all I find, the DOM path (or reverse DOM path).&lt;br /&gt;&lt;br /&gt;This latter ability is absolutely indispensable when you're editing the CSS of a page, particularly one you didn't create. Rather than having to trawl through the HTML looking for the relevant element, class name or ID, you can just click the Colorzilla tool and move the cursor over the part of thepage you're interested in and immediately see the current element, class, ID, parent elements etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4006769925578106244?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.smashingmagazine.com/2008/11/18/15-helpful-in-browser-web-development-tools/' title='15 Helpful In-Browser Web Development Tools'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4006769925578106244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4006769925578106244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4006769925578106244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4006769925578106244'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/15-helpful-in-browser-web-development.html' title='15 Helpful In-Browser Web Development Tools'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-6455605783815829756</id><published>2008-11-19T09:48:00.000Z</published><updated>2008-11-19T09:48:10.338Z</updated><title type='text'>Firefox Universal Uploader (Firefox addons)</title><content type='html'>&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4724"&gt;Firefox Universal Uploader&lt;/a&gt; looks like another useful extension to try out...&lt;br /&gt;&lt;br /&gt;From the Firefox Add-ons website:&lt;br /&gt;&lt;br /&gt;"This extension allows to upload/download files from your favorite websites using a simple interface."&lt;br /&gt;&lt;br /&gt;The list of supported sites includes Flickr, Picasa, Youtube and Facebook to name a few.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-6455605783815829756?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://addons.mozilla.org/en-US/firefox/addon/4724' title='Firefox Universal Uploader (Firefox addons)'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/6455605783815829756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=6455605783815829756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6455605783815829756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6455605783815829756'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/firefox-universal-uploader-firefox.html' title='Firefox Universal Uploader (Firefox addons)'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1377085564723276106</id><published>2008-11-18T13:28:00.003Z</published><updated>2008-11-18T13:41:11.342Z</updated><title type='text'>Amazon update</title><content type='html'>I don't know if anyone else has had this, but both my wife and I have both experienced the same problem with Amazon in the last few days. Essentially, it seems that Amazon have changed their order processing system so that you are now required to have &lt;span style="font-style: italic;"&gt;exactly &lt;/span&gt;the same name on your delivery address as that on the card being used for payment. In the past you could have one saying 'Joe Bloggs' and the other saying 'Mr J Bloggs' but this no longer works.&lt;br /&gt;&lt;br /&gt;The troubling thing is they haven't mentioned this anywhere. The first we knew about it was about 24 hours after placing our orders when we received an email from Amazon saying that the order had not been processed and asking us to update our details on the website.&lt;br /&gt;&lt;br /&gt;Sure enough, upon logging in to our accounts, we were prompted to update our details and then retry submitting the order. In both our cases, simply changing the name on the delivery address was all that was required.&lt;br /&gt;&lt;br /&gt;Now fair enough, if that's what they've decided should be required then so be it. But please Amazon, if you're going to make a change to how our orders are processed, then could you let us know beforehand or at least alert us on the website before we submit an order. If you submit an order without making any changes to your account settings, you expect, perfectly reasonably, that it will work, the same as it did when you submitted an order yesterday.&lt;br /&gt;&lt;br /&gt;Anyway, just had to get that off my chest!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1377085564723276106?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1377085564723276106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1377085564723276106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1377085564723276106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1377085564723276106'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/amazon-update.html' title='Amazon update'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1736366372415046069</id><published>2008-11-18T09:25:00.002Z</published><updated>2008-11-18T09:28:07.880Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><title type='text'>GMail Notifier keeps logging out of Google Reader</title><content type='html'>There's currently a bug in the (otherwise very useful) GMail Notifier extension for Firefox that logs you out of Google Reader every time it checks your email! Apparently the developer of the extension is aware of this and working on a fix, but I thought I'd mention it in case anyone else had experienced the same problem and was wondering what's going on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1736366372415046069?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1736366372415046069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1736366372415046069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1736366372415046069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1736366372415046069'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/gmail-notifier-keeps-logging-out-of.html' title='GMail Notifier keeps logging out of Google Reader'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5866811251416891996</id><published>2008-11-14T21:45:00.005Z</published><updated>2008-11-14T22:04:34.097Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><title type='text'>Updated 'Flickr All Sizes Menu' Greasemonkey script</title><content type='html'>The &lt;a href="http://userscripts.org/scripts/show/1485"&gt;Flickr All Sizes Menu&lt;/a&gt; Greasemonkey script adds a dropdown menu to select which size to view when you hover over the 'All Sizes' button in Flickr. Only trouble is, it's no longer being maintained by the author and consequently doesn't work properly any more. However, the alternative (&lt;a href="http://userscripts.org/scripts/show/6178"&gt;Flickr AllSizes+&lt;/a&gt;) is too complicated for what I wanted, so I decided to edit the original script. Turns out it was only the styles that were a bit broken, so here is a working version of the script. To use it, just install the original script from userscripts.org, then edit it (click 'Manage user scripts' in the Greasemonkey menu, select 'Flickr All Sizes Menu' and click 'Edit') and replace the contents of the .js file with the code below:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(function() {&lt;br /&gt;var test = document.getElementById('button_bar');&lt;br /&gt;if(!test) return;&lt;br /&gt;&lt;br /&gt;//get image id&lt;br /&gt;var divs, imgId;&lt;br /&gt;divs = document.getElementsByTagName('div');&lt;br /&gt;for(i = 0; i &lt; imgid =" divs[i].id.match(/\d+/);" imgurl =" new" id="'" size="o'," id="'" size="m'," id="'" size="s'," id="'" size="t'," id="'" size="sq'" imgsizes =" document.getElementById('photo_gne_button_zoom');" newspan =" document.createElement('span');" sizemenu =" document.createElement('div');" innerhtml =" ("&gt;' +&lt;br /&gt;  '&amp;lt;li&amp;gt;&amp;lt;a href="http://www.blogger.com/%27%20+%20imgURL%5B0%5D%20+%20%27"&amp;gt;Original&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;' +&lt;br /&gt;  '&amp;lt;li&amp;gt;&amp;lt;a href="http://www.blogger.com/%27%20+%20imgURL%5B1%5D%20+%20%27"&amp;gt;Medium&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;' +&lt;br /&gt;  '&amp;lt;li&amp;gt;&amp;lt;a href="http://www.blogger.com/%27%20+%20imgURL%5B2%5D%20+%20%27"&amp;gt;Small&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;' +&lt;br /&gt;  '&amp;lt;li&amp;gt;&amp;lt;a href="http://www.blogger.com/%27%20+%20imgURL%5B3%5D%20+%20%27"&amp;gt;Thumbnail&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;' +&lt;br /&gt;  '&amp;lt;li&amp;gt;&amp;lt;a href="http://www.blogger.com/%27%20+%20imgURL%5B4%5D%20+%20%27"&amp;gt;Square&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;' +&lt;br /&gt;  '&amp;lt;/ul&amp;gt;'&lt;br /&gt;);&lt;br /&gt;newSpan.appendChild(sizeMenu);&lt;br /&gt;&lt;br /&gt;//add stylesheet for the menu&lt;br /&gt;var head, style;&lt;br /&gt;head = document.getElementsByTagName('head')[0];&lt;br /&gt;style = document.createElement('style');&lt;br /&gt;style.setAttribute('type', 'text/css');&lt;br /&gt;style.innerHTML = (&lt;br /&gt;'#allSizes {' +&lt;br /&gt;'  display: none;' +&lt;br /&gt;'  background-color: #F3F3F3;' +&lt;br /&gt;'  border: 1px solid #E3E3E3;' +&lt;br /&gt;'  position: absolute;' +&lt;br /&gt;'  margin-left: -49px;' +&lt;br /&gt;'  margin-top: 24px;' +&lt;br /&gt;'  padding-left: 0;' +&lt;br /&gt;'}' +&lt;br /&gt;&lt;br /&gt;'#button_bar &gt; span:hover &gt; #allSizes {' +&lt;br /&gt;'  display: inline;' +&lt;br /&gt;'}' +&lt;br /&gt;&lt;br /&gt;'#allSizes ul {' +&lt;br /&gt;'  list-style: none;' +&lt;br /&gt;'  margin: 0;' +&lt;br /&gt;'  padding: 0.3em 1em 0.5em 0.8em;' +&lt;br /&gt;'}' +&lt;br /&gt;&lt;br /&gt;'#allSizes ul li {' +&lt;br /&gt;'  border: none;' +&lt;br /&gt;'  margin: 0;' +&lt;br /&gt;'  padding: 0;' +&lt;br /&gt;'}' +&lt;br /&gt;&lt;br /&gt;'#allSizes a {' +&lt;br /&gt;'  background: none;' +&lt;br /&gt;'  border: none;'+&lt;br /&gt;'  display: inline;' +&lt;br /&gt;'  font-size: 90%;' +&lt;br /&gt;'  padding: none;' +&lt;br /&gt;'}' +&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'#allSizes a:hover {' +&lt;br /&gt;'  color: #0063DC;' +&lt;br /&gt;'  text-decoration: underline;' +&lt;br /&gt;'}'&lt;br /&gt;&lt;br /&gt;);&lt;br /&gt;head.appendChild(style);&lt;br /&gt;&lt;br /&gt;})();&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5866811251416891996?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5866811251416891996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5866811251416891996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5866811251416891996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5866811251416891996'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/flickr-all-sizes-menu-greasemonkey.html' title='Updated &apos;Flickr All Sizes Menu&apos; Greasemonkey script'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8674048321771035590</id><published>2008-11-14T10:28:00.001Z</published><updated>2008-11-14T21:02:08.248Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Taskbar Shuffle</title><content type='html'>&lt;a href="http://www.freewebs.com/nerdcave/taskbarshuffle.htm"&gt;Taskbar Shuffle&lt;/a&gt; is a nifty little free utility for Windows (all versions) that allows you reorder taskbar buttons and system tray icons via drag and drop. Handy if, like me, you often have a lot of windows open and like to introduce a little more order to how they are arranged than simply the order in which they were opened.&lt;br /&gt;&lt;br /&gt;It also allows you to close a window/programme by middle-clicking its button on the taskbar, as well as giving you a little more control about how buttons are grouped.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8674048321771035590?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8674048321771035590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8674048321771035590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8674048321771035590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8674048321771035590'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/taskbar-shuffle.html' title='Taskbar Shuffle'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8857229856675162089</id><published>2008-11-12T09:36:00.001Z</published><updated>2008-11-14T21:02:32.961Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>MozBackup</title><content type='html'>&lt;a href="http://mozbackup.jasnapaka.com/"&gt;MozBackup&lt;/a&gt; is a simple open source backup utility for creating backups of many Mozilla products, including Firefox.&lt;br /&gt;&lt;br /&gt;I currently have over 25 extensions installed (although I keep some of them disabled unless I specifically need to use them) - this might seem like a lot but I've heard of people having 60 or more!! I tend to be quite strict with myself about what extensions I actually keep installed. I'll only try an extension if it looks like it offers a significant usability enhancement, and even then, if it turns out to be less useful than I anticipated, I'll uninstall it again.&lt;br /&gt;&lt;br /&gt;Nevertheless, 25 extensions, not to mention my browsing history, bookmarks, cookies, etc. is a lot of stuff to lose should things go wrong, so I thought it was about time I looked into backing up my profile. And MozBackup seems to offer a very nice, easy to use way of doing this - and of course, restoring backed up profiles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8857229856675162089?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8857229856675162089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8857229856675162089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8857229856675162089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8857229856675162089'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/mozbackup.html' title='MozBackup'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-7121795763174633506</id><published>2008-11-07T16:44:00.001Z</published><updated>2008-11-07T16:52:52.612Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Delay before action in jQuery</title><content type='html'>(pk)blog highlights a very easy way to &lt;a href="http://p.karageorgakis.com/blog/jquery_simulating_a_delay_function_between_fade_in_out_effects/"&gt;simulate a delay before an action in jQuery&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Because setTimeout doesn't work in jQuery (at least not without some messing around) and there isn't a built-in delay() function (shame), the simplest method is to create the &lt;span style="font-style: italic;"&gt;illusion &lt;/span&gt;of a delay by calling an action that doesn't have any visible effect.&lt;br /&gt;&lt;br /&gt;For example, if you want a confirmation message to fade out after a certain number of seconds, you could use the following jQuery:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$('#message').fadeTo(4000, 1).fadeOut(2000);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The fadeTo method has no visible effect on the message box because its visibility is already 100%. However, the browser will still wait, giving the effect of delaying the fadeOut action by 4 seconds.&lt;br /&gt;&lt;br /&gt;A neat little trick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-7121795763174633506?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/7121795763174633506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=7121795763174633506' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7121795763174633506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7121795763174633506'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/delay-before-action-in-jquery.html' title='Delay before action in jQuery'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1194731345332984614</id><published>2008-11-07T14:50:00.001Z</published><updated>2008-11-07T14:50:20.399Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><title type='text'>Ubiquity Firefox extension</title><content type='html'>The &lt;a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/"&gt;Ubiquity Firefox extension&lt;/a&gt; from Mozilla Labs, while still at a very early stage of development and as such labelled 'Experimental', looks like it has the makings of something quite special. I haven't installed it yet so I can't say much, but &lt;a href="http://www.practicalhacks.com/2008/09/09/ubiquity-experimental-firefox-extension-which-adds-remarkable-functionality-speed-to-browsing/"&gt;this article on Practical Hacks&lt;/a&gt; gives a taster and has persuaded me to give it a try when I next get a spare few minutes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1194731345332984614?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1194731345332984614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1194731345332984614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1194731345332984614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1194731345332984614'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/ubiquity-firefox-extension.html' title='Ubiquity Firefox extension'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-73931939445581154</id><published>2008-11-07T14:49:00.001Z</published><updated>2008-11-07T14:49:49.978Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Sting on the lute</title><content type='html'>The BBC website has some video clips of Sting playing the lute, including &lt;a href="http://news.bbc.co.uk/1/hi/entertainment/7714354.stm"&gt;this one&lt;/a&gt; where the former Police frontman talks a bit about the history of the lute and attempts to play a bit of John Dowland!&lt;br /&gt;&lt;br /&gt;There's also a video of him performing a very &lt;a href="http://news.bbc.co.uk/1/hi/entertainment/7714391.stm"&gt;mellow and evocative version of 'Message in a bottle'&lt;/a&gt; as well as &lt;a href="http://news.bbc.co.uk/1/hi/entertainment/7714377.stm"&gt;a 17th century motet&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Love it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-73931939445581154?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/73931939445581154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=73931939445581154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/73931939445581154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/73931939445581154'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/11/sting-on-lute.html' title='Sting on the lute'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-7420729172737706259</id><published>2008-10-31T09:53:00.001Z</published><updated>2008-11-07T14:37:32.234Z</updated><title type='text'>Free website validation tools</title><content type='html'>Just found what look to be a couple of really great free resources...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://freesitevalidator.com/"&gt;Free Site Validator&lt;/a&gt; claims to be able to scan an entire website for validation errors and broken links, manage multiple sites, watch report status in real time, receive report email notifications. This is great if you don't want the hassle of having to trawl through your site page by page validating each one individually.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://browsershots.org/"&gt;Browsershots&lt;/a&gt; lets you request screenshots of URLs in a whole host of browsers, again completely free (although there is a limit to how many requests you can make in a given period of time). I've only ever seen this sort of thing as a paid service before (Campaign Monitor offer it with HTML emails for example) so this is great.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-7420729172737706259?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/7420729172737706259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=7420729172737706259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7420729172737706259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7420729172737706259'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/free-website-validation-tools.html' title='Free website validation tools'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8313419898985283234</id><published>2008-10-31T09:36:00.001Z</published><updated>2008-10-31T09:36:49.857Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>'GCal Popup' Firefox extension</title><content type='html'>Although I haven't really got into the habit of using Google Calendar yet (to be honest I've managed to organise my life reasonably well so far without the need for a calendar), for those who do use it, &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/9411"&gt;GCal Popup&lt;/a&gt; looks like a nice little extension for Firefox.&lt;br /&gt;&lt;br /&gt;Quite simply, it adds an icon to the status bar which, when clicked, opens Google Calendar in an overlay over the current web page, lightbox-style. Clicking the icon toggles the calendar.&lt;br /&gt;&lt;br /&gt;I've not tested it but I guess the acid test is how quickly it opens. If it's no faster than having a conventional bookmark and opening in a new tab then I guess there's no real advantage, unless its psychological.&lt;br /&gt;&lt;br /&gt;Anyway, the extension is currently labelled "experimental" so it might still be a bit buggy. But if anyone tries it out or already uses it, lets hear your comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8313419898985283234?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8313419898985283234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8313419898985283234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8313419898985283234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8313419898985283234'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/gcal-popup-firefox-extension.html' title='&apos;GCal Popup&apos; Firefox extension'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5996305206645341279</id><published>2008-10-30T16:43:00.000Z</published><updated>2008-10-30T16:43:18.072Z</updated><title type='text'>Premailer — preflight for HTML e-mail</title><content type='html'>I just stumbled across &lt;a href="http://code.dunae.ca/premailer.web/"&gt;Premailer&lt;/a&gt;. It's a free-to-use web-based service that takes any URL and converts it to a single static HTML file with all external styles converted to inline styles, as well as giving a list of warnings for anything that might not work in HTML emails (based on the Email Standards Project's guidelines. It'll even generate a plain text version for you as well!&lt;br /&gt;&lt;br /&gt;Absolutely invaluable when it comes to creating HTML emails. I know Campaign Monitor already does this for you, but for those occasions when you're not using it this is prefect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5996305206645341279?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.dunae.ca/premailer.web/' title='Premailer — preflight for HTML e-mail'/><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5996305206645341279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5996305206645341279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5996305206645341279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5996305206645341279'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/premailer-preflight-for-html-e-mail.html' title='Premailer — preflight for HTML e-mail'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2464439841532535361</id><published>2008-10-30T13:57:00.004Z</published><updated>2008-10-30T14:15:56.230Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><title type='text'>Firefox security extensions</title><content type='html'>Recommendation time. Here are a few useful Firefox security extensions...&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/722"&gt;Noscript&lt;/a&gt; - Blocks harmful scripts and objects including javascript, Flash, Java, Silverlight, even iframes and frames if you want! You can set the level of protection you want and then allow or deny scripts on a per domain basis, either temporarily or permanently.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2497"&gt;CookieSafe&lt;/a&gt; - Similar to Noscript except for cookies rather than scripts.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3383"&gt;KeyScrambler Personal&lt;/a&gt; - Encrypts keystrokes when entering text in web forms etc. to protect against keyloggers. You can also install a plugin for Internet Explorer at the same time although this requires a system restart. The default setting for Firefox is for an overlay bar showing your encrypted keystrokes as you type but you can turn this off and just have the icon in the task bar or nothing at all.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1865"&gt;Adblock Plus&lt;/a&gt; - Whitelist based banner ad blocking.&lt;br /&gt;&lt;br /&gt;I know there's a temptation to think, "Is all this security really necessary?" Well, I'd rather be too careful and have to jump through a few more hoops while browsing the web than not be careful enough and end up regretting it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2464439841532535361?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2464439841532535361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2464439841532535361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2464439841532535361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2464439841532535361'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/more-firefox-security-extensions.html' title='Firefox security extensions'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4360777125203863740</id><published>2008-10-30T13:37:00.004Z</published><updated>2008-10-30T13:56:36.535Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><title type='text'>Changing the Noscript keyboard shortcut</title><content type='html'>I recently started using the &lt;a href="http://noscript.net/"&gt;Noscript&lt;/a&gt; extension for Firefox in an effort to improve browsing security. One issue I noticed is that the 'Show/hide styles' keyboard shortcut (Ctrl+Shift+S) used by the Web Developer toolbar no longer works as the same shortcut is used to display the Noscript menu.&lt;br /&gt;&lt;br /&gt;I already use an extension called &lt;a href="http://kb.mozillazine.org/Keyconfig_extension"&gt;Keyconfig&lt;/a&gt; which lets you edit most of your Firefox keyboard shortcuts  (including those used by extensions) but for some reason the Noscript shortcuts don't appear in the Keyconfig list.&lt;br /&gt;&lt;br /&gt;There is an easy fix though. Simply open &lt;span style="font-family: courier new;"&gt;extensions\{73a6fe31-595d-460b-a920-fcc0f8843232}\defaults\preferences\noscript.js&lt;/span&gt; (in your Firefox profile folder) and edit the line &lt;span style="font-family: courier new;"&gt;pref("noscript.keys.ui", "ctrl shift S");&lt;/span&gt; to whatever key combination you want to use instead. I've changed mine to Ctrl+Shift+N (N for Noscript obviously, and it's not currently used by anything else).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4360777125203863740?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4360777125203863740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4360777125203863740' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4360777125203863740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4360777125203863740'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/changing-noscript-keyboard-shortcut.html' title='Changing the Noscript keyboard shortcut'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4804876304498027347</id><published>2008-10-28T09:46:00.002Z</published><updated>2008-10-28T10:00:04.101Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><title type='text'>Digital photography tips</title><content type='html'>Ask MetaFilter have some handy &lt;a href="http://ask.metafilter.com/105287/Pok%C3%A9mon-Snap-was-about-as-far-as-I-got-with-photography"&gt;digital photography tips&lt;/a&gt; that are worth a look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4804876304498027347?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4804876304498027347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4804876304498027347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4804876304498027347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4804876304498027347'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/digital-photography-tips.html' title='Digital photography tips'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-4459063373441117694</id><published>2008-10-28T09:37:00.001Z</published><updated>2008-10-28T09:49:49.074Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Another font manager</title><content type='html'>&lt;a href="http://www.cfontpro.com/"&gt;Cfont Pro&lt;/a&gt; is another free font manager for Windows. I haven't tried it out yet but it's worth filing away in the 'to look at sometime when I've got nothing else to do' tray.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-4459063373441117694?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/4459063373441117694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=4459063373441117694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4459063373441117694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/4459063373441117694'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/another-font-manager.html' title='Another font manager'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3051467117926092189</id><published>2008-10-28T09:35:00.003Z</published><updated>2008-10-28T09:59:24.532Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Retain aspect ratio of selected area when resizing images</title><content type='html'>&lt;a href="http://code.google.com/p/seam-carving-gui/"&gt;Seam Carving GUI&lt;/a&gt; is a freeware utility which allows you to resize an image while retaining the aspect ration of a specified area.&lt;br /&gt;&lt;br /&gt;A similar functionality is built into Photoshop CS4 but for those who can't afford the upgrade (me included!), this could come in quite handy on the odd occasion when I need to fit an image into a space that's the wrong size.&lt;br /&gt;&lt;br /&gt;Obviously it won't work for all images, but an example where it would work quite nicely is where you've got an area of background (sky, water, or something where a bit of stretching won't be obvious) that can be resized, while maintaining the proportions of the main subject.&lt;br /&gt;&lt;br /&gt;It is possible to approximate this sort of effect by selecting an area of an image in Photoshop and resizing that part, but this tool is a bit more intelligent, allowing you to select irregularly shaped or multiple areas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3051467117926092189?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3051467117926092189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3051467117926092189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3051467117926092189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3051467117926092189'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/retain-aspect-ratio-of-selected-area.html' title='Retain aspect ratio of selected area when resizing images'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-1876251158756345043</id><published>2008-10-28T09:20:00.005Z</published><updated>2008-10-28T09:58:37.647Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Ajax Contact Form</title><content type='html'>Tutorial Blog have a nice &lt;a href="http://tutorialblog.org/how-to-create-your-own-ajax-contact-form/"&gt;tutorial on how to create a simple Ajax contact form using PHP and jQuery&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;jQuery definitely makes Ajax a lot simpler to use than 'raw' javascript.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-1876251158756345043?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/1876251158756345043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=1876251158756345043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1876251158756345043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/1876251158756345043'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/ajax-contact-form.html' title='Ajax Contact Form'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-695405907951574275</id><published>2008-10-27T14:27:00.001Z</published><updated>2008-10-28T09:51:25.235Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><title type='text'>typeface.js</title><content type='html'>One worth watching - &lt;a href="http://typeface.neocracy.org/"&gt;typeface.js&lt;/a&gt; is a work in progress but aims to allow you to embed fonts directly into your website, removing the need for image/Flash text replacement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-695405907951574275?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/695405907951574275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=695405907951574275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/695405907951574275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/695405907951574275'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/typefacejs.html' title='typeface.js'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2582761211383506613</id><published>2008-10-27T11:15:00.001Z</published><updated>2008-10-27T14:16:32.744Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>Google Docs Desktop Shortcuts</title><content type='html'>Digital Inspiration have a &lt;a href="http://www.labnol.org/internet/office/quickly-create-new-google-docs-documents-desktop-shortcuts/3668/"&gt;handy walk-through guide&lt;/a&gt; to creating desktop shortcuts for Google Docs. A nice idea, obvious really but one of those things you don't think of until someone else mentions it!&lt;br /&gt;&lt;br /&gt;There are quite a few browser extensions and desktop tools available to integrate Google Docs more fully into your workflow, although I haven't really investigated them all fully yet. The one thing I haven't found yet though is an application for Windows that will automatically open Microsoft Office docs (saved on my computer) in Google Docs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2582761211383506613?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2582761211383506613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2582761211383506613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2582761211383506613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2582761211383506613'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/google-docs-desktop-shortcuts.html' title='Google Docs Desktop Shortcuts'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-3186769376500229183</id><published>2008-10-27T10:51:00.003Z</published><updated>2008-10-28T09:55:18.127Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>Upcoming new WYSIWYG editor from 37signals</title><content type='html'>&lt;a href="http://www.37signals.com/svn/posts/1330-introducing-wysihat-an-eventually-better-open-source-wysiwyg-editor"&gt;37signals have announced that they are working on a new open source javascript WYSIWYG editor&lt;/a&gt;. I'm going to be keeping a close eye on this as I'm not a big fan of existing WYSIWYG editors (TinyMCE et al), and Textile is just not user-friendly enough for the majority of people, simple though it is.&lt;br /&gt;&lt;br /&gt;My biggest bugbears with existing WYSIWYG solutions is they're a pain to install and configure and they generate messy markup. If 37signals can overcome these issues I think they'll be onto a winner.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-3186769376500229183?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/3186769376500229183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=3186769376500229183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3186769376500229183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/3186769376500229183'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/upcoming-new-wysiwyg-editor-from.html' title='Upcoming new WYSIWYG editor from 37signals'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-6180548708687206138</id><published>2008-10-27T10:10:00.002Z</published><updated>2008-10-27T14:17:03.597Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>ScreenToaster</title><content type='html'>If you need to make a quick and simple screencast that doesn't require any fancy editing, &lt;a href="http://www.screentoaster.com/"&gt;ScreenToaster&lt;/a&gt; looks to be a really handy tool. It's completely web-based so no download required.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-6180548708687206138?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/6180548708687206138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=6180548708687206138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6180548708687206138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/6180548708687206138'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/screentoaster.html' title='ScreenToaster'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-7881362578702674478</id><published>2008-10-17T14:53:00.007+01:00</published><updated>2008-10-28T09:54:44.194Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Template inheritance in Django</title><content type='html'>I've just discovered a killer feature of Django... template inheritance, using the &lt;span style="font-family:courier new;"&gt;{% block %}&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;{% extends %}&lt;/span&gt; tags.&lt;br /&gt;&lt;br /&gt;It's probably there in other templating systems and frameworks so I'm probably coming late to the party but for someone who is more than a bit obsessive about nice clean structures in website development, avoidance of repetition in code, etc. it really appeals to me, more than all the other nifty things I've seen that Django can do.&lt;br /&gt;&lt;br /&gt;To quote from the Django documentation:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;One common way of using inheritance is the following three-level approach: &lt;/span&gt;&lt;ul class="simple"  style="font-family:arial;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Create a &lt;span class="docutils literal"&gt;&lt;span class="pre"&gt;base.html&lt;/span&gt;&lt;/span&gt; template that holds the main look-and-feel of your site.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Create a &lt;span class="docutils literal"&gt;&lt;span class="pre"&gt;base_SECTIONNAME.html&lt;/span&gt;&lt;/span&gt; template for each "section" of your site. For example, &lt;span class="docutils literal"&gt;&lt;span class="pre"&gt;base_news.html&lt;/span&gt;&lt;/span&gt;, &lt;span class="docutils literal"&gt;&lt;span class="pre"&gt;base_sports.html&lt;/span&gt;&lt;/span&gt;. These templates all extend &lt;span class="docutils literal"&gt;&lt;span class="pre"&gt;base.html&lt;/span&gt;&lt;/span&gt; and include section-specific styles/design.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Create individual templates for each type of page, such as a news article or blog entry. These templates extend the appropriate section template.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-7881362578702674478?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/7881362578702674478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=7881362578702674478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7881362578702674478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7881362578702674478'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/template-inheritance-in-django.html' title='Template inheritance in Django'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2461971729097017475</id><published>2008-10-17T14:30:00.002+01:00</published><updated>2008-10-28T09:54:35.526Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><title type='text'>Network hard drive</title><content type='html'>While Dropbox is a nice simple solution for syncing files over the internet, I'm not sure it's really what I need. The biggest requirement I have is for files to be accessible from both our home computers. The need to access files over the internet is fairly minimal really.&lt;br /&gt;&lt;br /&gt;So on this basis I'm now thinking that a network hard drive is the answer. In the price bracket I'm looking at (as cheap as possible really!), &lt;a href="http://www.amazon.co.uk/Freecom-External-Network-500GB-USB2-0/dp/B000PC2FQU/ref=sr_1_11?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1224249333&amp;amp;sr=1-11"&gt;Freecom do a nice one&lt;/a&gt; which seems to be rated pretty highly. Apart from the operating systems and software, everything else - photos, music, documents, etc. could be stored on here and then simply accessed from either computer. And you can also configure it for internet access which would make Dropbox redundant anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2461971729097017475?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2461971729097017475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2461971729097017475' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2461971729097017475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2461971729097017475'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/network-hard-drive.html' title='Network hard drive'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8965060770776317704</id><published>2008-10-17T09:18:00.002+01:00</published><updated>2008-10-28T09:53:55.082Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>Note to self: Must learn AJAX!</title><content type='html'>I know its embarrassing to admit, being a web developer and all, but while I've skim-read through a number of AJAX tutorials in the past, I've never really got round to properly learning it - by which I mean actually writing some code 'in anger'. I've always been able to get away without it or relied on colleagues to look after those particular bits of a project.&lt;br /&gt;&lt;br /&gt;So &lt;a href="http://www.smashingmagazine.com/2008/10/16/50-excellent-ajax-tutorials/"&gt;Smashing Magazine's list of 50 AJAX tutorials&lt;/a&gt; looks like a good place to dive in when I next have a spare moment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8965060770776317704?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8965060770776317704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8965060770776317704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8965060770776317704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8965060770776317704'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/note-to-self-must-learn-ajax.html' title='Note to self: Must learn AJAX!'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2770298258443985246</id><published>2008-10-16T12:10:00.001+01:00</published><updated>2008-10-28T09:53:40.462Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browsers'/><title type='text'>Duplicate Tab Firefox Addon</title><content type='html'>&lt;a href="http://twanno.mozdev.org/duplicatetab/index.html"&gt;Duplicate Tab&lt;/a&gt; lets you clone or the current tab (as a new tab or a new window), detach the current tab into a new window, merge all tabs in all windows, etc. Useful.&lt;br /&gt;&lt;br /&gt;I think Mozilla have a drag-tab-to-desktop-to-create-new-window function (like Google Chrome) in the pipeline for an upcoming release version but in the meantime at least, this is a useful addon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2770298258443985246?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2770298258443985246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2770298258443985246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2770298258443985246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2770298258443985246'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/duplicate-tab-firefox-addon.html' title='Duplicate Tab Firefox Addon'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-291323708140975921</id><published>2008-10-16T09:09:00.003+01:00</published><updated>2008-10-16T09:15:31.931+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>Deserted US shopping mall</title><content type='html'>On the news last night there was a piece on how the credit crunch is affecting main street America. I wasn't really paying too much attention (any mention of the 'credit crunch' or 'global financial crisis' is enough to make anyone want to switch off just to save your sanity these days!).&lt;br /&gt;&lt;br /&gt;Until they showed an out-of-town shopping mall. Somewhere in Ohio I think.&lt;br /&gt;&lt;br /&gt;Out of 160 shops, only 5 were still open for business. The rest were simply empty, shutters down. How the remaining shops were managing to stay open I don't know because the place was literally deserted - not a single person in sight. Even the vast car park was completely empty except for a single car. It was eerie, like a ghost town.&lt;br /&gt;&lt;br /&gt;A bit of a contrast with Leicester's (currently bustling) new Highcross shopping centre which has just opened, and hopefully not a sign of things to come here in the UK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-291323708140975921?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/291323708140975921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=291323708140975921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/291323708140975921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/291323708140975921'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/deserted-us-shopping-mall.html' title='Deserted US shopping mall'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5372088148323005933</id><published>2008-10-16T08:59:00.002+01:00</published><updated>2008-10-16T09:09:08.863+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>Kind of cool, kind of over-the-top</title><content type='html'>There's a &lt;a href="http://news.bbc.co.uk/1/hi/technology/7292600.stm"&gt;video clip on the BBC website&lt;/a&gt; showing a quick tour round Google's office in Zurich. I've seen other clips before and I always find myself thinking I'm not sure whether it's cool or just a bit over-the-top.&lt;br /&gt;&lt;br /&gt;Probably a bit of both.&lt;br /&gt;&lt;br /&gt;Things like the slide, fireman's pole, etc. are just a bit over-the-top, and the big dark room with fish tanks and massage chairs - while I don't doubt it's relaxing - seems a bit excessive really! But having areas to relax and chill out, access to free food, the ability to choose different working environments depending on your mood, space to meet with colleagues and have a chat over a coffee - these are all great things (although I do wonder how they 'police' the amount of time people spend playing pool or computer games!).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5372088148323005933?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5372088148323005933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5372088148323005933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5372088148323005933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5372088148323005933'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/kind-of-cool-kind-of-over-top.html' title='Kind of cool, kind of over-the-top'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-7414643053344493510</id><published>2008-10-15T09:47:00.001+01:00</published><updated>2008-10-15T09:47:29.849+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>KeePass</title><content type='html'>I've never been very organised with passwords, but with no end in sight to the number of new logins required, it seems like its well overdue that I do something about it. OpenID sounds like a good idea but the number of sites supporting it is still fairly small. Maybe I'll switch to using it for those sites that do support it. But for the rest, in the meantime, &lt;a href="http://keepass.sourceforge.net/"&gt;KeePass&lt;/a&gt; looks like a very nice bit of software for securely tracking passwords.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lifehacker.com/"&gt;Lifehacker&lt;/a&gt; have a nice &lt;a href="http://lifehacker.com/software/feature/geek-to-live--securely-track-your-passwords-184774.php"&gt;article on how to set it up and use it&lt;/a&gt;, as well as an article on &lt;a href="http://lifehacker.com/5063176/how-to-use-dropbox-as-the-ultimate-password-syncer"&gt;using Dropbox to sync the KeePass database&lt;/a&gt; online so you can access it from multiple computers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-7414643053344493510?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/7414643053344493510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=7414643053344493510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7414643053344493510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/7414643053344493510'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/keepass.html' title='KeePass'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8982426606435613191</id><published>2008-10-15T09:41:00.001+01:00</published><updated>2008-10-15T09:41:53.895+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Dropbox</title><content type='html'>Oh yes! Why has &lt;a href="http://www.getdropbox.com/"&gt;Dropbox&lt;/a&gt; never showed up on my radar before? OK, I'm not one of these people that walk around with a laptop, connecting to the internet in every cafe, coffee shop and petrol station I see, but still, there are occasions when being able to access files remotely would be great. In fact, even at home where we have a desktop (which is upstairs, doesn't get used all that much and remains switched off most of the time) and a laptop (which is usually downstairs, gets used a lot, and is on standby most of the time), it would be very useful - and a much cheaper (free!) alternative to a network hard drive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8982426606435613191?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8982426606435613191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8982426606435613191' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8982426606435613191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8982426606435613191'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/dropbox.html' title='Dropbox'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8414522772905549346</id><published>2008-10-15T09:01:00.001+01:00</published><updated>2008-10-15T09:42:03.747+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>Rail overcrowding 'to get worse'</title><content type='html'>&lt;a href="http://news.bbc.co.uk/1/hi/uk/7668816.stm"&gt;BBC NEWS | UK | Rail overcrowding 'to get worse'&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...of course, if the government hadn't closed 2/3 of the rail network in the 1960s we probably wouldn't be facing this problem today!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8414522772905549346?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8414522772905549346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8414522772905549346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8414522772905549346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8414522772905549346'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/rail-overcrowding-to-get-worse.html' title='Rail overcrowding &apos;to get worse&apos;'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2375952847161675473</id><published>2008-10-14T15:42:00.006+01:00</published><updated>2008-10-28T09:52:25.229Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>List comprehensions in Python</title><content type='html'>Just came across this concept in the Django documentation, but without any background in Python or maths it wasn't immediately obvious what it was.&lt;br /&gt;&lt;br /&gt;The basic syntax is:&lt;br /&gt;&lt;pre class="python"&gt;L = [expression &lt;span class="pykeyword"&gt;for&lt;/span&gt; variable &lt;span class="pykeyword"&gt;in&lt;/span&gt; sequence]&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;L&lt;/span&gt; is the name of a the resulting variable containing the list of items generated by the loop&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;expression&lt;/span&gt; is the python expression that will be evaluated on each iteration of the for loop, using the given variable&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;variable&lt;/span&gt; refers to each item in the list to pass to the expression as we loop through it&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sequence&lt;/span&gt; is the set of items we're looping through&lt;br /&gt;&lt;br /&gt;An example:&lt;br /&gt;&lt;pre class="python"&gt;toppings = ('ham', 'pineapple', 'beef', 'chicken')&lt;br /&gt;x = ', '.join([toppings.loop_count() for t in toppings])&lt;br /&gt;&lt;/pre&gt;Totally pointless operation I know, as it simply copies the list in the 'toppings' variable to a new variable called 'x', but it illustrates the point! In reality it would make more sense if the initial list was a queryset object from a database that we want to loop through and list the values.&lt;br /&gt;&lt;br /&gt;The for...in loop syntax already made sense to me, but I'd not come across this shorter way of writing it before. Apparently it's also the most efficient in terms of system resources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2375952847161675473?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2375952847161675473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2375952847161675473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2375952847161675473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2375952847161675473'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/list-comprehensions-in-python.html' title='List comprehensions in Python'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-9155874972504749025</id><published>2008-10-14T12:02:00.002+01:00</published><updated>2008-10-28T09:52:14.817Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>Font sizes in CSS</title><content type='html'>Just now I wanted to adjust the font sizes in Django's built-in admin interface so I had a look at the CSS. In the global stylesheet, as expected, there's a font-size defined on the body tag. First thing to note - it's a fixed pixel size rather than a relative size which isn't ideal (for accessibility it's better to make this relative to the user's system/browser default). Anyway, when I changed it, none of the fonts actually changed size, because there are seperate (fixed-pixel) font sizes defined for each type of element.&lt;br /&gt;&lt;br /&gt;This is a common error and one that winds me up. I just want to change the font size in one place, not search through a load of files looking for all the font-size properties. And when they've all been defined as fixed-pixel sizes it's worse because then I've got to try to work out by how many pixels each size should be adjusted to keep everything in proportion.&lt;br /&gt;&lt;br /&gt;If all the font-sizes were set relative to the body font-size (using % or em values), then I could simply adjust the body font-size and everything else would resize accordingly - a 10 second job instead of 10 minutes!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-9155874972504749025?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/9155874972504749025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=9155874972504749025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/9155874972504749025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/9155874972504749025'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/font-sizes-in-css.html' title='Font sizes in CSS'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5464066603557415782</id><published>2008-10-14T10:55:00.001+01:00</published><updated>2008-10-28T09:52:02.203Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Lists, tuples, dictionaries etc. in Python</title><content type='html'>I'm currently learning Django and found a &lt;a href="http://www.wellho.net/solutions/python-python-list-python-tuple-python-dictionary.html"&gt;useful reference&lt;/a&gt; explaining the different types of 'collection' structures in Python.&lt;br /&gt;&lt;br /&gt;In brief:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;List&lt;/span&gt; - contained in square brackets - like a PHP array - contents are editable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tuple&lt;/span&gt; - contained in round brackets - like a PHP array but contents are fixed (can't be edited). If only one item is specified, it must be followed by a comma.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dictionary&lt;/span&gt; - contained in curly brackets - like an associative array in PHP&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;String&lt;/span&gt; - contained in quotes - can refer to individual characters by their position in the string like in a list/tuple&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Iterator&lt;/span&gt; - a list temporarily created from an object to allow looping through each value using 'for ... in ...' syntax&lt;br /&gt;&lt;br /&gt;With all of these, when referring to a specific item within the collection, you use square brackets.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5464066603557415782?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5464066603557415782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5464066603557415782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5464066603557415782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5464066603557415782'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/lists-tuples-dictionaries-etc-in-python.html' title='Lists, tuples, dictionaries etc. in Python'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-8750188738478888521</id><published>2008-10-08T12:38:00.000+01:00</published><updated>2008-10-14T11:05:18.182+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>Effort</title><content type='html'>Ian just sent me a link to &lt;a href="http://sethgodin.typepad.com/seths_blog/2008/10/is-effort-a-myt.html"&gt;this article on Seth Godin's blog&lt;/a&gt;. Well worth taking 2 minutes to read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-8750188738478888521?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/8750188738478888521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=8750188738478888521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8750188738478888521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/8750188738478888521'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/effort.html' title='Effort'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2521940122011861142</id><published>2008-10-08T09:40:00.000+01:00</published><updated>2008-10-08T10:28:33.190+01:00</updated><title type='text'>Carrying on regardless</title><content type='html'>Well, it seems that despite being 'blocked' I can still post here so post I shall do, in the hope at least that I will be unblocked again soon!&lt;br /&gt;&lt;br /&gt;Partly for the benefit of any Google staff who may be checking whether this blog is actually violating any of their terms of service, and partly for the benefit of any regular readers (although I doubt there are many of those yet since I only just set it up!)... the point of this blog, as it says at the top of the page, is really just a place for me to pull together thoughts, commentary, useful links, and whatever else I feel like writing about. In other words, a place to voice some of my thoughts.&lt;br /&gt;&lt;br /&gt;I already use Google Reader, Twitter, Facebook and Flickr, but I'm still searching for the best place to collate all those random bits of information that I want to share with a wider audience. A blog seemed like a good option to explore, so here it is.&lt;br /&gt;&lt;br /&gt;Actually, I already have a blog (&lt;a href="http://line2nowhere.blogspot.com/"&gt;line2nowhere.blogspot.com&lt;/a&gt;) but that's specifically related to my interest in finescale railway modelling - something that is fairly 'niche' in it's appeal! Although I might occasionally comment on such things here, I'll aim to keep most of that stuff over there.&lt;br /&gt;&lt;br /&gt;I imagine most of what I post on here will relate to web design, technology, news, and general life stuff. We'll see how it develops...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2521940122011861142?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2521940122011861142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2521940122011861142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2521940122011861142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2521940122011861142'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/carrying-on-regardless.html' title='Carrying on regardless'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-2027170235910733423</id><published>2008-10-08T09:38:00.000+01:00</published><updated>2008-10-08T09:40:33.578+01:00</updated><title type='text'>Blocked!</title><content type='html'>For some reason, on the first day of setting up this blog, Google has seen fit to block it as 'a possible Spam site'!! I know it's all automated but still...&lt;br /&gt;&lt;br /&gt;I've sent a request for a review but still waiting to hear anything back!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-2027170235910733423?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/2027170235910733423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=2027170235910733423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2027170235910733423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/2027170235910733423'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/blocked.html' title='Blocked!'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-5788106375500129556</id><published>2008-10-06T13:57:00.003+01:00</published><updated>2008-10-28T10:01:41.703Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>picasa2flickr</title><content type='html'>&lt;a href="http://picasa2flickr.sourceforge.net/"&gt;picasa2flickr - flickr upload plugin for picasa&lt;/a&gt; is a useful little plugin that adds a button to Picasa allowing you to send selected photos straight to Flickr Uploadr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-5788106375500129556?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/5788106375500129556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=5788106375500129556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5788106375500129556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/5788106375500129556'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/picasa2flickr.html' title='picasa2flickr'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4240786176156966898.post-190664065400972866</id><published>2008-10-06T13:32:00.001+01:00</published><updated>2008-10-14T14:32:28.717+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>Reassuring?</title><content type='html'>&lt;a href="http://news.bbc.co.uk/1/hi/business/7631281.stm"&gt;BBC NEWS | Business | What would financial Armageddon look like?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's reassuring if you consider that things aren't currently anything like as bad as they were in the 1930s. But it's not so reassuring when you turn it around and think that things could get a whole lot worse before they get better!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4240786176156966898-190664065400972866?l=mattots.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mattots.blogspot.com/feeds/190664065400972866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4240786176156966898&amp;postID=190664065400972866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/190664065400972866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4240786176156966898/posts/default/190664065400972866'/><link rel='alternate' type='text/html' href='http://mattots.blogspot.com/2008/10/reassuring.html' title='Reassuring?'/><author><name>Matt Ots</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-8HTfFNPNfio/AAAAAAAAAAI/AAAAAAACGwc/vEv8cul9eZk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
