<?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-1334225864115795639</id><updated>2012-02-16T17:29:56.814Z</updated><category term='Time Machine'/><category term='the cloud'/><category term='iMacro'/><category term='Evernote'/><category term='migrating'/><category term='Google Spreadsheets'/><category term='Flickr Group'/><category term='Amazon'/><category term='mobile phones'/><category term='gadget'/><category term='cheap train tickets'/><category term='Mac mini'/><category term='Security'/><category term='OSX'/><category term='Parallels'/><category term='Leopard'/><category term='home network'/><category term='Greasemonkey'/><category term='regex'/><category term='free software'/><category term='bluetooth'/><category term='scraping'/><category term='Memory stick'/><category term='Puppy Linux'/><category term='bookmarklet'/><category term='Linux'/><category term='xubuntu'/><category term='timetable'/><category term='Virgin Trains'/><category term='Flickr'/><category term='Talktalk'/><category term='GPS'/><category term='Google Documents'/><category term='Flickr Discussion'/><category term='k750i'/><category term='802.11b'/><category term='JavaScript'/><category term='plugins'/><category term='HX5V'/><category term='Second Life'/><title type='text'>User Offline</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-455619137527742771</id><published>2010-04-22T09:13:00.004+01:00</published><updated>2010-04-22T10:09:33.976+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HX5V'/><title type='text'>Sony HX5V camera</title><content type='html'>I have been trying to buy a HX5V for the last 2 weeks. None of the main retailers have it in stock and at this rate I might just order one from Tesco (they have one of the cheapest UK prices at a bit under £300) and pick it up when it comes in stock again.&lt;br /&gt;&lt;br /&gt;The reason I think this camera is worth it are the basic features of:&lt;br /&gt;* GPS coordinates and compass direction added to photos (in the EXIF data)&lt;br /&gt;* 10x optical zoom&lt;br /&gt;* 200g and pocket-camera sized&lt;br /&gt;&lt;br /&gt;It has an interesting variety of other features but GPS is a deal breaker and very few current cameras include it. When I think about our last trip to Southern Greece, it would be handy to have the photos automatically placed on a map as it is easy to forget the name of which village, ruin or beach each photo was taken at. On my T100 we have had some success at taking video so the ability to record in high resolution (AVCHD / 1080i) would be interesting to play around with.&lt;br /&gt;&lt;br /&gt;A break with the philosophy of "product-lock-in" by Sony has been to allow the use of SD/SDHC memory cards as well as the Sony PRO-duo. I note there is no upper limit on card memory in the specification, though they do sell 32GB cards to go with the camera which is as large as I could imagine using in the next five years (the largest I own currently is an 8GB card).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-455619137527742771?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/455619137527742771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=455619137527742771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/455619137527742771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/455619137527742771'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2010/04/sony-hx5v-camera.html' title='Sony HX5V camera'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-8946922160133282782</id><published>2010-04-02T12:32:00.006+01:00</published><updated>2010-04-03T13:21:23.318+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>KeePassX</title><content type='html'>My use of rather feeble passwords has been on my mind of late. Following a recommendation I have tested out the free and open-source &lt;a href="http://keepassx.org"&gt;KeePassX&lt;/a&gt; application. This runs on multiple platforms including OSX, mobile phones or a portable application from a USB stick. It's rather neat to be able to update passwords on my Macmini and then copy the same encrypted password file to my trusty Sony Ericsson K750i for use on the go.&lt;br /&gt;&lt;br /&gt;It works as a pretty standard encrypted password wallet but the feature I've enjoyed most is the automatic password generation. This means I can generate random passwords with various options as to whether to include uppercase, lowercase, numbers and odd characters. For most online applications where I might login from someone else's PC I have switched over to using a 16 character random mix of uppercase and numbers on the basis that I might have to type it in by hand. For my various other sites, particularly those that remember my credit card details, I have used 25 character or more random mixes of uppercase, lowercase and numbers. Due to a vague concern about personal data, I have whacked on a human unfriendly 50 character password to my Facebook and Evernote accounts. Okay, in the latter case I could type in the 50 character password by reading it off my mobile phone but I really cannot imagine having to log in to a strange or temporary computer to access these applications.&lt;br /&gt;&lt;br /&gt;It seems odd that some websites that store your credit card limit passwords to a crackable 12 characters. I have one such site but I'm using a fully random password with special characters.&lt;br /&gt;&lt;br /&gt;As it feels a lot easier not to have to remember passwords in my head, I am now far more likely to change passwords after, say, logging into my Amazon account while on holiday from an internet cafe.&lt;br /&gt;&lt;br /&gt;Sites:&lt;br /&gt;&lt;a href="http://www.keypass.info"&gt;http://www.keypass.info&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.keypassmobile.com"&gt;http://www.keypassmobile.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-8946922160133282782?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/8946922160133282782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=8946922160133282782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8946922160133282782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8946922160133282782'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2010/04/keepassx.html' title='KeePassX'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-5858356353513069250</id><published>2009-08-04T09:51:00.007+01:00</published><updated>2009-08-04T10:16:49.245+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Evernote'/><title type='text'>Selling my second-hand paperbacks and Evernote</title><content type='html'>&lt;div style="color: black;"&gt;&lt;div style="margin: 0pt 0pt 10px 10px; float: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RHmYsUeCjM8/Snf5vxrOjMI/AAAAAAAAAFc/dKEIIuRv-RQ/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer; width: 200px; height: 179px;" src="http://3.bp.blogspot.com/_RHmYsUeCjM8/Snf5vxrOjMI/AAAAAAAAAFc/dKEIIuRv-RQ/s200/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5366032080219049154" border="0" /&gt;&lt;/a&gt;&lt;p style="text-align: center; margin-top: 0pt; font-size: 75%;"&gt;Book photos in Evernote&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;I have more than 300 of my books up for sale. The vast majority are paperbacks with hardly any value and I list these on GreenMetropolis (if it sells you get £3 per book but have to take the postage out of that). A handful have some second-hand value and I sell the ones worth more than £5 on Amazon (anything less than that and it's not worth the fees to Amazon).&lt;br /&gt;&lt;br /&gt;My average is to sell 4 books/month, so I have a fair stock of books to keep tabs on. At the moment there are three places around the house where they are stashed and it was getting quite irritating when one had sold and I was having trouble locating the book (they only grouping I have was splitting fiction from everything else).&lt;div style="margin: 10pt 0pt 10px 10px; float: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_RHmYsUeCjM8/Snf4n0l1PqI/AAAAAAAAAFU/_aPjuvSjF_k/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer; width: 184px; height: 200px;" src="http://2.bp.blogspot.com/_RHmYsUeCjM8/Snf4n0l1PqI/AAAAAAAAAFU/_aPjuvSjF_k/s200/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5366030844051144354" border="0" /&gt;&lt;/a&gt;&lt;p style="text-align: center; margin-top: 0pt; font-size: 75%;"&gt;Searching for "Kraken"&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I stumbled across a fairly easy way of getting around this problem using Evernote. By taking snapping some digital photographs of the stacks of books with the spines showing and then pasting these to Evernote, the online application  craftily does its text recognition thing and gives you a fairly good chance of finding the photograph of the book (and hence location) by typing in part of the title. Blam, instant book database.&lt;br /&gt;&lt;br /&gt;It's actually an incredibly handy time-saver for double checking where the book is, before going around the house reading every book spine.&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/1334225864115795639-5858356353513069250?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/5858356353513069250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=5858356353513069250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5858356353513069250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5858356353513069250'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/08/selling-my-second-hand-paperbacks-and.html' title='Selling my second-hand paperbacks and Evernote'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RHmYsUeCjM8/Snf5vxrOjMI/AAAAAAAAAFc/dKEIIuRv-RQ/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-5432174629134232123</id><published>2009-06-04T18:58:00.005+01:00</published><updated>2009-06-04T19:44:31.439+01:00</updated><title type='text'>Making a Google Calendar link</title><content type='html'>There is a handy form available under Google help to create a website button for a calendar event (&lt;a href="http://www.google.com/googlecalendar/event_publisher_guide.html"&gt;http://www.google.com/googlecalendar/event_publisher_guide.html&lt;/a&gt;). It is pretty useful but I needed to decode the parameters in order to get some javascript to create a particular link on demand. Here's my notes about the parameters you can play with.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family:monospace;background:lightyellow;padding:1em;border:1px solid brown;"&gt;&lt;b&gt;anchor address&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;sp&gt;http://www .google.com/calendar/event?&lt;/sp&gt;&lt;/li&gt;&lt;li&gt;This is the base of the address before the parameters below.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;action&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;sp&gt;action=TEMPLATE&lt;/sp&gt;&lt;/li&gt;&lt;li&gt;A default required parameter.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;src&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;sp&gt;Example: src=&lt;/sp&gt;&lt;sp&gt;default%40gmail.com&lt;/sp&gt;&lt;/li&gt;&lt;li&gt;Format: src=&lt;i&gt;text&lt;/i&gt;&lt;gmail&gt;&lt;/gmail&gt;&lt;/li&gt;&lt;li&gt;This is not covered by Google help but is an optional parameter in order to add an event to a shared calendar rather than a user's default.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;sp&gt;&lt;b&gt;text&lt;/b&gt;&lt;/sp&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;sp&gt;Example: text=Garden%20Waste%20Collection&lt;/sp&gt;&lt;/li&gt;&lt;li&gt;Format: text=&lt;i&gt;text&lt;/i&gt;&lt;text&gt;&lt;descriptive&gt;&lt;/descriptive&gt;&lt;/text&gt;&lt;/li&gt;&lt;li&gt;This is a required parameter giving the event title.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;dates&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;sp&gt;Example: dates=20090621T063000Z/20090621T080000Z &lt;i&gt;(i.e. an event on 21 June 2009 from 7.30am to 9.0am British Summer Time (=GMT+1)).&lt;/i&gt;&lt;/sp&gt;&lt;/li&gt;&lt;li&gt;Format: dates=&lt;i&gt;YYYYMMDD&lt;/i&gt;&lt;yyyymmdd&gt;To&lt;i&gt;HHMMSS&lt;/i&gt;&lt;hhmmss&gt;Z/&lt;i&gt;YYYYMMDD&lt;/i&gt;&lt;yyyymmdd&gt;To&lt;i&gt;HHMMSS&lt;/i&gt;&lt;hhmmss&gt;Z&lt;/hhmmss&gt;&lt;/yyyymmdd&gt;&lt;/hhmmss&gt;&lt;/yyyymmdd&gt;&lt;/li&gt;&lt;li&gt;This required parameter gives the start and end dates and times (in Greenwich Mean Time) for the event.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;location&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;sp&gt;Example: location=Home&lt;/sp&gt;&lt;/li&gt;&lt;li&gt;Format: location=&lt;i&gt;text&lt;/i&gt;&lt;text&gt;&lt;/text&gt;&lt;/li&gt;&lt;li&gt;The obvious location field.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;sp&gt;&lt;b&gt;trp&lt;/b&gt;&lt;/sp&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;sp&gt;Example: trp=false&lt;/sp&gt;&lt;/li&gt;&lt;li&gt;Format: trp=&lt;i&gt;true/false&lt;/i&gt;&lt;true/false&gt;&lt;/true/false&gt;&lt;/li&gt;&lt;li&gt;Show event as busy (true) or available (false)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;sprop&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Example: sprop=http%3A%2F%2Fwww.me.org&lt;/li&gt;&lt;li&gt;Example: sprop=name:Home%20Page&lt;/li&gt;&lt;li&gt;Format: sprop=&lt;i&gt;website&lt;/i&gt;&lt;website&gt; and/or sprop=name:&lt;i&gt;website_name&lt;/i&gt;&lt;name&gt;&lt;/name&gt;&lt;/website&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&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/1334225864115795639-5432174629134232123?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/5432174629134232123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=5432174629134232123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5432174629134232123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5432174629134232123'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/06/making-google-calendar-link.html' title='Making a Google Calendar link'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-6531582056561206562</id><published>2009-05-19T10:11:00.019+01:00</published><updated>2009-05-20T13:24:25.709+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gadget'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Machine'/><category scheme='http://www.blogger.com/atom/ns#' term='home network'/><category scheme='http://www.blogger.com/atom/ns#' term='Leopard'/><title type='text'>My experience setting up a 1 Terabyte USB drive on a Macmini</title><content type='html'>I already have an external 500GB &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;USB&lt;/span&gt; drive but with Leopard time-machine taking half of this, and keeping a backlog of downloaded films to hand with several backups from other machines, this means that it's been running pretty full (in fact only about 10GB general storage left and time-machine backups only run 2 months into the past before being deleted forever).&lt;div&gt;&lt;/div&gt;&lt;div title="After formatting the disk actually had 931.5 GB (1,000,204,886,016 Bytes)"&gt;1TB drives (1,000GB)  have come down nicely in price and I managed to buy a Western Digital Elements drive on Amazon for under £80. Price was a significant factor for me, as well as compatibility for re-use with other machines, so I didn't really consider the alternative of a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;firewire&lt;/span&gt; compatible version (it would have been potentially 5x faster than a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;USB&lt;/span&gt; 2.0 connection).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;table style="float:right;margin:0 0 10px 10px;width:100px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center" style="font-size:80%"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 100px;" src="http://4.bp.blogspot.com/_RHmYsUeCjM8/ShObJo9woUI/AAAAAAAAAFA/EoectPvChoA/s320/USB+Drive.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5337780573281755458" /&gt;How the 1TB &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;USB&lt;/span&gt; drive ("Zeus") appears on my desktop using a &lt;span style="font-style:italic;"&gt;Matrix&lt;/span&gt; icon&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;It was &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;pre&lt;/span&gt;-formatted but as I'm going to use this one exclusively on Leopard, I decided to reformat with "&lt;i&gt;Mac OS Extended"&lt;/i&gt; into two partitions, one with 300GB for the time-machine (backup) and the rest (631GB) for my ever growing document, video and photo archives plus around 80GB of other computer archives (some dating back to the 1990s but you never know when some old document might be interesting to search out).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step One: Reformat the drive&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Easy part; plugged in the drive into a spare &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;USB&lt;/span&gt; port and using Leopard's &lt;i&gt;Disk Utility&lt;/i&gt;, chose the option for two partitions, &lt;i&gt;Mac OS Extended&lt;/i&gt; (not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;journaled&lt;/span&gt;), typed in required partition size and let it go ahead.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step Two: Transfer existing files&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This was more problematic. I wanted to transfer around 200+GB from my old &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;USB&lt;/span&gt; drive so I just used drag &amp;amp; drop using the &lt;i&gt;Finder&lt;/i&gt; but it turned out that the estimated time to transfer was around several days! A little more research, eventually using the &lt;i&gt;System &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Profiler&lt;/span&gt;&lt;/i&gt; showed that the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;USB&lt;/span&gt; port (on a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;USB&lt;/span&gt; extra hub) the new drive was plugged into was rated as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;USB&lt;/span&gt;1.1 speed (why can't the &lt;i&gt;Finder &lt;/i&gt;show you this information?) so I had to use one of the ports on the main &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Macmini&lt;/span&gt; box to get it running at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;USB&lt;/span&gt;2.0 speeds (12x faster). This still gave an estimated 12 hours to transfer the files but at least this could run overnight.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note that the real times for transfer I achieved were nowhere near the theoretical maximum (put 200GB/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;USB&lt;/span&gt;2.0 into &lt;a href="http://wolframalpha.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;WolframAlpha&lt;/span&gt;&lt;/a&gt; and you get 55 minutes). This was probably due to the old drive being formatted in (non-native version of) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;NTFS&lt;/span&gt; and though I have an open source driver to enable read/write access, it's pretty likely that this means extra processing power is needed to get the data transferred.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It was a good lesson, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;USB&lt;/span&gt; can be &lt;b&gt;slow&lt;/b&gt;, so moving large archives is worth a little planning. Obviously on a day-to-day basis the largest things I'll move would be video files but these are on average less than 1GB and it's not an issue to wait for a minute (assuming &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;USB&lt;/span&gt;2.0, on a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;USB&lt;/span&gt;1.1 connection, 1GB takes a minimum of 11 minutes to transfer).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table style="float:right;width:100px;font-size:80%;"&gt;&lt;tr&gt;&lt;td align=center&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RHmYsUeCjM8/ShPz3rPDh_I/AAAAAAAAAFI/0s-9YxwT3_M/s1600-h/wdfElements_E1UBK.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 113px;" src="http://3.bp.blogspot.com/_RHmYsUeCjM8/ShPz3rPDh_I/AAAAAAAAAFI/0s-9YxwT3_M/s200/wdfElements_E1UBK.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5337878121188394994" /&gt;&lt;/a&gt;WD Elements 1TB USB 2.0&lt;/table&gt;&lt;div&gt;&lt;b&gt;Step Three: Setup Time Machine&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I went into &lt;i&gt;Time Machine&lt;/i&gt; settings (via &lt;i&gt;System Preferences&lt;/i&gt;) and changed the drive to be used to the new blank partition.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[&lt;i&gt;This is the bit I failed to sort out&lt;/i&gt;] I wanted to copy across all my previous &lt;i&gt;Time Machine&lt;/i&gt; archive files on the old disk into the new folder created on the new disk. This was another 123GB (3½ million items), but after trying to do this several ways (including making both drives read/write after &lt;i&gt;Time Machine&lt;/i&gt; made them read-only) I found it invariably caused &lt;i&gt;Finder &lt;/i&gt;to lock up. Eventually I gave up and started &lt;i&gt;Time Machine &lt;/i&gt;from scratch (it was still an 82GB initial backup).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/div&gt;&lt;div&gt;After all the transfers, and with 300GB reserved in a partition for &lt;i&gt;Time Machine, &lt;/i&gt;I now have 380GB spare for new files. As for the old 500GB drive, it's become a nifty media and backup disk shared on my home network connected to a Vista desktop. As this drive had previously been re-partitioned on my Mac, I took the precaution of reformatting it from scratch using Vista to ensure a stable drive standard.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Final speeds: &lt;/i&gt;Transferring a 700MB video file to my new archive (named Zeus) now takes me around 15 seconds. Compare that to 2½ minutes to transfer the same file from the old &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;USB&lt;/span&gt; drive, across my home network, to get to my new drive. Let's hope &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;USB&lt;/span&gt;3.0 gets a move on!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-6531582056561206562?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/6531582056561206562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=6531582056561206562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/6531582056561206562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/6531582056561206562'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/05/my-experience-setting-up-1-terabyte-usb.html' title='My experience setting up a 1 Terabyte USB drive on a Macmini'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_RHmYsUeCjM8/ShObJo9woUI/AAAAAAAAAFA/EoectPvChoA/s72-c/USB+Drive.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-5507455082260074258</id><published>2009-03-01T14:37:00.005Z</published><updated>2009-03-06T22:23:52.342Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='the cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Evernote as my receipt wastebasket</title><content type='html'>&lt;a href="http://evernote.com/" target="_blank"&gt;Evernote&lt;/a&gt; seems to be quite a neat solution to an ongoing problem of what to do with receipts. Most of my receipts end up going in the shredder with various more meaningful ones left stacked on a bill-hook on my desk (like certificates of posting). This is sort of okay but it would be nice to turn this into useful data of what, when and how I bought something. Evernote also ensures that everything gets backed up online and I can then access the information from another location (like being in the office and someone asks "how much did you pay for your TV?").&lt;br /&gt;&lt;br /&gt;I use a Fujitsu scanner to keep most of my statements, letters and dreaded tax demands under paperless control and it's a relatively simple thing for me to shove my receipts through it too. One drawback of Evernote (the free version anyway) is that it's a bit crap at handling PDF files. My route for getting receipts onto the Evernote website is to save up a batch of around 30, shove them through the scanner, batch convert pdf to jpg (using Adobe Bridge) and drag &amp;amp; drop them into my Evernote notebook on the desktop application.&lt;br /&gt;&lt;br /&gt;Things would be more straight forward if I had a decent webcam on my Macmini, but that's not the case at the moment. The benefit is that I don't have to name the files or organize them in any way as Evernote will recognize text in the image so I can quickly search for "fridge" and the right receipt with its 2 year guarantee from John Lewis will pop up.&lt;br /&gt;&lt;br /&gt;As well as archiving away (and shredding most of) my receipts this way, I'm going to do the same for train tickets and film ticket stubs as a useful aid to my poor memory. My trusty Sony Ericsson K750i is capable of taking reasonable photos too, so I might start using it to keep more shots of the type "look for one of these second hand on eBay" sort.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-5507455082260074258?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/5507455082260074258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=5507455082260074258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5507455082260074258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5507455082260074258'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/03/evernote-as-my-receipt-wastebasket.html' title='Evernote as my receipt wastebasket'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-4276717074342884210</id><published>2009-02-25T12:32:00.008Z</published><updated>2009-02-27T07:59:07.481Z</updated><title type='text'>Creating an eBay product turntable</title><content type='html'>Something I have been pondering for a while is a (free) way of creating a rotating product view on eBay. Some professional sellers do it so I knew it was possible. A bit of research today on wiki.panotools.org led me to a way of using a freeware .jar in an applet to do exactly that.&lt;br /&gt;&lt;br /&gt;I reused an empty CD spindle box as a turntable (the transparent top makes a nice reflective surface with a depression that a CD can sit in to form a small &lt;a href="http://en.wikipedia.org/wiki/Lazy_susan" target=_blank&gt;Lazy Susan&lt;/a&gt;). I then took 8 photographs of a mug I could list on eBay and got my first example up within around an hour of messing about. Hopefully now I know how to use Photoshop to create a strip of photos and automate corrections, the next one will be a lot faster. In particular I have a load of matchbox cars to sell and as they are only worth a couple of quid each I needed a fast way of listing them.&lt;br /&gt;&lt;br /&gt;Example turntable (16 photographs):&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;APPLET archive=http://www.romanempire.talktalk.net/ebay/elephants/ptviewer.jar code=ptviewer.class width=400 height=256 name=ptviewer border=6&gt;&lt;br /&gt;&lt;PARAM name=applet0 value="{code=ptobject.class}{file=http://www.romanempire.talktalk.net/ebay/elephants/greenelephantstrip.jpg}{nhor=16}{nver=1}{wait=http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Hourglass.jpg/72px-Hourglass.jpg}"&gt;&lt;br /&gt;&lt;PARAM name=inits value=ptviewer:startApplet(0)&gt;&lt;br /&gt;&lt;param name=auto value=-1 &gt;&lt;br /&gt;&lt;PARAM name=pan value=180 &gt;&lt;br /&gt;&lt;PARAM name=showToolbar value=true &gt;&lt;br /&gt;Needs java.&lt;br /&gt;&lt;/APPLET&gt;&lt;br /&gt;&lt;font face="Arial, Helvetica, sans-serif" size="2"&gt;Turntable (use mouse to stop/drag to turn)&lt;/font&gt;&lt;br /&gt;&lt;input title="startAutoPan" type="button" value=" Normal " onclick="javascript:document.ptviewer.startAutoPan(-.4,0,1); this.blur()"&gt;&lt;input title="startAutoPan" type="button" value=" Spin " onclick="javascript:document.ptviewer.startAutoPan(-3,0,1); this.blur()"&gt;&lt;input title="startAutoPan" type="button" value=" Fast " onclick="javascript:document.ptviewer.startAutoPan(-1,0,1); this.blur()"&gt;&lt;input title="startAutoPan" type="button" value=" Slow " onclick="javascript:document.ptviewer.startAutoPan(-.1,0,1); this.blur()"&gt;&lt;input title="startAutoPan" type="button" value=" Rev " onclick="javascript:document.ptviewer.startAutoPan(.4,0,1); this.blur()"&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-4276717074342884210?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/4276717074342884210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=4276717074342884210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/4276717074342884210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/4276717074342884210'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/02/creating-ebay-product-turntable.html' title='Creating an eBay product turntable'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-1249756524527248811</id><published>2009-02-16T14:48:00.001Z</published><updated>2009-02-18T23:45:50.686Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='gadget'/><title type='text'>Still waiting for my next gadget to be released</title><content type='html'>The economic downturn has made electronics companies draw back from releasing new technology. Here are the key gadgets that I would gladly layout good dosh for but don't think they'll exist in 2009:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Better camera specification&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Must - &lt;span style="font-weight: bold;"&gt;built in GPS&lt;/span&gt; to tag photo location in EXIF&lt;/li&gt;&lt;li&gt;Must - &lt;span style="font-weight: bold;"&gt;5x or more optical zoom&lt;/span&gt; with internal lens&lt;/li&gt;&lt;li&gt;Must - pocket sized&lt;/li&gt;&lt;li&gt;Must - image stabilization&lt;/li&gt;&lt;li&gt;Must - good in low light conditions&lt;/li&gt;&lt;li&gt;Must - take decent video of unlimited length (&gt; &lt;a href="http://en.wikipedia.org/wiki/SXGA"&gt;SXGA&lt;/a&gt; @ 30 fps)&lt;/li&gt;&lt;li&gt;Must - have excellent burst mode (&gt; 7 shots/s)&lt;/li&gt;&lt;li&gt;Must - &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;under £250&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul type="circle"&gt;&lt;li&gt;Nice - waterproof&lt;/li&gt;&lt;li&gt;Nice - integrated with mobile&lt;/li&gt;&lt;li&gt;Nice - can sync with external flash&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Better notepad specification&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Must - web tablet touch screen&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Must - screen larger than 10cm wide (iPod Touch is less than 9cm)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Must - screen resolution &gt; &lt;a href="http://en.wikipedia.org/wiki/SXGA"&gt;SXGA&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Must - wifi&lt;/li&gt;&lt;li&gt;Must - GPS so I can find my way on foot or by bus&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Must - less than &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;£200&lt;/span&gt; (otherwise I'll just get a netbook)&lt;/li&gt;&lt;li&gt;Must - take standard memory cards (like SD or M2)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Must - takes open source software&lt;/li&gt;&lt;li&gt;Must - weigh less than 500g with charger (my laptop weights 1.2 kg and it's a drag)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul type="circle"&gt;&lt;li&gt;Nice - expanding keyboard 3/4 size or more&lt;/li&gt;&lt;li&gt;Nice - built in cheap (£2/month) wireless broadband deal&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Better usb drive specification&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Must - &lt;span style="font-weight: bold;"&gt;32GB&lt;/span&gt; of storage space (I have 19GB of photographs to carry around)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Must - small (preferably tiny) with intrinsic plug cover&lt;/li&gt;&lt;li&gt;Must - &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;under £30&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Could be - a M2 memory card with adaptor (so it can be used in a mobile phone)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;iframe src="http://www.google.com/search?hl=en&amp;amp;q=things%20I%20wanted%20to&amp;amp;lookitup&amp;amp;css=div#guser,body%3Ecenter%7Bdisplay:none%7D&amp;amp;xremove=/html/body/table%5Bposition%28%29%3C=3%5D" style="border: 1px solid black; width: 460px; height: 100%; top: 0px; right: 0px; padding-left: 0px; position: fixed; background-color: white; z-index: 1000; display: none;" id="ResultBox7"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-1249756524527248811?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/1249756524527248811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=1249756524527248811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/1249756524527248811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/1249756524527248811'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/01/still-waiting-for-my-next-gadget-to-be.html' title='Still waiting for my next gadget to be released'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-4641527249166167504</id><published>2009-02-05T17:32:00.009Z</published><updated>2009-02-13T21:59:51.516Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Second Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac mini'/><title type='text'>Second Life hexagonal prism space station</title><content type='html'>&lt;center&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RHmYsUeCjM8/SYsjHcjAscI/AAAAAAAAAEw/1uGFmHRDgUY/s1600-h/Snapshot_002.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer; width: 320px; height: 250px;" src="http://3.bp.blogspot.com/_RHmYsUeCjM8/SYsjHcjAscI/AAAAAAAAAEw/1uGFmHRDgUY/s320/Snapshot_002.png" alt="" id="BLOGGER_PHOTO_ID_5299367997360615874" border="4" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;Reusing the modules from my tetrahedron experiment, I fairly easily put together a script to create a hexagonal prism of any size. Again debugging the intelligent floor tiles to automatically detect if they are the floor was a real pain due to the lack of an easy way to compare rotations (rather than vectors).&lt;br /&gt;&lt;br /&gt;The one generated in the snapshot is of size 3. The square walls are 30mx30m and the longest floor width is 60m. Total prim count = (walls) 6x3x3 + (roof and floor) 2x6x9 = 162.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Update:&lt;/span&gt; I had been using my Sony laptop to work with Second Life. With hubby away I borrowed his PC (I'm normally on a Macmini) and was surprised to find the way SL rendered quite different. In particular the equilateral panels I had been using were set with "glow" at 1.0 (maximum) which made little difference on the laptop but on the desktop were mind bogglingly glowing with green radioactive light. Obviously the laptop graphics doesn't render the glow at all. I ended up muting the glow down to zero as they look pretty bright with the "full light" option on (which makes them ignore local lighting conditions).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-4641527249166167504?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/4641527249166167504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=4641527249166167504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/4641527249166167504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/4641527249166167504'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/02/second-life-hexagonal-prism-space.html' title='Second Life hexagonal prism space station'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RHmYsUeCjM8/SYsjHcjAscI/AAAAAAAAAEw/1uGFmHRDgUY/s72-c/Snapshot_002.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-2143277863358746968</id><published>2009-02-04T13:52:00.008Z</published><updated>2009-02-04T16:56:32.864Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Second Life'/><title type='text'>Second Life Tetrahedron maker</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_RHmYsUeCjM8/SYmePlwubtI/AAAAAAAAAEg/oYY5PHqvS38/s1600-h/tetra.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 276px; border-style:solid; border-width:4px" src="http://4.bp.blogspot.com/_RHmYsUeCjM8/SYmePlwubtI/AAAAAAAAAEg/oYY5PHqvS38/s320/tetra.jpg" alt="" id="BLOGGER_PHOTO_ID_5298940427249807058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally debugged the LSL script to generate tetrahedrons of any size using equilateral triangular panels of edge size 10m. In the picture you can see my avatar inside a tetrahedron of size 2 next to one of size 3 and I'm inside a massive tetrahedron of size 7 in the shot below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_RHmYsUeCjM8/SYmlZDyWWYI/AAAAAAAAAEo/ntM_Holg_Ec/s1600-h/Snapshot_003.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 213.3px; height: 166.7px; border-style:solid; border-width:4px" src="http://2.bp.blogspot.com/_RHmYsUeCjM8/SYmlZDyWWYI/AAAAAAAAAEo/ntM_Holg_Ec/s320/Snapshot_003.png" alt="" id="BLOGGER_PHOTO_ID_5298948286509898114" border="0" /&gt;&lt;/a&gt;The last formula to work out (which I'd fudged a number for before) was the distance between the avatar (or generating object) and the centre of the tetrahedron side. This is actually &lt;span style="font-weight: bold; color: rgb(0, 0, 102);font-family:times new roman;" &gt;N*10m/sqrt(24)&lt;/span&gt; where N is the size of tetrahedron.&lt;br /&gt;&lt;br /&gt;It took a little while to get the side on the bottom to detect itself and texture itself with grass rather than being glass when rezzed. My problem was that llVecDist() which I was using to compare the rotation of a panel to the vector rotation I was looking for (&amp;lt;pi,0,0&amp;gt; or &amp;lt;3*pi/2,0,pi&amp;gt;) was ignoring the fact these are angles and so I had to get the sign right (so the last vector had -pi in the z-axis rather than pi).&lt;br /&gt;&lt;br /&gt;All those glass panels make for a classy looking instant space station at 4,000m.&lt;br /&gt;&lt;br /&gt;Now I have the subroutines to create equilateral platforms of any size I might try a future experiment using them to make something like a &lt;a href="http://en.wikipedia.org/wiki/Truncated_cubic_honeycomb" target="_blank"&gt;truncated cubic honeycomb&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now to do some proper work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-2143277863358746968?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/2143277863358746968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=2143277863358746968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/2143277863358746968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/2143277863358746968'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/02/second-life-tetrahedron-maker.html' title='Second Life Tetrahedron maker'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_RHmYsUeCjM8/SYmePlwubtI/AAAAAAAAAEg/oYY5PHqvS38/s72-c/tetra.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-8964970577635755553</id><published>2009-02-04T08:07:00.012Z</published><updated>2009-02-04T12:00:09.152Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Second Life'/><title type='text'>Second Life creation problems with equilateral triangles</title><content type='html'>In Second Life you can create any 3D object using the basic building blocks (called Prims from primatives) like cubes and spheres. These are a maximum size of 10x10x10m (unless you are a God I guess).&lt;br /&gt;&lt;br /&gt;I wanted to create the maximum size possible equilateral triangle (in order to help make a giant tetrahedron), unfortunately the "prism" prim was less that 10m on a side maximum. Instead I flattened a 10m cube and tapered it to be a triangle. To turn it into an equilateral I changed the height from 10m to 8.66m, as using Pythagoras' theorem the height must be:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;√(10&lt;/span&gt;&lt;sup style="color: rgb(0, 0, 102); font-weight: bold;"&gt;2&lt;/sup&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;-5&lt;/span&gt;&lt;sup style="color: rgb(0, 0, 102); font-weight: bold;"&gt;2&lt;/sup&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;)m=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;√(25x(3-1))m&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;=5m&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;√(2)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;&lt;br /&gt;≈8.660m&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now here's the unexpected problem. When you rotate the large equilateral, it turns out that the &lt;span style="font-weight: bold;"&gt;centre of gravity&lt;/span&gt; is still based on the cube and so has been set to be at half the height. Consequently to rotate correctly about a centre I had to add a correction vector (unfortunately it's not possible to reassign the centre of gravity of a prim).&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://www.gliffy.com/pubdoc/1596758/M.jpg" style="border-style: solid; border-width: 2px;" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;The centre of an equilateral triangle can be found by bisecting the angles, the resulting 3 central lines intersect at the centre. Looking at the intersection of one of these bisecting lines and the height line gives a right-angled triangle with 30° at the corner and with a base of 5m. Consequently the distance from the base to the centre of gravity must be:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;COG=5m*tan(30°)&lt;br /&gt;=5m/(√3)&lt;br /&gt;≈2.887m&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So my correction factor to move to the centre (in the Y-plane) is:&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;CF=[(5m√2)/2]-[5m/(√3)]&lt;br /&gt;=5m(1/√2-1/√3)&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;&lt;br /&gt;≈0.649m&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I kind of wish I'd stuck to the prism prim as this correction factor has really sullied the beauty of my LSL scripts ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-8964970577635755553?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/8964970577635755553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=8964970577635755553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8964970577635755553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8964970577635755553'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/02/second-life-creation-problems-with.html' title='Second Life creation problems with equilateral triangles'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-6648142671582703367</id><published>2009-02-01T11:53:00.017Z</published><updated>2009-02-02T10:20:48.925Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Second Life'/><title type='text'>Second Life mathematics</title><content type='html'>About a year or so ago I played around with Second Life but found it was limited as an environment due to lack of integration with IM or Skype (I was looking to use it as an intuitive conferencing tool). It still lacks these features but I've had a little fun recently playing around with the scripting language to play with polygons using Second Life as my geometry lab.&lt;br /&gt;&lt;br /&gt;The maximum object size (normally) you can create is a 10x10x10m cube. You can reshape this up in different ways (like a cylinder) but with the premise of making a simple house/room I created a couple of scripts to make giant cubes and domes using a 10x10x0.025m panel as a building block.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3506/3241188138_f9dcf42433_m.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px; height: 187px;" src="http://farm4.static.flickr.com/3506/3241188138_f9dcf42433_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;My recent experiment was to create a &lt;a href="http://en.wikipedia.org/wiki/Linden_Scripting_Language" title="In Second Life the scripting language is call LSL (Linden Scripting Language)"&gt;script&lt;/a&gt; to use these flat panels to make an &lt;span style="font-weight: bold;"&gt;N&lt;/span&gt;-sided polygon shaped wall in a ring around my avatar. The only tricky bit of math is the distance between the centre point (my avatar) and the 10m wide panel.&lt;br /&gt;&lt;br /&gt;This formula does the trick:&lt;div   style="margin: 0.5cm; background: lightYellow none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:'symbol,system';color:darkBlue;"&gt;&lt;span style="font-size:130%;"&gt;distance = &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt; &lt;mi&gt;panelwidth&lt;/mi&gt; &lt;mo&gt;⁄&lt;/mo&gt; &lt;mo&gt;(&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;tan&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;&lt;span style="font-family:times new roman;"&gt;π&lt;/span&gt;&lt;/mi&gt;&lt;mo&gt;/&lt;/mo&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;/math&gt;&lt;/span&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_RHmYsUeCjM8/SYWbmWh3qPI/AAAAAAAAAEY/5qCsh-9dJF8/s1600-h/Presentation1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 147px; height: 160px;" src="http://4.bp.blogspot.com/_RHmYsUeCjM8/SYWbmWh3qPI/AAAAAAAAAEY/5qCsh-9dJF8/s320/Presentation1.jpg" alt="" id="BLOGGER_PHOTO_ID_5297811619856230642" border="0" /&gt;&lt;/a&gt;You can work this out by thinking about the right-angled triangle between the avatar, middle of the panel and the edge where the next panel joins:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The base of the triangle shown must be ½ the panel width&lt;/li&gt;&lt;li&gt;the angle "a" cuts up the circle into 2x&lt;span style="font-weight: bold;"&gt;N&lt;/span&gt; triangles (a full circle is 2&lt;span style="font-family:times new roman;"&gt;π&lt;/span&gt; in &lt;a href="http://en.wikipedia.org/wiki/Radians"&gt;radians&lt;/a&gt;) and so "a" = 2&lt;span style="font-family:times new roman;"&gt;π&lt;/span&gt;/2N = &lt;span style="font-family:times new roman;"&gt;π&lt;/span&gt;/N.&lt;/li&gt;&lt;li&gt;Basic trigonometry gives us the tangent of "a" equal to the opposite side (which we know) over the adjacent side (which is the distance we want).&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-style: italic;"&gt;Programming bit:&lt;/span&gt; Note that &lt;abbr title="Second Life"&gt;SL&lt;/abbr&gt; limits the distance you can create (rez) an object to 10m, so my script creates the panel in a small size near the avatar (&lt;a href='http://wiki.secondlife.com/wiki/LlRezObject'&gt;llRezObject&lt;/a&gt;) with the right final rotation, orders the panel (&lt;span style="font-style: italic;"&gt;the panel has its own script listening for this command&lt;/span&gt;) to the target position (&lt;a href='http://wiki.secondlife.com/wiki/LlSetPos'&gt;llSetPos&lt;/a&gt;) and then the panel resizes itself (&lt;a href='http://wiki.secondlife.com/wiki/LlSetScale'&gt;llSetScale&lt;/a&gt;) when it realizes it has reached the target position (&lt;a href='http://wiki.secondlife.com/wiki/LlGetPos'&gt;llGetPos&lt;/a&gt;). Phew.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-6648142671582703367?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/6648142671582703367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=6648142671582703367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/6648142671582703367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/6648142671582703367'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/02/second-life-mathematics.html' title='Second Life mathematics'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3506/3241188138_f9dcf42433_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-7910006845629375705</id><published>2009-01-29T12:14:00.004Z</published><updated>2009-01-29T14:07:30.923Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><title type='text'>The importance of FoxMarks</title><content type='html'>Ask yourself this question, if I lost all my browser bookmarks would I know what I've lost? It's quite amazing how much time most surfers invest in organizing and collecting their favourite places on the internet.&lt;br /&gt;&lt;br /&gt;I have recently installed &lt;a href="http://www.foxmarks.com/"&gt;Foxmarks&lt;/a&gt; which backup your favourites and allows you to access your bookmarks on the internet. I particularly like the password saving part as this means that I can create new accounts and passwords on websites and log in without any problem on another machine. The profiles feature is pretty neat too as this means I can restrict my "@work" version to professional interest rather than overly personal stuff.&lt;br /&gt;&lt;br /&gt;I did however take the precaution of using a pretty secure password for the account. The thought of someone hacking all my passwords at the same time gives me the shivers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-7910006845629375705?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/7910006845629375705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=7910006845629375705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/7910006845629375705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/7910006845629375705'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/01/importance-of-foxmarks.html' title='The importance of FoxMarks'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-248773387216810885</id><published>2009-01-03T09:14:00.009Z</published><updated>2009-01-03T09:50:26.528Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='bookmarklet'/><category scheme='http://www.blogger.com/atom/ns#' term='Flickr'/><title type='text'>Flickr email checkbox ticker bookmarklet</title><content type='html'>One slightly annoying feature of Flickr is that there is no way of filtering your email. In particular I get a lot of group invites and emails telling me someone added me as a contact. Frequently there is no need for me to open these emails and to delete them means individual checkboxes have to be ticked. Here's a &lt;a href="javascript:(function(){var%20anchors=document.getElementsByTagName('A'),checkboxes=document.getElementsByTagName('input'),filter=/Invite%20to|You%20are/,i,j;for(i=0;i&amp;lt;anchors.length;i++){if(anchors[i].innerHTML.search(filter)&amp;gt;=0){for(j=0;j&amp;lt;checkboxes.length;j++){if(anchors[i].href.slice(-16)==checkboxes[j].name.slice(-16)){checkboxes[j].checked=1}}}}})()"&gt;bookmarklet&lt;/a&gt; that you can drop into your bookmarks that does exactly that.&lt;br /&gt;&lt;br /&gt;Within the javascript there is a "filter" variable that you can set to any text you want (at the moment it matches emails with the words &lt;span style="font-style: italic;"&gt;'Invite to'&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;'You are'&lt;/span&gt; in the subject). Here's the javascript source:&lt;br /&gt;&lt;pre style="color:darkblue;"&gt;javascript:(function(){&lt;div style="margin-left: 0.1cm;"&gt;var anchors=document.getElementsByTagName(&lt;span style="color: rgb(204, 51, 204);"&gt;'A'&lt;/span&gt;),&lt;br /&gt;checkboxes=document.getElementsByTagName(&lt;span style="color: rgb(204, 51, 204);"&gt;'INPUT'&lt;/span&gt;),&lt;br /&gt;filter=&lt;span style="color: rgb(204, 51, 204);"&gt;/Invite to|You are/&lt;/span&gt;, i, j;&lt;br /&gt;for(i=0;i&amp;lt;anchors.length;i++){&lt;div style="margin-left: 0.2cm"&gt;if(anchors[i].innerHTML.search(filter)&amp;gt;=0){&lt;div style="margin-left: 0.3cm;"&gt;for(j=0;j&amp;lt;checkboxes.length;j++){&lt;div style="margin-left: 0.4cm;"&gt;if(anchors[i].href.slice(-16)==checkboxes[j].name.slice(-16)){&lt;div style="margin-left: 0.5cm;"&gt;checkboxes[j].checked=1&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;})()&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-248773387216810885?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/248773387216810885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=248773387216810885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/248773387216810885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/248773387216810885'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2009/01/flickr-email-checkbox-ticker.html' title='Flickr email checkbox ticker bookmarklet'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-8610396333980884733</id><published>2008-12-18T18:12:00.009Z</published><updated>2008-12-20T20:00:40.048Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile phones'/><category scheme='http://www.blogger.com/atom/ns#' term='bookmarklet'/><title type='text'>Bookmarklet to find cheapest service to call a mobile from a fixed line for the current time and day</title><content type='html'>Callchecker (UK) has a great service to lookup the best 0845/0870 service to call a UK mobile from your fixed line telephone. This varies by weekday, evening or weekend rate. The following bookmarklet looks up the right page based on the time on your computer.&lt;br /&gt;&lt;pre  style="color:darkblue;"&gt;javascript:(function(){&lt;br /&gt;&lt;div style="margin-left: 0.25cm;"&gt;var t='&lt;span style="color: rgb(204, 51, 204);"&gt;weekday&lt;/span&gt;',d=new Date();&lt;br /&gt;if(d.getDay()==0||d.getDay()==6){t='&lt;span style="color: rgb(204, 51, 204);"&gt;weekend&lt;/span&gt;'}else{&lt;br /&gt;&lt;span style="margin-left:0.5cm"&gt;if(d.getHours()&amp;gt;17||d.getHours&amp;lt;8){t='&lt;span style="color: rgb(204, 51, 204);"&gt;evening&lt;/span&gt;'}};&lt;/span&gt;&lt;br /&gt;window.location='&lt;span style="color: rgb(204, 51, 204);"&gt;http://callchecker.moneysavingexpert.com/\&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;ukcallchecker/mobile-numbers/&lt;/span&gt;'+t&lt;/div&gt;})()&lt;/pre&gt;&lt;br /&gt;Here it is as a &lt;a href="javascript:(function(){var%20t='weekday',d=new%20Date();if(d.getDay()==0||d.getDay()==6){t='weekend'}else{if(d.getHours()&amp;gt;17||d.getHours&amp;lt;8){t='evening'}};window.location='http://callchecker.moneysavingexpert.com/ukcallchecker/mobile-numbers/'+t})()" target="_blank"&gt;bookmark&lt;/a&gt; that you can test out or drag and drop into your browser Bookmarks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-8610396333980884733?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/8610396333980884733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=8610396333980884733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8610396333980884733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8610396333980884733'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/12/bookmarklet-to-find-cheapest-service-to.html' title='Bookmarklet to find cheapest service to call a mobile from a fixed line for the current time and day'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-1016512846804616077</id><published>2008-12-11T10:59:00.015Z</published><updated>2008-12-11T18:51:29.050Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='bookmarklet'/><title type='text'>Bookmarklet to add recycle comment in GreenMetropolis</title><content type='html'>I'm selling a fair number of my old paperbacks on GreenMetropolis.com. When listing a book I invariably want to note that I will send in recycled packaging in the comments field. I was using iMacro to speed this up but I've finally got around to creating a simple bookmarklet to do the same thing. Here it is:&lt;br /&gt;&lt;pre style="color:darkblue;"&gt;&lt;br /&gt;javascript:(&lt;br /&gt; function(){&lt;br /&gt;   var cmts=document.getElementsByTagName('&lt;span style="color: rgb(51, 204, 0);"&gt;TEXTAREA&lt;/span&gt;');&lt;br /&gt;   for(var ic=0;ic&amp;lt;cmts.length;ic++){&lt;br /&gt;     if(cmts[ic].name=='&lt;span style="color: rgb(51, 204, 0);"&gt;comment&lt;/span&gt;'){&lt;br /&gt;       cmts[ic].value+='&lt;span style="color: rgb(51, 204, 0);"&gt;I will send with reused or recycled packaging.&lt;/span&gt;'&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;)()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And here it is as a link you can drag and drop into your own bookmarks or try it out by clicking on it here: &lt;a href="javascript:(function(){var%20cmts=document.getElementsByTagName('TEXTAREA');for(var%20ic=0;%20ic&amp;lt;cmts.length;ic++){if(cmts[ic].name=='comment'){cmts[ic].value+='%20I%20will%20send%20with%20reused%20or%20recycled%20packaging.'}}})()"&gt;Add note to TextArea&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;form method="post" action=""&gt;&lt;br /&gt;&lt;textarea name="comment" cols="44" rows="2" face="Courier New" border="2"&gt;Test text area.&lt;/textarea&gt;&lt;/form&gt;&lt;br /&gt;&lt;a href="javascript:(function(){var%20cmts=document.getElementsByTagName('TEXTAREA');for(var%20ic=0;%20ic&amp;lt;cmts.length;ic++){if(cmts[ic].name=='comment'){cmts[ic].value='The quick brown fox jumped over the lazy dog.'}}})()"&gt;Reset text area&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This would be fairly easy to customize for your own text or to adapt to a different form that you use regularly and get tired of typing in the same old text or if you are familiar with RegEx tweaking the text you already have in the text box. For example changing the text in the text box to &lt;a href="javascript:(function(){String.prototype.toTitleCase=function(){var str = this.toLowerCase(),newStr = '';for ( var i = 0, l = str.length; i&amp;lt;l; i++ ){newStr += ( i == 0 || str.charAt( i - 1 ) == ' ' )?str.charAt( i ).toUpperCase():str.charAt( i )}return newStr};var cmts=document.getElementsByTagName('TEXTAREA');for(var ic=0;ic&amp;lt;cmts.length;ic++){if(cmts[ic].name=='comment'){cmts[ic].value=cmts[ic].value.toString().toTitleCase()}}})()"&gt;Title Case&lt;/a&gt; or &lt;a href="javascript:(function(){String.prototype.toShoutCase=function(){var str = this.toUpperCase(),newStr = '';for ( var i = 0, l = str.length; i&amp;lt;l; i++ ){newStr+= (i==0||str.charAt(i-1)==' '||str.charAt(i)==' '||str.charAt(i)=='.'||str.charAt(i-1)=='_'||str.charAt(i)=='_')?str.charAt(i):'_'+str.charAt(i)}return newStr.replace(/([^\s])\s([^\s])/g,'$1   $2')};var cmts=document.getElementsByTagName('TEXTAREA');for(var ic=0;ic&amp;lt;cmts.length;ic++){if(cmts[ic].name=='comment'){cmts[ic].value=cmts[ic].value.toString().toShoutCase()}}})()"&gt;Shout&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-1016512846804616077?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/1016512846804616077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=1016512846804616077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/1016512846804616077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/1016512846804616077'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/12/bookmarklet-to-add-recycle-comment-in.html' title='Bookmarklet to add recycle comment in GreenMetropolis'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-945227047273257929</id><published>2008-12-09T10:16:00.006Z</published><updated>2008-12-11T15:01:56.015Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='bookmarklet'/><title type='text'>Creating an intelligent shortcut (bookmarklet) in Firefox</title><content type='html'>On of the frequent address shortcuts I use in Firefox is to redirect "w &lt;span style="font-style: italic; color: rgb(51, 102, 255);"&gt;sometext&lt;/span&gt;" in the address bar to lookup a term (&lt;span style="font-style: italic; color: rgb(51, 102, 255);"&gt;sometext&lt;/span&gt;) in Wikipedia. As I frequently go to my "Watchlist" in Wikipedia I though it would be neat to default to that page if I had not specified a term. A little research and I'd worked out how to get this to work as a bookmarklet. In the address bar any text added to the shortcut is referenced as "%s".&lt;br /&gt;&lt;br /&gt;Using this basic structure it would be pretty easy to add a more complex set of conditions to make the same shortcut do many more things, such as looking up a book and working out if the text you put in was an ISBN or a title.&lt;br /&gt;&lt;br /&gt;Here's my example formatted so you can read it:&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;div  style="color:darkgreen;font-family:System"&gt;javascript:(&lt;br /&gt;function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;if("%s".length==0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 102, 51);"&gt;   // Default&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.location="http://en.wikipedia.org/wiki/Special:Watchlist"&lt;br /&gt;&amp;nbsp;&amp;nbsp;}else{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 102, 51);"&gt;   // Wikipedia lookup&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.location="http://en.wikipedia.org/wiki/%s"&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;)()&lt;/div&gt;&lt;hr /&gt;&lt;br /&gt;And here it is formatted as a link you can drop into your bookmarks, don't forget to edit it so that it has "w" as a keyword/shortcut:&lt;br /&gt;&lt;a href='javascript:(function(){if("%s".length==0){window.location="http://en.wikipedia.org/wiki/Special:Watchlist"}else{window.location="http://en.wikipedia.org/wiki/%s"}})()'&gt;Wikipedia lookup&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-945227047273257929?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/945227047273257929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=945227047273257929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/945227047273257929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/945227047273257929'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/12/creating-intelligent-shortcut.html' title='Creating an intelligent shortcut (bookmarklet) in Firefox'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-6597647961086406646</id><published>2008-12-01T17:33:00.003Z</published><updated>2008-12-01T17:49:16.474Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile phones'/><title type='text'>Moving my mobile number from Virgin to the evil ASDA  / Wal*mart empire</title><content type='html'>Sadly Virgin aren't doing all that much to compete with the johnny-cum-lately ASDA. ASDA are currently charging a flat rate for PAYG of &lt;span style="font-weight: bold;"&gt;8p/min&lt;/span&gt; for all UK landline and all mobile calls with &lt;span style="font-weight: bold;"&gt;4p per text&lt;/span&gt; message. Virgin claimed to charge 15p/min and 3p for texts on PAYG but in practice (as I don't know anyone using Virgin and my usage is so low it was never worth buying a "bundle") their charges were actually a whopping &lt;span style="color: rgb(255, 0, 0);"&gt;40p/min &lt;span style="color: rgb(0, 0, 0);"&gt;and &lt;/span&gt;12p/text&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It's a great pity but as my average bill even at these rates is always less than £5/month I can't afford to ignore the ASDA deal.&lt;br /&gt;&lt;br /&gt;Transfer happened this weekend. I emailed Virgin via their website on Thursday, phoned ASDA with the transfer code on Friday and my mobile number was tranferred today. Surprisingly painless compared to the last time I had to do this (it took 3 weeks).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-6597647961086406646?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/6597647961086406646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=6597647961086406646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/6597647961086406646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/6597647961086406646'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/12/moving-my-mobile-number-from-virgin-to.html' title='Moving my mobile number from Virgin to the evil ASDA  / Wal*mart empire'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-2661985828560642808</id><published>2008-11-16T10:28:00.007Z</published><updated>2008-11-16T10:47:58.058Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Greasemonkey'/><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><title type='text'>Use Greasemonkey to link UK postcodes to Google Maps</title><content type='html'>See my last blog post for general details about using Greasemonkey. This titbit of source code uses a large standard regex to match any UK postcode in a web page text (you could be matching paragraph elements) and converts it into a hyperlink to a google map of that area. It assumes that this titbit is inside a script that searches relevant elements of the page and tests them as variable "thisElement".&lt;br /&gt;&lt;br /&gt;&lt;span style="line-height: 90%;font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-family:courier new;" &gt;// Convert postcodes to google map links (z=15 puts names on tube stations)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-family:courier new;" &gt;thisElement.innerHTML=thisElement.innerHTML.replace(/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-family:courier new;" &gt;/,"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&amp;lt;a href='http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=&lt;span style="font-weight: bold;"&gt;$1&lt;/span&gt;&amp;amp;ie=UTF8&amp;amp;z=15&amp;amp;iwloc=addr' target=_blank&amp;gt;&lt;span style="font-weight: bold;"&gt;$1&lt;/span&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-family:courier new;" &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/1334225864115795639-2661985828560642808?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/2661985828560642808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=2661985828560642808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/2661985828560642808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/2661985828560642808'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/11/use-greasemonkey-to-link-uk-postcodes.html' title='Use Greasemonkey to link UK postcodes to Google Maps'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-4358320587643550799</id><published>2008-11-14T17:41:00.015Z</published><updated>2008-11-22T14:33:40.684Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='scraping'/><category scheme='http://www.blogger.com/atom/ns#' term='Greasemonkey'/><title type='text'>Write your own Greasemonkey script to highlight and hide items on a website</title><content type='html'>Here are some handy code segments that have taken me a little while to work out. Greasemonkey is a useful Firefox plugin with a massive shared library of scripts to do interesting things like adding collapsible folders to your online gmail web page. You can also write your own javascript code for Greasemonkey to apply to web sites you name.&lt;br /&gt;&lt;br /&gt;The following code I use for a mystery shopping website I visit regularly but their table of possible assignments available in London can be several pages long. This script helps filter and colour in the table with my preferences (for example out of 80 London assignments I currently have 7 highlighted as suitable).&lt;br /&gt;&lt;pre style="color: rgb(0, 0, 153); line-height: 9pt; font-family: 'Courier New Bold'; font-size: 8pt;"&gt;&lt;br /&gt;// ==UserScript==&lt;br /&gt;// @name           Website filter&lt;br /&gt;// @namespace      Filters&lt;br /&gt;// @include        http://mywebsite.com&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(0, 102, 0);"&gt;/* Here I'm searching out items in a table that have been&lt;br /&gt;highlighted in bold already. I'm then searching the bold&lt;br /&gt;text and if it contains "William", I then hide the row&lt;br /&gt;completely. I then go on to pick out items with "London"&lt;br /&gt;in the text in dark green */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;var allElements, thisElement;&lt;br /&gt;allElements = document.evaluate(&lt;br /&gt; '//tr/td/b',&lt;br /&gt; document,&lt;br /&gt; null,&lt;br /&gt; XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,&lt;br /&gt; null);&lt;br /&gt;for (var i = 0; i &amp;lt; allElements.snapshotLength; i++) {&lt;br /&gt; thisElement = allElements.snapshotItem(i);&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;   // Hide these rows&lt;/span&gt;&lt;br /&gt; if(thisElement.innerHTML.search(/William/i)&amp;gt;=0) {&lt;br /&gt;   thisElement.parentNode.parentNode.style.display="none";&lt;br /&gt; }&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;  // Highlight these elements&lt;/span&gt;&lt;br /&gt; if(thisElement.innerHTML.search(/London/i)&amp;gt;=0) {&lt;br /&gt;   thisElement.style.color="darkgreen";&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(0, 102, 0);"&gt;/* In this section I'm searching for any table cell and&lt;br /&gt;checking the text for certain postcodes and addresses.&lt;br /&gt;If there is a match, the cell is highlighted in bold&lt;br /&gt;blue text. */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;allElements = document.evaluate(&lt;br /&gt; '//td',&lt;br /&gt; document,&lt;br /&gt; null,&lt;br /&gt; XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,&lt;br /&gt; null);&lt;br /&gt;for (var i = 0; i &amp;lt; allElements.snapshotLength; i++) {&lt;br /&gt; thisElement = allElements.snapshotItem(i);&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;  // Highlight these addresses&lt;/span&gt;&lt;br /&gt; if(thisElement.innerHTML.search(/SE(22|15|1\s)|London Bridge/i)&amp;gt;0) {&lt;br /&gt;   with(thisElement.style){&lt;br /&gt;     color="blue";&lt;br /&gt;     fontWeight="bold";&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ==/UserScript==&lt;/pre&gt;&lt;br /&gt;&lt;u&gt;Explanations&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Regular expressions (Regex) can be a bit cryptic but as you'll need to tailor these in the above code I though I'd explain what these bits do:&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);font-family:courier new;font-size:85%;"  &gt;search(/William/i)&lt;/span&gt; ==&gt; Search anywhere in the string for "William" and return the starting position within the string, the 'i' means that it will not be case sensitive.&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);font-family:courier new;font-size:85%;"  &gt;search(/SE(22|15|1\s)|London Bridge/i)&lt;/span&gt; ==&gt; Search anywhere in the string for "SE22", "SE15", "SE1 " or "London Bridge", ignore case and return the position.&lt;br /&gt;&lt;br /&gt;You will also note that the first search that hides matching rows uses &lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-family:courier new;" &gt;parentNode&lt;/span&gt;&lt;/span&gt; twice on the assumption that the bold text will be in a cell which will be in a row, so the second parent node is the "TR" tag containing the row. By changing the style.display attribute this dynamically hides the row from view (to reset and show the row again you would set style.display to null). Phew.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Useful links&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Greasemonkey: &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748"&gt;https://addons.mozilla.org&lt;/a&gt;&lt;br /&gt;XPath syntax: &lt;a href="http://www.w3schools.com/XPath/xpath_syntax.asp"&gt;http://www.w3schools.com/XPath&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-4358320587643550799?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/4358320587643550799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=4358320587643550799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/4358320587643550799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/4358320587643550799'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/11/write-your-own-greasemonkey-script-to.html' title='Write your own Greasemonkey script to highlight and hide items on a website'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-1230004879254296945</id><published>2008-11-10T10:36:00.011Z</published><updated>2008-11-12T22:18:33.244Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='iMacro'/><category scheme='http://www.blogger.com/atom/ns#' term='Flickr'/><title type='text'>iMacro script to swap between Flickr albums</title><content type='html'>The following handy iMacro script logs you from one Flickr account to another. I currently have six of these, one for each separate free Flickr album/account I have on the go (there's a maximum of 200 photos you can share for free in each account). All you have to do is install the iMacro plugin into your browser and save the following script not forgetting to add your login and password in the "User set variables" section.&lt;br /&gt;&lt;br /&gt;Obviously if Flickr change their main site layout then this may break the script and it would have to be tweaked.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Script Starts&lt;/span&gt;&lt;hr /&gt;&lt;br /&gt;&lt;div   style="color: rgb(0, 0, 153); line-height: 9pt;font-family:'Courier New Bold';font-size:8pt;"&gt;&lt;span style="font-style: italic;"&gt;' Last Edit: 13 Nov 2008&lt;br /&gt;&lt;br /&gt;' &lt;span style="font-weight: bold;"&gt;User set variables&lt;/span&gt;&lt;br /&gt;' !VAR1 = your login ID, !VAR2 = your password&lt;/span&gt;&lt;br /&gt;SET !VAR1 yourlogin@yahoo.com&lt;br /&gt;SET !VAR2 password&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;' This script is intended to toggle you out of your&lt;br /&gt;' current Flickr account and into one set by the&lt;br /&gt;' variables above so you can easily swap between&lt;br /&gt;' several albums&lt;br /&gt;&lt;br /&gt;' &lt;span style="font-weight: bold;"&gt;Assumptions&lt;/span&gt;&lt;br /&gt;' - A Sign Out link is on every Flickr page&lt;br /&gt;' - You are currently logged into Flickr&lt;br /&gt;&lt;br /&gt;' &lt;span style="font-weight: bold;"&gt;Main script&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;TAB T=1&lt;br /&gt;FILTER TYPE=IMAGES STATUS=ON&lt;br /&gt;SET !ERRORIGNORE YES&lt;br /&gt;TAG POS=1 TYPE=A ATTR=TXT:Sign&amp;lt;SP&amp;gt;Out&lt;br /&gt;TAG POS=1 TYPE=A ATTR=TXT:Sign&amp;lt;SP&amp;gt;in*&lt;br /&gt;WAIT SECONDS=2&lt;br /&gt;TAG POS=1 TYPE=A ATTR=TXT:Sign&amp;lt;SP&amp;gt;in&amp;lt;SP&amp;gt;as&amp;lt;SP&amp;gt;a*&lt;br /&gt;SET !ERRORIGNORE NO&lt;br /&gt;WAIT SECONDS=2&lt;br /&gt;TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:login_form ATTR=NAME:login CONTENT={{!VAR1}}&lt;br /&gt;SET !ENCRYPTION NO&lt;br /&gt;TAG POS=1 TYPE=INPUT:PASSWORD ATTR=ID:passwd CONTENT={{!VAR2}}&lt;br /&gt;TAG POS=1 TYPE=INPUT:SUBMIT ATTR=VALUE:Sign&amp;lt;SP&amp;gt;In&lt;br /&gt;FILTER TYPE=IMAGES STATUS=OFF&lt;br /&gt;URL GOTO=http://www.flickr.com/activity&lt;br /&gt;TAG POS=1 TYPE=SELECT FORM=* ATTR=ID:act-since CONTENT=%lastlogin&lt;/div&gt;&lt;br /&gt;&lt;hr /&gt;&lt;span style="font-style: italic;"&gt;Script Ends&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Latest changes:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span&gt;I added the 2 second wait times as Sxipper (a password plugin) seemed to be causing 'focus' problems.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;ErrorIgnore is used so that the script still works (though slower) if you have logged off but are still on the Flickr site.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-1230004879254296945?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/1230004879254296945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=1230004879254296945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/1230004879254296945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/1230004879254296945'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/11/imacro-script-to-swap-between-flickr.html' title='iMacro script to swap between Flickr albums'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-5493299887531218802</id><published>2008-10-22T11:56:00.004+01:00</published><updated>2008-10-22T13:56:52.093+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac mini'/><category scheme='http://www.blogger.com/atom/ns#' term='Leopard'/><title type='text'>Leopard problems with OpenOffice</title><content type='html'>Since installing an update from Apple to my X11 application, OpenOffice has refused to run. Damned annoying that Apple's development labs can't test updates properly.&lt;br /&gt;&lt;br /&gt;Luckily I found a solution on a technical forum of running NeoOffice instead. NeoOffice uses exactly the same open source as Open Office, so saved files are completely interchangeable with OpenOffice, with the odd additional feature thrown in. NeoOffice runs natively on Leopard and so doesn't rely on X11. So far it seems to run rather better than Open Office and I have had great fun mapping out my kitchen using the drawing application (very similar features to Visio) which includes the facility to draw to scale, so my kitchen units can be represented quite accurately for my workmen to follow.&lt;br /&gt;&lt;br /&gt;Next time I'm running updates from Apple I'll research the forums before rashly saying yes to new bugs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-5493299887531218802?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/5493299887531218802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=5493299887531218802' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5493299887531218802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5493299887531218802'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/10/leopard-problems-with-openoffice.html' title='Leopard problems with OpenOffice'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-8711746286383054419</id><published>2008-09-09T09:28:00.013+01:00</published><updated>2008-09-09T12:24:44.793+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parallels'/><category scheme='http://www.blogger.com/atom/ns#' term='Puppy Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac mini'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Stumbling across some MacMini tips/tricks</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Tip 1 - Booting Puppy from CD&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_RHmYsUeCjM8/SMY8doMvNPI/AAAAAAAAAEE/o9Kqb3JAgjM/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 10pt 0pt 0px 5px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_RHmYsUeCjM8/SMY8doMvNPI/AAAAAAAAAEE/o9Kqb3JAgjM/s200/Picture+1.png" alt="Screen capture of 9 desktops on MacMini with Puppy Linux running in middle desktop" title="Screen capture of 9 desktops on MacMini with Puppy Linux running in middle desktop" id="BLOGGER_PHOTO_ID_5243945295824237810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Having a good play around with Puppy Linux led me to getting this to work within Parallels running on Leopard with the MacMini (intel core duo). It succeeded quite well, neatly running Puppy directly from the ISO file, though it's a bit freaky being able to flick between 9 desktops on the Mac and a further 4 running on Puppy (note that my machine has been upgraded to 2GB of RAM so reserving 500MB for Puppy Linux was no problem). The only drawback was that Compiz Fusion would not run within Parallels (I really wanted to see the 3D cube working). I decided to try running from CD direct.&lt;br /&gt;&lt;br /&gt;Booting from CD was not an obvious process as unlike a PC the Mac will not boot automatically from CD just because it's in the drive. The trick is to keep the Option key pressed when your machine powers up. It then checks bootable devices and gives you a neat graphic display of the options. Puppy then ran perfectly well including all the lovely 3D Compiz goodness. Though it's not a replacement for me working on Leopard it could be a really handy backup if I run into hard disk problems.&lt;br /&gt;&lt;blockquote style="font-size: 85%;background:lightyellow"&gt;Footnotes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I'm unsure if there's a way to get the boot up to work straight from a USB drive, this doesn't seem to be part of the standard boot up routine.&lt;/li&gt;&lt;li&gt;Parallels doesn't seem to let me share the Mac hard disk or USB drives with Puppy though I haven't spent any time researching a workaround.&lt;/li&gt;&lt;li&gt;The benefit of taking virtual machine snapshots is a key bonus, I can install options and change settings on puppy with the confidence that I can roll back to a happy working state.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tip 2 - Ejecting a CD&lt;/span&gt;&lt;br /&gt;While creating Puppy bootable CDs I had a problem with one not being read properly on the Mac (probably a scratched disk). Annoyingly it would not eject using software control. This included trying to get it to eject using direct commands from within Terminal. My final solution was to keep F12 pressed on the keyboard when powering up, magically the disk ejected. It seems an amazingly user unfriendly feature to have no manual eject process, not even a pin hole to work a paper-clip into, particularly on a machine which is so notoriously difficult to force open the case. From now on, I'm being extra careful to ensure disks look spotless before inserting them.&lt;iframe src="http://www.answers.com/pretty%20neat?lookitup&amp;amp;css=div.ads,div#headerSection,div#navigationSection,div#footer,table#copyrightTable,p.didYouMean,div#shopping%7Bdisplay:none%21important%7Ddiv#new_left%7Bmargin:0%21important;padding:0%21important%7D" style="border: 1px solid black; width: 460px; height: 100%; top: 0px; right: 0px; padding-left: 0px; position: fixed; background-color: white; z-index: 1000; display: none;" id="ResultBox8"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-8711746286383054419?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/8711746286383054419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=8711746286383054419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8711746286383054419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8711746286383054419'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/09/stumbling-across-some-macmini.html' title='Stumbling across some MacMini tips/tricks'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_RHmYsUeCjM8/SMY8doMvNPI/AAAAAAAAAEE/o9Kqb3JAgjM/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-5719530245478343461</id><published>2008-09-06T13:25:00.028+01:00</published><updated>2008-09-16T07:04:57.539+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='802.11b'/><category scheme='http://www.blogger.com/atom/ns#' term='xubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='migrating'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='home network'/><title type='text'>How to breathe life back into a 10 year old Compaq laptop using Xubuntu</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RHmYsUeCjM8/SMKSyhuE_JI/AAAAAAAAAD8/NP2oSI8fgps/s1600-h/e500.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_RHmYsUeCjM8/SMKSyhuE_JI/AAAAAAAAAD8/NP2oSI8fgps/s320/e500.jpg" alt="" id="BLOGGER_PHOTO_ID_5242914312955427986" border="0" width="200" /&gt;&lt;/a&gt;Many years ago I lent an old slightly damaged laptop to a friend (the laptop locking mechanism was broken and the screen slightly damaged). Last year he bought a cheap but highly functional laptop after my loaner, now nearly ten years old, stopped working and eventually returned it to me for possible repair and use.&lt;br /&gt;&lt;br /&gt;It is a Compaq E500 which has a rather stylish black and grey layout, good quality keyboard and a clear colour screen (in 1999 it was retailing for $1,970 and in 2008 they sell on eBay for under $100). The hard disk had fatally crashed and windows now failed to boot up only ever giving a blue screen of death. I'm unsure if the hard disk has a physical problem but after it laying around on my study floor for six months I thought it might be possible to replace Windows with a suitable free small version of Linux so the machine could become a handy wireless web laptop and guest machine. &lt;span style=";font-size:small;color:olive;"  &gt;[E500 Spec: 14.1 in 1024x786 TFT display (1600x1200 external), 12GB hard disk, CDROM 24x, Video Out, Pentium III 650MHz, 192MB SDRAM.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After failing to get the standard &lt;a href="http://www.ubuntu.com/" target="_blank"&gt;Ubuntu&lt;/a&gt; to install from a CD I had to hand (I gave up after letting the disk whizz around for over a half hour) I did a little research and opted for &lt;a href="http://www.xubuntu.org/" target="_blank"&gt;Xubuntu&lt;/a&gt; which is a cut down version for machines with more limited resources. I downloaded and created a CD from the ISO file on my trusty MacMini. The E500 install took over an hour but the main screen gave a countdown bar so you can see something is happening. I re-booted when it told me and it worked first time. It boots up more quickly than it used to under Windows and had even recognized my 2GB USB flash drive!&lt;br /&gt;&lt;br /&gt;After a little play to ensure that it seemed responsive enough I dug out an old Belkin wireless card (802.11b) and was quite astonished when I plugged it in and the OS used it to find wireless connections without any further configuration. I had to tweak the wifi settings to connect to my secure network but had it working as a wireless laptop fairly painlessly.&lt;span style="position: relative; top: -0.6em;font-size:smaller;" &gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's now a smart "netbook" (with a much better screen than the Acer Aspire One) for checking email while watching TV. The remaining issues are hardware specific&lt;span style="position: relative; top: -0.6em;font-size:smaller;" &gt;2&lt;/span&gt; and I'm not sure I'll get around to fixing them, e.g. recognizing the function key buttons for changing brightness and volume &amp;amp; the second touch pad key doesn't do anything. All in all I'm pretty delighted to turn a useless brick into a nicely functional spare laptop.&lt;br /&gt;&lt;blockquote style="background: lightyellow none repeat scroll 0% 0%; font-size: smaller; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;u&gt;Footnotes&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;[1] The old Belkin wireless card is so out of date that it can't support an encrypted connection so security on this laptop is reliant on screening by MAC address. In the process of testing it out I found &lt;a href="http://sourceforge.net/projects/wicd/" target="_blank"&gt;wicd&lt;/a&gt; is a neat free Linux graphical tool for sniffing out and managing your wireless connection. I have just bought a cheap 802.11g card off eBay to solve the security problem.&lt;br /&gt;&lt;br /&gt;[2] The hardware side remains a puzzle. The E500's BIOS is dated 1999 and there's a new BIOS that helps to solve the problem of buttons being available to non-Windows OS's (see &lt;a href="http://www.bio.ifi.lmu.de/%7Esteiner/linux/index.html"&gt;discussion&lt;/a&gt;). Having reformatted the disk I can't install the new BIOS to flash (using a .exe file that HP have available) or (for some reason I can't fathom) run DOS from a floppy even with it set as the first boot device.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Postscript&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;I have tried booting from CD using the latest &lt;a href="http://puppylinux.org/" traget="_blank"&gt;Puppy Linux&lt;/a&gt; (Dingo). It runs well, possibly faster than Xubuntu but I haven't managed to map the keyboard touchpad correctly yet. If I get this working I'll give it good trial as Xubuntu tends to take a couple of seconds to change screen tabs when running Opera, while I haven't noticed any real performance problems with Puppy Linux so far. When you think about it, it's pretty impressive to be able to run the latest version of the Opera browser on such an old machine.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-5719530245478343461?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/5719530245478343461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=5719530245478343461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5719530245478343461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/5719530245478343461'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/09/breathing-life-back-into-10-year-old.html' title='How to breathe life back into a 10 year old Compaq laptop using Xubuntu'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RHmYsUeCjM8/SMKSyhuE_JI/AAAAAAAAAD8/NP2oSI8fgps/s72-c/e500.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-3436916363564368489</id><published>2008-08-09T09:40:00.014+01:00</published><updated>2008-09-09T11:37:26.497+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Memory stick'/><category scheme='http://www.blogger.com/atom/ns#' term='k750i'/><title type='text'>How to add 8GB of memory to Sony Ericsson K750i</title><content type='html'>My previous memory stick in my mobile phone was a 4GB MS Pro Duo card. This is the maximum the phone is supposed to be able to cope with. I took a slight risk and paid £23 for an 8GB MS2 card (with Pro Duo adapter) with the intent of extending my mobile's life as a thrifty guy's iPod.&lt;br /&gt;&lt;br /&gt;Initially there seemed to be a problem reliably writing files but after re-formatting and using a card reader (rather than the phone cable) to update files, it seems to do the job. I formatted using DOS with the command &lt;TT style="color:darkblue"&gt;FORMAT E: /FS:FAT32 /A:4096&lt;/TT&gt;, check this &lt;a href="http://my-symbian.com/forum/viewtopic.php?t=4567&amp;postdays=0&amp;postorder=asc&amp;highlight=sony+stealing+memory&amp;start=0" target=_blank&gt;discussion&lt;/a&gt; as to why I chose these options. The phone status only reports a 4GB card but it actually does cope with 8GB.&lt;br /&gt;&lt;br /&gt;I'm amazed to fit such a large card on a three year old mobile phone. This is enough space to take a large MP3 music collection (about 50 CD's worth of music, including 15 hours of Wagner's Ring of the Nibelung), 40 podcast subscriptions, a couple of free audio books, various maps supporting my GPS bluetooth gadget, document backups and 2.5GB spare for future growth.&lt;br /&gt;&lt;br /&gt;For document backups I use &lt;a href="http://www.truecrypt.org" target=_blank&gt;TrueCrypt&lt;/a&gt; to keep an encrypted 400MB disk image which can be mounted on my Mac or a PC that includes all my scanned documents over the last two years (I use a Fujitsu ScanSnap scanner to keep PDF versions of bank statements, tax bills etc.) as well as other key reference documents. This may seem an odd thing to keep on the phone but if I was on holiday and my laptop got stolen I could still print out identity documents if someone lent me a PC. By using encryption if the phone was stolen at least I wouldn't worry about my ID being compromised.&lt;br /&gt;&lt;br /&gt;My old 4GB memory card? This is now in my pocket camera (Sony T100) giving enough space for 3 hours of 640x480 video or 1,600 photos at 2592x1944 (5MB) resolution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-3436916363564368489?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/3436916363564368489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=3436916363564368489' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/3436916363564368489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/3436916363564368489'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/08/sony-ericsson-k750i-with-8gb-memory.html' title='How to add 8GB of memory to Sony Ericsson K750i'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-3136643940415017760</id><published>2008-08-07T17:23:00.012+01:00</published><updated>2008-09-09T12:03:49.996+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Spreadsheets'/><category scheme='http://www.blogger.com/atom/ns#' term='scraping'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><title type='text'>How to write a spreadsheet formula for ISBN-10 to ISBN-13 and ASIN</title><content type='html'>I wanted to convert 10 digit ISBNs to the new 13 digit format and vice versa for my "checking second-hand book prices given an ISBN" spreadsheet. It turns out that (for the moment) any ISBN-13 starting with 978 can be converted to an ISBN-10 and this will be the same as the ASIN used by Amazon, so this can be used to look up their data. The problem is that the last digit of the ISBN may change due to it being calculated using a different ISBN standard, so to convert from one to the other your spreadsheet needs to do the checksum calculation.&lt;br /&gt;&lt;br /&gt;The following formulae are based on a 13 or 10 digit ISBN in cell A3 and cell A6 reserved for a check digit calculation. These should be in one line in a spreadsheet cell, the layout here is to help readability.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Formula to create ISBN-13 from ISBN-10&lt;/u&gt;&lt;br /&gt;&lt;pre  style="color:darkgreen;"&gt;=if(&lt;span style="color:darkblue;"&gt;&lt;br /&gt; len(A3)&amp;lt;11,&lt;br /&gt; concatenate(&lt;span style="color:darkred;"&gt;&lt;br /&gt;   "978",&lt;br /&gt;   mid(A3,1,9),&lt;br /&gt;   mod(&lt;span style="color:purple;"&gt;&lt;br /&gt;     mid(A3,1,1)*3+&lt;br /&gt;     mid(A3,2,1)+&lt;br /&gt;     mid(A3,3,1)*3+&lt;br /&gt;     mid(A3,4,1)+&lt;br /&gt;     mid(A3,5,1)*3+&lt;br /&gt;     mid(A3,6,1)+&lt;br /&gt;     mid(A3,7,1)*3+&lt;br /&gt;     mid(A3,8,1)+&lt;br /&gt;     mid(A3,9,1)*3,&lt;br /&gt;     10&lt;br /&gt;     &lt;/span&gt;)&lt;br /&gt;   &lt;/span&gt;),&lt;br /&gt; A3&lt;br /&gt; &lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;u&gt;Formula to create ISBN-10 from ISBN-13 (starting with 978)&lt;/u&gt;&lt;br /&gt;&lt;pre  style="color:darkgreen;"&gt;=if(&lt;span style="color:darkblue;"&gt;&lt;br /&gt;len(A3)&gt;10,&lt;br /&gt;concatenate(&lt;span style="color:darkred;"&gt;&lt;br /&gt;  mid(A3,4,9),&lt;br /&gt;  if(A6=10,"X",A6)&lt;br /&gt;  &lt;/span&gt;),&lt;br /&gt;A3&lt;br /&gt;&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;To calculate the check digit (A6)&lt;br /&gt;&lt;pre  style="color:darkgreen;"&gt;=if(&lt;span style="color:darkblue;"&gt;&lt;br /&gt;len(A3)&gt;10,&lt;br /&gt;mod(&lt;span style="color:darkred;"&gt;&lt;br /&gt;  mid(A3,4,1)+&lt;br /&gt;  mid(A3,5,1)*2+&lt;br /&gt;  mid(A3,6,1)*3+&lt;br /&gt;  mid(A3,7,1)*4+&lt;br /&gt;  mid(A3,8,1)*5+&lt;br /&gt;  mid(A3,9,1)*6+&lt;br /&gt;  mid(A3,10,1)*7+&lt;br /&gt;  mid(A3,11,1)*8+&lt;br /&gt;  mid(A3,12,1)*9,&lt;br /&gt;  11&lt;br /&gt;  &lt;/span&gt;),&lt;br /&gt;""&lt;br /&gt;&lt;/span&gt;)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-3136643940415017760?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/3136643940415017760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=3136643940415017760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/3136643940415017760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/3136643940415017760'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/08/tip-spreadsheet-conversion-for-isbn-10.html' title='How to write a spreadsheet formula for ISBN-10 to ISBN-13 and ASIN'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-8184545404213364093</id><published>2008-05-27T12:39:00.001+01:00</published><updated>2008-06-21T13:30:17.662+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='iMacro'/><category scheme='http://www.blogger.com/atom/ns#' term='Flickr Discussion'/><category scheme='http://www.blogger.com/atom/ns#' term='scraping'/><category scheme='http://www.blogger.com/atom/ns#' term='Flickr'/><category scheme='http://www.blogger.com/atom/ns#' term='Flickr Group'/><title type='text'>Track Flickr group membership history using iMacro</title><content type='html'>&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;span style="font-weight: bold;"&gt;User Guide&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top"&gt;This script keeps a running log (every time you execute it), by updating a discussion message and/or saving a snapshot of group memberships. For the running log you have to create a message in each Flickr group you are an administrator for (or specifically declare), called "Member count". This log keeps a historical record of "&lt;span style="color: rgb(0, 102, 0);"&gt;date, membership total, total number of items&lt;/span&gt;". Before adding a new log entry it checks if the last entry (and the one before that) was less than a fortnight ago and updates it semi-intelligently.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;span style="font-weight: bold;"&gt;Why?&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;I created this script as there is no easy alternative for keeping a history of membership for restricted groups in Flickr.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;span style="font-weight: bold;"&gt;Notes&lt;/span&gt;&lt;/td&gt;&lt;td&gt;I'm an administrator for 9 Flickr groups and maintain membership logs in 4 other groups. Watching the macro chug along updating the logs is quite satisfying. It takes 10 seconds per group (loading 3 to 4 web pages each time and added waiting time, to avoid possible page freezes, composes most of that time) but this can increase up to three-fold depending on Flickr traffic. For a macro that I only need to run once every one or two weeks that doesn't seem too shabby.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;[Source code now maintained at &lt;a href="https://sourceforge.net/projects/imacroscripts/"&gt;Sourceforge.net&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;b&gt;iMacro setup&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3863"&gt;iMacro&lt;/a&gt; installs itself with some example JavaScript files (.js) which are visible in the folders that iMacro shows you in Firefox.&lt;br /&gt;&lt;br /&gt;If you find the location of these folders on your hard disk (on the Mac these are under /&amp;lt;your_username&gt;/iMacros/Macros/) and then save the script in this location with a ".js" extension you should be able to see the file when you refresh the iMacro folder list in Firefox.&lt;br /&gt;&lt;br /&gt;You should then be able to play the script from within iMacro (you have to already be logged in to your Flickr account and have created "Member count" discussion topics for groups you want to log). In the first instance I suggest you try the test test version which will run fully and show you the intended changes in the detailed change log but will not actually commit them.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://wiki.imacros.net/"&gt;wiki.imacros.net&lt;/a&gt; for further help.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-8184545404213364093?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/8184545404213364093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=8184545404213364093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8184545404213364093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8184545404213364093'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/05/flickr-groups-membership-logger.html' title='Track Flickr group membership history using iMacro'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-7478999378853286423</id><published>2008-05-26T10:19:00.010+01:00</published><updated>2008-05-27T12:46:51.314+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='iMacro'/><category scheme='http://www.blogger.com/atom/ns#' term='Flickr'/><category scheme='http://www.blogger.com/atom/ns#' term='Flickr Group'/><title type='text'>Flickr iMacro script to invite all your Flickr friends to a group</title><content type='html'>There was no automatic way to invite all your friends to join a group so I knocked up this quick script to take you from any group main page to the invite page, extract your list of friends (and no other contacts) and then send off the invite. The invite only goes to friends not yet in the group and not previously invited so you will not be bugging them with unwanted spam.&lt;br /&gt;&lt;br /&gt;Note that more than 500 friends may result in time-out errors waiting for Flickr to respond. In this situation you may be better off inviting a few hundred at a time by recording an iMacro selecting the first checkbox on the invite page, then generalize it by removing the ATTR=NAME: and copy that line 200 times but change POS=1 to POS=R1  so that the next checkbox relative to the cursor position is ticked each time. When you've trimmed to a more manageable number then this script can apply again.&lt;br /&gt;&lt;br /&gt;[JavaScript source code START]&lt;br /&gt;&lt;pre   style=";font-family:tahoma;font-size:8pt;"&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;JavaScript for iMacro to create a block invite for all your &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;friends (but not family or other contacts) to join a Flickr group.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;For more information see http://useroffline.blogspot.com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;Assumptions:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;- You have iMacro installed.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;- You have your group's main page currently displayed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;Why:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;There is no block invite facility built into Flickr.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;// Get friends list&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;var friendArr=new Array();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;iimPlay("CODE:\&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TAG POS=1 TYPE=A ATTR=TXT:Invite\n\&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TAG POS=1 TYPE=A ATTR=TXT:Choose&amp;lt;SP&gt;from&amp;lt;SP&gt;your&amp;lt;SP&gt;contacts?\n\&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TAG POS=5 TYPE=TR EXTRACT=HTM\&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;// Tidy up extracted data&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;friendArr=iimGetLastExtract(1).split("name=\"");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;friendArr.splice(0,1);&lt;br /&gt;for(i in friendArr){&lt;br /&gt;friendArr[i]=friendArr[i].split("\"")[0];&lt;br /&gt;friendArr[i]="TAG POS=1 TYPE=INPUT:CHECKBOX ATTR=NAME:"+friendArr[i]+" CONTENT=YES";&lt;br /&gt;}&lt;br /&gt;iimPlay("CODE:"+&lt;br /&gt;"' Total no. of friends = "+friendArr.length+"\n"+&lt;br /&gt;friendArr.join("\n"));&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;// Send the message&lt;/span&gt;&lt;br /&gt;iimPlay("CODE:\&lt;br /&gt;TAG POS=1 TYPE=INPUT:SUBMIT ATTR=NAME:Submit&amp;amp;&amp;amp;VALUE:PREVIEW&lt;sp&gt;*&lt;sp&gt;\n\&lt;br /&gt;TAG POS=1 TYPE=INPUT:SUBMIT ATTR=NAME:done_send&amp;amp;&amp;amp;VALUE:SEND*\&lt;br /&gt;");&lt;/sp&gt;&lt;/sp&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;[JavaScript source code END]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-7478999378853286423?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/7478999378853286423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=7478999378853286423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/7478999378853286423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/7478999378853286423'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/05/flickr-imacro-script-to-invite-all-your.html' title='Flickr iMacro script to invite all your Flickr friends to a group'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-4554935735641393471</id><published>2008-05-22T22:14:00.002+01:00</published><updated>2008-05-22T11:55:30.322+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='iMacro'/><category scheme='http://www.blogger.com/atom/ns#' term='scraping'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><title type='text'>Re-list books on Amazon using iMacro</title><content type='html'>&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;span style="font-weight: bold;"&gt;User Guide&lt;/span&gt;&lt;/td&gt;&lt;td&gt;This script imports my Google spreadsheet of books and then pastes them to sell on Amazon books.  It takes about 20 seconds to list each book but you only process those in your spreadsheet marked to be re-listed.&lt;br /&gt;Example &lt;a href="http://spreadsheets.google.com/pub?key=p0MyWn2xjxtDCYMtlZjbGEg"&gt;Google Spreadsheet&lt;/a&gt;.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;span style="font-weight: bold;"&gt;Why?&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Unless you pay £28.75 per month to Amazon Books to become a professional seller, you don't get the facility to import from a spreadsheet. This iMacro code does exactly that, &lt;span style="color: rgb(0, 102, 0);"&gt;for free&lt;/span&gt;, though it is of course intended for smallish quantities (in practice I'm normally adding less than 6 books at a time and have less than 20 books up for sale).&lt;br /&gt;Having recently realized that the handful of books I was trying to sell had not only all expired but had also permanently gone from my closed listings so I had to put them in from scratch, I had the incentive to spend a few hours playing with JavaScript and iMacro to find a decent work around.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;&lt;span style="font-weight: bold;"&gt;Known Bugs&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;When I have more than 20 books the last ones on the list are ignored as already listed, probably due to export limitations with iMacro. My work around is to list new books at the top of the spreadsheet and it will work fine. You could also cut and paste previously listed books into a second page of the spreadsheet and keep the front page for new books to be listed.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;button id="ToggleAmazonListerSource" onclick="document.getElementById('AmazonListerSource').style.display=''; document.getElementById('ToggleAmazonListerSource').style.display='none'"&gt;Show source code&lt;/button&gt;&lt;span id="AmazonListerSource" style="display: none;"&gt;&lt;button onclick="document.getElementById('AmazonListerSource').style.display='none'; document.getElementById('ToggleAmazonListerSource').style.display=''"&gt;Hide source code&lt;/button&gt;&lt;br /&gt;&lt;pre    style="padding: 0.15cm; background: lightyellow none repeat scroll 0% 50%; line-height: 100%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0cm; margin-right: 0cm;font-family:Tahoma;font-size:8pt;color:black;"&gt;&lt;br /&gt;&lt;span style="color:darkgreen;"&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;/*****************************************************************************&lt;br /&gt;Title: &lt;u&gt;&lt;b&gt;AMAZON BOOK LIST IMPORT FROM GOOGLE SPREADSHEET&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Created: 15 May 2008&lt;br /&gt;Last Edit: 17 May 2008&lt;br /&gt;Author:  UserOffline.blogspot.com&lt;br /&gt;If you find this script useful, blog me back.&lt;br /&gt;&lt;br /&gt;Description:&lt;br /&gt;This iMacro script reads data from a Google spreadsheet of books and then&lt;br /&gt;writes all those (marked as unlisted) to Amazon. Progress is highlighted&lt;br /&gt;in a pop-up window.&lt;br /&gt;The google spreadsheet has data for:&lt;br /&gt;[0] ISBN,&lt;br /&gt;[1] Title (for convenience only, not used),&lt;br /&gt;[2] Condition,&lt;br /&gt;[3] Comments,&lt;br /&gt;[4] Price,&lt;br /&gt;[5] Listed (Yes/No).&lt;br /&gt;This script is particularly handy for managing books taking longer than&lt;br /&gt;Amazon's 60 day listing expiry to sell.&lt;br /&gt;&lt;br /&gt;Assumptions:&lt;br /&gt;1. Google spreadsheet published and the URL GOTO command below points to it.&lt;br /&gt;Note by publishing your spreadsheet, in theory anyone could read it; if&lt;br /&gt;they can find it. As there is no personal data apart from the price you&lt;br /&gt;set for the books (which is published on your Amazon listing) this creates&lt;br /&gt;no privacy risk that I can think of apart from someone associating your&lt;br /&gt;Amazon trading name with your Google account name. If you consider this a&lt;br /&gt;risk I suggest you create a new (free) Google account for this purpose.&lt;br /&gt;2. You are logged in to your Amazon account.&lt;br /&gt;3. You don't use Firefox while it is running.&lt;br /&gt;Note run time is about 25s/book but this includes pauses so you can see&lt;br /&gt;what is going on, remove these to save another 5 to 10 seconds.&lt;br /&gt;4. You have iMacro (it's free) installed with Firefox.&lt;br /&gt;5. This script does not remove listings from Amazon, so if you want to change&lt;br /&gt;a listing do it by hand or delete the old one and use this script to create&lt;br /&gt;it again.&lt;br /&gt;&lt;br /&gt;Version History:&lt;br /&gt;17 May Changed ISBN recognition to recognize ASINs as well.&lt;br /&gt;******************************************************************************/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;//&lt;u&gt;&lt;b&gt;Define functions&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;function writeResults(s){top.results.document.write(s)}&lt;br /&gt;function showTime(d){&lt;br /&gt;var myS=parseInt((d.valueOf()-startDate.valueOf())/1000);&lt;br /&gt;return parseInt(myS/60)+" minutes "+(myS % 60)+" seconds";&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;/* Pad number with zeros */&lt;/span&gt;&lt;br /&gt;function pad(number, length){&lt;br /&gt;var str=""+number;&lt;br /&gt;while(str.length&amp;lt;length){str = "0"+str}&lt;br /&gt;return str;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;/* Make a string iMacro command compliant */&lt;/span&gt;&lt;br /&gt;function safe(str){&lt;br /&gt;return str.replace(/\s/g,"&amp;lt;SP&gt;").replace(/\n/g,"&amp;lt;BR&gt;");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&lt;u&gt;&lt;b&gt;Open progress window&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;top.results=window.open( "", "myWindow", "menubar=1,resizable=1,status=1,\&lt;br /&gt;width=300,height=450,scrollbars=1,left=10,top=500");&lt;br /&gt;writeResults("&amp;lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \&lt;br /&gt;\"http://www.w3.org/TR/html4/strict.dtd\"&gt;\&lt;br /&gt;&amp;lt;html&gt;&amp;lt;head&gt;&amp;lt;title&gt;Amazon book lister&amp;lt;/title&gt;&amp;lt;/head&gt;\n\&lt;br /&gt;&amp;lt;body bgcolor=lightyellow&gt;\n\&lt;br /&gt;&amp;lt;font face='Tahoma, Arial' size=1&gt;\n\n");&lt;br /&gt;&lt;br /&gt;//&lt;u&gt;&lt;b&gt;Variables&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;var cr="\n", i, j, startDate=new Date();&lt;br /&gt;var books=new Array();  // 2 dim array for book data&lt;br /&gt;var booksHTML=new Array(); // HTML rows from spreadsheet&lt;br /&gt;&lt;br /&gt;//&lt;u&gt;&lt;b&gt;Get table of books and extract to booksHTML array&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;iimPlay("CODE:\&lt;br /&gt;URL GOTO=http://spreadsheets.google.com/pub?\&lt;br /&gt;&lt;span style="color:red;"&gt;*Your Google URL to a published spreadsheet goes here*&lt;/span&gt;\n\&lt;br /&gt;TAG POS=3 TYPE=TABLE EXTRACT=HTML");&lt;br /&gt;booksHTML=iimGetLastExtract(1).split("&amp;lt;tr");&lt;br /&gt;j=0;&lt;br /&gt;for(i in booksHTML){&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;/* check for ASIN/ISBN of 10+ digits or uppercase letters */&lt;/span&gt;&lt;br /&gt;if(booksHTML[i].search(/[\dA-Z]{10}/)&gt;-1){&lt;br /&gt;books[j]=booksHTML[i].split("&amp;lt;td");&lt;br /&gt;j++;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;/* Note - I started off using &amp;lt;/td to split the rows, which worked initially&lt;br /&gt;but Google appears inconsistent in use of &amp;lt;/td&gt; as the next time I used it,&lt;br /&gt;the &amp;lt;/td&gt; tags were sloppily not included in the web page source. */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;//&lt;u&gt;&lt;b&gt;Tidy books array&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;for(i in books){&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;/* remove first chopped HTML tag (using "||" as a covenient marker) */&lt;/span&gt;&lt;br /&gt;books[i]=books[i].join("||").replace(/\|[^\|&amp;lt;&gt;]*&gt;/g,"|").split("||");&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;/* drop first two elements as google spreadsheet chaff */&lt;/span&gt;&lt;br /&gt;books[i].splice(0,2);&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;/* remove any leftover full HTML tag */&lt;/span&gt;&lt;br /&gt;books[i]=books[i].join("||").replace(/&amp;lt;[^&gt;&amp;lt;\|]*&gt;/g,"").split("||");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&lt;u&gt;&lt;b&gt;Display and put details on Amazon&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;for(i in books){&lt;br /&gt;if(books[i][5].search(/No/ig)&gt;-1){&lt;br /&gt;writeResults("&amp;lt;br&gt;");&lt;br /&gt;for(j in Array(0,1,2,3,4)){&lt;br /&gt;writeResults(books[i][j]+"&amp;lt;br&gt;\n");&lt;br /&gt;}&lt;br /&gt;iimPlay("CODE:\&lt;br /&gt;URL GOTO=http://www.amazon.co.uk/gp/seller-account/management/your-account.html\n\&lt;br /&gt;TAG POS=1 TYPE=A ATTR=ID:ListSingleItemsLink&amp;amp;&amp;amp;TXT:List&amp;lt;SP&gt;single&amp;lt;SP&gt;items\n\&lt;br /&gt;'** ISBN **\n\&lt;br /&gt;TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:*asin CONTENT="+&lt;br /&gt;books[i][0]+"\n\&lt;br /&gt;WAIT SECONDS=1\n\&lt;br /&gt;TAG POS=1 TYPE=INPUT:IMAGE ATTR=ID:*asin.submit\n\&lt;br /&gt;'** Condition and comments **\n\&lt;br /&gt;TAG POS=1 TYPE=SELECT ATTR=NAME:*condition-type CONTENT=$"+&lt;br /&gt;safe(books[i][2])+"\n\&lt;br /&gt;TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:*condition-comments CONTENT="+&lt;br /&gt;safe(books[i][3])+"\n\&lt;br /&gt;WAIT SECONDS=1\n\&lt;br /&gt;TAG POS=1 TYPE=INPUT:IMAGE\n\&lt;br /&gt;'** Price **\n\&lt;br /&gt;TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:selling-asking-price CONTENT="+&lt;br /&gt;books[i][4].replace(/[^\d\.]/g,"")+"\n\&lt;br /&gt;TAG POS=1 TYPE=INPUT:RADIO ATTR=VALUE:will-ship-to-united-states\n\&lt;br /&gt;WAIT SECONDS=1\n\&lt;br /&gt;TAG POS=1 TYPE=INPUT:IMAGE FORM=ACTION:/exec/varzea/sdp/sai-confirm*\n\&lt;br /&gt;'** Final visual check **\n\&lt;br /&gt;WAIT SECONDS=6\n\&lt;br /&gt;TAG POS=2 TYPE=INPUT:IMAGE FORM=ACTION:/exec/varzea/sdp/sai-thank-you*\n\&lt;br /&gt;");&lt;br /&gt;writeResults("&amp;lt;span style='color:red;font-weight:bold'&gt;[Book "+i+&lt;br /&gt;" now listed on Amazon]&amp;lt;/span&gt;&amp;lt;br&gt;\n")&lt;br /&gt;}else{&lt;br /&gt;writeResults("&amp;lt;span style='color:green'&gt;"+("[Book "+i+&lt;br /&gt;" is already listed]&amp;lt;/span&gt;").replace(/\s/g,"&amp;amp;nbsp;")+" \n")&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&lt;u&gt;&lt;b&gt;Close down&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;var endDate=new Date();&lt;br /&gt;writeResults('\n&amp;lt;p&gt;Run time '+showTime(endDate)+"."+cr+&lt;br /&gt;"&amp;lt;br&gt;For more information see &amp;lt;a href='http://useroffline.blogspot.com'&gt;\&lt;br /&gt;UserOffline&amp;lt;/a&gt; blog.\n&amp;lt;/font&gt;\n&amp;lt;/body&gt;\n&amp;lt;/html&gt;");&lt;br /&gt;top.results.document.close();&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;/* Could close when finished with top.results.window.close(); */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// END&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-4554935735641393471?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/4554935735641393471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=4554935735641393471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/4554935735641393471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/4554935735641393471'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/05/using-imacro-to-re-list-books-on-amazon.html' title='Re-list books on Amazon using iMacro'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-3556454480269985896</id><published>2008-05-18T23:28:00.009+01:00</published><updated>2008-09-09T12:05:39.995+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iMacro'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Spreadsheets'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Documents'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><title type='text'>How to add a book title from an ISBN or ASIN in a Google spreadsheet</title><content type='html'>Having recently created an iMacro to import books from Google spreadsheet to Amazon, I realized that the formula I was re-using to automatically put in the book title was quite a neat feature of Google docs that most people are probably unaware of.&lt;br /&gt;&lt;br /&gt;I use the &lt;span style="font-weight: bold;"&gt;importXML&lt;/span&gt; function. This finds data based on an HTML tag in any webpage and you can create that source webpage name as a formula. This gives a really neat way of cribbing data about a book straight from it's Amazon webpage to be used on your own spreadsheet (also known as website scraping).&lt;br /&gt;&lt;br /&gt;Here's my example formula (assuming the ISBN or ASIN is at cell A1), read this as one line:&lt;br /&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;=importXML( concatenate( "http://www.amazon.co.uk/exec/obidos/ASIN/", A1), "//&lt;span style="color: rgb(0, 0, 153);"&gt;span&lt;/span&gt;[@&lt;span style="color: rgb(0, 102, 0);"&gt;id&lt;/span&gt;='&lt;span style="color: rgb(51, 0, 51);"&gt;btAsinTitle&lt;/span&gt;']")&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;By looking at the webpage source code for any Amazon book you can find HTML tags around all of the product data. In this case the HTML tag &lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;&amp;lt;span&gt;&lt;/span&gt; with the&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;ID&lt;/span&gt; attribute set to "&lt;span style="color: rgb(51, 0, 51); font-weight: bold;"&gt;btAsinTitle&lt;/span&gt;" surrounds the book title. If you wanted to grab data on the number of pages, publisher or even lowest second hand price, this is all possible in a similar manner.&lt;br /&gt;&lt;br /&gt;I have also created neat formulas to grab best match full film title and release date from IMDB.com as a search sheet to support my DVD index so I can quickly cut &amp;amp; paste details based on typing in key words from the film title.&lt;br /&gt;&lt;br /&gt;The only limitation is there is a maximum of 50 such formulas in any spreadsheet. However if you are building a catalogue or sales list, it is a fairly simple matter to cut &amp;amp; paste the values over the formulas for books or DVDs already indexed so only new entries use the formula.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-3556454480269985896?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/3556454480269985896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=3556454480269985896' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/3556454480269985896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/3556454480269985896'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/05/tip-how-to-automatically-add-book-title.html' title='How to add a book title from an ISBN or ASIN in a Google spreadsheet'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-8598929531733649325</id><published>2008-04-27T12:45:00.029+01:00</published><updated>2008-05-01T17:42:01.440+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='iMacro'/><category scheme='http://www.blogger.com/atom/ns#' term='Virgin Trains'/><category scheme='http://www.blogger.com/atom/ns#' term='timetable'/><category scheme='http://www.blogger.com/atom/ns#' term='scraping'/><category scheme='http://www.blogger.com/atom/ns#' term='cheap train tickets'/><title type='text'>How to find the cheapest train tickets by website scraping</title><content type='html'>One of my niggles with train timetable websites is that it can be very tricky to find the cheapest train ticket if you want to ask questions like &lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;"What is the cheapest ticket if I could travel on Sunday, Monday or Tuesday next month?"&lt;/span&gt; or even worse &lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;"What would be the cheapest 1st class ticket if can travel any weekend in June?"&lt;/span&gt;. If you phone up a train hotline they would probably give up (and you are normally paying 10p/min while they try) or they would guess and might miss the best deal.&lt;br /&gt;&lt;br /&gt;My solution was to use &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3863"&gt;iMacro&lt;/a&gt;. This is a macro recording plugin for Firefox that can automate interactions with a website. I can now set up an initial script and set the browser to look for the cheapest possible ticket.&lt;br /&gt;&lt;br /&gt;For example, below are the results for London to Nottingham travelling in the mornings (9am to 1pm) from 3rd to 5th May searching for the cheapest direct train ticket in any 2 hour slot. It took 20 seconds to configure the script &lt;span style="font-style: italic;"&gt;(after taking a day to develop it)&lt;/span&gt; and my computer took 5 minutes to run the search as it has to enter data on the timetable website 12 times (3 days x 2 time slots x two classes of travel) and wait each time for the website to refresh with new data. I chose the Virgin Trains website as it seemed to have quite a nice interface which made it easy to pick the first radio button to find the cheapest ticket and seemed to return the most comprehensive results (I kept finding discrepancies on other sites, which surprised me as I assumed they shared the same underlying data).&lt;br /&gt;&lt;span style="line-height: 90%;color:black;" &gt;&lt;pre id="1day" style="padding: 0.25cm; background: lightyellow none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 1cm; margin-right: 0.5cm;"&gt;Results for London to Nottingham &lt;span onclick="document.getElementById('7day').style.display=''; document.getElementById('1day').style.display='none'" style="font-family:Tahoma;font-size:8;"  &gt;&lt;br /&gt;&lt;b&gt;[click to show longer example]&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Searched on Sun, 27 Apr 2008 12:44:50 GMT&lt;br /&gt;&lt;br /&gt;Saturday  3 May 2008&lt;br /&gt;Slot  | Time  |   Std   | Time  |   1st&lt;br /&gt;09:00 | 08:55 | £ 15.00 | 08:55 | £ 18.00&lt;br /&gt;11:00 | 12:55 | £ 15.00 | 11:55 | £ 18.00&lt;br /&gt;&lt;br /&gt;Sunday  4 May 2008&lt;br /&gt;Slot  | Time  |   Std   | Time  |   1st&lt;br /&gt;09:00 | 09:00 | £ 15.00 | 09:00 | £ 18.00&lt;br /&gt;11:00 | 11:00 | £ 15.00 | 11:00 | £ 18.00&lt;br /&gt;&lt;br /&gt;Monday  5 May 2008&lt;br /&gt;Slot  | Time  |   Std   | Time  |   1st&lt;br /&gt;09:00 | 08:55 | £ 11.00 | 08:55 | £ 18.00&lt;br /&gt;11:00 | 10:55 | £ 11.00 | 10:55 | £ 18.00&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;pre id="7day"  style="display: none;color:black;"&gt;London to Nottingham &lt;span onclick="document.getElementById('1day').style.display=''; document.getElementById('7day').style.display='none'" style="font-family:Tahoma;font-size:7;"  &gt;&lt;br /&gt;&lt;b&gt;[click to show shorter example]&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3&gt;London to Nottingham&lt;/h3&gt;Virgin Trains Wed, 30 Apr 2008 23:26:26 GMT&lt;p&gt;&lt;table class="results" bgcolor="lightyellow" cellpadding="4"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Thursday 1 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 30.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 30.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 30.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 30.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 49.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 86.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 49.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 86.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 49.00&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 86.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;19:30&lt;/td&gt;&lt;td&gt;£ 49.00&lt;/td&gt;&lt;td&gt;17:55&lt;/td&gt;&lt;td&gt;£ 86.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Friday 2 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 29.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;10:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;10:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;17:00&lt;/td&gt;&lt;td&gt;£ 45.00&lt;/td&gt;&lt;td&gt;17:00&lt;/td&gt;&lt;td&gt;£ 45.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;17:55&lt;/td&gt;&lt;td&gt;£ 45.00&lt;/td&gt;&lt;td&gt;17:55&lt;/td&gt;&lt;td&gt;£ 45.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Saturday 3 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;07:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;07:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;12:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;12:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;14:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;17:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;17:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Sunday 4 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:00&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;09:00&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;10:00&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;10:00&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;12:00&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;12:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;14:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;14:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;16:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;16:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;21:00&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;20:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Monday 5 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;07:55&lt;/td&gt;&lt;td&gt;£ 11.00&lt;/td&gt;&lt;td&gt;07:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;12:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;12:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 29.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;17:45&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;17:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;19:30&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Tuesday 6 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;£    &lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 49.00&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 86.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 29.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Wednesday 7 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 29.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 49.00&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 86.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 29.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Thursday 8 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 29.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 49.00&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 86.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 29.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Friday 9 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 11.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 11.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;17:00&lt;/td&gt;&lt;td&gt;£ 45.00&lt;/td&gt;&lt;td&gt;17:00&lt;/td&gt;&lt;td&gt;£ 45.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 40.00&lt;/td&gt;&lt;td&gt;17:55&lt;/td&gt;&lt;td&gt;£ 45.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Saturday 10 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;07:55&lt;/td&gt;&lt;td&gt;£  9.00&lt;/td&gt;&lt;td&gt;07:55&lt;/td&gt;&lt;td&gt;£ 14.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 14.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 14.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;12:55&lt;/td&gt;&lt;td&gt;£ 11.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 14.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 11.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 14.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;17:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;17:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Sunday 11 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:00&lt;/td&gt;&lt;td&gt;£ 11.00&lt;/td&gt;&lt;td&gt;09:00&lt;/td&gt;&lt;td&gt;£ 14.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;10:00&lt;/td&gt;&lt;td&gt;£ 11.00&lt;/td&gt;&lt;td&gt;10:00&lt;/td&gt;&lt;td&gt;£ 14.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;12:00&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;12:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;14:00&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;14:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;16:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;td&gt;16:00&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;21:00&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;21:00&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Monday 12 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£  9.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£  9.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 49.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 40.00&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 64.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 29.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Tuesday 13 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£  9.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£  9.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£  9.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 40.00&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 64.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 29.00&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="5" bgcolor="lightgreen"&gt;Wednesday 14 May 2008&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;Slot&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Std&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;Time&lt;/td&gt;&lt;td bgcolor="lightgreen"&gt;1st&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;08&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£  9.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;10&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£  9.00&lt;/td&gt;&lt;td&gt;09:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;12&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£  9.00&lt;/td&gt;&lt;td&gt;11:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;14&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 15.00&lt;/td&gt;&lt;td&gt;13:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;16&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 40.00&lt;/td&gt;&lt;td&gt;15:55&lt;/td&gt;&lt;td&gt;£ 64.00&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td bgcolor="lightgreen"&gt;18&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 18.00&lt;/td&gt;&lt;td&gt;19:55&lt;/td&gt;&lt;td&gt;£ 22.00&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Search time 142 minutes 27 seconds&lt;/p&gt;&lt;/pre&gt;I have tested with very long queries taking more than an hour to run and the only problem may be time-outs from the website. In these cases iMacro appears to lock but by pressing the Pause/Resume button will continue without losing data. Note it is best not to use the browser when running an iMacro script but I have successfully used a different browser (Safari) at the same time without any problems.&lt;br /&gt;&lt;br /&gt;The macro is run from a javascript file in iMacro which calls iMacro commands (previously I passed variables to an iim file but it seems easier to put it all in one file) and I tweak the "Set up query" section of the javascript to query a particular train route, this could easily be set from user prompts. For the time being it is always cheapest to get two singles rather than a return so I've only bothered writing the macro for a single. Note that the slot hours (set in array myhour) are based on the maximum number of hours that Virgin trains will display in the particular train route. For London/Nottingham this is 2 hours and for London/Redruth this is 3 hours. Nice bonus functionality I've included are returning the date in long text form from the Virgin site and keeping the iMacro code display updated telling you the estimated time left.&lt;br /&gt;&lt;br /&gt;The latest version opens a results window to show the data in an html table. You can use &lt;span style="font-style: italic;"&gt;iimDisplay()&lt;/span&gt; but it is limited to a tiny window and was (at the time of writing) not  resizeable by scripting.&lt;br /&gt;&lt;br /&gt;Here's the source code. Note that the source code is not word wrapped and long lines may appear truncated, but if you cut &amp;amp; paste to your editor you should see all the text.&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:'Tahoma';font-size:100%;color:darkgreen;"   &gt;JavaScript source code &lt;span id="clickoff1"&gt;&lt;span style="font-weight: bold;" onclick="document.getElementById('source1').style.display='';document.getElementById('clickon1').style.display='';document.getElementById('clickoff1').style.display='none';"&gt;Virgin-Trains.js&lt;/span&gt;  (click to show)&lt;/span&gt;&lt;span id="clickon1" style="display: none;"&gt;&lt;span style="font-weight: bold;" onclick="document.getElementById('source1').style.display='none';document.getElementById('clickon1').style.display='none';document.getElementById('clickoff1').style.display='';"&gt;Virgin-Trains.js&lt;/span&gt; (click to hide)&lt;/span&gt;&lt;br /&gt;&lt;span id="source1" style="display: none;"&gt;&lt;pre style="padding: 0.5cm; background: lightyellow none repeat scroll 0% 50%; font-family: 'Tahoma'; font-size: 78%; color: darkgreen; line-height: 110%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;// Set up query&lt;br /&gt;&lt;br /&gt;var myfirstday=10;&lt;br /&gt;var mynodays=3;&lt;br /&gt;var mymonth="05";&lt;br /&gt;var myleaving="London";&lt;br /&gt;var mygoing="Nottingham";&lt;br /&gt;var myhour = new Array("09","11");&lt;br /&gt;  /* Every 2 hours for Nottingham trains as they are every 30 mins */&lt;br /&gt;&lt;br /&gt;/** No need to edit below this line if you only want to configure the query **&lt;br /&gt;/************************************************************************************&lt;br /&gt;  Author: http://useroffline.blogspot.com&lt;br /&gt;  Created: 28 April 2008&lt;br /&gt;  Last Edit: 1 May 2008&lt;br /&gt;  Title: iMacro Virgin Trains timetable search&lt;br /&gt;&lt;br /&gt;  Description:&lt;br /&gt;  Fills out query form on Virgin Trains timetable website (covers all UK timetables)&lt;br /&gt;  and extracts the cheapest standard and first class ticket prices and times in any&lt;br /&gt;  timeslot (normally two or three hour slots depending on what the timetables look&lt;br /&gt;  like from Virgin for the particular route).&lt;br /&gt;  Results are displayed in a new browser window in an html table which is written to&lt;br /&gt;  as the search completes each calendar day.&lt;br /&gt;&lt;br /&gt;  Assumptions:&lt;br /&gt;  1. Virgin trains site has no technical difficulties&lt;br /&gt;  2. iMacro has 'view Javascript while running' option set to off (for better speed)&lt;br /&gt;  3. Infrequent usage to avoid IP blocking by Virgin&lt;br /&gt;  4. Browser will not be used for anything else while running the macro&lt;br /&gt;  5. Route does not use the new timetable layout (Virgin is upgrading layout)&lt;br /&gt;&lt;br /&gt;  Suggestions for improvement:&lt;br /&gt;  o Add link to each train in results table to live timetable page (probably not&lt;br /&gt;    Virgin)&lt;br /&gt;************************************************************************************/&lt;br /&gt;&lt;br /&gt;// Open results window&lt;br /&gt;&lt;br /&gt;var cr = "\r\n";&lt;br /&gt;top.results=window.open( "", "myWindow", "menubar=1,resizable=1,status=1,width=500,height=600,scrollbars=1");&lt;br /&gt;top.results.document.write("&amp;lt;html&amp;gt;&amp;lt;title&amp;gt;Train Timetable search results&amp;lt;/title&amp;gt;&amp;lt;head&amp;gt;"+cr+&lt;br /&gt;  "&amp;lt;style&amp;gt;td {border-width:thin;border-color:black;-moz-border-radius: 8px 8px 8px 8px;}"+cr+&lt;br /&gt;  "&amp;lt;/style&amp;gt;&amp;lt;/head&amp;gt;"+cr+&lt;br /&gt;  "&amp;lt;body bgcolor=lightgreen style='font-family:Tahoma, Arial;'&amp;gt;");&lt;br /&gt;top.results.window.status="Initializing, time to make a cup of tea.";&lt;br /&gt;&lt;br /&gt;// Variables&lt;br /&gt;&lt;br /&gt;var c=0, j, price=" na ", count=0, mytime=" na ", longdate=" na ", pArr=new Array();&lt;br /&gt;var classArr=new Array("Std","1st");&lt;br /&gt;var startDate=new Date();&lt;br /&gt;var ret=cr+"&amp;lt;h3&amp;gt;"+myleaving+" to "+mygoing+"&amp;lt;/h3&amp;gt;"+cr+"&amp;lt;br&amp;gt;Virgin Trains "+startDate.toGMTString()+"&amp;lt;p&amp;gt;"+cr;&lt;br /&gt;var retTemp, runTimeM, runTimeS, runTimeMS, timeLeftS, timeLeftM, loopTime;&lt;br /&gt;var mydate = new Array;&lt;br /&gt;&lt;br /&gt;// Pad dates ("1" becomes "01")&lt;br /&gt;&lt;br /&gt;var i;&lt;br /&gt;for (i=0;i &amp;lt; mynodays;i++) {&lt;br /&gt;  mydate[i]=(myfirstday+i).toString();&lt;br /&gt;  if (mydate[i].length &amp;lt; 2) { mydate[i]='0'+mydate[i] }&lt;br /&gt;  }&lt;br /&gt;var loopTotal=mydate.length*myhour.length*2;&lt;br /&gt;&lt;br /&gt;// Initialize to avoid timeout errors&lt;br /&gt;&lt;br /&gt;iimPlay("CODE:URL GOTO=http://www.virgintrains.co.uk");&lt;br /&gt;&lt;br /&gt;// Main loop&lt;br /&gt;&lt;br /&gt;ret+="&amp;lt;table class='results' bgcolor=lightyellow cellpadding=4&amp;gt;";&lt;br /&gt;top.results.document.write(ret);&lt;br /&gt;ret="";&lt;br /&gt;&lt;br /&gt;/* Static parts of the code */&lt;br /&gt;pArr[1]="URL GOTO=http://www.virgintrains.co.uk/default.aspx";&lt;br /&gt;pArr[7]="TAG POS=1 TYPE=SELECT FORM=NAME:qtt ATTR=NAME:outMinuteField CONTENT=$00"+cr+&lt;br /&gt;    "TAG POS=1 TYPE=INPUT:IMAGE FORM=NAME:qtt ATTR=ID:_ctl15_findTimes";&lt;br /&gt;pArr[9]="TAG POS=1 TYPE=INPUT:RADIO FORM=NAME:Form ATTR=ID:*ServiceTypeRadioButtons_1"+cr+&lt;br /&gt;    /* ServiceType 1 = direct trains only, 0 = Any train */&lt;br /&gt;    "TAG POS=1 TYPE=INPUT:IMAGE FORM=NAME:Form ATTR=ALT:Check&amp;lt;SP&amp;gt;availability"+cr+&lt;br /&gt;    "TAG POS=1 TYPE=INPUT:RADIO EXTRACT=TXT"+cr+&lt;br /&gt;    "TAG POS=1 TYPE=TD ATTR=CLASS:tableCell EXTRACT=TXT"+cr+&lt;br /&gt;    "TAG POS=2 TYPE=TD ATTR=CLASS:tableCell EXTRACT=TXT"+cr+&lt;br /&gt;    "TAG POS=3 TYPE=TD ATTR=CLASS:tableCell EXTRACT=TXT"+cr+&lt;br /&gt;    "TAG POS=4 TYPE=TD ATTR=CLASS:tableCell EXTRACT=TXT"+cr+&lt;br /&gt;    "TAG POS=5 TYPE=TD ATTR=CLASS:tableCell EXTRACT=TXT"+cr+&lt;br /&gt;    "TAG POS=1 TYPE=TD ATTR=CLASS:tableTitle EXTRACT=HTM"+cr+&lt;br /&gt;    "WAIT SECONDS=4";  // Could help to avoid lock-up?&lt;br /&gt;&lt;br /&gt;for (j in mydate) {&lt;br /&gt;  retTemp='&amp;lt;tr align=center &amp;gt;&amp;lt;td bgcolor=lightgreen &amp;gt;Slot&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=lightgreen &amp;gt;Time&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=lightgreen &amp;gt;Std&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=lightgreen &amp;gt;Time&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=lightgreen &amp;gt;1st&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;';&lt;br /&gt;  for (i in myhour) {&lt;br /&gt;  retTemp+='&amp;lt;tr align=center &amp;gt;&amp;lt;td bgcolor=lightgreen &amp;gt;'+myhour[i]+'&amp;lt;/td&amp;gt;';&lt;br /&gt;  for (c=0;c &amp;lt; 2;c++) {&lt;br /&gt;    count++;&lt;br /&gt;    /* Estimate time left */&lt;br /&gt;    var now = new Date();&lt;br /&gt;    runTimeMS=now.valueOf()-startDate.valueOf();&lt;br /&gt;    runTimeS=parseInt(runTimeMS/1000);&lt;br /&gt;    runTimeM=parseInt(runTimeS/60);&lt;br /&gt;    runTimeS %=60;&lt;br /&gt;    loopTime=runTimeMS/count;&lt;br /&gt;    timeLeftS=parseInt((loopTotal+1-count)*loopTime/1000);&lt;br /&gt;    timeLeftM=parseInt(timeLeftS/60);&lt;br /&gt;    timeLeftS %=60;&lt;br /&gt;    /* Results window status bar feedback */&lt;br /&gt;    top.results.window.status = "Loop "+count+" of "+loopTotal+&lt;br /&gt;    " [Last result "+longdate+" @ "+mytime+", "+classArr[1-c]+" = £"+price.replace(/ /g,"")+"]";&lt;br /&gt;    /* Run iMacro */&lt;br /&gt;    pArr[0]="CODE:"+"' "+runTimeM+" minutes "+runTimeS+" seconds current run time"+cr+&lt;br /&gt;        "' "+timeLeftM+" minutes "+timeLeftS+" seconds estimate to complete";&lt;br /&gt;    pArr[2]="TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:qtt ATTR=ID:idLeaving CONTENT="+myleaving;&lt;br /&gt;    pArr[3]="TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:qtt ATTR=ID:idGoing CONTENT="+mygoing;&lt;br /&gt;    pArr[4]="TAG POS=1 TYPE=SELECT FORM=NAME:qtt ATTR=NAME:outDay CONTENT=$"+mydate[j];&lt;br /&gt;    pArr[5]="TAG POS=1 TYPE=SELECT FORM=NAME:qtt ATTR=NAME:outMth CONTENT=$"+mymonth;&lt;br /&gt;    pArr[6]="TAG POS=1 TYPE=SELECT FORM=NAME:qtt ATTR=NAME:outHourField CONTENT=$"+myhour[i];&lt;br /&gt;    pArr[8]="TAG POS=1 TYPE=INPUT:RADIO FORM=NAME:Form ATTR=ID:*TicketClassRadioButtons_"+c.toString();&lt;br /&gt;    iimPlay(pArr.join(cr));&lt;br /&gt;    /* Get long date */&lt;br /&gt;    try {longdate=iimGetLastExtract(7).split('&amp;gt;')[2].replace(/  /g," ")}&lt;br /&gt;    catch (err) {}&lt;br /&gt;    /* Parse train time and price */&lt;br /&gt;    price=iimGetLastExtract(1).substr(5+(iimGetLastExtract(1).substr(4)).search("_"));&lt;br /&gt;    price='    '.substr(1,6-price.length)+price;      // Pad out to 6 characters&lt;br /&gt;    mytime=parseInt(iimGetLastExtract(1).substr(0,1));  // Find the table column number of train time&lt;br /&gt;    mytime=iimGetLastExtract(mytime+1);          // Get time in column header&lt;br /&gt;    retTemp+='&amp;lt;td&amp;gt;'+mytime+'&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;£'+price+'&amp;lt;/td&amp;gt;';&lt;br /&gt;  }  /* end class */&lt;br /&gt;  retTemp+='&amp;lt;/tr&amp;gt;';&lt;br /&gt;  }  /* end hour */&lt;br /&gt;  ret+="&amp;lt;tr&amp;gt;&amp;lt;td colspan=5 bgcolor=lightgreen &amp;gt;"+longdate+'&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;'+retTemp;&lt;br /&gt;  top.results.document.write(ret);&lt;br /&gt;  ret='';&lt;br /&gt;}  /* end date */&lt;br /&gt;&lt;br /&gt;// Calculate total running time&lt;br /&gt;&lt;br /&gt;var endDate=new Date();&lt;br /&gt;var runTimeS=parseInt((endDate.valueOf()-startDate.valueOf())/1000);&lt;br /&gt;var runTimeM=parseInt(runTimeS/60);&lt;br /&gt;runTimeS %=60;&lt;br /&gt;ret+='&amp;lt;/table&amp;gt;'+cr+'&amp;lt;p&amp;gt;Search time '+runTimeM+' minutes '+runTimeS+' seconds';&lt;br /&gt;ret+=cr+"&amp;lt;br&amp;gt;Created by &amp;lt;a href='http://useroffline.blogspot.com' title='Author details'&amp;gt;UserOffline&amp;lt;/a&amp;gt; 2008";&lt;br /&gt;&lt;br /&gt;// Display Results&lt;br /&gt;&lt;br /&gt;top.results.window.status="Finished";&lt;br /&gt;top.results.document.write(ret+cr+"&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;");&lt;br /&gt;top.results.document.close();&lt;/pre&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/1334225864115795639-8598929531733649325?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/8598929531733649325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=8598929531733649325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8598929531733649325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/8598929531733649325'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/04/finding-cheapest-train-tickets-by.html' title='How to find the cheapest train tickets by website scraping'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-7103413947548194987</id><published>2008-04-14T09:11:00.017+01:00</published><updated>2008-09-09T12:05:00.326+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='k750i'/><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><title type='text'>How to use free GPS on a K750i mobile phone</title><content type='html'>&lt;div style="float: right; font-size: 7pt; margin-left: 15px; margin-bottom: 15px;"&gt;&lt;a href="http://www.flickr.com/photos/betacells/2412489503/"&gt;&lt;img src="http://farm4.static.flickr.com/3087/2412489503_669a2b2d7d_m.jpg" height="120" width="96" /&gt;&lt;br /&gt;Google high level map&lt;/a&gt;&lt;/div&gt;Last year I bought a tiny bluetooth GPS device off ebay for £20. I set up my laptop with it and we managed to drive around Germany using a copy of Autoroute showing our planned route, current GPS coordinates and it even shouted helpful instructions such as "turn left in 400 meters"! We planned our route in the hotel the night before and as we are often looking for poorly road-signed ancient sites it is terribly handy to have the confidence of the computer pointing you down an empty track rather than guesswork.&lt;br /&gt;&lt;br /&gt;&lt;div style="float: right; font-size: 7pt; text-align: center; margin-left: 15px; margin-bottom: 15px;"&gt;&lt;a href="http://www.flickr.com/photos/betacells/2413314790/"&gt;&lt;img src="http://farm3.static.flickr.com/2252/2413314790_15232f5dd7_m.jpg" height="120" width="96" /&gt;&lt;br /&gt;Open Street Map&lt;/a&gt;&lt;/div&gt;I did get the GPS recognized by my Sony Ericsson K750i (due to a previous hack it runs using the W800i firmware) and used some trial software to show coordinates but little else. I spent some time yesterday further researching and managed to get it working quite beautifully yesterday.&lt;br /&gt;&lt;br /&gt;The simple free java application is called &lt;a href="http://www.trekbuddy.net/"&gt;TrekBuddy&lt;/a&gt; and it has an associated &lt;a href="http://wiki.trekbuddy.net/"&gt;wiki site&lt;/a&gt;. After connecting to the GPS via bluetooth, the application shows where you are on a scrolling map that you define and store locally on the memory stick. I have it working with an almost A to Z street level map of London (spanning West Hammersmith through to Catford). You can load other maps as you go along so a later improvement would be to install a higher level road map of the UK. In the case of my map of London it was only 2mb in size (I use a 4gb stick!) so it would be no issue to carry around several maps.&lt;br /&gt;&lt;br /&gt;&lt;div style="float: right; font-size: 7pt; text-align: center; margin-left: 15px; margin-bottom: 15px;"&gt;&lt;a href="http://www.flickr.com/photos/betacells/2413314686/"&gt;&lt;img src="http://farm3.static.flickr.com/2079/2413314686_5f1f582933_m.jpg" height="120" width="96" /&gt;&lt;br /&gt;Google low level map&lt;/a&gt;&lt;/div&gt;I had to spend some time tweaking the configuration, in particular the initial location of the maps had to be entered by hand to point to the memory stick (&lt;span style="font-style: italic;"&gt;"file:///E:/other/mapdata/london"&lt;/span&gt;) and it took a while to work out that I needed to tick the option to enable a large atlas in order to display anything. The only other hard part was preparing the map, luckily someone has worked all this out and I imported maps from Open Street Map (setting &lt;span style="font-style: italic;"&gt;default datum&lt;/span&gt; as &lt;span style="font-style: italic;"&gt;WGS 84&lt;/span&gt;) using the &lt;a href="http://wiki.trekbuddy.net/index.php/Maps"&gt;tool listed on the wiki&lt;/a&gt;. I also managed to import using the rather neat &lt;a href="http://gm2tb.awokenmind.de/"&gt;Google Maps to TrekBuddy tool&lt;/a&gt; on the same page. The latter being slightly more limited as to the overall size of map but with the benefits of a better quality street map (just right for a pedestrian map in Central London).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-7103413947548194987?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/7103413947548194987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=7103413947548194987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/7103413947548194987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/7103413947548194987'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/04/free-offline-gps-on-my-sony-ericsson.html' title='How to use free GPS on a K750i mobile phone'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3087/2412489503_669a2b2d7d_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-6383304056655110318</id><published>2008-02-14T23:52:00.008Z</published><updated>2008-02-15T00:39:55.514Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Talktalk'/><title type='text'>Talktalk (Carphone) compromised my password!</title><content type='html'>I had been getting mysterious emails to someone else that I thought was spam nonsense. This morning, after getting a few about membership of the same club, I emailed the club secretary back suggesting they had the wrong email (assuming some sort of typo).&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 120px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Tubular_key.jpg/120px-Tubular_key.jpg" alt="" border="0" /&gt;This afternoon Talktalk Technical Support phoned me to apologise for giving out my password! Over Christmas my email had stopped working and I called to check why and they "reset" my account somehow and I agreed a new default password. I tried logging in afterwards to the online account manager but had lost the password they send you in the post to set up your account and after hanging on the 0870 number for a couple of minutes I gave up and left the password as their default random looking one. It turns out that a new customer in January had been given my email account details and the password as their account. Consequently that customer has been logging into my email account over the last few weeks, probably thinking that email to me was spam and sending email from my address!&lt;br /&gt;&lt;br /&gt;I can't believe that a company can be so cavalier about customer privacy. Needless to say, I've gone online and changed the password again from the new one agreed on the phone.&lt;br /&gt;&lt;br /&gt;Lessons learned:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Never send anything confidential by email unencrypted (at least put a password on a document)&lt;/li&gt;&lt;li&gt;Always change passwords from defaults or if given temporarily to someone else&lt;/li&gt;&lt;li&gt;Stick to more secure mixed numbers and letters passwords of a decent length (8 characters or more), a tool like &lt;a href="http://www.sxipper.com/"&gt;Sxipper&lt;/a&gt; can be helpful if you have to keep switching between accounts&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If it's important then digitally sign it&lt;/li&gt;&lt;li&gt;Expect companies (like Carphone) to give away your details by accident and know who to contact if you think something has been compromised&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-6383304056655110318?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/6383304056655110318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=6383304056655110318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/6383304056655110318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/6383304056655110318'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/02/talktalk-carphone-compromised-my.html' title='Talktalk (Carphone) compromised my password!'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1334225864115795639.post-428420235278400530</id><published>2008-02-12T18:01:00.000Z</published><updated>2008-02-12T15:04:08.448Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac mini'/><category scheme='http://www.blogger.com/atom/ns#' term='migrating'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Machine'/><category scheme='http://www.blogger.com/atom/ns#' term='home network'/><title type='text'>Mac mini - six things they did not tell you about switching from PC to Macintosh</title><content type='html'>Last November, after my PC died for about the 4th time I knew there was something seriously wrong, probably something odd happening with the motherboard. I thought I'd treat myself to something different so I splashed out on a &lt;a href="http://en.wikipedia.org/wiki/Macmini" target="_new"&gt;Mac mini&lt;/a&gt; (Core Duo).&lt;br /&gt;&lt;div  style="background: lightyellow none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 7ex; text-indent: -4ex;font-size:85%;"&gt;&lt;span style="background: lightyellow none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b&gt;Tip:&lt;/b&gt; If you are buying a Mac from Apple, consider the cost of memory upgrades. I would have opted for a 2GB Mac mini rather than the standard 1GB version but they wanted £80 for the privilege. The actual memory cost from &lt;a href="http://www.crucial.com/" target="_new"&gt;Crucial.com&lt;/a&gt; is £32 and when I sold my old memory on eBay for £12 I realized I had saved myself £60!&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Mostly it's worked as promised but the following painful annoyances rather caught me out:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;a href="http://en.wikipedia.org/wiki/Parallels%20Desktop%20for%20Mac" target="_new"&gt;Parallels&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;did not come as standard&lt;/span&gt;&lt;span style="font-size:100%;"&gt;, something I really needed for running some of my old windows applications. My only other option would have been to reserve a major chunk of my hard disk and use dual booting, something that I've had real issues with in the past. I took a trial copy of Parallels and it works fairly well apart from being too slow. In fact so slow that in January I upgraded the memory (to 2GB), though as I'm techie enough to do this myself it was under 30 quid.&lt;/span&gt;&lt;/li&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Webcam did not work&lt;/span&gt;&lt;span style="font-size:100%;"&gt;. This has been a headache. Not only did my Philips USB webcam not work, there are no valid drivers to make it work (I wasted hours trying to get a generic driver to work). Even worse, there are no guarantees that any other cheap camera I can find will actually work. I still don't have a replacement webcam.&lt;/span&gt;&lt;/li&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Scanner did not work&lt;/span&gt;&lt;span style="font-size:100%;"&gt;. I have a rather expensive Fujitsu ScanSnap scanner. Unfortunately there are no drivers that will make it work natively in Leopard. I eventually got it running under Windows 2000 in Parallels, hardly ideal.&lt;/span&gt;&lt;/li&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;a href="http://en.wikipedia.org/wiki/EVE%20Online" target="_new"&gt;EVE Online&lt;/a&gt; does not work&lt;/span&gt;&lt;span style="font-size:100%;"&gt;. I tried out a free account with EVE Online (a well known and popular multi-player game for the Mac), sadly it doesn't run reliably on the Mac mini and freezes up randomly.&lt;/span&gt;&lt;/li&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Can't network with a PC&lt;/span&gt;&lt;span style="font-size:100%;"&gt;. This is particularly annoying. I've been trying for several weeks to get this working. I have worked through inbuilt help and googled for solutions to no avail. I can get my Mac to recognize my home networked PC and even read/write files to its hard disk but not the reverse. I wanted this to work as I'm using a 500GB USB drive as my Time Machine and I've kept space on it for PC backups but as the Mac remains invisible to the PC my archive/backup process is frustratingly manual and I can't share a central file library.&lt;/span&gt;&lt;/li&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Can't use my microphone/headphone&lt;/span&gt;&lt;span style="font-size:100%;"&gt;. This was not made clear in the summary specification and is a really stupid design flaw. The audio-in socket is actually only for digital microphones. This means that my headphone microphones will not work (though confusingly they fit the socket and it took me quite a while to find out this was not some sort of driver problem). Consequently since buying the Mac I have not been able to use Skype, a real problem as I use this as my home office number. I have been searching for a second-hand &lt;a href="http://www.griffintechnology.com/products/imic" target="_new"&gt;iMic&lt;/a&gt; device (they're a bit pricey new), a USB adaptor for microphones, I should be able to find one for under £15. The alternative would have been to get a bluetooth microphone, but I can't bear having yet another device to keep charged up.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1334225864115795639-428420235278400530?l=useroffline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://useroffline.blogspot.com/feeds/428420235278400530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1334225864115795639&amp;postID=428420235278400530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/428420235278400530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1334225864115795639/posts/default/428420235278400530'/><link rel='alternate' type='text/html' href='http://useroffline.blogspot.com/2008/01/mac-mini-what-they-didnt-tell-you-about.html' title='Mac mini - six things they did not tell you about switching from PC to Macintosh'/><author><name>Ashley</name><uri>http://www.blogger.com/profile/01945182156438999841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.bbc.co.uk/threecounties/theatre/2004/06/images/omid_270.jpg'/></author><thr:total>0</thr:total></entry></feed>
