<?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-7024729</id><updated>2011-12-22T22:28:05.468+11:00</updated><category term='cdripper'/><category term='sox'/><category term='podcast'/><category term='javascript'/><category term='gparted'/><category term='led bike light'/><category term='rsync'/><category term='weirdness'/><category term='wine'/><category term='puzzle'/><category term='photos'/><category term='gpsbabel'/><category term='mplayer'/><category term='terra plana evo'/><category term='prolog'/><category term='wget itconversations'/><category term='visualisation'/><category term='awk'/><category term='iphone'/><category term='encoder'/><category term='pc tips'/><category term='python'/><category term='keyboard'/><category term='canvas'/><category term='cron'/><category term='review'/><category term='opera'/><category term='audiobook'/><category term='shoes'/><category term='linux'/><category term='lame'/><category term='id3tag'/><category term='tvout'/><category term='emacs'/><category term='wallpaper'/><category term='abcde'/><category term='backups'/><category term='game'/><category term='minimal'/><category term='bash'/><category term='saucony hattori'/><category term='vibram five fingers'/><category term='gps'/><category term='picaxe'/><category term='merrell trail gloves'/><category term='running'/><category term='filesystem'/><category term='google earth'/><category term='sql'/><category term='food'/><category term='electronics projects'/><category term='mp3'/><category term='fail'/><category term='ubuntu'/><category term='gmail'/><category term='barefoot'/><category term='nvidia'/><title type='text'>Successlessness</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default?start-index=101&amp;max-results=100'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>485</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7024729.post-7093659763646993143</id><published>2011-12-22T20:57:00.005+11:00</published><updated>2011-12-22T22:28:05.485+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barefoot'/><category scheme='http://www.blogger.com/atom/ns#' term='shoes'/><category scheme='http://www.blogger.com/atom/ns#' term='minimal'/><category scheme='http://www.blogger.com/atom/ns#' term='saucony hattori'/><category scheme='http://www.blogger.com/atom/ns#' term='running'/><title type='text'>Saucony Hattori review</title><content type='html'>&lt;p&gt;I've just bought a pair of &lt;a href="http://www.saucony.com/store/SiteController/saucony/productdetails?catId=cat10004&amp;productId=4-106900"&gt;Saucony Hattoris&lt;/a&gt; and they really good!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/-nMDqOd_uO8M/TvL_qqKvP8I/AAAAAAAAAIY/UxerWT3R-V8/s1600/photo.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-nMDqOd_uO8M/TvL_qqKvP8I/AAAAAAAAAIY/UxerWT3R-V8/s400/photo.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5688890387661275074" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;They're minimal, but have a lot more cushioning than Vibrams or the &lt;a href="http://successlessness.blogspot.com/2011/08/terra-plana-evo-review.html"&gt;Evos&lt;/a&gt; since the EVA+ sole is quite soft and about 10mm thick. They're zero-drop and ultra light weight (250g/pair), about half the weight of the Evos and lighter than Vibram Sprints.&lt;/p&gt;
&lt;p&gt;They're a really comfy fit, with no laces they are held on by a tight, thin "lycra" upper. Mine are maybe a little on the small side, so the velcro straps don't do anything useful.&lt;/p&gt;
&lt;p&gt;The tight fitting upper has another advantage that no other shoes I've got come close too: It's virtually impossible to get sand in them, which is great as that's extra annoying when running sock-less.&lt;/p&gt;
&lt;p&gt;Time will tell how the sole wears, but the hard reinforcements are in all the places I usually wear through, so I can't see why they won't last a fair while.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-7093659763646993143?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/7093659763646993143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=7093659763646993143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7093659763646993143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7093659763646993143'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2011/12/saucony-hattori-review.html' title='Saucony Hattori review'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-nMDqOd_uO8M/TvL_qqKvP8I/AAAAAAAAAIY/UxerWT3R-V8/s72-c/photo.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-9194051513680707509</id><published>2011-08-12T12:09:00.002+10:00</published><updated>2011-08-12T12:11:43.858+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><title type='text'>Please unsubscribe me from the World Vision newsletter</title><content type='html'>&lt;p&gt;God knows I've tried enough times, maybe posting it to a blog is how you get off the list?&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-Z-dnq-zBLoc/TkSLr231vgI/AAAAAAAAAHw/y99GWcD1VPE/s1600/world-vision-unsubscribe%2521.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 172px;" src="http://3.bp.blogspot.com/-Z-dnq-zBLoc/TkSLr231vgI/AAAAAAAAAHw/y99GWcD1VPE/s320/world-vision-unsubscribe%2521.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5639786218955062786" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-9194051513680707509?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/9194051513680707509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=9194051513680707509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/9194051513680707509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/9194051513680707509'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2011/08/please-unsubscribe-me-from-world-vision.html' title='Please unsubscribe me from the World Vision newsletter'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Z-dnq-zBLoc/TkSLr231vgI/AAAAAAAAAHw/y99GWcD1VPE/s72-c/world-vision-unsubscribe%2521.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-7451522376701094651</id><published>2011-08-07T17:18:00.006+10:00</published><updated>2011-08-07T17:56:27.684+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barefoot'/><category scheme='http://www.blogger.com/atom/ns#' term='shoes'/><category scheme='http://www.blogger.com/atom/ns#' term='vibram five fingers'/><category scheme='http://www.blogger.com/atom/ns#' term='minimal'/><category scheme='http://www.blogger.com/atom/ns#' term='terra plana evo'/><category scheme='http://www.blogger.com/atom/ns#' term='merrell trail gloves'/><category scheme='http://www.blogger.com/atom/ns#' term='running'/><title type='text'>Terra Plana Evo review</title><content type='html'>&lt;p&gt;My Vibrams are worn out (or through) so after having a good experience with the &lt;a href="http://successlessness.blogspot.com/2011/02/merrell-trail-gloves-review.html"&gt;Merrell Trail Gloves&lt;/a&gt; I decided to get a pair of &lt;a href="http://www.vivobarefoot.com/uk/mens/evo-m-8.html/"&gt;Terra Plana Evos&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-3ncBEeMVpgg/Tj5DJ8aVM0I/AAAAAAAAAHo/nIH0XpGHHPs/s1600/IMG_3103.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-3ncBEeMVpgg/Tj5DJ8aVM0I/AAAAAAAAAHo/nIH0XpGHHPs/s320/IMG_3103.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5638017621628891970" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It's a pain to get Vibram FiveFingers in Australia at the moment. They're hard to find in shops, can't be shipped here from the USA and they're about twice the price even though our dollar is currently trading higher than the USD.&lt;/p&gt;
&lt;p&gt;The Evos are more expensive than the Vibrams but a little less "freaky" and provide a similar minimal experience to the Merrells. That is, your toes are free, there's no support or cushioning and you get a fair degree of "ground feel".&lt;/p&gt;
&lt;p&gt;I considered a pair of Merrell True Gloves (the "road" equivalent of the Trail Gloves) but they had too much cushioning for my liking and unlike the Evos, they didn't have removable inner soles.&lt;/p&gt;
&lt;p&gt;I bought them in the black/red style, which was probably not that smart. They contrast too much against my skin and tend to look a bit odd, they're a very small shoe and black emphasises that.&lt;/p&gt;
&lt;p&gt;One thing to note, is that the women's model is identical to the men's, but quite a bit cheaper! Unfortunately they only go up to size 41, but it's something to take advantage of if you have small feet. Speaking of which, the Evos are sized pretty small, the 42 is plenty big enough for me, which is a size or two smaller than my regular shoes.&lt;/p&gt;
&lt;p&gt;The lacing is the same as for the Merrell Trail Gloves, holding snuggly to the middle of the foot and leaving your toes free to splay. They don't lock onto my heel as nicely however and they tend to feel a little loose after running a few kms.&lt;/p&gt;
&lt;p&gt;They are a minimal shoe and still a long way from barefoot, with less ground feel than Vibrams, even wearing them without socks and taking out the inner soles. Still, you feel pebbles and the contrast between concrete, asphalt, gravel, dirt, grass surfaces well enough and it doesn't seem to interfere with my stride. They don't have a lot of grip however and slip pretty easily if it gets muddy. While they'd probably do fine on dry trails, I don't think they feel very suitable for general trail running.&lt;/p&gt;
&lt;p&gt;Not wearing socks did cause some significant rubbing issues however. That was partly due to me jumping straight into 12km runs with them, and I have to resort to prepping with vaseline. It's definitely something to be aware of as they press on different parts of your foot than the Five Fingers do.&lt;/p&gt;
&lt;p&gt;I've done about 85km in them now and they feel good. They don't feel like they'll wear out too quickly, aren't too cold (though our winter has been fairly mild so far), and don't soak up water between the toes like the Five Fingers. They feel like they'll be fine in warmer weather too, the upper is a very thin and breathable mesh.&lt;/p&gt;
&lt;p&gt;Overall, other than the price, they're great and I'd recommend them to any experienced minimalist shoe runners.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-7451522376701094651?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/7451522376701094651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=7451522376701094651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7451522376701094651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7451522376701094651'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2011/08/terra-plana-evo-review.html' title='Terra Plana Evo review'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-3ncBEeMVpgg/Tj5DJ8aVM0I/AAAAAAAAAHo/nIH0XpGHHPs/s72-c/IMG_3103.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-8187714537782479162</id><published>2011-06-22T20:14:00.004+10:00</published><updated>2011-06-22T21:25:57.733+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='puzzle'/><category scheme='http://www.blogger.com/atom/ns#' term='prolog'/><title type='text'>No, wait, that's not right, here's how I really solved it.</title><content type='html'>&lt;p&gt;Yesterday I posted the &lt;a href="http://successlessness.blogspot.com/2011/06/sql-3x3-square-picture-puzzle-solution.html"&gt;solution to a puzzle&lt;/a&gt; in response to &lt;a href="http://multipolygon.com/prolog-3x3-square-picture-puzzle-solution/"&gt;one created by Reilly&lt;/a&gt;.  The solution is fine, but I explained it badly. The explanation just describes the finished code, which is all well and good, but it doesn't elucidate the steps I took to get there and isn't likely to help anyone as a result.&lt;/p&gt;
&lt;p&gt;The following steps are much closer to what I actually did:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1.&lt;/b&gt; While reading &lt;a href="http://multipolygon.com/prolog-3x3-square-picture-puzzle-solution/"&gt;Reilly's Prolog version&lt;/a&gt; I realized that SQL could probably solve the puzzle by generating a list of all the possible combinations of pieces (either by a join or in a temporary table) and then filtering those in some way to remove invalid solutions.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.&lt;/b&gt; I left it at that for a while, but a few thoughts popped into my head during the day on the structure of a "pieces" table and an INSERT statement that could generate the 4 possible rotations of each piece. I also ran the numbers in my head and realized there were 4^9 = 2^18 = 262,144 combinations which is not many at all really.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3.&lt;/b&gt; I initially ran into a bit of a dead end imagining how a SELECT statement would generate all the combinations of pieces, but decided to just start writing it out and see where that led.&lt;/p&gt;
&lt;p&gt;This was the crucial step: &lt;em&gt;Starting with the desired result and working backwards&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;So, I started with what I wanted: A list of piece numbers and rotations in each position of the puzzle:&lt;/p&gt;
&lt;pre&gt;SELECT A.piece_id AS A, A.rotation AS Ar, B.piece_id AS B, B.rotation AS Br, C.piece_id AS C, C.rotation AS Cr,
       D.piece_id AS D, D.rotation AS Dr, E.piece_id AS E, E.rotation AS Er, F.piece_id AS F, F.rotation AS Fr,
       G.piece_id AS G, G.rotation AS Gr, H.piece_id AS H, H.rotation AS Hr, I.piece_id AS I, I.rotation AS Ir&lt;/pre&gt;
&lt;p&gt;Then I started joining tables together to match the constraints of the puzzle (i.e. the animals on the adjacent edges match head-to-tail.) At this point I didn't know what fields were going to be in the table, or what it would be called, so I just made them up so the SELECT statement read nicely. First, I'll show the overall structure and come back to the "matches" bits:&lt;/p&gt;
&lt;pre&gt;FROM rotated_pieces A 
INNER JOIN rotated_pieces B ON -- A.right matches B.left --
INNER JOIN rotated_pieces C ON -- B.right matches C.left --
INNER JOIN rotated_pieces D ON -- A.bottom matches D.top --
INNER JOIN rotated_pieces E ON -- D.right matches E.left AND B.bottom matches E.top --
INNER JOIN rotated_pieces F ON -- E.right matches F.left AND C.bottom matches F.top --
INNER JOIN rotated_pieces G ON -- D.bottom matches G.top --
INNER JOIN rotated_pieces H ON -- G.right matches H.left AND E.bottom matches H.top --
INNER JOIN rotated_pieces I ON -- H.right matches I.left AND F.bottom matches I.top --&lt;/pre&gt;
&lt;p&gt;My "matches" criteria was initially something like:&lt;/p&gt;
&lt;pre&gt;(   (A.right = B.left AND A.right_head = 'head' AND B.left_head = 'tail')
 OR (A.right = B.left AND A.right_head = 'tail' AND B.left_head = 'head'))&lt;/pre&gt;
&lt;p&gt;This makes sure the animals are the same and it's either head-tail or tail-head.&lt;/p&gt;
&lt;p&gt;That seemed like it might work which was a pretty good sign I was on the right track. I wasn't sure how many combinations this would match, so decided to leave a WHERE clause for later. I was hoping this would be a unique solution, or there may be just a couple and I could pick the proper solution out by hand. Either way, that was a problem for later.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4.&lt;/b&gt; From this sketch of a SELECT statement I was able to come up with an appropriate table structure for rotated_pieces:&lt;/p&gt;
&lt;pre&gt;CREATE TABLE rotated_pieces (
  piece_id     INTEGER, # unique piece id
  rotation     INTEGER, # 0 - top, 1 - left, 2 - bottom, 3 - right
  top         CHAR(10), # animal at top edge
  top_head    CHAR(10), # head or tail at top edge
  `right`     CHAR(10),
  right_head  CHAR(10),
  bottom      CHAR(10),
  bottom_head CHAR(10),
  `left`      CHAR(10),
  left_head   CHAR(10));&lt;/pre&gt;
&lt;p&gt;And then I started on an INSERT statement to populate the table with the piece layouts:&lt;/p&gt;
&lt;pre&gt;INSERT INTO rotated_pieces 
       (piece_id, rotation, 
              top,       top_head, `right`,   right_head, bottom,    bottom_head, `left`,    left_head) 
VALUES (1, 0, 'cheetah', 'tail',   'tiger',   'tail',     'lion',    'head',      'tiger',   'head'),
       (2, 0, 'lion',    'tail',   'lion',    'head',     'tiger',   'tail',      'cheetah', 'head'),
       (3, 0, 'tiger',   'tail',   'lion',    'head',     'panther', 'head',      'tiger',   'tail'),
       (4, 0, 'panther', 'tail',   'cheetah', 'head',     'panther', 'tail',      'lion',    'tail'),
       (5, 0, 'tiger',   'head',   'tiger',   'head',     'cheetah', 'head',      'lion',    'tail'),
       (6, 0, 'panther', 'tail',   'panther', 'head',     'cheetah', 'tail',      'tiger',   'head'),
       (7, 0, 'panther', 'head',   'cheetah', 'tail',     'cheetah', 'head',      'lion',    'tail'),
       (8, 0, 'panther', 'tail',   'lion',    'head',     'panther', 'head',      'cheetah', 'tail'),
       (9, 0, 'cheetah', 'head',   'tiger',   'head',     'panther', 'head',      'lion',    'tail');&lt;/pre&gt;
&lt;p&gt;While I was doing this I copy/pasted Reilly's equivalent bit of Prolog code and it was a simple text transformation between the two languages, another very good sign:&lt;/p&gt;
&lt;pre&gt;Prolog:
tile(1,     cheetah_tail,     tiger_tail,     lion_head,     tiger_head).
SQL:
    (1, 0, 'cheetah','tail', 'tiger','tail', 'lion','head', 'tiger','head'),&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;5.&lt;/b&gt; At this point, I realized that the "matches" criteria could be simplified a lot:&lt;/p&gt;
&lt;pre&gt;A.right = B.left AND A.right_head != B.left_head&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;6.&lt;/b&gt; Now I was able to write out the "rotation" function I'd envisioned earlier in the day and realized I wasn't going to need a "pieces" table at all, this program was only going to need the 36 rotated_pieces records, another good sign that I was on the right track.&lt;/p&gt;
&lt;pre&gt;# rotate (top --&gt; left)
INSERT INTO rotated_pieces (piece_id, rotation, top, top_head, `right`, right_head, bottom, bottom_head, `left`, left_head) 
  SELECT piece_id, rotation+1, 
         `right` AS top, right_head AS top_head, 
         bottom AS `right`, bottom_head AS right_head, 
         `left` AS bottom, left_head AS bottom_head, 
         top AS `left`, top_head AS left_head 
    FROM rotated_pieces;

# rotate (top --&gt; bottom, left --&gt; right) 
INSERT INTO rotated_pieces (piece_id, rotation, top, top_head, `right`, right_head, bottom, bottom_head, `left`, left_head) 
  SELECT piece_id, rotation+2, 
         bottom AS top, bottom_head AS top_head, 
         `left` AS `right`, left_head AS right_head, 
         top AS bottom, top_head AS bottom_head, 
         `right` AS `left`, right_head AS left_head 
    FROM rotated_pieces;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;7.&lt;/b&gt; Finally, I had all the code sketched out. I checked the syntax for a few things since I'd just been doing it off the top of my head and then executed it. After escaping `right` and `left` as they're keywords (not necessarily the best choice of field names...) the CREATE TABLE and INSERT statements ran. I did a sanity check of the rotated_pieces table and it looked good.&lt;/p&gt;
&lt;p&gt;The result of my SELECT statement was disappointing though. As I sort of suspected, there are lots of solutions if you allow a piece to be used more than once and the SELECT returned 1272 rows.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;8.&lt;/b&gt; I couldn't think of a neat way to check for duplicates so ended up just writing a WHERE clause to do it by brute force:&lt;/p&gt;
&lt;pre&gt;WHERE A.piece_id != B.piece_id AND A.piece_id != C.piece_id AND A.piece_id != D.piece_id
  AND A.piece_id != E.piece_id AND A.piece_id != F.piece_id AND A.piece_id != G.piece_id
  AND A.piece_id != H.piece_id AND A.piece_id != I.piece_id
  AND B.piece_id != C.piece_id AND B.piece_id != D.piece_id AND B.piece_id != E.piece_id
  AND B.piece_id != F.piece_id AND B.piece_id != G.piece_id AND B.piece_id != H.piece_id
  AND B.piece_id != I.piece_id AND C.piece_id != D.piece_id AND C.piece_id != E.piece_id
  AND C.piece_id != F.piece_id AND C.piece_id != G.piece_id AND C.piece_id != H.piece_id
  AND C.piece_id != I.piece_id
  AND D.piece_id != E.piece_id AND D.piece_id != F.piece_id AND D.piece_id != G.piece_id
  AND D.piece_id != H.piece_id AND D.piece_id != I.piece_id
  AND E.piece_id != F.piece_id AND E.piece_id != G.piece_id AND E.piece_id != H.piece_id
  AND E.piece_id != I.piece_id
  AND F.piece_id != G.piece_id AND F.piece_id != H.piece_id AND F.piece_id != I.piece_id
  AND G.piece_id != H.piece_id AND G.piece_id != I.piece_id
  AND H.piece_id != I.piece_id;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;9.&lt;/b&gt; This had the desired result and I got back 4 rows.&lt;/p&gt;
&lt;pre&gt;'A', 'Ar', 'B', 'Br', 'C', 'Cr', 'D', 'Dr', 'E', 'Er', 'F', 'Fr', 'G', 'Gr', 'H', 'Hr', 'I', 'Ir'
2, 1, 1, 0, 6, 0, 8, 3, 9, 3, 7, 2, 5, 3, 3, 0, 4, 0
6, 1, 7, 3, 4, 1, 1, 1, 9, 0, 3, 1, 2, 2, 8, 0, 5, 0
4, 2, 3, 2, 5, 1, 7, 0, 9, 1, 8, 1, 6, 2, 1, 2, 2, 3
5, 2, 8, 2, 2, 0, 3, 3, 9, 2, 1, 3, 4, 3, 7, 1, 6, 3&lt;/pre&gt;
&lt;p&gt;The first row clearly matched Reilly's solution, but it wasn't immediately obvious what the other 3 rows were. After reformatting them into a 3x3 grid and staring for a little while I picked out the pattern of pieces 2-1-6 around the edges and realized it was the whole board being rotated. So there was a single solution after all.&lt;/p&gt;
&lt;pre&gt;2, 1, 6, 
8, 9, 7, 
5, 3, 4

6, 7, 4, 
1, 9, 3, 
2, 8, 5

4, 3, 5, 
7, 9, 8, 
6, 1, 2

5, 8, 2, 
3, 9, 1, 
4, 7, 6&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;10.&lt;/b&gt; The next step was to pretend I knew all that from the beginning and write it up in the previous blog post. Later that evening I thought again and realized that wasn't so truthful and that I should have another shot at writing it up.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Postscript&lt;/b&gt;: The ugly WHERE clause was still bugging me and I realized that it could be improved by making some kind of function involving all of the piece ids and checking the answer e.g. if they all add to 45 then that's a solution. Unfortunately, addition isn't a uniquely identifying function, and neither is multiplication or addition of 2^piece_id. What will work though is changing the piece ids to prime numbers and multiplying them all together. Keeping the first digit the same the ids are now:&lt;/p&gt;
&lt;pre&gt;11, 23, 31, 41, 53, 61, 71, 83, 97&lt;/pre&gt;
&lt;p&gt;The product of these primes has no other factors and we don't care about the order since multiplication is cummutative, so to ensure each piece appears only once the WHERE can now simply be:&lt;/p&gt;
&lt;pre&gt;WHERE A.piece_id * B.piece_id * C.piece_id 
    * D.piece_id * E.piece_id * F.piece_id 
    * G.piece_id * H.piece_id * I.piece_id
    = 11*23*31*41*53*61*71*83*97;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-8187714537782479162?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/8187714537782479162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=8187714537782479162' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8187714537782479162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8187714537782479162'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2011/06/no-wait-thats-not-right-heres-how-i.html' title='No, wait, that&apos;s not right, here&apos;s how I really solved it.'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-8738996726946702242</id><published>2011-06-21T18:53:00.007+10:00</published><updated>2011-06-22T21:25:27.075+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='puzzle'/><category scheme='http://www.blogger.com/atom/ns#' term='prolog'/><title type='text'>SQL: 3x3 Square Picture-Puzzle Solution</title><content type='html'>&lt;p&gt;Update: &lt;a href="http://successlessness.blogspot.com/2011/06/no-wait-thats-not-right-heres-how-i.html"&gt;A second attempt at a write up&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After &lt;a href="http://multipolygon.com/prolog-3x3-square-picture-puzzle-solution/"&gt;Reilly solved a 3x3 square picture puzzle using Prolog&lt;/a&gt; I made a flippant remark that it would be interesting to solve using SQL and well, here goes...&lt;/p&gt;
&lt;p&gt;&lt;img src="http://multipolygon.com/prolog-3x3-square-picture-puzzle-solution/numbered.jpg" width="400"/&gt;&lt;/p&gt;
&lt;p&gt;First, create a table and populate it with the pieces:&lt;/p&gt;
&lt;pre&gt;# table of all pieces in all possible rotations
CREATE TABLE rotated_pieces (
  piece_id     INTEGER, # unique piece id
  rotation     INTEGER, # 0 - top, 1 - left, 2 - bottom, 3 - right
  top         CHAR(10), # animal at top edge
  top_head    CHAR(10), # head or tail at top edge
  `right`     CHAR(10),
  right_head  CHAR(10),
  bottom      CHAR(10),
  bottom_head CHAR(10),
  `left`      CHAR(10),
  left_head   CHAR(10));

# unrotated pieces (top)
INSERT INTO rotated_pieces 
       (piece_id, rotation, 
              top,       top_head, `right`,   right_head, bottom,    bottom_head, `left`,    left_head) 
VALUES (1, 0, 'cheetah', 'tail',   'tiger',   'tail',     'lion',    'head',      'tiger',   'head'),
       (2, 0, 'lion',    'tail',   'lion',    'head',     'tiger',   'tail',      'cheetah', 'head'),
       (3, 0, 'tiger',   'tail',   'lion',    'head',     'panther', 'head',      'tiger',   'tail'),
       (4, 0, 'panther', 'tail',   'cheetah', 'head',     'panther', 'tail',      'lion',    'tail'),
       (5, 0, 'tiger',   'head',   'tiger',   'head',     'cheetah', 'head',      'lion',    'tail'),
       (6, 0, 'panther', 'tail',   'panther', 'head',     'cheetah', 'tail',      'tiger',   'head'),
       (7, 0, 'panther', 'head',   'cheetah', 'tail',     'cheetah', 'head',      'lion',    'tail'),
       (8, 0, 'panther', 'tail',   'lion',    'head',     'panther', 'head',      'cheetah', 'tail'),
       (9, 0, 'cheetah', 'head',   'tiger',   'head',     'panther', 'head',      'lion',    'tail');&lt;/pre&gt;
&lt;p&gt;Then, rotate each of those pieces so we have all 36 variations:&lt;/p&gt;
&lt;pre&gt;# rotate (top --&gt; left)
INSERT INTO rotated_pieces (piece_id, rotation, top, top_head, `right`, right_head, bottom, bottom_head, `left`, left_head) 
  SELECT piece_id, rotation+1, 
         `right` AS top, right_head AS top_head, 
         bottom AS `right`, bottom_head AS right_head, 
         `left` AS bottom, left_head AS bottom_head, 
         top AS `left`, top_head AS left_head 
    FROM rotated_pieces;

# rotate (top --&gt; bottom, left --&gt; right) 
INSERT INTO rotated_pieces (piece_id, rotation, top, top_head, `right`, right_head, bottom, bottom_head, `left`, left_head) 
  SELECT piece_id, rotation+2, 
         bottom AS top, bottom_head AS top_head, 
         `left` AS `right`, left_head AS right_head, 
         top AS bottom, top_head AS bottom_head, 
         `right` AS `left`, right_head AS left_head 
    FROM rotated_pieces;&lt;/pre&gt;
&lt;p&gt;Then, it's a pretty simple query to return the result. The code is messed up by the WHERE clause which ensures that each piece is used only once in the solution, if there's a neater way to do this I'd like to know.&lt;/p&gt;
&lt;pre&gt;# find solution
SELECT A.piece_id AS A, A.rotation AS Ar, B.piece_id AS B, B.rotation AS Br, C.piece_id AS C, C.rotation AS Cr,
       D.piece_id AS D, D.rotation AS Dr, E.piece_id AS E, E.rotation AS Er, F.piece_id AS F, F.rotation AS Fr,
       G.piece_id AS G, G.rotation AS Gr, H.piece_id AS H, H.rotation AS Hr, I.piece_id AS I, I.rotation AS Ir
  FROM rotated_pieces A 
INNER JOIN rotated_pieces B ON (A.`right` = B.`left` AND A.right_head != B.left_head)
INNER JOIN rotated_pieces C ON (B.`right` = C.`left` AND B.right_head != C.left_head)
INNER JOIN rotated_pieces D ON (A.bottom = D.top     AND A.bottom_head != D.top_head)
INNER JOIN rotated_pieces E ON (D.`right` = E.`left` AND D.right_head != E.left_head
                                AND B.bottom = E.top AND B.bottom_head != E.top_head)
INNER JOIN rotated_pieces F ON (E.`right` = F.`left` AND E.right_head != F.left_head
                                AND C.bottom = F.top AND C.bottom_head != F.top_head)
INNER JOIN rotated_pieces G ON (D.bottom = G.top     AND D.bottom_head != G.top_head)
INNER JOIN rotated_pieces H ON (G.`right` = H.`left` AND G.right_head != H.left_head
                                AND E.bottom = H.top AND E.bottom_head != H.top_head)
INNER JOIN rotated_pieces I ON (H.`right` = I.`left` AND H.right_head != I.left_head
                                AND F.bottom = I.top AND F.bottom_head != I.top_head)
WHERE A.piece_id != B.piece_id AND A.piece_id != C.piece_id AND A.piece_id != D.piece_id
  AND A.piece_id != E.piece_id AND A.piece_id != F.piece_id AND A.piece_id != G.piece_id
  AND A.piece_id != H.piece_id AND A.piece_id != I.piece_id
  AND B.piece_id != C.piece_id AND B.piece_id != D.piece_id AND B.piece_id != E.piece_id
  AND B.piece_id != F.piece_id AND B.piece_id != G.piece_id AND B.piece_id != H.piece_id
  AND B.piece_id != I.piece_id AND C.piece_id != D.piece_id AND C.piece_id != E.piece_id
  AND C.piece_id != F.piece_id AND C.piece_id != G.piece_id AND C.piece_id != H.piece_id
  AND C.piece_id != I.piece_id
  AND D.piece_id != E.piece_id AND D.piece_id != F.piece_id AND D.piece_id != G.piece_id
  AND D.piece_id != H.piece_id AND D.piece_id != I.piece_id
  AND E.piece_id != F.piece_id AND E.piece_id != G.piece_id AND E.piece_id != H.piece_id
  AND E.piece_id != I.piece_id
  AND F.piece_id != G.piece_id AND F.piece_id != H.piece_id AND F.piece_id != I.piece_id
  AND G.piece_id != H.piece_id AND G.piece_id != I.piece_id
  AND H.piece_id != I.piece_id;&lt;/pre&gt;
&lt;p&gt;This returns 4 rows, the first is our solution:&lt;/p&gt;
&lt;pre&gt;2,1, 1,0, 6,0, 
8,3, 9,3, 7,2, 
5,3, 3,0, 4,0&lt;/pre&gt;
&lt;p&gt;&lt;img src="http://multipolygon.com/prolog-3x3-square-picture-puzzle-solution/solved_annotated.jpg" width="400"/&gt;&lt;/p&gt;
&lt;p&gt;The remaining 3 are the same solution with the entire board rotated:&lt;/p&gt;
&lt;pre&gt;6,1, 7,3, 4,1, 
1,1, 9,0, 3,1, 
2,2, 8,0, 5,0

4,2, 3,2, 5,1, 
7,0, 9,1, 8,1, 
6,2, 1,2, 2,3

5,2, 8,2, 2,0, 
3,3, 9,2, 1,3, 
4,3, 7,1, 6,3&lt;/pre&gt;
&lt;p&gt;I would argue the SQL version is clearer, but the &lt;a href="http://multipolygon.com/prolog-3x3-square-picture-puzzle-solution/"&gt;Prolog version&lt;/a&gt; is slightly terser and should be easier to extend to a 4x4 puzzle.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-8738996726946702242?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/8738996726946702242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=8738996726946702242' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8738996726946702242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8738996726946702242'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2011/06/sql-3x3-square-picture-puzzle-solution.html' title='SQL: 3x3 Square Picture-Puzzle Solution'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-2936811601187469827</id><published>2011-02-21T13:31:00.004+11:00</published><updated>2011-02-21T14:22:16.271+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barefoot'/><category scheme='http://www.blogger.com/atom/ns#' term='shoes'/><category scheme='http://www.blogger.com/atom/ns#' term='minimal'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='merrell trail gloves'/><category scheme='http://www.blogger.com/atom/ns#' term='running'/><title type='text'>Merrell Trail Gloves review</title><content type='html'>&lt;p&gt;A quick review of the &lt;a href="http://www.merrell.com/US/en-US/Product.mvc.aspx/22875M/0/Mens/Mens-Barefoot-Trail-Glove?dimensions=0"&gt;Merrell Trail Glove&lt;/a&gt; minimalist trail running shoes.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/5443959835/" target="_blank"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-Ut4vdLp-F2c/TWHQQT8QwMI/AAAAAAAAAG4/JDCYTOI6YRI/s320/5443959835_45b2d03395.jpg" alt="" id="BLOGGER_PHOTO_ID_5575966792310898882" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After reading a few reviews of these shoes I was curious enough to fork out the money for them (&lt;a href="http://barefootrunninguniversity.com/2011/01/04/merrell-trail-glove-review/"&gt;Barefoot Running University&lt;/a&gt; and &lt;a href="http://www.irunfar.com/2011/02/merrell-trail-glove-vs-new-balance-minimus-trail-review.html"&gt;I run far&lt;/a&gt;.)&lt;/p&gt;
&lt;h3&gt;On your foot&lt;/h3&gt;
&lt;p&gt;The fit is snug in the heel and the laces really grip around the mid-foot and arch. I only have the Vibram FiveFingers and walking shoes to compare to, maybe regular running shoes are more like this too, but they are different to anything I have run in before. The toes have tonnes of room and are completely free to move, but don't slide around at all because the midfoot is held solidly.&lt;/p&gt;
&lt;p&gt;They breath pretty well, a lot of the upper is mesh/fabric, the tongue's a bit thick so they're pretty warm but regular shoes+socks would be worse.&lt;/p&gt;
&lt;p&gt;They let a bit of dirt in around the ankle and I think through the mesh/fabric (I wear them without socks), but because it can move around inside the shoe easily I don't think it's as annoying as when wearing Vibrams.&lt;/p&gt;
&lt;p&gt;Most of my shoes are 43 or 44 (Vibrams are 42), and I got the Merrells in size 44 to make sure my toes would have room to splay and wouldn't hit the end heading downhill.  This was a bit of a mistake, the way they fit means you won't slide inside them and the bit of extra length means I catch my toe on steps a bit more than I'd like. Not a show stopper, I just have to lift my feet higher.&lt;/p&gt;
&lt;h3&gt;On the ground&lt;/h3&gt;
&lt;p&gt;The sole has a bit of cushioning and feels a little soft on the footpath, but you don't notice it as soon as you get off road. It's much thicker and stiffer than the Vibrams, with less ground feel, but still very flexible and nothing like a normal running/trail shoe.&lt;/p&gt;
&lt;p&gt;The tread has maybe 2-3mm deep chunks, bigger on the toe and heel. It's very curved and foot shaped, no attempts to control side ways stability or pronation, which is great and they are a tiny bit lighter than Vibram KSOs.&lt;/p&gt;
&lt;p&gt;They feel bombproof, no fear treading on rocks/stones/sticks and I'm definitely not going to catch my little toe again like I did wearing Vibrams.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;So, these are pretty much exactly what I've been waiting for. I'll only wear them on rough/rocky trails, and they're not "barefoot" by any stretch of the imagination, but they are great minimal shoes and the biggest problem I can see is that I'm going to be exhausted, the Vibrams give you an excuse to slow down occasionally "to negotiate tricky terrain" :)&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-BoYD9KL6H60/TWHQedm2xhI/AAAAAAAAAHA/Yd8F_ilRymM/s1600/IMG_2745.JPG"&gt;&lt;img style="cursor: pointer; width: 240px; height: 320px;" src="http://3.bp.blogspot.com/-BoYD9KL6H60/TWHQedm2xhI/AAAAAAAAAHA/Yd8F_ilRymM/s320/IMG_2745.JPG" alt="" id="BLOGGER_PHOTO_ID_5575967035423639058" border="0" /&gt;&lt;/a&gt;&lt;br&gt;Dandenong Ranges&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-2936811601187469827?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/2936811601187469827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=2936811601187469827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2936811601187469827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2936811601187469827'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2011/02/merrell-trail-gloves-review.html' title='Merrell Trail Gloves review'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Ut4vdLp-F2c/TWHQQT8QwMI/AAAAAAAAAG4/JDCYTOI6YRI/s72-c/5443959835_45b2d03395.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-2250729372588576977</id><published>2011-02-04T12:45:00.004+11:00</published><updated>2011-02-04T13:15:16.979+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='led bike light'/><title type='text'>LED Bike Light update</title><content type='html'>&lt;p&gt;My &lt;a href="http://successlessness.blogspot.com/2007/05/led-bike-light-project.html"&gt;home built LED bike light&lt;/a&gt; performed well for many years, but when I got my &lt;a href="http://www.flickr.com/photos/tom-paton/4458720361/"&gt;new bike&lt;/a&gt;, the battery holder and handlebar mounting solutions no longer functioned adequately so it was time for a redesign.&lt;/p&gt;
&lt;p&gt;I had been planning on a new simplified version, eliminating the micro-controller and putting in a simple dimmer potentiometer. It turned out I never really used the battery monitoring features and simply used a multimeter to decide when to recharge, and using a dimmer would allow setting the brightness easily and quickly and also allow the "high beam" mode to remain on through hazardous sections when necessary.&lt;/p&gt;
&lt;p&gt;I was still pretty keen on building this myself as all it really required was cannibalising my old light for parts and making a new case.  Commercial solutions had dropped a lot in price but are still many times more expensive than DIY (a few friends have these &lt;a href="http://www.ayup-lights.com/"&gt;AYUP lights&lt;/a&gt; for example and they seem great).&lt;/p&gt;
&lt;p&gt;Then I discovered semi-cheap LED torches as an option and ended up buying a &lt;a href="http://www.ledtorches.com.au/index.php?act=viewProd&amp;productId=170"&gt;Fenix LD20 LED torch&lt;/a&gt; and a small clamp from Ebay (that I can't find again, glad I bought 2...)&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_yvQpQviYWT0/TUtgrvS7ozI/AAAAAAAAAGg/8zvBwKyoAH4/s1600/2011_02_04-11_44_11.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 234px;" src="http://3.bp.blogspot.com/_yvQpQviYWT0/TUtgrvS7ozI/AAAAAAAAAGg/8zvBwKyoAH4/s320/2011_02_04-11_44_11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5569651668720263986" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yvQpQviYWT0/TUtgr1K5FSI/AAAAAAAAAGo/AJYBaoLyg7s/s1600/2011_02_04-11_46_24.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 236px; height: 320px;" src="http://2.bp.blogspot.com/_yvQpQviYWT0/TUtgr1K5FSI/AAAAAAAAAGo/AJYBaoLyg7s/s320/2011_02_04-11_46_24.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5569651670297154850" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This puts out almost exactly the same amount of light as my old version but is in a small waterproof and easy to use package. As a bonus, it's a torch I can take camping etc. too.&lt;/p&gt;
&lt;p&gt;I'm simply rotating through the NiMH AA batteries from the old light and am a bit disappointed with the battery life, seeming to have to change them more often than I'd like, but that's pretty quick and an extra set of batteries isn't too much of a struggle to carry around.&lt;/p&gt;
&lt;p&gt;All in all, for $80 you can't go too wrong.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-2250729372588576977?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/2250729372588576977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=2250729372588576977' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2250729372588576977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2250729372588576977'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2011/02/led-bike-light-update.html' title='LED Bike Light update'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_yvQpQviYWT0/TUtgrvS7ozI/AAAAAAAAAGg/8zvBwKyoAH4/s72-c/2011_02_04-11_44_11.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-2198769822935208246</id><published>2010-12-16T15:08:00.003+11:00</published><updated>2010-12-16T15:21:53.877+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='audiobook'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='id3tag'/><title type='text'>Preparing an audiobook for listening on an mp3 player</title><content type='html'>&lt;p&gt;I recently ripped a 7-CD audiobook to listen to on my &lt;a href="http://successlessness.blogspot.com/2010/07/using-sansa-clip-mp3-player-for.html"&gt;Sansa Clip+ MP3 player&lt;/a&gt;. After a bit of fiddling around with bash I was able to end up with a collection of 183 chapters named &lt;tt&gt;1_01.mp3&lt;/tt&gt; through to &lt;tt&gt;7_26.mp3&lt;/tt&gt; (the first bit was the disc number, then the track number.)&lt;/p&gt;
&lt;p&gt;Simply copying these onto my player didn't work as the tracks were all out of sequence. In the past, with smaller books, I've simply skipped around between the sections to listen in order, but that wasn't going to be an option here.&lt;/p&gt;
&lt;p&gt;After some experimenting I discovered the Sansa orders the tracks by the Track Number in the ID3 tag, so I fired off the following bash command to set up the ID3 details appropriately:&lt;/p&gt;
&lt;pre&gt;n=0 ;
for f in *.mp3 ;
do n=$((n+1)) ;
id3tag --artist="author name" --album="book name" --song="${f/.mp3/}" --track=$n $f ;
done&lt;/pre&gt;
&lt;p&gt;This numbers all the tracks from 1 to 183 in order and also sets the artist and album so I can find it easily in the Audiobook list. The .mp3 is stripped from the displayed filename too.&lt;/p&gt;
&lt;p&gt;The &lt;tt&gt;id3tag&lt;/tt&gt; program came from the &lt;tt&gt;libid3-3.8.3-dev&lt;/tt&gt; package, not sure why/when I installed that one...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-2198769822935208246?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/2198769822935208246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=2198769822935208246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2198769822935208246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2198769822935208246'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2010/12/preparing-audiobook-for-listening-on.html' title='Preparing an audiobook for listening on an mp3 player'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-9092855949907160709</id><published>2010-12-04T11:08:00.003+11:00</published><updated>2010-12-04T11:19:10.277+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Python+Emacs made easy with emacs-for-python</title><content type='html'>&lt;p&gt;I don't know where this has been all my life but Gabriele Lanaro has put together a really &lt;a href="http://gabrielelanaro.github.com/emacs-for-python/"&gt;easy to use package for adding lots of Python goodies to Emacs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Just unzip the archive into &lt;tt&gt;~/.emacs.d/&lt;/tt&gt; and add one line to your &lt;tt&gt;.emacs&lt;/tt&gt; and your done (well, also remove all the now unnecessary random cargo-cult prior additions to your &lt;tt&gt;.emacs&lt;/tt&gt;):&lt;/p&gt;
&lt;pre&gt;(load-file "~/.emacs.d/emacs-for-python/epy-init.el")&lt;/pre&gt;
&lt;p&gt;I had also previously installed a handful of Python/Emacs packages via Synaptic that may or may not be required to make it all work: &lt;tt&gt;python-rope&lt;/tt&gt;, &lt;tt&gt;python-ropemacs&lt;/tt&gt;, &lt;tt&gt;pyflakes&lt;/tt&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-9092855949907160709?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://gabrielelanaro.github.com/emacs-for-python/' title='Python+Emacs made easy with emacs-for-python'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/9092855949907160709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=9092855949907160709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/9092855949907160709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/9092855949907160709'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2010/12/pythonemacs-made-easy-with-emacs-for.html' title='Python+Emacs made easy with emacs-for-python'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-3311532313225402610</id><published>2010-07-16T19:02:00.006+10:00</published><updated>2011-11-04T23:13:40.801+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sox'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><category scheme='http://www.blogger.com/atom/ns#' term='lame'/><category scheme='http://www.blogger.com/atom/ns#' term='mplayer'/><title type='text'>Increasing podcast tempo (playback speed) with Mplayer and Lame</title><content type='html'>&lt;p&gt;The following commands will re-encode an mp3 file at a faster speed without increasing the pitch and making it sound like a chipmunk. &lt;a href="http://www.surina.net/article/time-and-pitch-scaling.html"&gt;How this actually works&lt;/a&gt; is pretty neat.&lt;/p&gt;
&lt;pre&gt;mplayer -vo null -vc null \
        -speed 1.33 \
        -af scaletempo,volume=0,resample=44100:0:1 \
        -ao pcm:fast:waveheader:file=temp.wav \
        source.mp3
lame -b 64 --resample 22.05 temp.wav faster.mp3&lt;/pre&gt;
&lt;p&gt;It will also set the bitrate to 64kbit which was for compatibility with my old player and to reduce the filesize for some podcasts which are unnecessarily big.&lt;/p&gt;
&lt;p&gt;There should be a way to use &lt;tt&gt;mkfifo&lt;/tt&gt; instead of &lt;tt&gt;temp.wav&lt;/tt&gt;, and run the &lt;tt&gt;mplayer&lt;/tt&gt; process and &lt;tt&gt;lame&lt;/tt&gt; at the same time, I'll update this when I figure it out.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: The above method broke after upgrading to Ubuntu 11.10 (one or both of mplayer or lame changed something I suspect...), so I swapped it out for the simpler and better &lt;a href="http://sox.sourceforge.net/sox.html"&gt;SoX&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;sox --show-progress --norm source.mp3 dest.mp3 \
    tempo -s 1.33 channels 1 rate 22050&lt;/pre&gt;
&lt;p&gt;This version is easier to understand, faster, doesn't leave need a temp file and also, as a bonus, normalizes the audio to prevent clipping and not hurt my ears.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-3311532313225402610?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/3311532313225402610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=3311532313225402610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/3311532313225402610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/3311532313225402610'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2010/07/increasing-podcast-tempo-playback-speed.html' title='Increasing podcast tempo (playback speed) with Mplayer and Lame'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-2626777105642172406</id><published>2010-07-16T18:53:00.007+10:00</published><updated>2010-07-27T12:24:30.852+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>Using Sansa Clip+ MP3 Player for Podcasts</title><content type='html'>&lt;p style="float:left;margin-right:2em;margin-bottom:2em;"&gt;&lt;a href="http://www.sandisk.com/products/sansa-music-and-video-players/sandisk-sansa-clipplus-mp3-player-.aspx" title="SanDisk Sansa Clip+"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 130px; height: 189px;" src="http://www.sandisk.com/media/292833/clipplusbig.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A mini-review after buying the 2GB model to replace my old mp3 player.  I'll only consider it for the purpose of listening to podcasts, other music related features can be found on the &lt;a href="http://www.sandisk.com/products/sansa-music-and-video-players/sandisk-sansa-clipplus-mp3-player-.aspx"&gt;SanDisk site&lt;/a&gt; or other reviews easily enough.&lt;/p&gt;
&lt;p&gt;3 key features for listening to podcasts:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;No software required, just plug in as a USB drive and copy files across (using a script or manually.)&lt;/li&gt;
&lt;li&gt;Ability to easily delete files from the player after listening to them.&lt;/li&gt;
&lt;li&gt;Increase the tempo/speed of playback.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The Sansa Clip+ does all of these, however the fast playback speed is pretty useless as the pitch is increased giving "chipmunk" effects. See the &lt;a href="http://successlessness.blogspot.com/2010/07/increasing-podcast-tempo-playback-speed.html"&gt;next post&lt;/a&gt; for a work-around.&lt;/p&gt;
&lt;p&gt;The player remembers the position in each track, which is very nice.&lt;/p&gt;
&lt;p&gt;A couple of other issues I've noticed immediately are that it is very small, making one-handed operation difficult, and it has no "hold" button to prevent inadvertent bumping of the buttons. Hopefully being able to clip it outside clothing/bags will alleviate this, time will tell.&lt;/p&gt;
&lt;p&gt;It also has a built in battery so you can't carry a spare and must plug it in to charge.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; So far, everything is working well. I'm not used to the built in battery, and waiting for it to recharge if I let it go flat is a major pain, but I'll just have to keep it topped up and an hour of charging goes a long way.&lt;/p&gt;
&lt;p&gt;One other minor annoyance is that you can't quickly see the duration of a podcast when skipping through them.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; One issue that I initially didn't notice, as the ID3 tags were stripped during my reencode process, is that the podcasts are organised by show and there is no "play all" option. This is a pain, I'm used to just listening to them in a more or less random order and not having to stop and select a new show when one finishes.&lt;/p&gt;
&lt;p&gt;To quickly fix this, use the &lt;tt&gt;id3v2&lt;/tt&gt; utility to delete all ID3 tags from the podcast before copying them to the player. This way they are all categorised under a single "Unknown" show menu and the filename is usually sufficient to identify the program.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-2626777105642172406?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/2626777105642172406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=2626777105642172406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2626777105642172406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2626777105642172406'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2010/07/using-sansa-clip-mp3-player-for.html' title='Using Sansa Clip+ MP3 Player for Podcasts'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-2421749408742129923</id><published>2010-05-12T19:10:00.003+10:00</published><updated>2010-05-12T19:17:47.402+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='filesystem'/><title type='text'>Making use of all the space on a hard drive</title><content type='html'>&lt;p&gt;If you have a big data drive, there's a good chance that Linux is reserving 5% of it's available space for "emergencies".&lt;/p&gt;
&lt;p&gt;This is necessary for your root filesystem as if the disk fills up there may be no way for root to log in and clean things up without this buffer of space for log files etc. to be written into.&lt;/p&gt;
&lt;p&gt;However, I have a couple of large drives that store only data and 5% is 100GB I'd rather be able to use.&lt;/p&gt;
&lt;p&gt;Fortunately, it's easy to reclaim the space, the following will remove all "reserved blocks":&lt;/p&gt;
&lt;pre&gt;sudo tune2fs -m 0 /dev/sdXX&lt;/pre&gt;
&lt;p&gt;This can be reset back to the default 5% (or any percentage) if you need to:&lt;/p&gt;
&lt;pre&gt;sudo tune2fs -m 5 /dev/sdXX&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-2421749408742129923?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.walkernews.net/2007/02/28/tune2fs-increase-linux-free-disk-space/' title='Making use of all the space on a hard drive'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/2421749408742129923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=2421749408742129923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2421749408742129923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2421749408742129923'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2010/05/making-use-of-all-space-on-hard-drive.html' title='Making use of all the space on a hard drive'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-5866796465985428837</id><published>2010-01-22T20:05:00.004+11:00</published><updated>2010-01-22T20:38:34.369+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='backups'/><title type='text'>iPhone woes</title><content type='html'>&lt;p&gt;My iPhone 3GS died 2 days into our holiday.  Something like an IMEI/ICCID not found error, and the only thing it would display was a screen asking to be connected to iTunes to be restored.&lt;/p&gt;
&lt;p&gt;Connecting to iTunes wouldn't let me restore as it said my phone was locked with a passcode.  Using the forced restore mode, iTunes wouldn't restore without an Internet connection.
Once I got a connection, the restore failed with an "Error 23" and the log file contained "radio" errors. Didn't sound good.  Tried a DFU mode restore, same "Error 23".&lt;/p&gt;
&lt;p&gt;So, it was bricked.  My last backup was in October.  My bad I guess, but I can only use iTunes via my partner's laptop and usually I don't need to.  Thankfully it was still covered by the 1 year warranty.&lt;/p&gt;
&lt;p&gt;Calling Apple went smoothly.  They acknowledged that I'd done everything I could and booked me an appointment to take the phone into the Apple store.&lt;/p&gt;
&lt;p&gt;The Apple store is crazy, there were more staff than customers and the Genius bar was booked out for 2 days.  That's where your extra $ go when you buy a Mac, buying blue t-shirts...&lt;/p&gt;
&lt;p&gt;The Genius replaced my handset with no troubles, which was great.&lt;/p&gt;
&lt;p&gt;Restoring from my backup didn't work very well.&lt;/p&gt;
&lt;p&gt;My Apps weren't restored at all, only the links to Web Apps I'd saved to the home screen were restored.  This is possibly because I hadn't "authorised" iTunes with my account. Hard to recall if I was warned about that, I didn't know it was necessary in any case.&lt;/p&gt;
&lt;p&gt;Restoring Apps manually is a pain, trawling through iTunes receipt emails, figuring out which I hadn't uninstalled and which I wanted to keep using.&lt;/p&gt;
&lt;p&gt;Additionally, you have to buy the App again, only once that's done does it confirm that you're not going to have to pay for it again (and gives you a cancel button, God knows why.)  If you choose the wrong App then bad luck, the one-click purchase will install it with no cancel button.&lt;/p&gt;
&lt;p&gt;One tiny bit of good news:  Many App's settings were backed up, and the settings were restored after re-purchasing the App.  This wasn't clear initially, but obviously it backs up and restores all the files in the "home" folder, whether the App is present or not.&lt;/p&gt;
&lt;p&gt;The music wasn't synced at all as I had iTunes set to manage it manually. Fair enough in that case, but still tedious to get it back.&lt;/p&gt;
&lt;p&gt;The lesson to be learnt is that an iPhone backup isn't really a backup at all.  It apparently backs up your "home" folder and relies on the Sync to do the rest.  This is sort of obvious in hindsight, as it's not like there's going to be room for a 32gb backup, and theoretically that's mostly copies of files (music) that's on the computer anyway.&lt;/p&gt;
&lt;p&gt;Just because I don't want everything to be automatically Synced doesn't mean I don't want it backed up.&lt;/p&gt;
&lt;p&gt;So, I'll be changing my habits from now on.  I won't be switching to using iTunes, that's not an option on Linux, but I'll definitely treat the iPhone as a terminal only and try to keep as much as possible "in the cloud". Using Google Sync for my contacts in addition to my mail and calendars from now on for example.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-5866796465985428837?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/5866796465985428837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=5866796465985428837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/5866796465985428837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/5866796465985428837'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2010/01/iphone-woes.html' title='iPhone woes'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-1132821792344175504</id><published>2009-09-27T18:37:00.003+10:00</published><updated>2009-09-27T18:43:05.100+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='canvas'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Canvas Game on iPhone</title><content type='html'>&lt;p&gt;I just ported my &lt;a href="http://successlessness.blogspot.com/2008/09/simple-game-using-javascript-and-canvas.html"&gt;little canvas game&lt;/a&gt; to the iPhone:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yvQpQviYWT0/Sr8lPAssisI/AAAAAAAAAGI/aIPKrpfB0Uc/s1600-h/IMG_0455.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://2.bp.blogspot.com/_yvQpQviYWT0/Sr8lPAssisI/AAAAAAAAAGI/aIPKrpfB0Uc/s400/IMG_0455.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5386064619174136514" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tompaton.com/canvasgame1.html"&gt;Go play!&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-1132821792344175504?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tompaton.com/canvasgame1.html' title='Canvas Game on iPhone'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/1132821792344175504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=1132821792344175504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/1132821792344175504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/1132821792344175504'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2009/09/canvas-game-on-iphone.html' title='Canvas Game on iPhone'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_yvQpQviYWT0/Sr8lPAssisI/AAAAAAAAAGI/aIPKrpfB0Uc/s72-c/IMG_0455.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-4358770842067111179</id><published>2009-08-13T15:30:00.002+10:00</published><updated>2009-08-13T15:41:23.608+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><title type='text'>GPSLog Labs</title><content type='html'>&lt;p&gt;&lt;a href="http://gpsloglabs.com/"&gt;GPSLog Labs&lt;/a&gt; is a site I've been working on where you can upload logs from your GPS tracking device and map, graph and analyse them.&lt;/p&gt;
&lt;p&gt;It will let you track your exercise and training whether your 
a cyclist or runner, and can also be used to track your mileage 
and keep a diary of your activity.&lt;/p&gt;
&lt;p&gt;It builds on a few of the things I've &lt;a href="http://successlessness.blogspot.com/search/label/gps"&gt;posted about here before&lt;/a&gt;, and there's some more information on the &lt;a href="http://blog.gpsloglabs.com"&gt;GPSLog Labs blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Signing up is trivial as it supports &lt;a href="http://openid.net"&gt;OpenID&lt;/a&gt;, I'd appreciate any of your comments and suggestions and hope the site interests some of you.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-4358770842067111179?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://gpsloglabs.com/' title='GPSLog Labs'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/4358770842067111179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=4358770842067111179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4358770842067111179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4358770842067111179'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2009/08/gpslog-labs.html' title='GPSLog Labs'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-7718689102213905520</id><published>2009-07-14T16:34:00.002+10:00</published><updated>2009-07-14T16:48:03.912+10:00</updated><title type='text'>Hopeless Exetel customer service</title><content type='html'>&lt;p&gt;I got the following message regarding a line fault issue we have with our telephone service:&lt;/p&gt;
&lt;blockquote&gt;Please note that the supplier technician who has attended to your service issue has confirmed to us that there is no issue with in the infrastructure/network boundary point and or main distribution frame (MDF). Please re-check your equipment.&lt;/blockquote&gt;
&lt;p&gt;That was a surprise to me, as on Saturday the technician had found a fault in the line but had been unable to pull the cable and had said that Optus would have to dig it up and we'd find out more later.&lt;/p&gt;
&lt;p&gt;Calling &lt;a href="http://www.exetel.com.au/"&gt;Exetel&lt;/a&gt; help was a struggle, after waiting on hold and explaining my issue, the call dropped out when they seemed to put me back on hold. Twice.&lt;/p&gt;
&lt;p&gt;Thoroughly pissed off I spent another 20 minutes on hold and listening to complete silence while the help desk person was "just one second" (turns out he was talking to Optus, would have been nice to be told why I was waiting).&lt;/p&gt;
&lt;p&gt;So, at this point, 50 wasted minutes later, I find out that Optus is going to fix the line after all, and that the message I received was due to Exetel "closing" the initial fault ticket and was completely wrong.&lt;/p&gt;
&lt;p&gt;Idiots.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-7718689102213905520?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/7718689102213905520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=7718689102213905520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7718689102213905520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7718689102213905520'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2009/07/hopeless-exetel-customer-service.html' title='Hopeless Exetel customer service'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-6988352134778353354</id><published>2008-10-11T12:04:00.000+11:00</published><updated>2008-10-11T12:21:58.629+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><category scheme='http://www.blogger.com/atom/ns#' term='google earth'/><category scheme='http://www.blogger.com/atom/ns#' term='gpsbabel'/><title type='text'>Merging GPS logs and mapping them all</title><content type='html'>&lt;p&gt;Inspired by &lt;a href="http://cabspotting.org/"&gt;cabspotting&lt;/a&gt; and &lt;a href="http://www.openstreetmap.org/"&gt;Open Street Map&lt;/a&gt;, I wanted to merge all my GPS logs and create a map showing all the routes I've logged lately.&lt;/p&gt;
&lt;p&gt;This is pretty easy using &lt;a href="http://www.gpsbabel.org"&gt;gpsbabel&lt;/a&gt;, but I needed to use a little Python to get the list of input log files. (I'm sure there's a way to do it in bash but that's beyond me for now.)  My GPS stores files in nmea format, and the directory structure/purpose of my Python script should hopefully be apparent.&lt;/p&gt;
&lt;pre&gt;&gt;&gt;&gt; import os
&gt;&gt;&gt; from path import path
&gt;&gt;&gt; logs = " ".join([" ".join(["-i nmea -f %s"%log
                               for log in sorted((raw/"raw").files("GPS_*.log"))]) 
                     for raw in path("/home/tom/docs/gpslogs").dirs() 
                     if raw.namebase.isdigit()])
&gt;&gt;&gt; logs
'-i nmea -f /home/tom/docs/gpslogs/200810/raw/GPS_20080930_221152.log -i nmea -f /home/tom/docs/gpslogs/200810/raw/GPS_20081001_071234.log ...'
&gt;&gt;&gt; os.system("gpsbabel %s -o kml,points=0,labels=0,trackdata=0 -F /home/tom/docs/gpslogs/all200810.kml" % logs)&lt;/pre&gt;
&lt;p&gt;The result of that is a 36.5 MB kml file I could load into Google Earth:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_yvQpQviYWT0/SO_-6iOhgAI/AAAAAAAAAD0/Hf7AgEgTmtk/s1600-h/zoom0.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_yvQpQviYWT0/SO_-6iOhgAI/AAAAAAAAAD0/Hf7AgEgTmtk/s400/zoom0.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5255699571738247170" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yvQpQviYWT0/SO__CruMyvI/AAAAAAAAAD8/CPry4aqOFj0/s1600-h/zoom1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_yvQpQviYWT0/SO__CruMyvI/AAAAAAAAAD8/CPry4aqOFj0/s400/zoom1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5255699711725980402" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yvQpQviYWT0/SO__LebPNMI/AAAAAAAAAEE/p3et198CXEw/s1600-h/zoom2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_yvQpQviYWT0/SO__LebPNMI/AAAAAAAAAEE/p3et198CXEw/s400/zoom2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5255699862775608514" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yvQpQviYWT0/SO__UzfTu7I/AAAAAAAAAEM/EVKOoacCF_w/s1600-h/zoom3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_yvQpQviYWT0/SO__UzfTu7I/AAAAAAAAAEM/EVKOoacCF_w/s400/zoom3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5255700023048649650" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yvQpQviYWT0/SO__c8ClIdI/AAAAAAAAAEU/FJOIgijhriQ/s1600-h/perspective1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_yvQpQviYWT0/SO__c8ClIdI/AAAAAAAAAEU/FJOIgijhriQ/s400/perspective1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5255700162783027666" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There was one spurious point somewhere in the log file at 0&amp;deg; E, 0&amp;deg; N, and the log has a lot of jitter when I'm walking near home.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-6988352134778353354?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/6988352134778353354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=6988352134778353354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6988352134778353354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6988352134778353354'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/10/merging-gps-logs-and-mapping-them-all.html' title='Merging GPS logs and mapping them all'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_yvQpQviYWT0/SO_-6iOhgAI/AAAAAAAAAD0/Hf7AgEgTmtk/s72-c/zoom0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-5129501011837154843</id><published>2008-09-18T16:01:00.008+10:00</published><updated>2009-09-27T18:44:37.079+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='canvas'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>A simple game using JavaScript and the CANVAS element</title><content type='html'>&lt;p&gt;This should work in Opera and Firefox (though really slowly, why I don't know) and probably Safari.  It's not going to work in IE because I can't be bothered getting the iecanvas thingi into the blog code.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update: There is now an &lt;a href="http://tompaton.com/canvasgame1.html"&gt;iPhone version&lt;/a&gt;.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The only thing to note is less clicks == better score.&lt;/p&gt;

&lt;canvas id="board" width="500" height="400" style="border: 1px solid black; background-color: #808080;"&gt;Canvas not supported...&lt;/canvas&gt;
&lt;table width="500"&gt;&lt;tr&gt;&lt;td valign="top"&gt;
&lt;div&gt;&lt;input type="button" value="New Game" onclick="newgame('board');" style="font-size:1.2em;"&gt;&lt;/div&gt;
&lt;div&gt;Clicks &lt;input type="text" id="clicks" value="0" size="4" style="text-align:right;font-size:1em;"&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td valign="top" align="right"&gt;
&lt;table id="tally" border="1" cellspacing="0" style="margin:4 0px;" width="200"&gt;
&lt;tfoot&gt;&lt;tr&gt;&lt;th colspan="4"&gt;0&lt;/th&gt;&lt;/tr&gt;&lt;/tfoot&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;0&lt;/th&gt;&lt;th&gt;0&lt;/th&gt;&lt;th&gt;0&lt;/th&gt;&lt;th&gt;0&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;div id="history" style="width:492px; border:1px solid black;background-color:#888;padding:4px;margin:4 0px;"&gt;&lt;/div&gt;

&lt;script type="text/javascript"&gt;
function initialize(id)
{
  var canvas = document.getElementById(id);
  if (canvas.getContext)
  {
    canvas.addEventListener('click', canvas_click, false);

    canvas.pieces = new Array( new Piece("#FF9900", "#B36B00", "#FFE6BF", "#FFCC80"),
          new Piece("#0033CC", "#00248F", "#BFCFFF", "#809FFF"),
          new Piece("#400099", "#2D006B", "#DABFFF", "#B580FF"),
          new Piece("#FFE500", "#B3A000", "#FFF9BF", "#FFF280") );

    var tally = document.getElementById("tally").tBodies[0];
    for(var i=0; i &lt; canvas.pieces.length; i++)
      tally.rows[0].cells[i].style.backgroundColor = canvas.pieces[i].colors[3];
  }
}

function newgame(id)
{
  var canvas = document.getElementById(id);
  if (canvas.getContext)
  {
    canvas.board = {
      rows: 8, cols: 10, cells: new Array()
    };
    canvas.height = 400;
    canvas.width = canvas.board.cols * canvas.height/canvas.board.rows;

    Piece.prototype.sx = canvas.width / canvas.board.cols;
    Piece.prototype.sy = canvas.height / canvas.board.rows;
    Piece.prototype.canvasheight = canvas.height;

    var ctx = canvas.getContext('2d');
    for(var i=0; i &lt; canvas.pieces.length; i++)
      canvas.pieces[i].makeGrads(ctx);

    for(var i=0; i &lt; canvas.board.cols; i++)
      canvas.board.cells.push(new Array(canvas.board.rows));

    var pool = new Array(canvas.board.rows * canvas.board.cols);
    for(var i=0; i &lt; pool.length; i++)
      pool[i] = i % canvas.pieces.length;

    pool = shuffle(pool);

    for(var r=0; r &lt; canvas.board.rows; r++)
      for(var c=0; c &lt; canvas.board.cols; c++)
 canvas.board.cells[c][r] = pool.pop();

    var tally = draw(canvas);

    updateTally(tally, document.getElementById("tally"));

    document.getElementById("clicks").value = 0;
  }
}

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]
function shuffle(o)
{ //v1.0
  for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
  return o;
};

function canvas_click(e)
{
  var canvas = this;
  var pos = findPositionWithScrolling(canvas);
//  pos[0] -= document.body.scrollLeft;
//  pos[1] -= document.body.scrollTop;
  var c = Math.floor((e.pageX-pos[0]) / canvas.pieces[0].sx),
      r = Math.floor((canvas.height - (e.pageY-pos[1])) / canvas.pieces[0].sy);
  if(canMove(canvas,c,r)) {
    updateClicks(1);
    processMove(canvas,c,r);
    collapse(canvas);
    var tally = draw(canvas);
    updateTally(tally, document.getElementById("tally"));
  }
}

// @http://www.howtocreate.co.uk/tutorials/javascript/browserspecific
function findPositionWithScrolling( oElement ) {
  function getNextAncestor( oElement ) {
    var actualStyle;
    if( window.getComputedStyle ) {
      actualStyle = getComputedStyle(oElement,null).position;
    } else if( oElement.currentStyle ) {
      actualStyle = oElement.currentStyle.position;
    } else {
      //fallback for browsers with low support - only reliable for inline styles
      actualStyle = oElement.style.position;
    }
    if( actualStyle == 'absolute' || actualStyle == 'fixed' ) {
      //the offsetParent of a fixed position element is null so it will stop
      return oElement.offsetParent;
    }
    return oElement.parentNode;
  }
  if( typeof( oElement.offsetParent ) != 'undefined' ) {
    var originalElement = oElement;
    for( var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent ) {
      posX += oElement.offsetLeft;
      posY += oElement.offsetTop;
    }
    if( !originalElement.parentNode || !originalElement.style || typeof( originalElement.scrollTop ) == 'undefined' ) {
      //older browsers cannot check element scrolling
      return [ posX, posY ];
    }
    oElement = getNextAncestor(originalElement);
    while( oElement &amp;&amp; oElement != document.body &amp;&amp; oElement != document.documentElement ) {
      posX -= oElement.scrollLeft;
      posY -= oElement.scrollTop;
      oElement = getNextAncestor(oElement);
    }
    return [ posX, posY ];
  } else {
    return [ oElement.x, oElement.y ];
  }
}

function draw(canvas)
{
  var ctx = canvas.getContext('2d');

  var tally = new Array(canvas.pieces.length);
  tally.connected = new Array(canvas.pieces.length);
  for(var i=0; i &lt; tally.length; i++)
  {
    tally[i] = 0;
    tally.connected[i] = 0;
  }
  ctx.clearRect(0,0,canvas.width,canvas.height);

  for(var r=0; r &lt; canvas.board.rows; r++)
    for(var c=0; c &lt; canvas.board.cols; c++)
    {
      var p = canvas.board.cells[c][r];
      if(p != null)
      {
 var con = getConnections(canvas, c, r);
 canvas.pieces[p].draw(ctx, c, r, con);
 tally[p] += 1;
 tally.connected[p] += (con.left||con.up) ? 1 : 0;
      }
    }

  return tally;
}

function updateTally(tally, table)
{
  var sum = 0, con = 0;
  for(var i=0; i&lt;tally.length; i++)
  {
    var c = table.tBodies[0].rows[0].cells[i];
    c.replaceChild(document.createTextNode(tally[i]), c.lastChild);
    sum += tally[i];
    con += tally.connected[i];
  }
  var c = table.tFoot.rows[0].cells[0];
  c.replaceChild(document.createTextNode(sum), c.lastChild);

  if(con &gt; 0)
    c.style.backgroundColor = "#8f8";
  else {
    c.style.backgroundColor = "#f44";
    updateClicks(sum);
    updateHistory(1*document.getElementById("clicks").value);
  }
}

function Piece(color1, color2, color3, color4)
{
  this.colors = [color1, color2, color3, color4];
}

Piece.prototype.makeGrads = function(ctx)
{
  function addColorStops(p, g) {
    g.addColorStop(0, p.colors[2]);
    g.addColorStop(0.1, p.colors[3]);
    g.addColorStop(0.8, p.colors[0]);
    g.addColorStop(1, p.colors[1]);
  }

  this.gradient = ctx.createRadialGradient(this.sx/3,this.sx/3,this.sx/12,this.sx/2,this.sy/2,0.9*this.sx/2);
  addColorStops(this, this.gradient);

  this.gradienth = ctx.createLinearGradient(0,this.sy/4,0,3*this.sy/4);
  addColorStops(this, this.gradienth);

  this.gradientv = ctx.createLinearGradient(this.sx/4,0,3*this.sx/4,0);
  addColorStops(this, this.gradientv);
}

Piece.prototype.draw = function(ctx, x, y, connected)
{
  ctx.save();
  ctx.translate(x*this.sx, this.canvasheight-(y+1)*this.sy);

  ctx.globalCompositeOperation = "destination-over";

  if(connected.left)
  {
    ctx.fillStyle = this.gradienth;
    ctx.fillRect(-this.sx/2,this.sy/2-this.sy/4,this.sx,this.sy/2);
  }
  if(connected.up)
  {
    ctx.fillStyle = this.gradientv;
    ctx.fillRect(this.sx/2-this.sx/4,this.sy/2,this.sx/2,this.sy);
  }
  if(connected.block)
  {
    ctx.fillStyle = this.colors[1];
    ctx.fillRect(-this.sx/3,this.sy-this.sy/3,2*this.sx/3,2*this.sy/3);
  }

  ctx.fillStyle = this.gradient;
  ctx.globalCompositeOperation = "source-over";
  ctx.beginPath();
  ctx.arc(this.sx/2,this.sy/2,0.9*this.sx/2,0,Math.PI*2,true);
  ctx.fill();

  ctx.restore();
}

function getConnections(canvas, c, r)
{
  var up = false, left = false, block = false;

  if(c&gt;0 &amp;&amp; canvas.board.cells[c][r]==canvas.board.cells[c-1][r]) left = true;
  if(r&gt;0 &amp;&amp; canvas.board.cells[c][r]==canvas.board.cells[c][r-1]) up = true;

  if(up &amp;&amp; left &amp;&amp; canvas.board.cells[c][r]==canvas.board.cells[c-1][r-1]) block = true;

  return { up: up, left: left, block: block };
}

function canMove(canvas, c, r)
{
  var p = canvas.board.cells[c][r];

  if(p == null) return false;

  return (c &gt; 0 &amp;&amp; canvas.board.cells[c-1][r]==p
   || r &gt; 0 &amp;&amp; canvas.board.cells[c][r-1]==p
   || c+1 &lt; canvas.board.cols &amp;&amp; canvas.board.cells[c+1][r]==p
   || r+1 &lt; canvas.board.rows &amp;&amp; canvas.board.cells[c][r+1]==p);
}

function processMove(canvas, c, r)
{
  var p = canvas.board.cells[c][r];
  canvas.board.cells[c][r] = null;

  if(c &gt; 0 &amp;&amp; canvas.board.cells[c-1][r]==p) processMove(canvas, c-1, r);
  if(r &gt; 0 &amp;&amp; canvas.board.cells[c][r-1]==p) processMove(canvas, c, r-1);
  if(c+1 &lt; canvas.board.cols &amp;&amp; canvas.board.cells[c+1][r]==p) processMove(canvas, c+1, r);
  if(r+1 &lt; canvas.board.rows &amp;&amp; canvas.board.cells[c][r+1]==p) processMove(canvas, c, r+1);
}

function collapse(canvas)
{
  for(var c=0; c &lt; canvas.board.cols; c++)
  {
    for(var r=0, b=0; r &lt; canvas.board.rows; r++)
      if(canvas.board.cells[c][r] != null)
 canvas.board.cells[c][b++] = canvas.board.cells[c][r];
    for(;b &lt; canvas.board.rows;b++)
      canvas.board.cells[c][b] = null;
  }

  for(var c=0, b=0; c &lt; canvas.board.cols; c++)
    if(canvas.board.cells[c][0] != null)
    {
      for(var r=0; r &lt; canvas.board.rows; r++)
 canvas.board.cells[b][r] = canvas.board.cells[c][r];
      b++;
    }
  for(;b &lt; canvas.board.cols;b++)
    for(var r=0; r &lt; canvas.board.rows; r++)
      canvas.board.cells[b][r] = null;
}

function updateClicks(clicks)
{
  document.getElementById("clicks").value = 1*document.getElementById("clicks").value + clicks;
}

function updateHistory(clicks)
{
  var hist = document.getElementById("history");
  var row = document.createElement("div");
  row.style.fontSize = "0.8em";
  row.style.border = "1px solid gray";
  row.style.lineHeight = "1em; overflow: hidden";
  row.style.width = 0.25*clicks+"em";
  row.appendChild(document.createTextNode(clicks));
  hist.insertBefore(row, hist.firstChild);

  // update history colours
  var min = 1000, max = 0, sum = 0;
  for(var i=0; i &lt; hist.childNodes.length; i++)
  {
    var s = 1*hist.childNodes[i].textContent;
    min = min &lt; s ? min : s;
    max = max &gt; s ? max : s;
    sum += s;
  }
  var avg = sum/hist.childNodes.length;

  for(var i=0; i &lt; hist.childNodes.length; i++)
  {
    var s = 1*hist.childNodes[i].textContent;
    if(s&gt;=avg) {
      var p = (s-avg)/(1+max-avg);
      hist.childNodes[i].style.backgroundColor = "rgb(255,"+Math.floor(255*(1-p))+",0)";
    } else {
      var p = (s-min)/(1+avg-min);
      hist.childNodes[i].style.backgroundColor = "rgb("+Math.floor(255*p)+",255,0)";
    }
  }
}

initialize('board'); newgame('board');
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-5129501011837154843?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/5129501011837154843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=5129501011837154843' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/5129501011837154843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/5129501011837154843'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/09/simple-game-using-javascript-and-canvas.html' title='A simple game using JavaScript and the CANVAS element'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-8716994297046229854</id><published>2008-08-25T18:56:00.003+10:00</published><updated>2008-08-25T20:38:46.020+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='awk'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><title type='text'>Analysing GPS Logs with Awk</title><content type='html'>&lt;p&gt;This post describes the first two "chop" functions that fit into the &lt;a href="http://successlessness.blogspot.com/2008/08/automatically-partitioning-gps-logs.html"&gt;partitioning framework outlined last post&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;def chopToSpeedHistogram(dest, p):
    # create histogram of speeds from nmea written to stdout
    os.system("cat "+sh_escape(dest)+".log"
              + " | awk -F , '{if($1==\"$GPVTG\" &amp;&amp; int($8)!=0){count[int($8+0.5)]++}}"
              + " END {for(w in count) printf(\"[%d,%d],\\n\", w, count[w]);}'"
              # sort it
              + " | sort -g -k 1.2"
              # output json of histogram
              + " &gt; "+sh_escape(dest)+".hist")

def chopToHeadingHistogram(dest, p):
    # create histogram of headings from nmea written to stdout (ignore heading when stopped)
    os.system("cat "+sh_escape(dest)+".log"
              + " | awk -F , '{if($1==\"$GPVTG\" &amp;&amp; int($8)!=0){count[5.0*int($2/5.0+0.5)]++;}}"
              + " END {for(w in count) printf(\"[%d,%d],\\n\", w, count[w]);}'"
              # sort it
              + " | sort -g -k 1.2"
              # output json of histogram
              + " &gt; "+sh_escape(dest)+".head")&lt;/pre&gt;
&lt;p&gt;Both functions use awk to create a histogram from the speed (in km/h) and heading (or bearing, in degrees) from the &lt;a href="http://www.gpsinformation.org/dale/nmea.htm#VTG"&gt;NMEA VTG&lt;/a&gt; sentences.  The speed is rounded to an integer, and the bearing to the nearest 5 degrees.  The data logger records on reading per second, so this gives a measure of how much time was spent at each speed/bearing.&lt;/p&gt;
&lt;p&gt;The histogram is output in a "json" array format that can be inserted straight into a webpage where the &lt;a href="http://code.google.com/p/flot/"&gt;flot&lt;/a&gt; library is used to generate some graphs.&lt;/p&gt;
&lt;h4&gt;Speed Histogram&lt;/h4&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_yvQpQviYWT0/SLKEQ87J2UI/AAAAAAAAADs/BKJS4AM0b1s/s1600-h/speed-histogram-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_yvQpQviYWT0/SLKEQ87J2UI/AAAAAAAAADs/BKJS4AM0b1s/s400/speed-histogram-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5238394743352318274" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The average and standard deviation (shaded at &amp;plusmn;0.5&amp;sigma;) are indicated on the graph  for two bike rides along the same route, and match pretty closely with that recorded by my bike computer:&lt;/p&gt;
&lt;table border="1" cellspacing="0"&gt;
&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th colspan="3"&gt;GPS log&lt;/th&gt;&lt;th colspan="3"&gt;Bike computer&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Ride 1 (brown)&lt;/th&gt;
&lt;td&gt;2hrs 59 min, minus 41 min stopped&lt;/td&gt;&lt;td&gt;63.4km&lt;/td&gt;&lt;td&gt;27.7km/h&lt;/td&gt;
&lt;td&gt;2 hrs 16 min&lt;/td&gt;&lt;td&gt;64.01km&lt;/td&gt;&lt;td&gt;28.00km/h&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Ride 2 (dark green)&lt;/th&gt;
&lt;td&gt;2 hrs 25 min, minus 13 min stopped&lt;/td&gt;&lt;td&gt;63.4km&lt;/td&gt;&lt;td&gt;29.0km/h&lt;/td&gt;
&lt;td&gt;2 hrs 10 min&lt;/td&gt;&lt;td&gt;63.85km&lt;/td&gt;&lt;td&gt;29.30km/h&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;The two rides went in different directions, the first in the "uphill" direction and the second with a bit of a tail wind.  I got a flat tire on the first ride too, hence the extra time spent stopped.&lt;/p&gt;
&lt;h4&gt;Heading Histogram&lt;/h4&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yvQpQviYWT0/SLKEBd-q2QI/AAAAAAAAADc/9kFtoCEJHi8/s1600-h/heading-histogram-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_yvQpQviYWT0/SLKEBd-q2QI/AAAAAAAAADc/9kFtoCEJHi8/s400/heading-histogram-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5238394477347526914" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Up is north and the radius represents the time spent heading in that direction (normalized during the plotting process and "expanded" by taking the square root to show a little more detail.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-8716994297046229854?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/8716994297046229854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=8716994297046229854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8716994297046229854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8716994297046229854'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/08/analysing-gps-logs-with-awk.html' title='Analysing GPS Logs with Awk'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_yvQpQviYWT0/SLKEQ87J2UI/AAAAAAAAADs/BKJS4AM0b1s/s72-c/speed-histogram-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-983817526512157056</id><published>2008-08-21T14:47:00.002+10:00</published><updated>2008-08-21T16:30:12.971+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Automatically Partitioning GPS Logs with gpsbabel</title><content type='html'>&lt;p&gt;My &lt;a href="http://successlessness.blogspot.com/2008/08/amod-agl3080-gps-data-logger.html"&gt;GPS logger&lt;/a&gt; is capturing lots of useful information but it's difficult to efficiently capture data for regular activities.  Geotagging photos is easy, and manually working with the logs for a special event is possible, but it's not feasible to put in that much work to analyze commutes for example.&lt;/p&gt;
&lt;p&gt;The logger creates a separate log file each time it's switched on and off, and while these logs could be sorted into categories for analysis, it's easy to forget to turn it on and off at the start and end of a section of interest and activities are then merged in the logs.  In addition, there is often "junk" data at start and end of logs while leaving or arriving at a destination.&lt;/p&gt;
&lt;p&gt;I wanted to be able to automatically capture the information about my daily activities by simply switching on the logger and carrying it around with me.  I then simply want to plug the logger into the computer and have the logs automatically chopped into segments of interest that can be compared to each other over time.&lt;/p&gt;
&lt;p&gt;The rest of this post roughly outlines the Python script I created to perform this task, minus some of the hopefully irrelevant details.&lt;/p&gt;
&lt;p&gt;Firstly, I collect the lat/long coordinates of places that I am interested in collecting data while I'm there and traveling between them.  These include my home, work, the climbing gym and so on.  Each point has a radius within which any readings will be considered to be in that place.&lt;/p&gt;
&lt;pre&gt;#         id:  name lat         long        radius
places = { 1: ("A", -37.123456, 145.123456, 0.050),
           2: ("B", -37.234567, 145.234567, 0.050),
           3: ("C", -37.345678, 145.345678, 0.050) }
otherid = 4&lt;/pre&gt;
&lt;p&gt;For each of these places of interest, I then use &lt;a href="http://www.gpsbabel.org/"&gt;gpsbabel&lt;/a&gt;'s &lt;a href="http://www.gpsbabel.org/htmldoc-1.3.3/filter_radius.html"&gt;radius filter&lt;/a&gt; to find all the times where I was within that zone:&lt;/p&gt;
&lt;pre&gt;# create a list of all raw log files to be processed
from path import path
month = path("/gpslogs/200808")
logs = " ".join(["-i nmea -f %s"%log 
                 for log in sorted((month/"raw").files("GPS_*.log"))])

for (id,(place,lat,lon,radius)) in places.items():
   os.system("gpsbabel "
             # input files
             + logs
             # convert to waypoints
             + " -x transform,wpt=trk,del"
             # remove anything outside place of interest
             + (" -x radius,distance=%.3fK,lat=%.6f,lon=%.6f,nosort"%(radius,lat,lon))
             # convert back to tracks
             + " -x transform,trk=wpt,del"
             # output nmea to stdout
             + " -o nmea -F -"
             # filter to just GPRMC sentences
             + " | grep GPRMC"
             # output to log file
             + (" &gt; %s/processed/place%d.log"%(month,id)))&lt;/pre&gt;
&lt;p&gt;And all points outside any of the specific places of interest are sent into an "other" file:&lt;/p&gt;
&lt;pre&gt;os.system("gpsbabel "
          # input files
          + logs
          # convert to waypoints
          + " -x transform,wpt=trk,del"
          # remove anything in a place of interest
          + "".join([" -x radius,distance=%.3fK,lat=%.6f,lon=%.6f,nosort,exclude"%(radius,lat,lon)
                     for (id,(place,lat,lon,radius)) in places.items()])
          # convert back to tracks
          + " -x transform,trk=wpt,del"
          # output nmea to stdout
          + " -o nmea -F -"
          # filter to just GPRMC sentences
          + " | grep GPRMC"
          # output to log file
          + (" &gt; %s/processed/place%d.log" % (month, otherid)))&lt;/pre&gt;
&lt;p&gt;These files are filtered with grep to contain only minimal data as we only require the timestamps for this part of the process.  Specifically only the &lt;a href="http://www.gpsinformation.org/dale/nmea.htm#RMC"&gt;NMEA GPRMC&lt;/a&gt; sentences are kept.&lt;/p&gt;
&lt;p&gt;To provide a brief illustration, the following picture shows two log files of data, a blue and a green, between three points of interest:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_yvQpQviYWT0/SKz007zje4I/AAAAAAAAADU/UwQP80k_m7Q/s1600-h/partition+diagram+1a.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_yvQpQviYWT0/SKz007zje4I/AAAAAAAAADU/UwQP80k_m7Q/s400/partition+diagram+1a.png" alt="" id="BLOGGER_PHOTO_ID_5236829656969345922" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The above process would create four files, one for each point A, B and C and one for "Other" points that would contain something like the following information, where the horizontal axis represents time:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yvQpQviYWT0/SKz0LRQQZBI/AAAAAAAAADM/Z4frACNyxwA/s1600-h/partition+diagram+1b.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_yvQpQviYWT0/SKz0LRQQZBI/AAAAAAAAADM/Z4frACNyxwA/s400/partition+diagram+1b.png" alt="" id="BLOGGER_PHOTO_ID_5236828941172368402" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I then read all those log files back in to create a "time line" that for each timestamp stores my "location" in the sense that it knows whether I was "home", at "work" or somewhere between the two.&lt;/p&gt;
&lt;pre&gt;# dict of timestamp (seconds since epoch, UTC) to placeid
where = {}
for placeid in places.keys()+[otherid,]:
   for line in (month/"processed"/("place%d.log"%placeid)).lines():
      fields = line.split(",")
      # convert date/time to seconds since epoch (UTC)
      t, d = fields[1], fields[-3]
      ts = calendar.timegm( (2000+int(d[4:6]), int(d[2:4]), int(d[0:2]),
                             int(t[0:2]), int(t[2:4]), int(t[4:6])) )
      where[ts] = placeid&lt;/pre&gt;
&lt;p&gt;This is then summarised from one value per second to a list of "segments" with a start and end time and a location.  Unlogged time segments are also inserted at this point whenever there are no logged readings for 5 minutes or more.&lt;/p&gt;
&lt;pre&gt;# array of tuples (placeid, start, end, logged)
# placeid = 0 indicates "unknown location", i.e. unlogged
summary = []
current, start, stop, last_ts = 0, 0, 0, None
for ts in sorted(where.keys()):
   # detect and insert "gaps" if space between logged timestamps is greater than 5 minutes
   if last_ts and ts-last_ts &gt; 5*60:
      if current:
         summary.append( [current, start, stop, True] )
      current, start, stop = where[ts], ts, ts
      summary.append( [0, last_ts, ts, False] )
 
   last_ts = ts

   if where[ts] != current:
      if current:
         summary.append( [current, start, stop, True] )
      current, start, stop = where[ts], ts, ts
   else:
      stop = ts
summary.append( [current, start, stop, True] )&lt;/pre&gt;
&lt;p&gt;(If there's a more "Pythonic" way of writing that kind of code, I'd be interested in knowing it.)&lt;/p&gt;
&lt;p&gt;"Spurious" segments are then removed.  These show up because when the logger is inside buildings the location jumps around and often out of the 50m radius meaning that, for example, there will be a sequence of Home-Other-Home-Other-Home logs.  The "Other" segments that are between two known points of interest and less than 5 minutes long are deleted, as are "Other" segments that sit between a known place of interest and an unlogged segment.&lt;/p&gt;
&lt;p&gt;Based on the above graphic, the summary might look something like the following:&lt;/p&gt;
&lt;table cellspacing=0 border=1&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;start&lt;/th&gt;&lt;th&gt;end&lt;/th&gt;&lt;th&gt;location&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;10.00am&lt;/td&gt;&lt;td&gt;10.05am&lt;/td&gt;&lt;td&gt;A&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10.05am&lt;/td&gt;&lt;td&gt;10.30am&lt;/td&gt;&lt;td&gt;Other&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10.30am&lt;/td&gt;&lt;td&gt;10.35am&lt;/td&gt;&lt;td&gt;B&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10.35am&lt;/td&gt;&lt;td&gt;11.00am&lt;/td&gt;&lt;td&gt;Other&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=3&gt;...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The "Other" segments are then labelled if possible to indicate they were "commutes" between known locations:&lt;/p&gt;
&lt;table cellspacing=0 border=1&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;start&lt;/th&gt;&lt;th&gt;end&lt;/th&gt;&lt;th&gt;location&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;10.00am&lt;/td&gt;&lt;td&gt;10.05am&lt;/td&gt;&lt;td&gt;A&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10.05am&lt;/td&gt;&lt;td&gt;10.30am&lt;/td&gt;&lt;td&gt;A-B&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10.30am&lt;/td&gt;&lt;td&gt;10.35am&lt;/td&gt;&lt;td&gt;B&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10.35am&lt;/td&gt;&lt;td&gt;11.00am&lt;/td&gt;&lt;td&gt;B-C&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=3&gt;...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Some segments cannot be labeled automatically and are left as "Other".  This may be a trip out to a "one-off" location and back again, which can be left as "Other".  However, sometimes it is because the logger didn't lock onto the satellites within the 50m radius on the way out of a place of interest and these can be manually fixed up later.&lt;/p&gt;
&lt;p&gt;Once a list of "activities" has been obtained, with start and end times, it is easy to use gpsbabel again to split logs based on start and end of time segments:&lt;/p&gt;
&lt;pre&gt;for (place, start, stop, place_from, place_to, logged) in summary:
    dest = month / "processed" / ("%s-%s"%(time.strftime("%Y%m%d%H%M%S", time.localtime(start)),
                                           time.strftime("%Y%m%d%H%M%S", time.localtime(stop))))

   for (ext, chopFn) in [(".log", chopToLog),
                         (".kml", chopToKml), 
                         (".speed", chopToSpeedVsDistance), 
                         (".alt", chopToAltitudeVsDistance), 
                         (".hist", chopToSpeedHistogram),
                         (".head", chopToHeadingHistogram),
                         (".stops", chopToStopsVsDistance)]:
      if not (dest+ext).exists():
         chopFn(dest, locals())
         # make the file in case it was empty and not created
         (dest+ext).touch()&lt;/pre&gt;
&lt;p&gt;This generates a bunch of files for each segment, named with the start and end timestamps of the segment and an extension depending on the content.  The first "chop" function generates an NMEA format log file that is then processed further by the remaining "chop" functions.  The other chop functions will probably be explained in a later post, the first two are:&lt;/p&gt;
&lt;pre&gt;def chopToLog(dest, p):
    # filter input file entries within times of interest to temp file
    os.system("gpsbabel " + p["logs"]
              + (" -x track,merge,start=%s,stop=%s"
                 % (time.strftime("%Y%m%d%H%M%S", time.gmtime(p["start"])),
                    time.strftime("%Y%m%d%H%M%S", time.gmtime(p["stop"]))))
              + " -o nmea -F "+sh_escape(dest)+".log")

def chopToKml(dest, p):
    # create kml file with reduced resolution
    os.system("gpsbabel -i nmea -f "+sh_escape(dest)+".log"
              + " -x simplify,error=0.01k"
              + " -o kml -F "+sh_escape(dest)+".kml")

def sh_escape(p):
    return p.replace("(","\\(").replace(")","\\)").replace(" ","\\ ")&lt;/pre&gt;
&lt;p&gt;(Again, if there's a better way to handle escaping special characters in shell commands, I would like to know it.)&lt;/p&gt;
&lt;p&gt;Using this, I can simply plug in the logger, which launches an autorun script, and the end result are nicely segmented log files that I can map and graph.  More about that in another post.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-983817526512157056?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/983817526512157056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=983817526512157056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/983817526512157056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/983817526512157056'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/08/automatically-partitioning-gps-logs.html' title='Automatically Partitioning GPS Logs with gpsbabel'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_yvQpQviYWT0/SKz007zje4I/AAAAAAAAADU/UwQP80k_m7Q/s72-c/partition+diagram+1a.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-8539769977705584101</id><published>2008-08-18T22:28:00.000+10:00</published><updated>2008-08-18T22:41:40.140+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pc tips'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><title type='text'>GMail tip: "To be filtered" label</title><content type='html'>&lt;p&gt;I use GMail's filters a lot, and in particular have a "Newsletters" label that keeps "bacn" from getting into my Inbox (and instead just lights up my &lt;a href="http://successlessness.blogspot.com/2007/07/ambient-email-notifier.html"&gt;ambient email notifier&lt;/a&gt; green.)&lt;/p&gt;

&lt;p&gt;I've added a "to be filtered" label that I can apply to anything that slips into the Inbox  and then later on, when I have time, I can look at all these messages, select them in groups and use the "Filter messages like these" command to make sure they don't bother me again.&lt;/p&gt;

&lt;p&gt;This solves two problems: being taken out of the "flow" to create a filter, and perpetually handling the items manually and never getting around to creating a filter.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-8539769977705584101?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/8539769977705584101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=8539769977705584101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8539769977705584101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8539769977705584101'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/08/gmail-tip-to-be-filtered-label.html' title='GMail tip: &quot;To be filtered&quot; label'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-7918266489703324033</id><published>2008-08-18T12:53:00.003+10:00</published><updated>2008-08-18T13:19:01.785+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><title type='text'>AMOD AGL3080 GPS data logger</title><content type='html'>&lt;p&gt;I bought the &lt;a href="http://www.amazon.com/gp/product/B000WO6HJW?ie=UTF8&amp;tag=rtechrev-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B000WO6HJW"&gt;AMOD AGL3080 GPS data logger&lt;/a&gt; about a month ago now and am very happy with it.  Thanks Richard for a very helpful &lt;a href="http://scilib.typepad.com/techreviews/2008/01/amod-agl3080-ma.html"&gt;review&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I've left it on the default settings, logging everything in NMEA format at 1 second intervals.  It seems quite easy to change the logging interval and detail but at this stage, I'm hard pressed to imagine a situation where I'll need to as I've logged about 62 hours so far and only used about 50% of the 128mb capacity.&lt;/p&gt;

&lt;p&gt;It's a little larger than I'd like because it takes three AAA batteries.  I'm using &lt;a href="http://www.amazon.com/Sanyo-Eneloop-Pre-Charged-Rechargeable-Batteries/dp/B000IV2YLY/ref=sr_1_2?ie=UTF8&amp;s=electronics&amp;qid=1219029296&amp;sr=1-2"&gt;eneloops&lt;/a&gt; and getting between 10 and 12 hours per charge (changing them as soon as I notice the battery warning light flashing, I don't know how long it would continue running if left to run flat completely.)&lt;/p&gt;

&lt;p&gt;The logging seems quite accurate while driving and cycling, but has a lot of "jitter" while walking for some reason.  It generally locks onto the signal quickly enough once I get outside, but again while walking it seems to take an unusually long time to lock on which is a little frustrating.&lt;/p&gt;

&lt;p&gt;It's best feature is that it doesn't require any special software to access the logs.  It simply mounts as a USB drive allowing the NMEA format log files to be copied off.  This is great and makes it particularly attractive for Linux and Mac users.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-7918266489703324033?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/7918266489703324033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=7918266489703324033' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7918266489703324033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7918266489703324033'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/08/amod-agl3080-gps-data-logger.html' title='AMOD AGL3080 GPS data logger'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-3674620536460875550</id><published>2008-06-19T19:19:00.000+10:00</published><updated>2008-06-19T19:37:22.747+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><category scheme='http://www.blogger.com/atom/ns#' term='wine'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Using the Gosget GPS Data Logger in Linux via Wine (Ubuntu 8.04)</title><content type='html'>&lt;p&gt;I managed to get the &lt;a href="http://www.gosget.com/en_show.asp?id=94"&gt;Gosget GPS Data Logger S1&lt;/a&gt; to work under wine on Ubuntu 8.04 using (roughly) the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Plug it into a usb port, Ubuntu will hot-plug it as a serial port automatically (probably &lt;tt&gt;/dev/ttyUSB0&lt;/tt&gt;).
&lt;li&gt;Set the baud rate on the serial port:&lt;br&gt;&lt;tt&gt;stty 115200 &lt; /dev/ttyUSB0&lt;/tt&gt;&lt;br&gt;(I'm not sure if this is persistent after a reboot or not...)
&lt;li&gt;Create a "com" port in wine:&lt;br&gt;&lt;tt&gt;ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1&lt;/tt&gt;
&lt;li&gt;Put in the CD and run the installer in Wine:&lt;br&gt;&lt;tt&gt;wine d:\PC\DataLogUtility\DataLogUtility.exe&lt;/tt&gt;
&lt;li&gt;Run the Data Log Data Downloader via wine, put in the com port, connect, set a download folder and you'll be able to get .nmea files from the data logger.
&lt;li&gt;To convert the .nmea file to a .kml file I used &lt;tt&gt;&lt;a href="http://www.gpsbabel.org/"&gt;gpsbabel&lt;/a&gt; -i nmea -o kml &lt;em&gt;source.nmea&lt;/em&gt; &lt;em&gt;dest.kml&lt;/em&gt;&lt;/tt&gt;.
&lt;/ol&gt;
&lt;p&gt;Figuring that out gave me a headache, hopefully this post will save someone else one.  Please note however, that I'm writing the commands from memory so there may be something (hopefully harmless) wrong.&lt;/p&gt;
&lt;p&gt;Also, if you switch the data logger into "G_Mouse" mode, it's possible to use &lt;a href="http://gpsd.berlios.de/"&gt;&lt;tt&gt;gpsd&lt;/tt&gt;&lt;/a&gt; to get GPS data in real-time.  I switched the data-logger into "G_Mouse" mode via a Windows machine, but I presume the Data Log Data Downloader can do that via wine too.&lt;/p&gt;
&lt;p&gt;And, &lt;tt&gt;gpsd&lt;/tt&gt; and &lt;tt&gt;gpsbabel&lt;/tt&gt; are both in the Ubuntu 8.04 repositories.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-3674620536460875550?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/3674620536460875550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=3674620536460875550' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/3674620536460875550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/3674620536460875550'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/06/using-gosget-gps-data-logger-in-linux.html' title='Using the Gosget GPS Data Logger in Linux via Wine (Ubuntu 8.04)'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-4268563314233679330</id><published>2008-05-18T17:31:00.000+10:00</published><updated>2008-08-18T22:42:41.365+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='picaxe'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='electronics projects'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ambient Email Notifier in Linux</title><content type='html'>&lt;p&gt;I finally got around to hooking up my &lt;a href="http://successlessness.blogspot.com/2007/07/ambient-email-notifier.html"&gt;Ambient Email Notifier&lt;/a&gt; under Ubuntu.  No idea why I waited so long, given it pretty much worked as soon as I plugged it in!&lt;/p&gt;
&lt;p&gt;The Linux kernel has drivers for the CP2102 USB-to-RS232 chip built in, so as soon as it was plugged in it showed up as &lt;tt&gt;/dev/ttyUSB0&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;The Python-Serial module is in the Ubuntu repositories, so after installing that, I just changed my &lt;a href="http://successlessness.blogspot.com/2008/02/ambient-email-notifier-some-code.html"&gt;&lt;tt&gt;checkinbox.py&lt;/tt&gt; script&lt;/a&gt; to use &lt;tt&gt;/dev/ttyUSB0&lt;/tt&gt; instead of &lt;tt&gt;COM3&lt;/tt&gt; and added a cron job to check every 10 minutes.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-4268563314233679330?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/4268563314233679330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=4268563314233679330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4268563314233679330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4268563314233679330'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/05/ambient-email-notifier-in-linux.html' title='Ambient Email Notifier in Linux'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-5260043510960918256</id><published>2008-05-18T13:50:00.001+10:00</published><updated>2008-06-17T11:39:42.223+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='weirdness'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 8.04 + Logitech iTouch Keyboard = Dead Battery?</title><content type='html'>&lt;p&gt;How is this possible?  I've got a Logitech iTouch wireless keyboard that's been working fine for years now and with Ubuntu 7.10 for 5 months, but after upgrading to Ubuntu 8.04, my keyboard batteries have gone flat 4 or 5 times now.  One or more of the batteries seems to "short out" to 0.1v or even go -ve.  I've tried 2 sets of NiMH batteries, one brand new and one that had been working fine for years.  Could it be anything other than a coincidence?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; After about 2 weeks of the batteries dying every day or so, I've now been on the same charge for about 2 weeks now.  So, I've no idea what update fixed it, but it's better now!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-5260043510960918256?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/5260043510960918256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=5260043510960918256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/5260043510960918256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/5260043510960918256'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/05/ubuntu-804-logitech-itouch-keyboard.html' title='Ubuntu 8.04 + Logitech iTouch Keyboard = Dead Battery?'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-8686004855948374698</id><published>2008-05-06T21:22:00.000+10:00</published><updated>2008-05-06T21:29:06.423+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tvout'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 8.04 and NVidia TVOut</title><content type='html'>&lt;p&gt;Upgrading to Ubuntu 8.04 has been fairly successful, but it took me a while to find out what had stopped my TV from working.  Nothing seemed to be different, same xorg.conf file, no errors in /var/log/Xorg.0.log, "space" in the desktop for the TV, but the TV was black.&lt;/p&gt;
&lt;p&gt;I finally found this &lt;a href="http://www.nvnews.net/vbulletin/showthread.php?t=112693"&gt;nvnews forum post&lt;/a&gt; that gave the clue, and adding the following to the "Device" section in my xorg.conf file did the trick:&lt;/p&gt;
&lt;pre&gt;Option "TVOutFormat" "SVIDEO"
Option "TVStandard" "PAL-G"
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-8686004855948374698?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/8686004855948374698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=8686004855948374698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8686004855948374698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8686004855948374698'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/05/ubuntu-804-and-nvidia-tvout.html' title='Ubuntu 8.04 and NVidia TVOut'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-5494130070681748038</id><published>2008-03-13T14:23:00.000+11:00</published><updated>2008-03-13T14:30:58.446+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wget itconversations'/><title type='text'>IT Conversations Premium Editions and wget</title><content type='html'>&lt;p&gt;The new &lt;a href="http://www.conversationsnetwork.org/premium/"&gt;premium editions&lt;/a&gt; of the IT Conversations shows are great, but I couldn't download them using &lt;a href="http://www.gnu.org/software/wget/"&gt;wget&lt;/a&gt;, e.g.:&lt;/p&gt;
&lt;pre&gt;
$ wget http://www.conversationsnetwork.org/audio/premium/username|email/ITC.Rails-TimBray-2007.05.19.mp3

--14:27:31--  http://www.conversationsnetwork.org/audio/premium/username
           =&gt; `username'
Resolving www.conversationsnetwork.org... 74.53.160.146
Connecting to www.conversationsnetwork.org|74.53.160.146|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
14:27:32 ERROR 404: Not Found.
&lt;/pre&gt;
&lt;p&gt;The problem was caused by the | character separating the username and email address in the personalised URL.  &amp;quot;URL encoding&amp;quot; this to "%7C" fixed the problem.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-5494130070681748038?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/5494130070681748038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=5494130070681748038' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/5494130070681748038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/5494130070681748038'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/03/it-conversations-premium-editions-and.html' title='IT Conversations Premium Editions and wget'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-4525736306786204242</id><published>2008-02-29T22:09:00.002+11:00</published><updated>2008-12-02T11:19:30.297+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='picaxe'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='electronics projects'/><title type='text'>Ambient Email Notifier (some code)</title><content type='html'>&lt;p&gt;&lt;a href="http://successlessness.blogspot.com/2007/07/ambient-email-notifier.html#c7585918830217641316"&gt;Will asked&lt;/a&gt; about the code I was using in my &lt;a href="http://successlessness.blogspot.com/2007/07/ambient-email-notifier.html"&gt;ambient email notifier&lt;/a&gt;.  The full code is a bit difficult to figure out because I've got it tied to a system tray icon thingi, which can go in another post another day, but here are some relevant bits.&lt;/p&gt;
&lt;p&gt;First, you can get the number of emails with a particular label in gmail with the following Python code:&lt;/p&gt;
&lt;pre&gt;import feedparser
def msgCount(uid, pwd, filter):
    inbox = feedparser.parse("https://%s:%s@gmail.google.com/gmail/feed/atom%s" % (uid, pwd, filter))
    return len(inbox["entries"])&lt;/pre&gt;
&lt;p&gt;&lt;tt&gt;uid&lt;/tt&gt; is your gmail address without the &lt;tt&gt;@gmail.com&lt;/tt&gt; bit, &lt;tt&gt;filter&lt;/tt&gt; is &amp;quot;&amp;quot; for the inbox, and &amp;quot;/label/&amp;quot; to get messages tagged with a particular label.&lt;/p&gt;
&lt;p&gt;So, after calling &lt;tt&gt;msgCount&lt;/tt&gt; a few times, for different labels, I compute the colour of the RGB LED:&lt;/p&gt;
&lt;pre&gt;colour = (inbox &gt; 0 and 1 or 0) + (news &gt; 0 and 2 or 0) + (work &gt; 0 and 4 or 0)&lt;/pre&gt;
&lt;p&gt;This is sent over the serial port to the picaxe which decodes bit 0 for blue, 1 for green and 2 for red.&lt;/p&gt;
&lt;pre&gt;def triggerAmbient(colour):
    com = serial.Serial("COM3", 2400, timeout=0.25)
    for attempt in range(0,10):
        com.write("%c" % (colour) )
    com.close()&lt;/pre&gt;
&lt;p&gt;It tries to send a few times in case the picaxe doesn't get it the first time.  The code on the picaxe just listens for a byte on the serial input and outputs the lowest 4 bits to the output pins:&lt;/p&gt;
&lt;pre&gt;main:
 serout 0, n2400, ("Ok")
 serin 3, n2400, b0
 gosub nibble3
 b0 = b0 &amp; 7
 serout 0, n2400, (#b0)
 goto main
 
nibble3:
 if bit2 = 1 then
  high 1
 else
  low 1
 endif
 if bit1 = 1 then
  high 2
 else
  low 2
 endif
 if bit0 = 1 then
  high 4
 else
  low 4
 endif
 return &lt;/pre&gt;
&lt;p&gt;This means the python script has control over the colour and you can test that it's working by simply opening up a terminal on COM3 and typing away (A is 01000001 in ASCII, meaning pin 1 is switched on, B is 01000010 so pin 2 is on, etc.)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; I've detailed the changes I made to &lt;a href="http://successlessness.blogspot.com/2008/05/ambient-email-notifier-in-linux.html"&gt;get this working under Linux&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-4525736306786204242?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/4525736306786204242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=4525736306786204242' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4525736306786204242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4525736306786204242'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/02/ambient-email-notifier-some-code.html' title='Ambient Email Notifier (some code)'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-3993247074362140033</id><published>2008-02-29T20:51:00.002+11:00</published><updated>2008-03-01T20:06:20.330+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='encoder'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='cdripper'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='lame'/><category scheme='http://www.blogger.com/atom/ns#' term='abcde'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>abcde — A Better CD Encoder</title><content type='html'>&lt;p&gt;&lt;a href="http://www.hispalinux.es/~data/abcde.php"&gt;ABCDE&lt;/a&gt; is a nice CD ripper/encoder utility for Linux.&lt;/p&gt;
&lt;p&gt;It's all nice and automatic, and I managed to configure it to suit my mp3 management style pretty quickly.  My .abcde.conf file:&lt;/p&gt;
&lt;pre&gt;OUTPUTDIR=/home/tom/Desktop
OUTPUTTYPE=mp3
LAMEOPTS='-h -b 224'
ACTIONS=default,playlist
OUTPUTFORMAT='${ARTISTFILE}/${ARTISTFILE} - ${TRACKFILE}'
VAOUTPUTFORMAT='Various/${ARTISTFILE} - ${TRACKFILE}'
PLAYLISTFORMAT='${ARTISTFILE}/${ARTISTFILE} - ${ALBUMFILE}.m3u'
VAPLAYLISTFORMAT='Various/Various - ${ALBUMFILE}.m3u'&lt;/pre&gt;
&lt;p&gt;That sets it up to rip to mp3s at 224kbs and write out a playlist file.  The files are saved onto the desktop to test before I move them to my mp3 folder in the "Artist/Artist - Track.mp3" name format that I prefer.&lt;/p&gt;
&lt;pre&gt;mungefilename () {
 echo "$@" | sed s,:,\ --\ ,g | sed s,/,\ --\ ,g | tr \* + | tr -d \"\?\[:cntrl:\]
}&lt;/pre&gt;
&lt;p&gt;I also changed the filename processing so that colons and forward slashes are converted to double dashes (my scripts use single dashes to split the artist from the track title.)  And I don't convert spaces to underscores and I leave single quotes alone.&lt;/p&gt;
&lt;pre&gt;MAXPROCS=2&lt;/pre&gt;
&lt;p&gt;Runs an encoder process on each core so it goes super fast.&lt;/p&gt;
&lt;p&gt;I run it from an icon on the desktop with the following command line:&lt;/p&gt;
&lt;pre&gt;gnome-terminal -x abcde&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; I just discovered the &amp;quot;&lt;tt&gt;gnome-terminal -x&lt;/tt&gt;&amp;quot; is unnecessary, there's an option to launch an application in a terminal window automatically...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-3993247074362140033?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/3993247074362140033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=3993247074362140033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/3993247074362140033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/3993247074362140033'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/02/abcde-better-cd-encoder.html' title='abcde &amp;mdash; A Better CD Encoder'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-2471832443674247905</id><published>2008-02-23T09:42:00.001+11:00</published><updated>2008-12-12T15:32:17.356+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualisation'/><category scheme='http://www.blogger.com/atom/ns#' term='filesystem'/><category scheme='http://www.blogger.com/atom/ns#' term='rsync'/><category scheme='http://www.blogger.com/atom/ns#' term='backups'/><title type='text'>Backup Log Visualisation</title><content type='html'>&lt;p&gt;I'm having a bit of trouble figuring out how to describe this.  It's a page that shows the current status and history of my &lt;a href="http://successlessness.blogspot.com/2008/01/ubuntu-file-system-setup.html"&gt;backup strategy&lt;/a&gt;, and hopefully it's fairly obvious what's going on.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yvQpQviYWT0/R79TOUC9DoI/AAAAAAAAACc/xfndn220iPc/s1600-h/Backup-logs-screenshot-2008-02-22.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_yvQpQviYWT0/R79TOUC9DoI/AAAAAAAAACc/xfndn220iPc/s320/Backup-logs-screenshot-2008-02-22.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5169942402608991874" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Each time the rsync process runs, the results are logged to a text file.  A python routine parses the log file to determine the time the rsync was run, the number of files copied etc.&lt;/p&gt;
&lt;p&gt;A little calendar indicates if a copy was made in each time slot of the day, this gives an interesting indication of when my computer is switched on.  A histogram at the top shows the all time counts, the calendar only shows the last 30 days.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_yvQpQviYWT0/R79ThkC9DpI/AAAAAAAAACk/6opACXjQaS4/s1600-h/Backup-logs-screenshot-2008-02-22-rsync-cal.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_yvQpQviYWT0/R79ThkC9DpI/AAAAAAAAACk/6opACXjQaS4/s400/Backup-logs-screenshot-2008-02-22-rsync-cal.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5169942733321473682" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'm using the &lt;a href="http://code.google.com/apis/chart/"&gt;Google Chart API&lt;/a&gt; to graph the number of files, total size, number of files copied and size of files copied.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yvQpQviYWT0/R79Th0C9DqI/AAAAAAAAACs/sGOP-o2rDLo/s1600-h/Backup-logs-screenshot-2008-02-22-rsync-total-files.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_yvQpQviYWT0/R79Th0C9DqI/AAAAAAAAACs/sGOP-o2rDLo/s400/Backup-logs-screenshot-2008-02-22-rsync-total-files.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5169942737616440994" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The results of sbackup are determined by looking at the dated backup files and their sizes and graphed on a calendar.  The size of the incremental and full backups are plotted on separate scales.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_yvQpQviYWT0/R79TiEC9DrI/AAAAAAAAAC0/KLFAGLC6GxQ/s1600-h/Backup-logs-screenshot-2008-02-22-sbackup.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_yvQpQviYWT0/R79TiEC9DrI/AAAAAAAAAC0/KLFAGLC6GxQ/s400/Backup-logs-screenshot-2008-02-22-sbackup.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5169942741911408306" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'm also running a dump from MySQL once a day.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_yvQpQviYWT0/R79TiEC9DsI/AAAAAAAAAC8/Q7ANLoAToiE/s1600-h/Backup-logs-screenshot-2008-02-22-mysql.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_yvQpQviYWT0/R79TiEC9DsI/AAAAAAAAAC8/Q7ANLoAToiE/s400/Backup-logs-screenshot-2008-02-22-mysql.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5169942741911408322" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-2471832443674247905?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/2471832443674247905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=2471832443674247905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2471832443674247905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2471832443674247905'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/02/backup-log-visualisation.html' title='Backup Log Visualisation'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_yvQpQviYWT0/R79TOUC9DoI/AAAAAAAAACc/xfndn220iPc/s72-c/Backup-logs-screenshot-2008-02-22.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-6660837000751992754</id><published>2008-02-17T14:34:00.003+11:00</published><updated>2008-12-12T15:32:18.308+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='audiobook'/><category scheme='http://www.blogger.com/atom/ns#' term='visualisation'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>Podcast and Audiobook Queue Visualisation</title><content type='html'>&lt;p&gt;Some screenshots of a little web app I created to visualise my podcast and audio book listening queue:&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yvQpQviYWT0/R7exT0C9DjI/AAAAAAAAAB0/WeUPfTzsGZI/s1600-h/Screenshot-Podcasts+and+Audio+Books+-+full.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_yvQpQviYWT0/R7exT0C9DjI/AAAAAAAAAB0/WeUPfTzsGZI/s400/Screenshot-Podcasts+and+Audio+Books+-+full.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167794051377598002" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_yvQpQviYWT0/R7exUkC9DmI/AAAAAAAAACM/Om1yyiPz834/s1600-h/Screenshot-Podcasts+and+Audio+Books+-+player.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_yvQpQviYWT0/R7exUkC9DmI/AAAAAAAAACM/Om1yyiPz834/s400/Screenshot-Podcasts+and+Audio+Books+-+player.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167794064262499938" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This shows files currently on my mp3 player.  The width of each file represents it's size, the "window width" being 128mb.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yvQpQviYWT0/R7exU0C9DnI/AAAAAAAAACU/wXRbmlxXYQ4/s1600-h/Screenshot-Podcasts+and+Audio+Books+-+to+copy.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_yvQpQviYWT0/R7exU0C9DnI/AAAAAAAAACU/wXRbmlxXYQ4/s400/Screenshot-Podcasts+and+Audio+Books+-+to+copy.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167794068557467250" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Files that will be copied during the next "sync" are indicated with a red dot.  Files are copied according to priority, to fill the player and to have only 3 audio book chapters at any time on the player unless there is nothing else to listen to.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yvQpQviYWT0/R7exUUC9DkI/AAAAAAAAAB8/U-_oTOyYTw4/s1600-h/Screenshot-Podcasts+and+Audio+Books+-+books.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_yvQpQviYWT0/R7exUUC9DkI/AAAAAAAAAB8/U-_oTOyYTw4/s400/Screenshot-Podcasts+and+Audio+Books+-+books.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167794059967532610" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Audio book chapters that have been copied/listened to already are highlighted, as are those that have been downloaded but not yet queued.&lt;/p&gt;
&lt;p&gt;The displayed title is taken from the id3 tags if possible, otherwise the filename is used.  Dates and redundant "book titles" are removed from the title if possible to maximise the amount displayed, and there is a "hover panel" to display other details.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yvQpQviYWT0/R7exUUC9DlI/AAAAAAAAACE/cDvefpZup0Q/s1600-h/Screenshot-Podcasts+and+Audio+Books+-+cal.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_yvQpQviYWT0/R7exUUC9DlI/AAAAAAAAACE/cDvefpZup0Q/s400/Screenshot-Podcasts+and+Audio+Books+-+cal.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5167794059967532626" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There's also a pretty calendar to provide a gauge of the age of podcasts in different categories.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-6660837000751992754?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/6660837000751992754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=6660837000751992754' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6660837000751992754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6660837000751992754'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/02/podcast-and-audiobook-queue.html' title='Podcast and Audiobook Queue Visualisation'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_yvQpQviYWT0/R7exT0C9DjI/AAAAAAAAAB0/WeUPfTzsGZI/s72-c/Screenshot-Podcasts+and+Audio+Books+-+full.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-3329296575240443910</id><published>2008-01-22T23:54:00.000+11:00</published><updated>2008-01-22T23:56:12.798+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualisation'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Photos by Day of Year</title><content type='html'>&lt;p&gt;One last &amp;quot;heat-map&amp;quot;, by day of the year:&lt;/p&gt;
&lt;table style="background-color#eee;font-size:0.8em;"&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Jan&lt;/th&gt;
&lt;th&gt;Feb&lt;/th&gt;
&lt;th&gt;Mar&lt;/th&gt;
&lt;th&gt;Apr&lt;/th&gt;
&lt;th&gt;May&lt;/th&gt;
&lt;th&gt;Jun&lt;/th&gt;
&lt;th&gt;Jul&lt;/th&gt;
&lt;th&gt;Aug&lt;/th&gt;
&lt;th&gt;Sep&lt;/th&gt;
&lt;th&gt;Oct&lt;/th&gt;
&lt;th&gt;Nov&lt;/th&gt;
&lt;th&gt;Dec&lt;/th&gt;&lt;th&gt;Total&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;&lt;tr&gt;&lt;th&gt;1&lt;/th&gt;&lt;td style="background-color:#85ff2c;"&gt;174&lt;/td&gt;
&lt;td style="background-color:#ffff00;"&gt;390&lt;/td&gt;
&lt;td style="background-color:#ebeeeb;"&gt;1&lt;/td&gt;
&lt;td style="background-color:#b0f4b0;"&gt;21&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;
&lt;td style="background-color:#d3f0d3;"&gt;9&lt;/td&gt;
&lt;td style="background-color:#c7f1c7;"&gt;13&lt;/td&gt;
&lt;td style="background-color:#58fc58;"&gt;51&lt;/td&gt;
&lt;td style="background-color:#c7f1c7;"&gt;13&lt;/td&gt;
&lt;td style="background-color:#d0f0d0;"&gt;10&lt;/td&gt;
&lt;td style="background-color:#bef2be;"&gt;16&lt;/td&gt;
&lt;td style="background-color:#4bff41;"&gt;72&lt;/td&gt;&lt;td style="background-color:#60ff39;"&gt;773&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2&lt;/th&gt;&lt;td style="background-color:#d9f0d9;"&gt;7&lt;/td&gt;
&lt;td style="background-color:#deff0b;"&gt;332&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;
&lt;td style="background-color:#c7f1c7;"&gt;13&lt;/td&gt;
&lt;td style="background-color:#b6f3b6;"&gt;19&lt;/td&gt;
&lt;td style="background-color:#d6f0d6;"&gt;8&lt;/td&gt;
&lt;td style="background-color:#b6f3b6;"&gt;19&lt;/td&gt;
&lt;td style="background-color:#5dfc5d;"&gt;49&lt;/td&gt;
&lt;td style="background-color:#52ff3e;"&gt;83&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;15&lt;/td&gt;&lt;td style="background-color:#74fa74;"&gt;588&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;3&lt;/th&gt;&lt;td style="background-color:#81f881;"&gt;37&lt;/td&gt;
&lt;td style="background-color:#bcff18;"&gt;271&lt;/td&gt;
&lt;td style="background-color:#c7f1c7;"&gt;13&lt;/td&gt;
&lt;td style="background-color:#d3f0d3;"&gt;9&lt;/td&gt;
&lt;td style="background-color:#87f887;"&gt;35&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;7&lt;/td&gt;
&lt;td style="background-color:#57ff3c;"&gt;93&lt;/td&gt;
&lt;td style="background-color:#6ffa6f;"&gt;43&lt;/td&gt;
&lt;td style="background-color:#64ff38;"&gt;115&lt;/td&gt;
&lt;td style="background-color:#7bf97b;"&gt;39&lt;/td&gt;
&lt;td style="background-color:#60fc60;"&gt;48&lt;/td&gt;
&lt;td style="background-color:#78f978;"&gt;40&lt;/td&gt;&lt;td style="background-color:#58ff3c;"&gt;750&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;4&lt;/th&gt;&lt;td style="background-color:#dcefdc;"&gt;6&lt;/td&gt;
&lt;td style="background-color:#53ff3e;"&gt;86&lt;/td&gt;
&lt;td style="background-color:#caf1ca;"&gt;12&lt;/td&gt;
&lt;td style="background-color:#b6f3b6;"&gt;19&lt;/td&gt;
&lt;td style="background-color:#e2efe2;"&gt;4&lt;/td&gt;
&lt;td style="background-color:#a7f5a7;"&gt;24&lt;/td&gt;
&lt;td style="background-color:#95f695;"&gt;30&lt;/td&gt;
&lt;td style="background-color:#8cff29;"&gt;186&lt;/td&gt;
&lt;td style="background-color:#6eff34;"&gt;133&lt;/td&gt;
&lt;td style="background-color:#7ef97e;"&gt;38&lt;/td&gt;
&lt;td style="background-color:#74ff32;"&gt;144&lt;/td&gt;
&lt;td style="background-color:#8af78a;"&gt;34&lt;/td&gt;&lt;td style="background-color:#4cff41;"&gt;716&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;5&lt;/th&gt;&lt;td style="background-color:#4aff41;"&gt;70&lt;/td&gt;
&lt;td style="background-color:#5bff3b;"&gt;99&lt;/td&gt;
&lt;td style="background-color:#e8eee8;"&gt;2&lt;/td&gt;
&lt;td style="background-color:#caf1ca;"&gt;12&lt;/td&gt;
&lt;td style="background-color:#e2efe2;"&gt;4&lt;/td&gt;
&lt;td style="background-color:#dfefdf;"&gt;5&lt;/td&gt;
&lt;td style="background-color:#69fb69;"&gt;45&lt;/td&gt;
&lt;td style="background-color:#5dfc5d;"&gt;49&lt;/td&gt;
&lt;td style="background-color:#4aff41;"&gt;70&lt;/td&gt;
&lt;td style="background-color:#caf1ca;"&gt;12&lt;/td&gt;
&lt;td style="background-color:#4dff40;"&gt;74&lt;/td&gt;
&lt;td style="background-color:#55fd55;"&gt;52&lt;/td&gt;&lt;td style="background-color:#9ff59f;"&gt;494&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;6&lt;/th&gt;&lt;td style="background-color:#4cff40;"&gt;73&lt;/td&gt;
&lt;td style="background-color:#54ff3d;"&gt;88&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#dfefdf;"&gt;5&lt;/td&gt;
&lt;td style="background-color:#46fe46;"&gt;57&lt;/td&gt;
&lt;td style="background-color:#4cfe4c;"&gt;55&lt;/td&gt;
&lt;td style="background-color:#98f698;"&gt;29&lt;/td&gt;
&lt;td style="background-color:#57ff3c;"&gt;93&lt;/td&gt;
&lt;td style="background-color:#52ff3e;"&gt;84&lt;/td&gt;
&lt;td style="background-color:#80ff2d;"&gt;166&lt;/td&gt;
&lt;td style="background-color:#66ff37;"&gt;120&lt;/td&gt;
&lt;td style="background-color:#bcf2bc;"&gt;17&lt;/td&gt;&lt;td style="background-color:#66ff37;"&gt;787&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;7&lt;/th&gt;&lt;td style="background-color:#82ff2d;"&gt;169&lt;/td&gt;
&lt;td style="background-color:#5cff3a;"&gt;102&lt;/td&gt;
&lt;td style="background-color:#e8eee8;"&gt;2&lt;/td&gt;
&lt;td style="background-color:#4cfe4c;"&gt;55&lt;/td&gt;
&lt;td style="background-color:#cdf1cd;"&gt;11&lt;/td&gt;
&lt;td style="background-color:#52ff3e;"&gt;83&lt;/td&gt;
&lt;td style="background-color:#95f695;"&gt;30&lt;/td&gt;
&lt;td style="background-color:#aaf4aa;"&gt;23&lt;/td&gt;
&lt;td style="background-color:#68ff36;"&gt;123&lt;/td&gt;
&lt;td style="background-color:#7bf97b;"&gt;39&lt;/td&gt;
&lt;td style="background-color:#8af78a;"&gt;34&lt;/td&gt;
&lt;td style="background-color:#5dfc5d;"&gt;49&lt;/td&gt;&lt;td style="background-color:#4dff40;"&gt;720&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;8&lt;/th&gt;&lt;td style="background-color:#95ff26;"&gt;203&lt;/td&gt;
&lt;td style="background-color:#97ff25;"&gt;206&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;
&lt;td style="background-color:#4aff41;"&gt;70&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;
&lt;td style="background-color:#44ff43;"&gt;58&lt;/td&gt;
&lt;td style="background-color:#adf4ad;"&gt;22&lt;/td&gt;
&lt;td style="background-color:#54ff3d;"&gt;88&lt;/td&gt;
&lt;td style="background-color:#7bf97b;"&gt;39&lt;/td&gt;
&lt;td style="background-color:#69fb69;"&gt;45&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;&lt;td style="background-color:#61ff39;"&gt;774&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;9&lt;/th&gt;&lt;td style="background-color:#6cff35;"&gt;130&lt;/td&gt;
&lt;td style="background-color:#54ff3d;"&gt;88&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;7&lt;/td&gt;
&lt;td style="background-color:#b0f4b0;"&gt;21&lt;/td&gt;
&lt;td style="background-color:#e2efe2;"&gt;4&lt;/td&gt;
&lt;td style="background-color:#55ff3d;"&gt;89&lt;/td&gt;
&lt;td style="background-color:#63fb63;"&gt;47&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;15&lt;/td&gt;
&lt;td style="background-color:#58fc58;"&gt;51&lt;/td&gt;
&lt;td style="background-color:#5fff3a;"&gt;106&lt;/td&gt;
&lt;td style="background-color:#caf1ca;"&gt;12&lt;/td&gt;
&lt;td style="background-color:#4fff3f;"&gt;78&lt;/td&gt;&lt;td style="background-color:#59fc59;"&gt;648&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;10&lt;/th&gt;&lt;td style="background-color:#48ff42;"&gt;65&lt;/td&gt;
&lt;td style="background-color:#7aff30;"&gt;154&lt;/td&gt;
&lt;td style="background-color:#d3f0d3;"&gt;9&lt;/td&gt;
&lt;td style="background-color:#bcf2bc;"&gt;17&lt;/td&gt;
&lt;td style="background-color:#dfefdf;"&gt;5&lt;/td&gt;
&lt;td style="background-color:#58fc58;"&gt;51&lt;/td&gt;
&lt;td style="background-color:#58fc58;"&gt;51&lt;/td&gt;
&lt;td style="background-color:#a4f5a4;"&gt;25&lt;/td&gt;
&lt;td style="background-color:#caf1ca;"&gt;12&lt;/td&gt;
&lt;td style="background-color:#75ff31;"&gt;146&lt;/td&gt;
&lt;td style="background-color:#caf1ca;"&gt;12&lt;/td&gt;
&lt;td style="background-color:#9ef59e;"&gt;27&lt;/td&gt;&lt;td style="background-color:#7bf97b;"&gt;574&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;11&lt;/th&gt;&lt;td style="background-color:#95f695;"&gt;30&lt;/td&gt;
&lt;td style="background-color:#f9ff01;"&gt;381&lt;/td&gt;
&lt;td style="background-color:#dcefdc;"&gt;6&lt;/td&gt;
&lt;td style="background-color:#66fb66;"&gt;46&lt;/td&gt;
&lt;td style="background-color:#e8eee8;"&gt;2&lt;/td&gt;
&lt;td style="background-color:#5bff3b;"&gt;100&lt;/td&gt;
&lt;td style="background-color:#44ff43;"&gt;58&lt;/td&gt;
&lt;td style="background-color:#72fa72;"&gt;42&lt;/td&gt;
&lt;td style="background-color:#72fa72;"&gt;42&lt;/td&gt;
&lt;td style="background-color:#6eff34;"&gt;134&lt;/td&gt;
&lt;td style="background-color:#60fc60;"&gt;48&lt;/td&gt;
&lt;td style="background-color:#ebeeeb;"&gt;1&lt;/td&gt;&lt;td style="background-color:#8bff29;"&gt;890&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;12&lt;/th&gt;&lt;td style="background-color:#aaf4aa;"&gt;23&lt;/td&gt;
&lt;td style="background-color:#93ff27;"&gt;199&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;
&lt;td style="background-color:#7ef97e;"&gt;38&lt;/td&gt;
&lt;td style="background-color:#c7f1c7;"&gt;13&lt;/td&gt;
&lt;td style="background-color:#87f887;"&gt;35&lt;/td&gt;
&lt;td style="background-color:#56ff3d;"&gt;90&lt;/td&gt;
&lt;td style="background-color:#7ef97e;"&gt;38&lt;/td&gt;
&lt;td style="background-color:#98f698;"&gt;29&lt;/td&gt;
&lt;td style="background-color:#5cff3a;"&gt;102&lt;/td&gt;
&lt;td style="background-color:#60fc60;"&gt;48&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;&lt;td style="background-color:#5dfc5d;"&gt;638&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;13&lt;/th&gt;&lt;td style="background-color:#84f884;"&gt;36&lt;/td&gt;
&lt;td style="background-color:#8eff28;"&gt;190&lt;/td&gt;
&lt;td style="background-color:#b6f3b6;"&gt;19&lt;/td&gt;
&lt;td style="background-color:#aaf4aa;"&gt;23&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;
&lt;td style="background-color:#b0f4b0;"&gt;21&lt;/td&gt;
&lt;td style="background-color:#64ff38;"&gt;115&lt;/td&gt;
&lt;td style="background-color:#44ff43;"&gt;59&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;15&lt;/td&gt;
&lt;td style="background-color:#5dfc5d;"&gt;49&lt;/td&gt;
&lt;td style="background-color:#e8eee8;"&gt;2&lt;/td&gt;
&lt;td style="background-color:#b6f3b6;"&gt;19&lt;/td&gt;&lt;td style="background-color:#85f885;"&gt;551&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;14&lt;/th&gt;&lt;td style="background-color:#5bfc5b;"&gt;50&lt;/td&gt;
&lt;td style="background-color:#b7ff1a;"&gt;263&lt;/td&gt;
&lt;td style="background-color:#aaf4aa;"&gt;23&lt;/td&gt;
&lt;td style="background-color:#d0f0d0;"&gt;10&lt;/td&gt;
&lt;td style="background-color:#7bf97b;"&gt;39&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;7&lt;/td&gt;
&lt;td style="background-color:#5dff3a;"&gt;104&lt;/td&gt;
&lt;td style="background-color:#7cff2f;"&gt;159&lt;/td&gt;
&lt;td style="background-color:#4aff41;"&gt;70&lt;/td&gt;
&lt;td style="background-color:#bcf2bc;"&gt;17&lt;/td&gt;
&lt;td style="background-color:#52fd52;"&gt;53&lt;/td&gt;
&lt;td style="background-color:#aaf4aa;"&gt;23&lt;/td&gt;&lt;td style="background-color:#71ff33;"&gt;818&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;15&lt;/th&gt;&lt;td style="background-color:#46fe46;"&gt;57&lt;/td&gt;
&lt;td style="background-color:#92ff27;"&gt;197&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;
&lt;td style="background-color:#d3f0d3;"&gt;9&lt;/td&gt;
&lt;td style="background-color:#c4f2c4;"&gt;14&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#8ff78f;"&gt;32&lt;/td&gt;
&lt;td style="background-color:#b7ff1a;"&gt;263&lt;/td&gt;
&lt;td style="background-color:#b0f4b0;"&gt;21&lt;/td&gt;
&lt;td style="background-color:#57ff3d;"&gt;92&lt;/td&gt;
&lt;td style="background-color:#a7f5a7;"&gt;24&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4aff41;"&gt;712&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;16&lt;/th&gt;&lt;td style="background-color:#81f881;"&gt;37&lt;/td&gt;
&lt;td style="background-color:#93ff27;"&gt;199&lt;/td&gt;
&lt;td style="background-color:#bef2be;"&gt;16&lt;/td&gt;
&lt;td style="background-color:#7bf97b;"&gt;39&lt;/td&gt;
&lt;td style="background-color:#d0f0d0;"&gt;10&lt;/td&gt;
&lt;td style="background-color:#46fe46;"&gt;57&lt;/td&gt;
&lt;td style="background-color:#d0f0d0;"&gt;10&lt;/td&gt;
&lt;td style="background-color:#8dff29;"&gt;188&lt;/td&gt;
&lt;td style="background-color:#5cff3b;"&gt;101&lt;/td&gt;
&lt;td style="background-color:#45ff43;"&gt;60&lt;/td&gt;
&lt;td style="background-color:#69fb69;"&gt;45&lt;/td&gt;
&lt;td style="background-color:#72fa72;"&gt;42&lt;/td&gt;&lt;td style="background-color:#6cff35;"&gt;804&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;17&lt;/th&gt;&lt;td style="background-color:#48ff42;"&gt;66&lt;/td&gt;
&lt;td style="background-color:#a9ff1f;"&gt;238&lt;/td&gt;
&lt;td style="background-color:#aaf4aa;"&gt;23&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;
&lt;td style="background-color:#caf1ca;"&gt;12&lt;/td&gt;
&lt;td style="background-color:#adf4ad;"&gt;22&lt;/td&gt;
&lt;td style="background-color:#50ff3f;"&gt;80&lt;/td&gt;
&lt;td style="background-color:#46ff42;"&gt;63&lt;/td&gt;
&lt;td style="background-color:#4aff41;"&gt;69&lt;/td&gt;
&lt;td style="background-color:#bef2be;"&gt;16&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;15&lt;/td&gt;
&lt;td style="background-color:#e8eee8;"&gt;2&lt;/td&gt;&lt;td style="background-color:#63fb63;"&gt;626&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;18&lt;/th&gt;&lt;td style="background-color:#60ff39;"&gt;109&lt;/td&gt;
&lt;td style="background-color:#a0ff22;"&gt;223&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;15&lt;/td&gt;
&lt;td style="background-color:#6ffa6f;"&gt;43&lt;/td&gt;
&lt;td style="background-color:#caf1ca;"&gt;12&lt;/td&gt;
&lt;td style="background-color:#4aff41;"&gt;70&lt;/td&gt;
&lt;td style="background-color:#59ff3c;"&gt;96&lt;/td&gt;
&lt;td style="background-color:#4ffd4f;"&gt;54&lt;/td&gt;
&lt;td style="background-color:#52fd52;"&gt;53&lt;/td&gt;
&lt;td style="background-color:#caf1ca;"&gt;12&lt;/td&gt;
&lt;td style="background-color:#dfefdf;"&gt;5&lt;/td&gt;
&lt;td style="background-color:#d3f0d3;"&gt;9&lt;/td&gt;&lt;td style="background-color:#46ff43;"&gt;701&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;19&lt;/th&gt;&lt;td style="background-color:#7fff2e;"&gt;163&lt;/td&gt;
&lt;td style="background-color:#a9ff1e;"&gt;239&lt;/td&gt;
&lt;td style="background-color:#54ff3e;"&gt;87&lt;/td&gt;
&lt;td style="background-color:#65ff37;"&gt;117&lt;/td&gt;
&lt;td style="background-color:#bcf2bc;"&gt;17&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;
&lt;td style="background-color:#61ff39;"&gt;110&lt;/td&gt;
&lt;td style="background-color:#5cff3b;"&gt;101&lt;/td&gt;
&lt;td style="background-color:#c4f2c4;"&gt;14&lt;/td&gt;
&lt;td style="background-color:#60ff39;"&gt;108&lt;/td&gt;
&lt;td style="background-color:#c7f1c7;"&gt;13&lt;/td&gt;&lt;td style="background-color:#b7ff1a;"&gt;1009&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;20&lt;/th&gt;&lt;td style="background-color:#7fff2e;"&gt;164&lt;/td&gt;
&lt;td style="background-color:#92f792;"&gt;31&lt;/td&gt;
&lt;td style="background-color:#55fd55;"&gt;52&lt;/td&gt;
&lt;td style="background-color:#5aff3b;"&gt;97&lt;/td&gt;
&lt;td style="background-color:#49ff41;"&gt;68&lt;/td&gt;
&lt;td style="background-color:#92f792;"&gt;31&lt;/td&gt;
&lt;td style="background-color:#47ff42;"&gt;64&lt;/td&gt;
&lt;td style="background-color:#b9f3b9;"&gt;18&lt;/td&gt;
&lt;td style="background-color:#5eff3a;"&gt;105&lt;/td&gt;
&lt;td style="background-color:#dfefdf;"&gt;5&lt;/td&gt;
&lt;td style="background-color:#b9f3b9;"&gt;18&lt;/td&gt;
&lt;td style="background-color:#81f881;"&gt;37&lt;/td&gt;&lt;td style="background-color:#45fe45;"&gt;690&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;21&lt;/th&gt;&lt;td style="background-color:#94ff26;"&gt;200&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#8ff78f;"&gt;32&lt;/td&gt;
&lt;td style="background-color:#4cff40;"&gt;73&lt;/td&gt;
&lt;td style="background-color:#b6f3b6;"&gt;19&lt;/td&gt;
&lt;td style="background-color:#b0f4b0;"&gt;21&lt;/td&gt;
&lt;td style="background-color:#9bf69b;"&gt;28&lt;/td&gt;
&lt;td style="background-color:#4bff41;"&gt;72&lt;/td&gt;
&lt;td style="background-color:#81f881;"&gt;37&lt;/td&gt;
&lt;td style="background-color:#adf4ad;"&gt;22&lt;/td&gt;
&lt;td style="background-color:#dfefdf;"&gt;5&lt;/td&gt;
&lt;td style="background-color:#d0f0d0;"&gt;10&lt;/td&gt;&lt;td style="background-color:#94f694;"&gt;519&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;22&lt;/th&gt;&lt;td style="background-color:#90ff28;"&gt;194&lt;/td&gt;
&lt;td style="background-color:#bef2be;"&gt;16&lt;/td&gt;
&lt;td style="background-color:#ebeeeb;"&gt;1&lt;/td&gt;
&lt;td style="background-color:#6ffa6f;"&gt;43&lt;/td&gt;
&lt;td style="background-color:#ebeeeb;"&gt;1&lt;/td&gt;
&lt;td style="background-color:#46ff42;"&gt;63&lt;/td&gt;
&lt;td style="background-color:#a7f5a7;"&gt;24&lt;/td&gt;
&lt;td style="background-color:#b0f4b0;"&gt;21&lt;/td&gt;
&lt;td style="background-color:#62ff38;"&gt;112&lt;/td&gt;
&lt;td style="background-color:#84f884;"&gt;36&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;7&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;&lt;td style="background-color:#8bf78b;"&gt;538&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;23&lt;/th&gt;&lt;td style="background-color:#c5ff15;"&gt;287&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;7&lt;/td&gt;
&lt;td style="background-color:#8df78d;"&gt;33&lt;/td&gt;
&lt;td style="background-color:#50ff3f;"&gt;80&lt;/td&gt;
&lt;td style="background-color:#d3f0d3;"&gt;9&lt;/td&gt;
&lt;td style="background-color:#9ef59e;"&gt;27&lt;/td&gt;
&lt;td style="background-color:#50ff3f;"&gt;80&lt;/td&gt;
&lt;td style="background-color:#b9f3b9;"&gt;18&lt;/td&gt;
&lt;td style="background-color:#45ff43;"&gt;60&lt;/td&gt;
&lt;td style="background-color:#dfefdf;"&gt;5&lt;/td&gt;
&lt;td style="background-color:#8ff78f;"&gt;32&lt;/td&gt;
&lt;td style="background-color:#5dff3a;"&gt;104&lt;/td&gt;&lt;td style="background-color:#55ff3d;"&gt;742&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;24&lt;/th&gt;&lt;td style="background-color:#86ff2b;"&gt;176&lt;/td&gt;
&lt;td style="background-color:#60ff39;"&gt;108&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;
&lt;td style="background-color:#e2efe2;"&gt;4&lt;/td&gt;
&lt;td style="background-color:#d6f0d6;"&gt;8&lt;/td&gt;
&lt;td style="background-color:#bef2be;"&gt;16&lt;/td&gt;
&lt;td style="background-color:#63fb63;"&gt;47&lt;/td&gt;
&lt;td style="background-color:#5fff3a;"&gt;106&lt;/td&gt;
&lt;td style="background-color:#5dfc5d;"&gt;49&lt;/td&gt;
&lt;td style="background-color:#bcf2bc;"&gt;17&lt;/td&gt;
&lt;td style="background-color:#d6f0d6;"&gt;8&lt;/td&gt;
&lt;td style="background-color:#8cff29;"&gt;187&lt;/td&gt;&lt;td style="background-color:#50ff3f;"&gt;729&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;25&lt;/th&gt;&lt;td style="background-color:#d0ff10;"&gt;308&lt;/td&gt;
&lt;td style="background-color:#92f792;"&gt;31&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;15&lt;/td&gt;
&lt;td style="background-color:#58ff3c;"&gt;95&lt;/td&gt;
&lt;td style="background-color:#9bf69b;"&gt;28&lt;/td&gt;
&lt;td style="background-color:#8af78a;"&gt;34&lt;/td&gt;
&lt;td style="background-color:#58ff3c;"&gt;94&lt;/td&gt;
&lt;td style="background-color:#7cff2f;"&gt;159&lt;/td&gt;
&lt;td style="background-color:#49fe49;"&gt;56&lt;/td&gt;
&lt;td style="background-color:#dfefdf;"&gt;5&lt;/td&gt;
&lt;td style="background-color:#66fb66;"&gt;46&lt;/td&gt;
&lt;td style="background-color:#deff0b;"&gt;333&lt;/td&gt;&lt;td style="background-color:#ffff00;"&gt;1204&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;26&lt;/th&gt;&lt;td style="background-color:#a9ff1e;"&gt;239&lt;/td&gt;
&lt;td style="background-color:#e2efe2;"&gt;4&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;15&lt;/td&gt;
&lt;td style="background-color:#e2efe2;"&gt;4&lt;/td&gt;
&lt;td style="background-color:#aaf4aa;"&gt;23&lt;/td&gt;
&lt;td style="background-color:#5bfc5b;"&gt;50&lt;/td&gt;
&lt;td style="background-color:#66fb66;"&gt;46&lt;/td&gt;
&lt;td style="background-color:#4aff41;"&gt;70&lt;/td&gt;
&lt;td style="background-color:#54ff3d;"&gt;88&lt;/td&gt;
&lt;td style="background-color:#75fa75;"&gt;41&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;
&lt;td style="background-color:#56ff3d;"&gt;90&lt;/td&gt;&lt;td style="background-color:#4dfe4d;"&gt;673&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;27&lt;/th&gt;&lt;td style="background-color:#d0ff10;"&gt;307&lt;/td&gt;
&lt;td style="background-color:#a7f5a7;"&gt;24&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;
&lt;td style="background-color:#6ffa6f;"&gt;43&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;15&lt;/td&gt;
&lt;td style="background-color:#8ff78f;"&gt;32&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;7&lt;/td&gt;
&lt;td style="background-color:#49ff42;"&gt;67&lt;/td&gt;
&lt;td style="background-color:#48ff42;"&gt;65&lt;/td&gt;
&lt;td style="background-color:#58fc58;"&gt;51&lt;/td&gt;
&lt;td style="background-color:#75fa75;"&gt;41&lt;/td&gt;
&lt;td style="background-color:#4bff41;"&gt;71&lt;/td&gt;&lt;td style="background-color:#4fff3f;"&gt;726&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;28&lt;/th&gt;&lt;td style="background-color:#a9ff1e;"&gt;239&lt;/td&gt;
&lt;td style="background-color:#cdf1cd;"&gt;11&lt;/td&gt;
&lt;td style="background-color:#e2efe2;"&gt;4&lt;/td&gt;
&lt;td style="background-color:#6ffa6f;"&gt;43&lt;/td&gt;
&lt;td style="background-color:#d0f0d0;"&gt;10&lt;/td&gt;
&lt;td style="background-color:#dcefdc;"&gt;6&lt;/td&gt;
&lt;td style="background-color:#a1f5a1;"&gt;26&lt;/td&gt;
&lt;td style="background-color:#c4f2c4;"&gt;14&lt;/td&gt;
&lt;td style="background-color:#5dfc5d;"&gt;49&lt;/td&gt;
&lt;td style="background-color:#75fa75;"&gt;41&lt;/td&gt;
&lt;td style="background-color:#d0f0d0;"&gt;10&lt;/td&gt;
&lt;td style="background-color:#c7f1c7;"&gt;13&lt;/td&gt;&lt;td style="background-color:#acf4ac;"&gt;466&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;29&lt;/th&gt;&lt;td style="background-color:#80ff2d;"&gt;166&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;20&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;7&lt;/td&gt;
&lt;td style="background-color:#cdf1cd;"&gt;11&lt;/td&gt;
&lt;td style="background-color:#cdf1cd;"&gt;11&lt;/td&gt;
&lt;td style="background-color:#8ff78f;"&gt;32&lt;/td&gt;
&lt;td style="background-color:#e5eee5;"&gt;3&lt;/td&gt;
&lt;td style="background-color:#dcefdc;"&gt;6&lt;/td&gt;
&lt;td style="background-color:#a7f5a7;"&gt;24&lt;/td&gt;
&lt;td style="background-color:#8ff78f;"&gt;32&lt;/td&gt;
&lt;td style="background-color:#cdf1cd;"&gt;11&lt;/td&gt;&lt;td style="background-color:#eeeeee;"&gt;323&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;30&lt;/th&gt;&lt;td style="background-color:#bfff16;"&gt;278&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#e2efe2;"&gt;4&lt;/td&gt;
&lt;td style="background-color:#84f884;"&gt;36&lt;/td&gt;
&lt;td style="background-color:#adf4ad;"&gt;22&lt;/td&gt;
&lt;td style="background-color:#d0f0d0;"&gt;10&lt;/td&gt;
&lt;td style="background-color:#9ef59e;"&gt;27&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#4ffd4f;"&gt;54&lt;/td&gt;
&lt;td style="background-color:#4eff40;"&gt;77&lt;/td&gt;
&lt;td style="background-color:#6cfa6c;"&gt;44&lt;/td&gt;
&lt;td style="background-color:#5dff3a;"&gt;104&lt;/td&gt;&lt;td style="background-color:#55fd55;"&gt;656&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;31&lt;/th&gt;&lt;td style="background-color:#e0ff0b;"&gt;336&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;7&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#c7f1c7;"&gt;13&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#bcf2bc;"&gt;17&lt;/td&gt;
&lt;td style="background-color:#52ff3e;"&gt;83&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#8ff78f;"&gt;32&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="background-color:#8fff28;"&gt;192&lt;/td&gt;&lt;td style="background-color:#4afe4a;"&gt;680&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Total&lt;/th&gt;&lt;td style="background-color:#ffff00;"&gt;4399&lt;/td&gt;
&lt;td style="background-color:#efff05;"&gt;4177&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;470&lt;/td&gt;
&lt;td style="background-color:#9cf69c;"&gt;1102&lt;/td&gt;
&lt;td style="background-color:#eceeec;"&gt;485&lt;/td&gt;
&lt;td style="background-color:#aaf4aa;"&gt;995&lt;/td&gt;
&lt;td style="background-color:#69fb69;"&gt;1501&lt;/td&gt;
&lt;td style="background-color:#5cff3b;"&gt;2133&lt;/td&gt;
&lt;td style="background-color:#4dff40;"&gt;1920&lt;/td&gt;
&lt;td style="background-color:#65fb65;"&gt;1530&lt;/td&gt;
&lt;td style="background-color:#9af69a;"&gt;1119&lt;/td&gt;
&lt;td style="background-color:#51fd51;"&gt;1688&lt;/td&gt;&lt;td&gt;21519&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
  &lt;/table&gt;
&lt;p&gt;Interesting that there are still some "holes" in there after 8 or so years.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-3329296575240443910?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/3329296575240443910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=3329296575240443910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/3329296575240443910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/3329296575240443910'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/01/photos-by-day-of-year.html' title='Photos by Day of Year'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-1201296827105503758</id><published>2008-01-22T23:13:00.000+11:00</published><updated>2008-01-22T23:20:27.578+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualisation'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Photos by Time of Day</title><content type='html'>&lt;p&gt;Another &amp;quot;heat-map&amp;quot;, photos by time of day for each day of the week:&lt;/p&gt;
&lt;table style="background-color:#eee;font-size: 0.8em;"&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th colspan="4"&gt;12am&lt;/th&gt;
&lt;th colspan="4"&gt;1&lt;/th&gt;
&lt;th colspan="4"&gt;2&lt;/th&gt;
&lt;th colspan="4"&gt;3&lt;/th&gt;
&lt;th colspan="4"&gt;4&lt;/th&gt;
&lt;th colspan="4"&gt;5&lt;/th&gt;
&lt;th colspan="4"&gt;6&lt;/th&gt;
&lt;th colspan="4"&gt;7&lt;/th&gt;
&lt;th colspan="4"&gt;8&lt;/th&gt;
&lt;th colspan="4"&gt;9&lt;/th&gt;
&lt;th colspan="4"&gt;10&lt;/th&gt;
&lt;th colspan="4"&gt;11&lt;/th&gt;
&lt;th colspan="4"&gt;12pm&lt;/th&gt;
&lt;th colspan="4"&gt;1&lt;/th&gt;
&lt;th colspan="4"&gt;2&lt;/th&gt;
&lt;th colspan="4"&gt;3&lt;/th&gt;
&lt;th colspan="4"&gt;4&lt;/th&gt;
&lt;th colspan="4"&gt;5&lt;/th&gt;
&lt;th colspan="4"&gt;6&lt;/th&gt;
&lt;th colspan="4"&gt;7&lt;/th&gt;
&lt;th colspan="4"&gt;8&lt;/th&gt;
&lt;th colspan="4"&gt;9&lt;/th&gt;
&lt;th colspan="4"&gt;10&lt;/th&gt;
&lt;th colspan="4"&gt;11&lt;/th&gt;&lt;th&gt;Total&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Mon&lt;/th&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83f883;" title="20"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63fb63;" title="26"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a3f5a3;" title="14"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a3f5a3;" title="14"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69fb69;" title="25"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#89f889;" title="19"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#55ff3d;" title="43"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4efd4e;" title="30"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69fb69;" title="25"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#64ff38;" title="53"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5bff3b;" title="47"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6aff35;" title="57"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7cff2f;" title="68"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#82ff2d;" title="72"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#47ff42;" title="34"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4efd4e;" title="30"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#64ff38;" title="53"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#98ff25;" title="86"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8dff29;" title="79"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59fc59;" title="28"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#48ff42;" title="35"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#66ff37;" title="54"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5cff3a;" title="48"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7cff2f;" title="68"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8eff28;" title="80"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4bff41;" title="37"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8bff29;" title="78"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83ff2c;" title="73"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a1ff22;" title="92"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#50ff3f;" title="40"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5efc5e;" title="27"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5bff3b;" title="47"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#61ff39;" title="51"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#58ff3c;" title="45"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#55ff3d;" title="43"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#58ff3c;" title="45"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#60ff39;" title="50"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#86ff2b;" title="75"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#53ff3e;" title="42"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59ff3c;" title="46"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#48ff42;" title="35"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63fb63;" title="26"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#51ff3e;" title="41"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#85ff2c;" title="74"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4eff40;" title="39"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9ef59e;" title="15"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#79f979;" title="22"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b8f3b8;" title="10"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a8f4a8;" title="13"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3f0d3;" title="5"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3f0d3;" title="5"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a8f4a8;" title="13"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a3f5a3;" title="14"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69fb69;" title="25"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="2449"&gt;2449&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Tue&lt;/th&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a3f5a3;" title="14"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8ef78e;" title="18"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4dff40;" title="38"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5efc5e;" title="27"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83f883;" title="20"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5efc5e;" title="27"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83f883;" title="20"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4dff40;" title="38"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4bff41;" title="37"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#66ff37;" title="54"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#91ff27;" title="82"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5cff3a;" title="48"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#50ff3f;" title="40"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6fff34;" title="60"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#88ff2b;" title="76"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#88ff2b;" title="76"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#93ff27;" title="83"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b8ff19;" title="107"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6eff34;" title="59"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bdff17;" title="110"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#71ff33;" title="61"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d0ff11;" title="122"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d4ff0f;" title="125"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#95ff26;" title="84"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5cff3a;" title="48"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6eff34;" title="59"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#54fd54;" title="29"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5eff3a;" title="49"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#50ff3f;" title="40"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7aff30;" title="67"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59ff3c;" title="46"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#75ff31;" title="64"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#60ff39;" title="50"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4eff40;" title="39"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#61ff39;" title="51"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#80ff2d;" title="71"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63ff38;" title="52"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63fb63;" title="26"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59fc59;" title="28"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#50ff3f;" title="40"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#55ff3d;" title="43"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63fb63;" title="26"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8ef78e;" title="18"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4eff40;" title="39"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9eff23;" title="90"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#61ff39;" title="51"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#89f889;" title="19"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#55ff3d;" title="43"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#45ff43;" title="33"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#86f886;" title="2828"&gt;2828&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Wed&lt;/th&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a8f4a8;" title="13"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4efd4e;" title="30"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#89f889;" title="19"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bef2be;" title="9"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69fb69;" title="25"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#73fa73;" title="23"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#54fd54;" title="29"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7cff2f;" title="68"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#74ff32;" title="63"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#51ff3e;" title="41"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5cff3a;" title="48"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69ff36;" title="56"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#56ff3d;" title="44"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7aff30;" title="67"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#78ff30;" title="66"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9bff24;" title="88"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8dff29;" title="79"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#96ff25;" title="85"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6eff34;" title="59"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6cff35;" title="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6eff34;" title="59"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5bff3b;" title="47"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69ff36;" title="56"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#60ff39;" title="50"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5bff3b;" title="47"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6cff35;" title="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#80ff2d;" title="71"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7cff2f;" title="68"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6cff35;" title="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6aff35;" title="57"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6fff34;" title="60"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#58ff3c;" title="45"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#55ff3d;" title="43"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59fc59;" title="28"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#71ff33;" title="61"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8dff29;" title="79"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#ffff00;" title="152"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7cff2f;" title="68"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#64ff38;" title="53"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7ef97e;" title="21"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9ef59e;" title="15"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#99f699;" title="16"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9eff23;" title="90"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a9ff1f;" title="97"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69fb69;" title="25"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#93f793;" title="17"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a8f4a8;" title="13"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#99f699;" title="16"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3f0d3;" title="5"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8ef78e;" title="18"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#95f695;" title="2774"&gt;2774&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Thu&lt;/th&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a8f4a8;" title="13"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3f0d3;" title="5"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3f0d3;" title="5"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bef2be;" title="9"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#79f979;" title="22"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5cff3a;" title="48"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#99f699;" title="16"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a8f4a8;" title="13"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#47ff42;" title="34"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#50ff3f;" title="40"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#73fa73;" title="23"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#54fd54;" title="29"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4bff41;" title="37"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5cff3a;" title="48"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7fff2e;" title="70"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9cff23;" title="89"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bdff17;" title="110"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6cff35;" title="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#95ff26;" title="84"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#99ff24;" title="87"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69ff36;" title="56"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#78ff30;" title="66"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5cff3a;" title="48"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63ff38;" title="52"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#93f793;" title="17"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#74ff32;" title="63"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#74ff32;" title="63"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8eff28;" title="80"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4bff41;" title="37"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#56ff3d;" title="44"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#86ff2b;" title="75"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7aff30;" title="67"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#60ff39;" title="50"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#55ff3d;" title="43"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63ff38;" title="52"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83ff2c;" title="73"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63ff38;" title="52"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5eff3a;" title="49"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69ff36;" title="56"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#74ff32;" title="63"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6cff35;" title="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#45ff43;" title="33"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8ef78e;" title="18"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#89f889;" title="19"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b8f3b8;" title="10"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69fb69;" title="25"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#55ff3d;" title="43"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5cff3a;" title="48"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#98ff25;" title="86"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9bff24;" title="88"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#73fa73;" title="23"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#73fa73;" title="23"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bef2be;" title="9"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b5f3b5;" title="2658"&gt;2658&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Fri&lt;/th&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b8f3b8;" title="10"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3f0d3;" title="5"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#79f979;" title="22"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4bff41;" title="37"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#45ff43;" title="33"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83f883;" title="20"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bef2be;" title="9"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83f883;" title="20"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#93f793;" title="17"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bef2be;" title="9"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#56ff3d;" title="44"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4bff41;" title="37"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#78ff30;" title="66"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#72ff33;" title="62"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#61ff39;" title="51"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#53ff3e;" title="42"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6cff35;" title="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#53ff3e;" title="42"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#47ff42;" title="34"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4dff40;" title="38"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63fb63;" title="26"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4efd4e;" title="30"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59fc59;" title="28"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#67ff36;" title="55"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7fff2e;" title="70"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#85ff2c;" title="74"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#72ff33;" title="62"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#75ff31;" title="64"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#85ff2c;" title="74"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#99ff24;" title="87"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#85ff2c;" title="74"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#93ff27;" title="83"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63ff38;" title="52"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#72ff33;" title="62"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7fff2e;" title="70"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59ff3c;" title="46"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4aff41;" title="36"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59ff3c;" title="46"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5bff3b;" title="47"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#54fd54;" title="29"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6eff34;" title="59"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8aff2a;" title="77"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5eff3a;" title="49"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#44fe44;" title="32"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#48ff42;" title="35"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59fc59;" title="28"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#79f979;" title="22"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b8f3b8;" title="10"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4eff40;" title="39"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b8f3b8;" title="10"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7ef97e;" title="21"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#89f889;" title="19"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3f0d3;" title="2545"&gt;2545&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Sat&lt;/th&gt;&lt;td style="background-color:#51ff3e;" title="41"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bef2be;" title="9"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bef2be;" title="9"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69fb69;" title="25"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83f883;" title="20"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b8f3b8;" title="10"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#73fa73;" title="23"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#99f699;" title="16"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#47ff42;" title="34"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8aff2a;" title="77"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#72ff33;" title="62"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6cff35;" title="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#71ff33;" title="61"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8ff0e;" title="127"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8eff28;" title="80"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8bff29;" title="78"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a9ff1f;" title="97"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8bff29;" title="78"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8aff2a;" title="77"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9cff23;" title="89"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#95ff26;" title="84"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c2ff16;" title="113"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#77ff31;" title="65"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#86ff2b;" title="75"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b4ff1b;" title="104"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3ff0f;" title="124"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c2ff16;" title="113"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#adff1d;" title="100"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d1ff10;" title="123"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c2ff16;" title="113"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#93ff27;" title="83"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e4ff09;" title="135"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aaff1e;" title="98"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#dfff0b;" title="132"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b5ff1a;" title="105"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#adff1d;" title="100"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9bff24;" title="88"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8dff29;" title="79"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#caff13;" title="118"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#85ff2c;" title="74"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#74ff32;" title="63"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6cff35;" title="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63ff38;" title="52"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#58ff3c;" title="45"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5cff3a;" title="48"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6fff34;" title="60"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#88ff2b;" title="76"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#dfff0b;" title="132"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b5ff1a;" title="105"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5bff3b;" title="47"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#53ff3e;" title="42"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#67ff36;" title="55"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#53ff3e;" title="42"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#49fe49;" title="31"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83f883;" title="20"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#83f883;" title="20"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a8f4a8;" title="13"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b8f3b8;" title="10"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#ffff00;" title="4395"&gt;4395&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Sun&lt;/th&gt;&lt;td style="background-color:#47ff42;" title="34"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#4aff41;" title="36"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#69fb69;" title="25"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#93f793;" title="17"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#47ff42;" title="34"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#59fc59;" title="28"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e8eee8;" title="1"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#eeeeee;" title="0"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#aef4ae;" title="12"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3f0d3;" title="5"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7ef97e;" title="21"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d3f0d3;" title="5"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cef1ce;" title="6"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c3f2c3;" title="8"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5efc5e;" title="27"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#45ff43;" title="33"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#51ff3e;" title="41"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#44fe44;" title="32"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#78ff30;" title="66"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#93ff27;" title="83"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b7ff1a;" title="106"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#acff1e;" title="99"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9fff22;" title="91"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#cbff12;" title="119"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#9cff23;" title="89"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#78ff30;" title="66"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#78ff30;" title="66"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7cff2f;" title="68"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#71ff33;" title="61"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a9ff1f;" title="97"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#afff1c;" title="101"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8ff13;" title="117"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#96ff25;" title="85"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bdff17;" title="110"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e9ff07;" title="138"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d0ff11;" title="122"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e6ff09;" title="136"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bfff17;" title="111"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#91ff27;" title="82"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#adff1d;" title="100"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8ff13;" title="117"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#8dff29;" title="79"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#acff1e;" title="99"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deff0b;" title="131"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b7ff1a;" title="106"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c6ff14;" title="116"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a7ff1f;" title="96"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6aff35;" title="57"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#51ff3e;" title="41"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#85ff2c;" title="74"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#5eff3a;" title="49"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#44fe44;" title="32"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#79f979;" title="22"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#6efa6e;" title="24"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#79f979;" title="22"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#45ff43;" title="33"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#44fe44;" title="32"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#7ef97e;" title="21"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#93f793;" title="17"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63fb63;" title="26"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63ff38;" title="52"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b3f3b3;" title="11"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a8f4a8;" title="13"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#63fb63;" title="26"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#a3f5a3;" title="14"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#c8f1c8;" title="7"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bef2be;" title="9"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#deefde;" title="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#bef2be;" title="9"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#d8f0d8;" title="4"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#e3efe3;" title="2"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="background-color:#b4ff1b;" title="3870"&gt;3870&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Total&lt;/th&gt;&lt;td colspan="4" style="background-color:#c3f2c3;"&gt;222&lt;/td&gt;&lt;td colspan="4" style="background-color:#d3f0d3;"&gt;138&lt;/td&gt;&lt;td colspan="4" style="background-color:#e7eee7;"&gt;34&lt;/td&gt;&lt;td colspan="4" style="background-color:#ebeeeb;"&gt;12&lt;/td&gt;&lt;td colspan="4" style="background-color:#eceeec;"&gt;8&lt;/td&gt;&lt;td colspan="4" style="background-color:#eaeeea;"&gt;18&lt;/td&gt;&lt;td colspan="4" style="background-color:#e9eee9;"&gt;26&lt;/td&gt;&lt;td colspan="4" style="background-color:#aff4af;"&gt;328&lt;/td&gt;&lt;td colspan="4" style="background-color:#a9f4a9;"&gt;360&lt;/td&gt;&lt;td colspan="4" style="background-color:#79f979;"&gt;617&lt;/td&gt;&lt;td colspan="4" style="background-color:#6bff35;"&gt;1223&lt;/td&gt;&lt;td colspan="4" style="background-color:#bdff17;"&gt;1912&lt;/td&gt;&lt;td colspan="4" style="background-color:#c0ff16;"&gt;1938&lt;/td&gt;&lt;td colspan="4" style="background-color:#b3ff1b;"&gt;1826&lt;/td&gt;&lt;td colspan="4" style="background-color:#cdff11;"&gt;2049&lt;/td&gt;&lt;td colspan="4" style="background-color:#d3ff0f;"&gt;2094&lt;/td&gt;&lt;td colspan="4" style="background-color:#c6ff14;"&gt;1984&lt;/td&gt;&lt;td colspan="4" style="background-color:#c5ff14;"&gt;1978&lt;/td&gt;&lt;td colspan="4" style="background-color:#6eff34;"&gt;1248&lt;/td&gt;&lt;td colspan="4" style="background-color:#4bff41;"&gt;962&lt;/td&gt;&lt;td colspan="4" style="background-color:#7dff2f;"&gt;1376&lt;/td&gt;&lt;td colspan="4" style="background-color:#85f885;"&gt;550&lt;/td&gt;&lt;td colspan="4" style="background-color:#a4f5a4;"&gt;389&lt;/td&gt;&lt;td colspan="4" style="background-color:#c2f2c2;"&gt;227&lt;/td&gt;&lt;td&gt;21519&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
  &lt;/table&gt;
&lt;p&gt;(Hover for a tooltip indicating the actual number of photos in each 15 minute segment.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-1201296827105503758?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/1201296827105503758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=1201296827105503758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/1201296827105503758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/1201296827105503758'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/01/photos-by-time-of-day.html' title='Photos by Time of Day'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-8828932733881835254</id><published>2008-01-22T13:58:00.000+11:00</published><updated>2008-01-22T14:09:10.794+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualisation'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Photo Calendar Heatmap</title><content type='html'>&lt;p&gt;A "heat map" of the number of photos I've taken over the years:&lt;/p&gt;
 &lt;table style="background-color: #eee;font-size: 0.8em;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Jan&lt;/th&gt;
&lt;th&gt;Feb&lt;/th&gt;
&lt;th&gt;Mar&lt;/th&gt;
&lt;th&gt;Apr&lt;/th&gt;
&lt;th&gt;May&lt;/th&gt;
&lt;th&gt;Jun&lt;/th&gt;
&lt;th&gt;Jul&lt;/th&gt;
&lt;th&gt;Aug&lt;/th&gt;
&lt;th&gt;Sep&lt;/th&gt;
&lt;th&gt;Oct&lt;/th&gt;
&lt;th&gt;Nov&lt;/th&gt;
&lt;th&gt;Dec&lt;/th&gt;
&lt;th&gt;Total&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;2000&lt;/th&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td style="background-color:#44ff43;"&gt;274&lt;/td&gt;
&lt;td style="background-color:#49ff41;"&gt;337&lt;/td&gt;
&lt;td style="background-color:#cdf1cd;"&gt;62&lt;/td&gt;
&lt;td style="background-color:#bef2be;"&gt;673&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2001&lt;/th&gt;
&lt;td style="background-color:#55fd55;"&gt;237&lt;/td&gt;
&lt;td style="background-color:#73fa73;"&gt;193&lt;/td&gt;
&lt;td style="background-color:#52fd52;"&gt;242&lt;/td&gt;
&lt;td style="background-color:#b3f3b3;"&gt;100&lt;/td&gt;
&lt;td style="background-color:#b1f4b1;"&gt;103&lt;/td&gt;
&lt;td style="background-color:#48ff42;"&gt;323&lt;/td&gt;
&lt;td style="background-color:#7aff30;"&gt;972&lt;/td&gt;
&lt;td style="background-color:#96ff26;"&gt;1335&lt;/td&gt;
&lt;td style="background-color:#8dff29;"&gt;1214&lt;/td&gt;
&lt;td style="background-color:#80ff2d;"&gt;1053&lt;/td&gt;
&lt;td style="background-color:#54ff3e;"&gt;475&lt;/td&gt;
&lt;td style="background-color:#4aff41;"&gt;347&lt;/td&gt;
&lt;td style="background-color:#ffff00;"&gt;6594&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2002&lt;/th&gt;
&lt;td style="background-color:#44ff43;"&gt;270&lt;/td&gt;
&lt;td style="background-color:#47ff42;"&gt;310&lt;/td&gt;
&lt;td style="background-color:#6dfa6d;"&gt;202&lt;/td&gt;
&lt;td style="background-color:#a2f5a2;"&gt;125&lt;/td&gt;
&lt;td style="background-color:#c8f1c8;"&gt;70&lt;/td&gt;
&lt;td style="background-color:#aaf4aa;"&gt;113&lt;/td&gt;
&lt;td style="background-color:#ebeeeb;"&gt;19&lt;/td&gt;
&lt;td style="background-color:#75fa75;"&gt;191&lt;/td&gt;
&lt;td style="background-color:#a5f5a5;"&gt;120&lt;/td&gt;
&lt;td style="background-color:#ebeeeb;"&gt;18&lt;/td&gt;
&lt;td style="background-color:#bef2be;"&gt;84&lt;/td&gt;
&lt;td style="background-color:#b2f3b2;"&gt;102&lt;/td&gt;
&lt;td style="background-color:#79f979;"&gt;1624&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2003&lt;/th&gt;
&lt;td style="background-color:#9dff23;"&gt;1427&lt;/td&gt;
&lt;td style="background-color:#6eff34;"&gt;810&lt;/td&gt;
&lt;td style="background-color:#e6eee6;"&gt;26&lt;/td&gt;
&lt;td style="background-color:#4cff40;"&gt;377&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;45&lt;/td&gt;
&lt;td style="background-color:#baf3ba;"&gt;90&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;45&lt;/td&gt;
&lt;td style="background-color:#d9f0d9;"&gt;45&lt;/td&gt;
&lt;td style="background-color:#aff4af;"&gt;106&lt;/td&gt;
&lt;td style="background-color:#80f880;"&gt;175&lt;/td&gt;
&lt;td style="background-color:#ddefdd;"&gt;39&lt;/td&gt;
&lt;td style="background-color:#b5f3b5;"&gt;97&lt;/td&gt;
&lt;td style="background-color:#6dff35;"&gt;3282&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2004&lt;/th&gt;
&lt;td style="background-color:#c1f2c1;"&gt;80&lt;/td&gt;
&lt;td style="background-color:#deefde;"&gt;38&lt;/td&gt;
&lt;td style="background-color:#e9eee9;"&gt;21&lt;/td&gt;
&lt;td style="background-color:#b7f3b7;"&gt;94&lt;/td&gt;
&lt;td style="background-color:#daefda;"&gt;43&lt;/td&gt;
&lt;td style="background-color:#c7f1c7;"&gt;71&lt;/td&gt;
&lt;td style="background-color:#d8f0d8;"&gt;46&lt;/td&gt;
&lt;td style="background-color:#99f699;"&gt;138&lt;/td&gt;
&lt;td style="background-color:#acf4ac;"&gt;110&lt;/td&gt;
&lt;td style="background-color:#deefde;"&gt;38&lt;/td&gt;
&lt;td style="background-color:#67fb67;"&gt;211&lt;/td&gt;
&lt;td style="background-color:#47fe47;"&gt;257&lt;/td&gt;
&lt;td style="background-color:#9bf69b;"&gt;1147&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2005&lt;/th&gt;
&lt;td style="background-color:#75fa75;"&gt;190&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;80&lt;/td&gt;
&lt;td style="background-color:#e7eee7;"&gt;24&lt;/td&gt;
&lt;td style="background-color:#d3f0d3;"&gt;53&lt;/td&gt;
&lt;td style="background-color:#d0f0d0;"&gt;58&lt;/td&gt;
&lt;td style="background-color:#c1f2c1;"&gt;80&lt;/td&gt;
&lt;td style="background-color:#b7f3b7;"&gt;95&lt;/td&gt;
&lt;td style="background-color:#d2f0d2;"&gt;55&lt;/td&gt;
&lt;td style="background-color:#c0f2c0;"&gt;81&lt;/td&gt;
&lt;td style="background-color:#d4f0d4;"&gt;52&lt;/td&gt;
&lt;td style="background-color:#daefda;"&gt;43&lt;/td&gt;
&lt;td style="background-color:#4dff40;"&gt;392&lt;/td&gt;
&lt;td style="background-color:#97f697;"&gt;1203&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2006&lt;/th&gt;
&lt;td style="background-color:#c7ff14;"&gt;1975&lt;/td&gt;
&lt;td style="background-color:#ffff00;"&gt;2697&lt;/td&gt;
&lt;td style="background-color:#97f697;"&gt;141&lt;/td&gt;
&lt;td style="background-color:#49ff42;"&gt;330&lt;/td&gt;
&lt;td style="background-color:#7df97d;"&gt;178&lt;/td&gt;
&lt;td style="background-color:#82f882;"&gt;171&lt;/td&gt;
&lt;td style="background-color:#d7f0d7;"&gt;48&lt;/td&gt;
&lt;td style="background-color:#4dff40;"&gt;384&lt;/td&gt;
&lt;td style="background-color:#b4f3b4;"&gt;98&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;15&lt;/td&gt;
&lt;td style="background-color:#b2f3b2;"&gt;102&lt;/td&gt;
&lt;td style="background-color:#4cff40;"&gt;372&lt;/td&gt;
&lt;td style="background-color:#fbff01;"&gt;6511&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2007&lt;/th&gt;
&lt;td style="background-color:#46ff43;"&gt;298&lt;/td&gt;
&lt;td style="background-color:#4dfe4d;"&gt;248&lt;/td&gt;
&lt;td style="background-color:#cdf1cd;"&gt;62&lt;/td&gt;
&lt;td style="background-color:#9ff59f;"&gt;129&lt;/td&gt;
&lt;td style="background-color:#e8eee8;"&gt;23&lt;/td&gt;
&lt;td style="background-color:#8ef78e;"&gt;154&lt;/td&gt;
&lt;td style="background-color:#4ffd4f;"&gt;246&lt;/td&gt;
&lt;td style="background-color:#53ff3e;"&gt;466&lt;/td&gt;
&lt;td style="background-color:#7df97d;"&gt;178&lt;/td&gt;
&lt;td style="background-color:#7df97d;"&gt;179&lt;/td&gt;
&lt;td style="background-color:#82f882;"&gt;172&lt;/td&gt;
&lt;td style="background-color:#a1f5a1;"&gt;127&lt;/td&gt;
&lt;td style="background-color:#48fe48;"&gt;2282&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2008&lt;/th&gt;
&lt;td style="background-color:#86f886;"&gt;165&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td style="background-color:#e3efe3;"&gt;165&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Total&lt;/th&gt;&lt;td style="background-color:#ffff00;"&gt;4642&lt;/td&gt;
&lt;td style="background-color:#ecff06;"&gt;4376&lt;/td&gt;
&lt;td style="background-color:#d6f0d6;"&gt;718&lt;/td&gt;
&lt;td style="background-color:#9cf69c;"&gt;1208&lt;/td&gt;
&lt;td style="background-color:#eeeeee;"&gt;520&lt;/td&gt;
&lt;td style="background-color:#b5f3b5;"&gt;1002&lt;/td&gt;
&lt;td style="background-color:#7df97d;"&gt;1471&lt;/td&gt;
&lt;td style="background-color:#71ff33;"&gt;2614&lt;/td&gt;
&lt;td style="background-color:#4afe4a;"&gt;1907&lt;/td&gt;
&lt;td style="background-color:#56fd56;"&gt;1804&lt;/td&gt;
&lt;td style="background-color:#7ef97e;"&gt;1463&lt;/td&gt;
&lt;td style="background-color:#59fc59;"&gt;1777&lt;/td&gt;&lt;td&gt;23502&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
  &lt;/table&gt;
&lt;p&gt;&lt;span style="background-color:#4f4;"&gt;Green&lt;/span&gt; represents the average number of photos, &lt;span style="background-color:#ff0;"&gt;yellow&lt;/span&gt; the maximum.&lt;/p&gt;
&lt;p&gt;Different events can clearly be seen, some of note:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;June&amp;mdash;October 2001, Travelling in Europe&lt;/li&gt;
&lt;li&gt;January&amp;mdash;February 2003, Travelling in the USA&lt;/li&gt;
&lt;li&gt;January&amp;mdash;February 2006, Roadtrip around Victoria&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'm going to have to find something to do during May...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-8828932733881835254?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/8828932733881835254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=8828932733881835254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8828932733881835254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8828932733881835254'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/01/photo-calendar-heatmap.html' title='Photo Calendar Heatmap'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-4887480551088523933</id><published>2008-01-18T13:09:00.000+11:00</published><updated>2008-12-12T15:32:18.835+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wallpaper'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Cover-art Wallpaper under Ubuntu</title><content type='html'>&lt;p&gt;This is an update to the previous post to &lt;a href="http://successlessness.blogspot.com/2007/11/now-playing-album-cover-art-desktop.html"&gt;create a cover art "stack" for Windows XP wallpaper&lt;/a&gt; to generate and update the wallpaper in Ubuntu.&lt;/p&gt;
&lt;p&gt;Not much had to change, except the &lt;tt&gt;setWallpaper&lt;/tt&gt; function:&lt;/p&gt;
&lt;pre&gt;def setWallpaper( bmp ):
    os.system( "gconftool-2 -t string -s /desktop/gnome/background/picture_filename %s" % bmp.replace(" ","\\ ") )&lt;/pre&gt;
&lt;p align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_yvQpQviYWT0/R5AL5yPWrgI/AAAAAAAAABs/fXPchj2M7b8/s1600-h/nowplaying.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_yvQpQviYWT0/R5AL5yPWrgI/AAAAAAAAABs/fXPchj2M7b8/s320/nowplaying.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5156634660705840642" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-4887480551088523933?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/4887480551088523933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=4887480551088523933' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4887480551088523933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4887480551088523933'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/01/cover-art-wallpaper-under-ubuntu.html' title='Cover-art Wallpaper under Ubuntu'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_yvQpQviYWT0/R5AL5yPWrgI/AAAAAAAAABs/fXPchj2M7b8/s72-c/nowplaying.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-4224282044785717194</id><published>2008-01-18T12:22:00.000+11:00</published><updated>2008-12-12T15:32:19.113+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='filesystem'/><category scheme='http://www.blogger.com/atom/ns#' term='gparted'/><category scheme='http://www.blogger.com/atom/ns#' term='rsync'/><category scheme='http://www.blogger.com/atom/ns#' term='cron'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu File System Setup</title><content type='html'>&lt;p&gt;The following is a rough summary of how I've setup my Ubuntu file system, including some links to resources I found useful.&lt;/p&gt;
&lt;p&gt;I have 3 hard-drives, a 500gb drive for the system and "non-critical" files, and two 300gb drives to hold "valuable" data.  "Valuable" data includes documents, photos, source-code, music and some videos, less valuable "non-critical" data includes recorded TV programs, movies and so on.&lt;/p&gt;
&lt;p&gt;On my Windows XP system I was using a RAID-1 setup to automatically mirror my data drive to protect against hard-drive failure.    Using a RAID-1 array keeps everything nice and simple, but under Ubuntu I decided that the tools were more powerful and I would be able to "manually" mirror the data to gain a little more control.  In particular, while I want a copy of the data in case of hard-drive failure, a slightly delayed backup in case of catastrophic user error would also be very valuable.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_yvQpQviYWT0/R4__6yPWreI/AAAAAAAAABc/gVWvoGk3ac8/s1600-h/Screenshot-System+Monitor.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_yvQpQviYWT0/R4__6yPWreI/AAAAAAAAABc/gVWvoGk3ac8/s320/Screenshot-System+Monitor.jpg" alt="" id="BLOGGER_PHOTO_ID_5156621483746176482" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, each drive is mounted separately, and the 500gb drive is partitioned to give some space for the system and the majority for "stuff" (videos, backups etc.)&lt;/p&gt;
&lt;p&gt;I highly recommend partitioning the drives before/during installation, as while it was possible to move everything around, it was time consuming and fiddly.  I used a Gparted LiveCD to split my main drive to get a separate /stuff partition, but this took &lt;em&gt;forever&lt;/em&gt; (about 15 hours, and my system isn't slow...).  I used the &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=115843&amp;amp;package_id=173828"&gt;GParted LiveCD&lt;/a&gt; because this &lt;a href="http://apcmag.com/5459/dualboot_ubuntu_and_windows_xp"&gt;tutorial on installing WinXP on a Linux system&lt;/a&gt; suggested that the version of GParted on the Ubuntu LiveCD wouldn't work properly.&lt;/p&gt;
&lt;p&gt;This guide on &lt;a href="http://microwavebiscuit.wordpress.com/2007/11/12/move-home-to-it%C3%A2%C2%80%C2%99s-own-partition/"&gt;moving /home to a separate partition&lt;/a&gt; was helpful, though I think I just used &lt;tt&gt;cp -a&lt;/tt&gt; to copy the files, rather than the complicated &lt;tt&gt;find | cpio&lt;/tt&gt; command..&lt;/p&gt;
&lt;p&gt;Once I had it all up and mounted, I created a script to run &lt;a href="http://samba.anu.edu.au/rsync/"&gt;rsync&lt;/a&gt; to mirror the drives:&lt;/p&gt;
&lt;pre&gt;#!/bin/bash
date &gt;&gt; /home/tom/backup_mirror_home.log
rsync --archive --delete --stats /home/ /homeMIRROR/ 2&gt;&amp;amp;1 &gt;&gt; /home/tom/backup_mirror_home.log&lt;/pre&gt;
&lt;p&gt;This was added in as a &lt;a href="http://www.unixgeeks.org/security/newbie/unix/cron-1.html"&gt;cron&lt;/a&gt; job to run every 3 hours, which should be often enough (sudo crontab -e):&lt;/p&gt;
&lt;pre&gt;# m h  dom mon dow   command
0 */3 * * * /home/tom/backup_mirror_home.sh&lt;/pre&gt;
&lt;p&gt;The rsync process took a while to copy the 200gb or so across the first time, but is very fast (probably less than a minute) when just synchronizing the existing files as most data on the drive is photos and music that don't change very often.&lt;/p&gt;
&lt;p&gt;A useful trick to keep an eye on the progress of the copy operations is &lt;tt&gt;watch df&lt;/tt&gt;. &lt;tt&gt;df&lt;/tt&gt; shows the current usage on the various disks, and &lt;tt&gt;watch&lt;/tt&gt; will run it every 2 seconds so you can watch the percentages change slowly and be convinced something is actually happening.&lt;/p&gt;
&lt;p&gt;Once all that was done, I setup &lt;a href="http://onlyubuntu.blogspot.com/2007/03/backup-and-restore-ubuntu-system-using.html"&gt;sbackup&lt;/a&gt; to backup to the /stuff drive and an external USB drive.&lt;/p&gt;
&lt;p&gt;My actual process was a little more complicated than described above, as the 300gb drives already contained NTFS partitions with the critical data on them and I wanted to move it over to ext3 while at no point having less than 2 copies of the data.  The steps were roughly as follows:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Mount ntfs drive (/dev/sdb), copy data to 500gb drive (/dev/sda)&lt;/li&gt;
&lt;li&gt;Format /dev/sdb as ext3, copy data from /dev/sda to /dev/sdb.&lt;/li&gt;
&lt;li&gt;Move /home to /dev/sdb, and reorganise it a bit (rename/move folders/files about.)&lt;/li&gt;
&lt;li&gt;Format /dev/sdc as ext3, mirror from /dev/sdb&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/7024729-4224282044785717194?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/4224282044785717194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=4224282044785717194' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4224282044785717194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/4224282044785717194'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2008/01/ubuntu-file-system-setup.html' title='Ubuntu File System Setup'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_yvQpQviYWT0/R4__6yPWreI/AAAAAAAAABc/gVWvoGk3ac8/s72-c/Screenshot-System+Monitor.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-6557695483861688865</id><published>2007-12-04T12:06:00.000+11:00</published><updated>2008-12-12T15:32:19.344+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Installing Ubuntu was easy!</title><content type='html'>&lt;p&gt;I just got myself a new computer and started running Ubuntu on it, I'm astonished at how easy the whole process of installation was. Over the years I've installed Windows countless times, always a painful process, though I haven't installed Vista so maybe they finally figured it out.&lt;/p&gt;
&lt;p&gt;So, I built the computer, burnt an &lt;a href="http://www.ubuntu.com/getubuntu/download"&gt;Ubuntu live CD&lt;/a&gt;, put it in and the first suprise was that I hadn't stuffed anything up putting the machine together.  The live CD is really functional, and I was able to start up Pidgin, browse the web and most usefully, remote desktop into my old PC.&lt;/p&gt;
&lt;p&gt;I only have one keyboard/mouse and monitor and two machines, both of which I want to continue to use for a while as I'm expecting that transitioning from my old system to the new one will take some time as the machine is used for development, as a full media center as well as web browsing etc. and I don't know how long it will take to learn how to do all that under Linux. Being able to remote desktop back to the old machine solves the problem nicely.&lt;/p&gt;
&lt;p&gt;After playing with Ubuntu a bit and chatting with friends for a while I clicked "Install".  A bit of deliberation was required to determine the partition layout I want, as in the future I expect I will install XP and dual boot.  Finding an article on &lt;a href="http://apcmag.com/node/5162/"&gt;installing XP after Linux&lt;/a&gt; set my mind at ease so I figured I'd be able to repartition as necessary later.  So I chose all the default install options and that plugged away in the background for a little while.&lt;/p&gt;
&lt;p&gt;The truly impressive bit was that while this was happening, I was able to continue chatting with friends to get advice on installation options, search the web for answers and so on.  It only required a quick restart and I was all done, and I didn't really stop "working" the whole time.&lt;/p&gt;
&lt;p&gt;I did hit two small snags:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;During the restart I realized I'd "boxed" in the CD drive so had to hastily hit the power switch, pull of the front bezel and open a slot so it could eject... my bad :)&lt;/li&gt;&lt;li&gt;Installing Opera didn't go very smoothly, I tried using Add/Remove programs but it failed mysteriously with the following error:
&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_yvQpQviYWT0/R1SrbSGVeDI/AAAAAAAAABU/6vQv_Z7_a6I/s1600-R/Screenshot-gdebi-gtk.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_yvQpQviYWT0/R1SrbSGVeDI/AAAAAAAAABU/5jg6Xcy7FDE/s320/Screenshot-gdebi-gtk.png" alt="" id="BLOGGER_PHOTO_ID_5139921559939807282" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;
Downloading the .deb file from the &lt;a href="http://www.opera.com/download/"&gt;Opera&lt;/a&gt; website failed the first time too, but when I ran it again it worked, so there may be something broken with the way the dependencies went on and once they'd be put on by previous attempts it succeeded.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;I guess I probably won't have to reinstall Ubuntu as often as I did Windows, but at least I won't dread the process.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-6557695483861688865?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/6557695483861688865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=6557695483861688865' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6557695483861688865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6557695483861688865'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/12/installing-ubuntu-was-easy.html' title='Installing Ubuntu was easy!'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_yvQpQviYWT0/R1SrbSGVeDI/AAAAAAAAABU/5jg6Xcy7FDE/s72-c/Screenshot-gdebi-gtk.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-8371220540743718572</id><published>2007-11-19T15:58:00.000+11:00</published><updated>2008-12-12T15:32:19.512+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wallpaper'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Now Playing Album Cover Art Desktop Wallpaper</title><content type='html'>&lt;p&gt;A little Python program I wrote to update my Windows desktop wallpaper with the album cover art of each album I play. The idea is to represent a stack of CDs with the latest played one on top. This concept could easily be extended to other images, a random photo each day springs to mind.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_yvQpQviYWT0/R0Eeb-Vwt6I/AAAAAAAAABM/65Hn3MTuMrQ/s1600-h/nowplaying2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_yvQpQviYWT0/R0Eeb-Vwt6I/AAAAAAAAABM/65Hn3MTuMrQ/s320/nowplaying2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5134418516118648738" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The details of how this script is run when an album is played and where the album cover art comes from aren't really relevant, and aren't going to work outside my system anyway, but the concept can be used easily enough.&lt;/p&gt;
&lt;p&gt;Windows requires a little messing about to change the wallpaper dynamically, and this will only work with BMP files:&lt;/p&gt;
&lt;pre&gt;def setWallpaper( bmp ):
   import win32api, win32con, win32gui
   k = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control
Panel\\Desktop",0,win32con.KEY_SET_VALUE)
   win32api.RegSetValueEx(k, "WallpaperStyle", 0, win32con.REG_SZ, "0")
   win32api.RegSetValueEx(k, "TileWallpaper", 0, win32con.REG_SZ, "0")
   win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, bmp, 1+2)

&lt;/pre&gt;
&lt;p&gt;The following functions generate the wallpaper. The main function takes the filename of the wallpaper file, and the name of the new cover image, which will be pasted over the top of the existing wallpaper.&lt;/p&gt;
&lt;pre&gt;# read bmp in old_filename, "paste" current_filename over the top 
# and write out to new_filename (usually the same as old_filename)
import sys, os, urllib, math, Image, random
def makeBackgroundCollage(old_filename, current_filename, new_filename):
   if os.path.exists( old_filename ):
      new = Image.open( old_filename )
   else:
      new = Image.new( "RGB", (1280, 1024), (58, 110, 165) )
   if os.path.exists( current_filename ):
      current = Image.open( current_filename)
      if max(current.size) &lt; 300:
         current = current.resize( (current.size[0]*2, current.size[1]*2) )
      if max(current.size) &gt; 600:
         current = current.resize( (600, 600 * current.size[1]/current.size[0]) )
      border = Image.new("RGB", (current.size[0]+10, current.size[1]+10), 0xffffff)
      shadow = Image.new("RGB", border.size, 0x000000)
      angle = int(random.betavariate(2,2) * 50 - 25)
      (shadow, shadow_mask) = rotate2(shadow, border.size, angle, 128)
      (current, current_mask) = rotate2(current, border.size, angle)
      (border, border_mask) = rotate2(border, border.size, angle)
      pos = (int(random.betavariate(2,2) * (new.size[0] - border.size[0])),
             int(random.betavariate(2,2) * (new.size[1] - border.size[1])))
      new.paste(shadow, (pos[0]+5, pos[1]+5), shadow_mask)
      new.paste(border, pos, border_mask)
      new.paste(current, pos, current_mask)
   new.save( new_filename )

def rotate2(img, box, angle, alpha=255):
   img2 = Image.new(img.mode, boundingBox(box, angle * math.pi/180.0), 0)
   img2.paste(img, ( img2.size[0]/2 - img.size[0]/2,
                     img2.size[1]/2 - img.size[1]/2 ) )
   mask2 = Image.new("L", img2.size, 0)
   mask2.paste(Image.new("L", img.size, alpha), ( img2.size[0]/2 - img.size[0]/2,
                                                  img2.size[1]/2 - img.size[1]/2 ) )
   return (img2.rotate( angle, Image.BICUBIC ),
           mask2.rotate( angle, Image.BICUBIC ))

def boundingBox(box, angle):
   (x,y) = (box[0]/2.0, box[1]/2.0)
   (r, a) = (math.sqrt(x*x+y*y), math.atan2(y, x))
   (x1, y1) = (r * math.cos( a+angle ), r * math.sin( a+angle ) )
   (x2, y2) = (r * math.cos( -a+angle ), r * math.sin( -a+angle ) )
   return (int(math.ceil(max(abs(x1),abs(x2))*2)),
           int(math.ceil(max(abs(y1),abs(y2))*2)))

&lt;/pre&gt;
&lt;p&gt;The position and rotation of the album is chosen using a &lt;a href="http://en.wikipedia.org/wiki/Beta_distribution"&gt;beta distribution&lt;/a&gt;. This gives a nice distribution weighted towards the center of the screen, borders and a "drop shadow" are added to enhance the "stack" effect.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-8371220540743718572?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/8371220540743718572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=8371220540743718572' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8371220540743718572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8371220540743718572'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/11/now-playing-album-cover-art-desktop.html' title='Now Playing Album Cover Art Desktop Wallpaper'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_yvQpQviYWT0/R0Eeb-Vwt6I/AAAAAAAAABM/65Hn3MTuMrQ/s72-c/nowplaying2.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-8308817955569782693</id><published>2007-07-31T18:46:00.000+10:00</published><updated>2008-12-12T15:32:20.134+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='picaxe'/><category scheme='http://www.blogger.com/atom/ns#' term='electronics projects'/><title type='text'>Picaxe breadboard adapter</title><content type='html'>&lt;p&gt;A quick project to simplify Picaxe prototyping on my breadboard. The idea is to house the Picaxe chip (either an 08M or 14M) and "standard" serial interfacing circuit on a "breakout" board that can be easily plugged into the breadboard while providing easy access to the chip's pins.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_yvQpQviYWT0/Rq76Hg-Pm0I/AAAAAAAAAA0/l_ow3-HQp-U/s1600-h/protoboard.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5093283235619642178" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_yvQpQviYWT0/Rq76Hg-Pm0I/AAAAAAAAAA0/l_ow3-HQp-U/s320/protoboard.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;power input, about 5V, will be regulated by LM7805&lt;/li&gt;
&lt;li&gt;3.5mm stereo serial socket&lt;/li&gt;
&lt;li&gt;serial mode selector, switches serial in between "pin 5" (program mode) and "pin 3" (control mode)&lt;/li&gt;
&lt;li&gt;power switch&lt;/li&gt;
&lt;li&gt;jumpers to allow isolating standard serial circuit to "override" via breadboard&lt;/li&gt;
&lt;li&gt;14 pin socket&lt;/li&gt;
&lt;li&gt;header pins to provide 5V and 0V to "power rails" of breadboard&lt;/li&gt;
&lt;li&gt;header pins to connect Picaxe to breadboard&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_yvQpQviYWT0/Rq76Sg-Pm1I/AAAAAAAAAA8/0MIHc7D3HB0/s1600-h/protoboard-serial.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5093283424598203218" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_yvQpQviYWT0/Rq76Sg-Pm1I/AAAAAAAAAA8/0MIHc7D3HB0/s320/protoboard-serial.gif" border="0" /&gt;&lt;/a&gt;&lt;br&gt;serial schematic&lt;/p&gt;
&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/_yvQpQviYWT0/Rq76ZA-Pm2I/AAAAAAAAABE/gFiDASHYemw/s1600-h/protoboard-power.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5093283536267352930" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_yvQpQviYWT0/Rq76ZA-Pm2I/AAAAAAAAABE/gFiDASHYemw/s320/protoboard-power.gif" border="0" /&gt;&lt;/a&gt;&lt;br&gt;power schematic&lt;/p&gt;
&lt;p&gt;For some unknown reason, I had to add an extra 10k resistor between leg 2 and ground (soldered on the underside of the pcb, not shown on schematic.)&lt;/p&gt;
&lt;p&gt;The board works pretty much as I'd hoped. Unfortunately it is quite difficult to insert/remove from the breadboard so a future version would only have a single row of header pins. Another addition would be a DC socket to allow powering from a "wall wart" and I'd improve the layout a little to allow easier access to the switches.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-8308817955569782693?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/8308817955569782693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=8308817955569782693' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8308817955569782693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8308817955569782693'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/07/picaxe-breadboard-adapter.html' title='Picaxe breadboard adapter'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_yvQpQviYWT0/Rq76Hg-Pm0I/AAAAAAAAAA0/l_ow3-HQp-U/s72-c/protoboard.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-8373803141817690255</id><published>2007-07-24T15:40:00.000+10:00</published><updated>2008-12-12T15:32:20.709+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='led bike light'/><category scheme='http://www.blogger.com/atom/ns#' term='picaxe'/><category scheme='http://www.blogger.com/atom/ns#' term='electronics projects'/><title type='text'>Handlebar "Remote" for LED Bike Light</title><content type='html'>&lt;p&gt;Changing modes and using the high-beam was awkward using the switches mounted on &lt;a href="http://successlessness.blogspot.com/2007/05/led-bike-light-project.html"&gt;the original LED bikelight&lt;/a&gt; box, so I added a "remote" within easy reach of my thumb. This will make the high-beam more useful when approaching treacherous areas of paths that require more light but are exactly the places where you don't want to take your hands off the handlebars.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://2.bp.blogspot.com/_yvQpQviYWT0/RqWTKnSclwI/AAAAAAAAAAU/enYOvzrOXTc/s1600-h/IMG_8789.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5090636764366542594" style="CURSOR: hand;" alt="" src="http://2.bp.blogspot.com/_yvQpQviYWT0/RqWTKnSclwI/AAAAAAAAAAU/enYOvzrOXTc/s320/IMG_8789.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This uses a &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8236"&gt;"rocker" navigation switch&lt;/a&gt; to change modes, pushing it switches on the high beam. The mode-up and down buttons are simply wired in in parallel with the existing mode rocker switch, however the high-beam was a bit trickier and uses a BD681 darlington pair transitor to "pull" the control signal to the BuckPuck to ground.  This has the same effect as the existing NC push-button switch.&lt;/p&gt;
&lt;p&gt;This was necessary because all three switches on the navigation switch share a common wire, the Picaxe software and circuit is expecting the switches to provide +5v, so it was easier to make the high-beam use a transistor to cut-out the control signal than rework the remainder of the circuit to pull the Picaxe pins to ground when the switches are pushed.  If I was building this again, using ground as the common wire would be much simpler.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://3.bp.blogspot.com/_yvQpQviYWT0/RqWUA3SclxI/AAAAAAAAAAc/-P6VRLVd3cw/s1600-h/highbeammod.GIF"&gt;&lt;img id="BLOGGER_PHOTO_ID_5090637696374445842" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_yvQpQviYWT0/RqWUA3SclxI/AAAAAAAAAAc/-P6VRLVd3cw/s320/highbeammod.GIF" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There was enough room on the existing pcb to solder in the transistor, resistor and wires from the navigation switch.  That's one advantage of using proto-board over a printed pcb.&lt;/p&gt;
&lt;p&gt;One further mod would be to have a capacitor attached to the BD681 some how so that a single push holds the high-beam on for say 5 seconds, but I couldn't figure out how to get that to work. Alternatively, putting in a flip-flop to toggle the high-beam on/off would work too, but there was definitely not enough space on the pcb for that option.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-8373803141817690255?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/8373803141817690255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=8373803141817690255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8373803141817690255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/8373803141817690255'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/07/handlebar-remote-for-led-bike-light.html' title='Handlebar &quot;Remote&quot; for LED Bike Light'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_yvQpQviYWT0/RqWTKnSclwI/AAAAAAAAAAU/enYOvzrOXTc/s72-c/IMG_8789.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-7975888688205340476</id><published>2007-07-06T22:41:00.002+10:00</published><updated>2008-12-12T15:32:20.843+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='picaxe'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='electronics projects'/><title type='text'>Ambient Email Notifier</title><content type='html'>&lt;p&gt;Small project to provide email notification via an RGB LED hooked up to the USB port.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/738013582/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1419/738013582_14cce97821.jpg" width="400" height="300" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Uses a &lt;a href="http://www.dontronics-shop.com/product.php?productid=16141"&gt;4d-micro-USB module&lt;/a&gt; to provide power and RS232 to a Picaxe 08M controlling an RGB LED. Can control colour (seven colours: work email in red, newsletters in green, other in blue) and brightness by sending characters to the COM port, this is done by a Python script run every 10 minutes by Task Scheduler with an accompanying system tray icon to allow LED to be turned off again (see &lt;a href="http://realfolkblues.org/blog/python-gmail-check-in-four-lines-of-code/"&gt;python gmail check in four lines of code&lt;/a&gt;, &lt;a href="http://pyserial.sourceforge.net/"&gt;pySerial&lt;/a&gt; and &lt;a href="http://datavibe.net/~essiene/pysystray/"&gt;pySystray&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The schematic is as simple as possible:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_yvQpQviYWT0/Ro45qbswsiI/AAAAAAAAAAM/vB5VKCOxZwo/s1600-h/usb_rgb_led_bd681.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5084064430500655650" alt="" src="http://2.bp.blogspot.com/_yvQpQviYWT0/Ro45qbswsiI/AAAAAAAAAAM/vB5VKCOxZwo/s320/usb_rgb_led_bd681.gif" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The relevant code (python and picaxe basic) is pretty self-evident, I will provide it if anyone is interested. &lt;b&gt;Update:&lt;/b&gt; Another post has &lt;a href="http://successlessness.blogspot.com/2008/02/ambient-email-notifier-some-code.html"&gt;some code&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-7975888688205340476?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/7975888688205340476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=7975888688205340476' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7975888688205340476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7975888688205340476'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/07/ambient-email-notifier.html' title='Ambient Email Notifier'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1419/738013582_14cce97821_t.jpg' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-6956666969013921481</id><published>2007-05-30T17:16:00.000+10:00</published><updated>2007-05-30T17:23:47.622+10:00</updated><title type='text'>CCTV Filmmaking</title><content type='html'>BBC &lt;a href="http://news.bbc.co.uk/1/hi/technology/6654971.stm"&gt;article&lt;/a&gt; about a film, &lt;cite&gt;&lt;a href="http://www.ambienttv.net/content/?q=faceless"&gt;Faceless&lt;/a&gt;&lt;/cite&gt;, made entirely using CCTV footage.  Pretty neat, the &lt;a href="http://www.ambienttv.net/content/?q=dpamanifesto"&gt;manifesto&lt;/a&gt; states you can't take your own camera or lighting and the protaganist must appear in every shot to allow them to obtain the footage via freedom of information/privacy legislation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-6956666969013921481?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://news.bbc.co.uk/1/hi/technology/6654971.stm' title='CCTV Filmmaking'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/6956666969013921481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=6956666969013921481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6956666969013921481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6956666969013921481'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/05/cctv-filmmaking.html' title='CCTV Filmmaking'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-2062884722220168193</id><published>2007-05-27T19:52:00.000+10:00</published><updated>2007-05-27T19:54:54.896+10:00</updated><title type='text'>Wow, fixed already...</title><content type='html'>Interesting article about the reconstruction of the freeway in San Francisco that collapsed after a truck fire.  No, really.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-2062884722220168193?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2007/05/25/MNG6EQ1IDG1.DTL' title='Wow, fixed already...'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/2062884722220168193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=2062884722220168193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2062884722220168193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/2062884722220168193'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/05/wow-fixed-already.html' title='Wow, fixed already...'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-6026618843061271853</id><published>2007-05-19T19:15:00.000+10:00</published><updated>2007-11-30T23:53:44.147+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='led bike light'/><category scheme='http://www.blogger.com/atom/ns#' term='picaxe'/><category scheme='http://www.blogger.com/atom/ns#' term='electronics projects'/><title type='text'>LED bike light project</title><content type='html'>&lt;h3&gt;Design&lt;/h3&gt;
&lt;p&gt;The goal was to create a high power LED bike light (some &lt;a href="http://yojimg.net/bike/equipment/lights/led_lights.php"&gt;similar projects&lt;/a&gt;: &lt;a href="http://www.mouldy.org/book/export/html/41"&gt;a 3 LED mountain bike light&lt;/a&gt;, a &lt;a href="http://www.ghostgum.com.au/misc/BikeLight.htm"&gt;whole series of evolving light designs&lt;/a&gt; or this &lt;a href="http://myfwyc.org/bikeled/DIY_LED_Bike_Lighting_Guide.html"&gt;simple and neat 3 LED light&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;After discovering the BuckPuck LED driver has a 5V output and a dimmer control circuit, I decided to control it with a Picaxe microcontroller.  The primary purpose of the microcontroller was to provide a battery level indicator of some sort.  Secondary features would be to allow multiple brightness modes etc.&lt;/p&gt;

&lt;p&gt;I couldn't find a simple battery level circuit or simple way to calculate the remaining capacity of a battery so decided instead to simply use the Picaxe to time the amount of time the light has been switched on and use this to determine when a recharge is required.&lt;/p&gt;

&lt;p&gt;The aim is to discharge the batteries about 30% between each recharge.  The circuit should draw a maximum of about 1A for the LED, and say 0.2A for the Picaxe and bargraph LEDs.  Using 2400mAH batteries, and 100% efficiency, would give 2 hrs at 100% discharge.  However the light will rarely be on at full power; assuming it's on at 30% power, a 30% discharge will therefore take about 2 hours... or so I'm guessing, it's &lt;a href="http://batteryuniversity.com/"&gt;much more complicated than that&lt;/a&gt;, but that'll do for now.&lt;/p&gt;

&lt;p&gt;The controller will require two buttons to change up and down through the brightness modes, and one to test the battery level (i.e. display the timer value.)  Two buttons are required to avoid having to cycle through all the modes to get back to the start, like all the stupid flashing LED tail lights require...&lt;/p&gt;

&lt;p&gt;The pins for the buttons plus one output for the LED controller and one to drive the LED bargraph uses all 5 input/output pins on the Picaxe 08M.&lt;/p&gt;

&lt;p&gt;One further feature was added, which is a "high beam" button. This will override the current mode from the Picaxe and put the LED on full power.  This will be used to briefly illuminate dark parts of paths and to flash at cars that might not have seen me or have cut in front of me or something like that.  Fortunately, this button does not need to be connected to the Picaxe, as there are no free pins.&lt;/p&gt;


&lt;h3&gt;Schematic&lt;/h3&gt;

&lt;p&gt;The Picaxe usese 3 standard input circuits.  For the outputs, Pin2 is used for PWM output in the background to drive the LED controller.  This will allow different brightnesses to be set by varying the duty cycle.&lt;/p&gt;

&lt;p&gt;To drive the LED bargraph, the basic reference circuit from the LM3914 datasheet is used to measure the voltage over a resistor/capacitor circuit.  The capacitor is charged via a PWM output from the picaxe.  Varying the duty cycle allows the capacitor to charge to different levels which is reflected in the bargraph.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/504308679/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/193/504308679_e97e2f3a24.jpg" width="500" height="389" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I added a fuse between the battery and the BuckPuck too, just in case.  No idea if it's really needed...&lt;/p&gt;

&lt;h3&gt;Parts list&lt;/h3&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="3"&gt;Components&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Cree XR-E 3W LED + 8° Lens + BuckPuck 3023-D-E-1000 Driver (&lt;a href="http://www.leddynamics.com/LuxDrive/datasheets/3021-BuckPuck.pdf"&gt;datasheet&lt;/a&gt;)&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.cutter.com.au/proddetail.php?prod=cut731"&gt;Cutter Electronics&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Picaxe 08M microcontroller&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.microzed.com.au/8pin.htm"&gt;Microzed&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;LM3914 LED bargraph driver (&lt;a href="javascript:openreq('http://www.ortodoxism.ro/datasheets/nationalsemiconductor/DS007970.PDF')"&gt;datasheet&lt;/a&gt;)&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/Z6295"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;10 seg LED bargraph&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/Z4180"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1k resistors&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;10k resistors&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1k2 resistors&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3k6 resistors&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0k2 resistors&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;10uF 25V electrolitic capacitor&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th colspan="3"&gt;Hardware&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Plastic "Jiffy" box (30x54x83mm)&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/H5005"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Veroboard (24 tracks x 18 holes)&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/H5614"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Heatsink&lt;/td&gt;&lt;td&gt;(&lt;a href="http://jaycar.com.au/productView.asp?ID=HH8504&amp;CATID=&amp;keywords=heatsink&amp;SPECIAL=&amp;form=KEYWORD&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID="&gt;Jaycar&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3.5mm mono &lt;a href="http://jaycar.com.au/productView.asp?ID=PP0114&amp;CATID=35&amp;keywords=&amp;SPECIAL=&amp;form=CAT&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=373"&gt;plug&lt;/a&gt; + &lt;a href="http://jaycar.com.au/productView.asp?ID=PS0120&amp;CATID=35&amp;keywords=&amp;SPECIAL=&amp;form=CAT&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=373"&gt;socket&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Jaycar)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;SPDT rocker switch (on-off-on)&lt;/td&gt;&lt;td&gt;(&lt;a href="http://jaycar.com.au/productView.asp?ID=SK0987&amp;CATID=28&amp;keywords=&amp;SPECIAL=&amp;form=CAT&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=401"&gt;Jaycar&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Push button (N/O)&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/P7560"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Push button (N/C)&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/P7561"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.radioparts.com.au/ProdView.aspx?popup=1&amp;Category=SX080303&amp;Product=12951974"&gt;Fuse&lt;/a&gt; + &lt;a href="http://www.radioparts.com.au/ProdView.aspx?popup=1&amp;Category=SX080307&amp;Product=13105345"&gt;Holder&lt;/a&gt; (M205 2A)&lt;/td&gt;&lt;td&gt;(Radioparts)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;8 Pin DIL socket&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/P4080"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;18 Pin DIL socket&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/P4180"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;20 Pin DIL socket (machine pin strip)&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/P4300"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4 AA battery holder&lt;/td&gt;&lt;td&gt;(&lt;a href="http://jaycar.com.au/productView.asp?ID=PH9200&amp;CATID=18&amp;keywords=&amp;SPECIAL=&amp;form=CAT&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=522"&gt;Jaycar&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;9v Battery snaps&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.dse.com.au/cgi-bin/dse.storefront/464eb6e90cc670ee273fc0a87f9c0785/Product/View/S6100"&gt;DSE&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;AA NiMH batteries (2400mAH)&lt;/td&gt;&lt;td&gt;(&lt;a href="http://jaycar.com.au/productView.asp?ID=SB1735&amp;CATID=18&amp;keywords=&amp;SPECIAL=&amp;form=CAT&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=583"&gt;Jaycar&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;velcro straps 12.5cm of hook + 12.5cm fuzz&lt;/td&gt;&lt;td&gt;(Spotlight)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;inner tube rubber&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th colspan="3"&gt;Materials&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Arctic Silver Thermal Adhesive&lt;/td&gt;&lt;td&gt;(&lt;a href="http://www.mittoni.com.au/arctic-silver-adhesive-7g-p-2075.html?sID=d86ce257e4fc217750d076fcd0e306fc"&gt;Mittoni&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Note: The above suppliers are not necessarily where I got the part, just the first link I could find...&lt;/p&gt;

&lt;h3&gt;Software&lt;/h3&gt;

&lt;p&gt;The above circuit was first layed out on a breadboard with a regular LED in place of the 3W Cree LED and using 4 AA batteries directly rather than via the BuckPuck.&lt;/p&gt;

&lt;p&gt;Note that when I got the BuckPuck and LED, the 4 AA batteries were not sufficient to provide enough voltage from the Ref pin to switch the LED off.  This was fixed by using all 8 AA batteries.&lt;/p&gt;

&lt;h4&gt;LED bargraph output calibration&lt;/h4&gt;

&lt;p&gt;After realising I had no real idea how to get the LM3914 input range to match the output from the Picaxe, or how to choose the right resistor/capacitor combination, it occurred to me that it didn't matter and the picaxe could be calibrated to output voltages that lit up the bargraph LEDs the right amount.  Hooray for software!&lt;/p&gt;

&lt;p&gt;The values output by the following program when each of the 10 LEDs lit up were written down and used in the final program.&lt;/p&gt;

&lt;pre&gt;
symbol x = b0
symbol y = b1
symbol dot = b2

main: 
 for x = 0 to 10
  dot = x
  gosub display_dot
 next x
 for x = 10 to 0 step -1
  dot = x
  gosub display_dot
 next x
 goto main


display_dot:
 lookup dot, (0, 89, 134, 156, 169, 177, 184, 190, 198, 207, 214), y
 
 pwm 1, y, 100
 
' pause 500
 
 return
&lt;/pre&gt;

&lt;h4&gt;Controller program&lt;/h4&gt;

&lt;pre&gt;
' 252 bytes program + 2 bytes data

' pins
symbol led_pin = 2
symbol dot_pin = 0
symbol test_btn = pin3
symbol modeUp_btn = pin4
symbol modeDn_btn = pin1

' variables
symbol mode = b0
symbol time = w4
symbol time_counter = w6

symbol dot = b1
symbol dot_duty = b2
symbol dot_cycles = b3

symbol led_period = b4
symbol led_duty = w5


' constants
symbol minMode = 0
symbol maxMode = 10
symbol flashMode = 9
symbol maxTime = 1200 ' minutes * 10
symbol dotTime = maxTime / 10
symbol time_interval = 1122 ' roughly 11215 ticks per minute

' data
eeprom 0, (0, 0) ' time as a word

' initialize
high led_pin

mode = 0
read 0, word time

' wakeup
gosub strobe

main:
 dot_cycles = 50

 time_counter = time_counter + 1
 if time_counter &gt; time_interval then
  ' clock tick (4 bytes)
  high dot_pin
  high dot_pin
  low dot_pin

  time = time + 1
  goto write_time ' return to main
 endif

 if modeUp_btn = 1 and mode &lt; maxMode then
  mode = mode + 1
  goto show_mode ' return to main
 endif
 if modeDn_btn = 1 and mode &gt; minMode then
  mode = mode - 1
  goto show_mode ' return to main
 endif
 
 if test_btn = 1 then
  dot = time / dotTime max 10
  dot_cycles = 100
  gosub do_dot
  ' hold to reset (8 bytes per delay loop)
  if test_btn = 1 then
   gosub do_dot
   if test_btn = 1 then
    gosub strobe

    time = 0
    goto write_time ' return to main
   endif
  endif
 endif

 if mode &gt;= flashMode then
  gosub do_mode
 endif

 goto main

write_time:
 write 0, word time
 time_counter = 0
 goto main

show_mode:
 gosub do_mode
 dot = mode
 gosub do_dot
 goto main

do_mode: ' high - led off, low - led on
 led_period = 255
 'led_duty = 4 - mode * 250
 lookup mode, (0, 1010, 980, 950, 900, 800, 600), led_duty
 select mode
  case 0 ' off
   led_period = 0
   high led_pin
'  case 1 ' dim 1
'   led_duty = 750
'  case 2 ' dim 2
'   led_duty = 500
'  case 3 ' dim 3
'   led_duty = 250
  case 8 ' full
   led_period = 0
   low led_pin
  case 9 ' dim short flash
   led_period = 0
   'low led_pin
   'pause 50
   pwm led_pin, 150, 10
   high led_pin
   pause 350
  case 10 ' long flash (17 bytes)
   led_period = 0
   low led_pin
   pause 100
   high led_pin
   pause 300
 endselect

 pwmout led_pin, led_period, led_duty
 
 return

do_dot:
 lookup dot, (0, 89, 134, 156, 169, 177, 184, 190, 198, 207, 214), dot_duty
 
 pwm dot_pin, dot_duty, dot_cycles
 low dot_pin
 
 return

strobe:
 dot_cycles = 10
 for dot = 1 to 10
  gosub do_dot
 next dot
 return
&lt;/pre&gt;

&lt;p&gt;Some points to note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The time the light has been running in "minutes" is stored in the EEPROM memory of the Picaxe.&lt;/li&gt;
&lt;li&gt;Pressing the "test" button will display the current time on the bargraph using 1 LED for each 12 minutes (120 minutes total).&lt;/li&gt;
&lt;li&gt;Holding the "test" button for a few seconds will reset the timer.  This will be used when freshly charged batteries are inserted.&lt;/li&gt;
&lt;li&gt;There are 8 brightness modes (plus "off") and two flash modes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Timer calibration&lt;/h4&gt;

&lt;p&gt;The above controller flashes the bargraph briefly each 6 seconds or so.  A few minutes worth of these flashes were counted and timed and the program adjusted so that the bargraph will reach 10 after approximately 120 minutes.&lt;/p&gt;

&lt;h3&gt;Construction&lt;/h3&gt;

&lt;p&gt;First, all the required holes were drilled in the box, and the aluminium lid was bent into shape to hold the LED and heatsink.  The box lid was also shaped to fit the aluminium lid sticking out the side.&lt;/p&gt;

&lt;p&gt;The spacers inside the box were cut down to lower the circuit board so there was enough room for the LED bargraph to stick out the top and the switches and BuckPuck to fit underneath.&lt;/p&gt;

&lt;p&gt;The wires from the BuckPuck were soldered to the LED (with an extra wire joined to LED -ve output to become the ground for the circuit board.)&lt;/p&gt;

&lt;p&gt;The LED was glued to the heatsink using the Arctic Silver epoxy, and when it was dry the heatsink and LED were glued to the aluminium lid.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/504308891/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/196/504308891_9b77468be9_m.jpg" width="240" height="180" alt="" /&gt;&lt;/a&gt;
&lt;a href="http://www.flickr.com/photos/tom-paton/504308787/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/207/504308787_aa84b321bd_m.jpg" width="240" height="180" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first version of the battery pack was put together at this stage too.  This failed as the battery holders were made of &lt;a href="http://en.wikipedia.org/wiki/Delrin"&gt;Delrin&lt;/a&gt; which is ungluable...  So, I drilled tiny holes in the two cases and "sewed" them together with fine jewellery or tie wire.  An on/off switch was soldered to the battery wires and the socket assembled.&lt;/p&gt;

&lt;p&gt;The circuit board layout was sketched out, the board cut to size and the tracks between the IC sockets cut.  The sockets were then soldered in and the the resistors and capacitor soldered in too.  The chopped off legs from the resistors were used as bridges between the +ve LED bargraph pins and the ground 10k resistor line.  Some legs were also used to form some jumpers, with soldered in for others.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/504308975/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/226/504308975_122565d9df_m.jpg" width="240" height="190" alt="" /&gt;&lt;/a&gt;
&lt;a href="http://www.flickr.com/photos/tom-paton/504309053/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/193/504309053_41651cc29f_m.jpg" width="204" height="240" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I measured out the wire and soldered to the switches etc. and soldered in the BuckPuck and circuit board.&lt;/p&gt;

&lt;p&gt;At this point, the circuit was tested and found to work (incredibly!) so the bottom of the circuit board was insulated with some electrical tape and the whole lot squeezed into the box.&lt;/p&gt;

&lt;p&gt;A thin strip of inner tube rubber was added as a gasket on top of the aluminium lid to seal it in case of rain (which wasn't really considered in the design...)&lt;/p&gt;

&lt;p&gt;For the first test ride, the whole lot was attached to my bike with rubber bands and the batteries were lashed to the frame with an inner tube!  I was very happy with the results so started working out a more permanent mounting mechanism.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/504309119/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/226/504309119_465c2dd0eb_m.jpg" width="240" height="180" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I removed the socket from my old Cateye light and bolted/Araldyted it to the box, which took care of mounting the light itself.  It is adjustable/tiltable too which is a nice bonus.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/504309361/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/209/504309361_1a215c34f6_m.jpg" width="240" height="180" alt="" /&gt;&lt;/a&gt;
&lt;a href="http://www.flickr.com/photos/tom-paton/504274930/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/228/504274930_e448a5f9e6_m.jpg" width="240" height="180" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initially the batteries were mounted using an elastic strap, but this proved to be a little difficult to attach/remove with less than 3 hands and I dropped it breaking the damn thing.  Because the battery holder can't be glued I had to start again with a different construction method.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/504309217/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/201/504309217_adf714fef5_m.jpg" width="240" height="180" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This time, the battery holders were "sewn" together using jewellery wire again and the whole lot held in a cradle made from inner tube rubber (helpfully sewn by Alison) that is velcroed to the bike.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/504309519/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/189/504309519_04dd172961_m.jpg" width="240" height="180" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This looks quite professional and is a lot easier to take on and off!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/504275150/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/221/504275150_3d4e178a0c_m.jpg" width="240" height="180" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Results&lt;/h3&gt;

&lt;p&gt;I'm extremly happy with the results, the LED is way too bright to look at and lights the road extremely well when on "full".  Under normal conditions "mode 3" was quite sufficient to see the road.&lt;/p&gt;

&lt;p&gt;The following image was taken by shining the light onto my door from about 3m away and photographing at 1/15 sec, f2.8, ISO100.  The door has a slightly gloss paint, so the middle of the beam is being reflected back.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/tom-paton/504275334/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/228/504275334_886b95b35d_m.jpg" width="240" height="180" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some minor changes I would make:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The "high beam" button really neads to be accessible without moving your hand to the light.  I'm not sure how best to achieve this.&lt;/li&gt;
&lt;li&gt;A switch on the battery box would be useful (this was initially planned but died with the first battery box.)&lt;/li&gt;
&lt;li&gt;A "console light" to light up my speedo.&lt;/li&gt;
&lt;li&gt;Waterproof design!&lt;/li&gt;
&lt;li&gt;A future version may well use a proper battery capacity meter (such as &lt;a href="http://www.mhennessy3.f9.co.uk/battmon/index.htm"&gt;this one for lead acid batteries&lt;/a&gt; or &lt;a href="http://www.laureanno.com/RC/picaxe-simplevolt.html"&gt;this one for R/C cars&lt;/a&gt;.)&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-6026618843061271853?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/6026618843061271853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=6026618843061271853' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6026618843061271853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6026618843061271853'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/05/led-bike-light-project.html' title='LED bike light project'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/193/504308679_e97e2f3a24_t.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-7727586581812158451</id><published>2007-04-30T22:56:00.000+10:00</published><updated>2007-11-30T23:57:20.136+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>What if It's All Been a Big Fat Lie?</title><content type='html'>New York Times piece from 2002 questioning the received "fat is bad, mkay?" wisdom.  The first 8 pages are good, then it starts promoting the Atkins diet a little too specifically, which given that the main message I take out of the whole article is "there's no silver bullet" seems a little short sighted...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-7727586581812158451?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://query.nytimes.com/gst/fullpage.html?sec=health&amp;res=9F04E2D61F3EF934A35754C0A9649C8B63' title='What if It&apos;s All Been a Big Fat Lie?'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/7727586581812158451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=7727586581812158451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7727586581812158451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/7727586581812158451'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/04/what-if-its-all-been-big-fat-lie.html' title='What if It&apos;s All Been a Big Fat Lie?'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-1943461788872600180</id><published>2007-04-25T13:48:00.000+10:00</published><updated>2007-11-30T23:57:20.137+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>You Are What You Grow</title><content type='html'>Michael Pollan in the New York Times with a glimmer of hope that the US farm bill could get a run for it's money this time around...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-1943461788872600180?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nytimes.com/2007/04/22/magazine/22wwlnlede.t.html?_r=2&amp;ref=magazine&amp;oref=slogin&amp;oref=slogin' title='You Are What You Grow'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/1943461788872600180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=1943461788872600180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/1943461788872600180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/1943461788872600180'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/04/you-are-what-you-grow.html' title='You Are What You Grow'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-1662422099115300043</id><published>2007-04-25T13:44:00.000+10:00</published><updated>2007-04-25T13:47:55.242+10:00</updated><title type='text'>Humans hot, sweaty, natural-born runners</title><content type='html'>Interesting article on the evolution of long distance running as a hunting strategy for early hominids.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-1662422099115300043?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.physorg.com/news95954919.html' title='Humans hot, sweaty, natural-born runners'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/1662422099115300043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=1662422099115300043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/1662422099115300043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/1662422099115300043'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/04/humans-hot-sweaty-natural-born-runners.html' title='Humans hot, sweaty, natural-born runners'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-6261904107753356844</id><published>2007-02-13T15:01:00.000+11:00</published><updated>2007-11-30T23:58:39.674+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pc tips'/><title type='text'>Recovering Accidentally Deleted Files with Undelete Plus</title><content type='html'>After accidentally deleting about 100&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;gb&lt;/span&gt; of recorded TV programs, &lt;br/&gt;I spent a bit of time looking around for a utility that would &lt;br/&gt;let me recover them easily (God knows why this isn't built into Windows...)&lt;br/&gt;&lt;br/&gt;After trying a lot of utilities, I eventually found &lt;a href="http://www.undelete-plus.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Undelete&lt;/span&gt; PLUS&lt;/a&gt;.  This scanned and found all the deleted files very quickly and I was able to copy them to another drive.&lt;br/&gt;&lt;br/&gt;The program's &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;UI&lt;/span&gt; is not particularly intuitive, and a general flaw with all these programs is that you must copy the recovered files to a separate disk to avoid destroying other yet-to-be recovered files (which is a pain with 100&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;gb&lt;/span&gt; of files...)&lt;br/&gt;&lt;br/&gt;However, it's free, and it works!  Download or bookmark it in case you need it one day.&lt;br/&gt;&lt;br/&gt;(I'm using Windows &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;XP&lt;/span&gt; SP2 with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;NTFS&lt;/span&gt; formatted drives.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-6261904107753356844?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/6261904107753356844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=6261904107753356844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6261904107753356844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/6261904107753356844'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/02/recovering-accidentally-deleted-files.html' title='Recovering Accidentally Deleted Files with Undelete Plus'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-116885911161149379</id><published>2007-01-15T22:03:00.000+11:00</published><updated>2007-11-30T23:57:20.137+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>Restaurant reviewer with an ethical stance</title><content type='html'>&lt;blockquote&gt;From now on, if a restaurant does not offer me tap water, politely, unsarcastically, and before they offer mineral water, then they will be penalised.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-116885911161149379?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.timesonline.co.uk/article/0,,1147-2542431,00.html' title='Restaurant reviewer with an ethical stance'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/116885911161149379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=116885911161149379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116885911161149379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116885911161149379'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2007/01/restaurant-reviewer-with-ethical.html' title='Restaurant reviewer with an ethical stance'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-116226350840212577</id><published>2006-10-31T13:41:00.000+11:00</published><updated>2006-10-31T13:58:29.303+11:00</updated><title type='text'>Scaring children to death</title><content type='html'>&lt;p&gt;Robyn Williams, &lt;a href="http://abc.net.au/rn/inconversation/stories/2006/1738904.htm"&gt;In Conversation with Bill Durodie&lt;/a&gt;, 28th September:&lt;/p&gt;
&lt;blockquote&gt;"Going back to what you're saying about risk, I was fascinated the other day to hear something on the BBC concerning the fear of paedophiles; occasionally of course, it's a real, real thing that there is a nasty man in a coat and there is a poor vulnerable child. However for every one of those – apparently now that everyone drives their kids to school, there are 300 fatal accidents – so for each one child that you're saving from the paedophile, 300 are dying in car crashes."&lt;/blockquote&gt;
&lt;p&gt;I'd love to find a reference for that...&lt;/p&gt;
&lt;p&gt;Related: &lt;a href="http://www2.rcn.org.uk/pcph/news/fear_of_paedophiles_makes_children_fat_15_october"&gt;Fear of paedophiles makes children fat&lt;/a&gt; and &lt;a href="http://news.bbc.co.uk/1/hi/uk_politics/5364256.stm"&gt;Fear of paedophiles 'a tragedy'&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-116226350840212577?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/116226350840212577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=116226350840212577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116226350840212577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116226350840212577'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/10/scaring-children-to-death.html' title='Scaring children to death'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-116099824146587970</id><published>2006-10-16T21:28:00.000+10:00</published><updated>2006-10-18T15:12:18.536+10:00</updated><title type='text'>Things will get better!</title><content type='html'>&lt;p&gt;Well, maybe that's not all that positive...  &lt;a href="http://feeds.treehugger.com/~r/treehuggersite/~3/36836580/doomsday_timeline.php"&gt;treehugger post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Update: &lt;a href="http://www.worldchanging.com/archives/005052.html"&gt;on World Changing&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-116099824146587970?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.treehugger.com/files/doom_1.php' title='Things &lt;em&gt;will&lt;/em&gt; get better!'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/116099824146587970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=116099824146587970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116099824146587970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116099824146587970'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/10/things-will-get-better.html' title='Things &lt;em&gt;will&lt;/em&gt; get better!'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-116018186530318322</id><published>2006-10-07T10:43:00.000+10:00</published><updated>2007-12-01T00:06:52.127+11:00</updated><title type='text'>The Onion: Retired S1Ws Recalled To Active Duty</title><content type='html'>Too good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-116018186530318322?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.theonion.com/content/node/53796' title='The Onion: Retired S1Ws Recalled To Active Duty'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116018186530318322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116018186530318322'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/10/onion-retired-s1ws-recalled-to-active.html' title='The Onion: Retired S1Ws Recalled To Active Duty'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-116018029839446761</id><published>2006-10-07T10:12:00.000+10:00</published><updated>2006-10-07T10:18:18.843+10:00</updated><title type='text'>Well put...</title><content type='html'>&lt;p&gt;An article by Emma Tom on the inconsistent imposition of "Australian values" on different religions.&lt;/p&gt;
&lt;p&gt;Nice quote from a &lt;a href="http://www.theonion.com/content/node/28151"&gt;post 9-11 article&lt;/a&gt; in The Onion:&lt;/p&gt;
&lt;blockquote&gt;"Look, I don't know, maybe I haven't made myself completely clear, so for the record, here it is again," God was quoted as saying. "Somehow, people keep coming up with the idea that I want them to kill their neighbour. Well, I don't. And to be honest, I'm really getting sick and tired of it. Get it straight. Not only do I not want anybody to kill anyone, but I specifically commanded you not to, in really simple terms that anybody ought to be able to understand."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-116018029839446761?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.fatherbob.com.au/father_bob/2006/10/emma.html' title='Well put...'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/116018029839446761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=116018029839446761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116018029839446761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/116018029839446761'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/10/well-put.html' title='Well put...'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-115711718276055366</id><published>2006-09-01T23:25:00.000+10:00</published><updated>2006-09-01T23:26:23.126+10:00</updated><title type='text'>24hrs of searching</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-115711718276055366?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://labs.google.com/papers/sawzall-20030814.gif' title='24hrs of searching'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/115711718276055366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=115711718276055366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115711718276055366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115711718276055366'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/09/24hrs-of-searching.html' title='24hrs of searching'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-115700760230814960</id><published>2006-08-31T16:58:00.000+10:00</published><updated>2006-08-31T17:00:02.583+10:00</updated><title type='text'>roentgenizdat</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-115700760230814960?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.boingboing.net/2006/08/30/sovietera_bootleg_ro.html' title='roentgenizdat'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/115700760230814960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=115700760230814960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115700760230814960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115700760230814960'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/08/roentgenizdat.html' title='roentgenizdat'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-115590732292909847</id><published>2006-08-18T23:21:00.000+10:00</published><updated>2006-08-18T23:22:12.153+10:00</updated><title type='text'>Ruby and Ocaml</title><content type='html'>&lt;p&gt;Not sure whether I'll learn either of these properly, but so far Ruby is winning simply because of this book:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://poignantguide.net/ruby/"&gt;Why's (Poignant) Guide to Ruby&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;Fox #1:&lt;/em&gt; Have you noticed this book is basically written by a &lt;u&gt;lunatic&lt;/u&gt;?&lt;br/&gt;
&lt;em&gt;Fox #2:&lt;/em&gt;Yup.&lt;/blockquote&gt;
&lt;p&gt;The licensing for the book also permits it's use for cigarette advertising, which may come in handy...&lt;/p&gt;
&lt;p&gt;The other (slightly more distant) contender is &lt;a href="http://www.ocaml-tutorial.org/"&gt;Objective CAML&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-115590732292909847?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/115590732292909847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=115590732292909847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115590732292909847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115590732292909847'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/08/ruby-and-ocaml.html' title='Ruby and Ocaml'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-115587446399956325</id><published>2006-08-18T14:11:00.000+10:00</published><updated>2006-08-18T14:14:24.573+10:00</updated><title type='text'>Dabblers and Blowhards</title><content type='html'>An interesting counterpoint to &lt;a href="http://www.paulgraham.com/hp.html"&gt;Hackers and Painters&lt;/a&gt;.  I'm not entirely convinced, but it does make quite a few fair points.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-115587446399956325?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.idlewords.com/2005/04/dabblers_and_blowhards.htm' title='Dabblers and Blowhards'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/115587446399956325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=115587446399956325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115587446399956325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115587446399956325'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/08/dabblers-and-blowhards.html' title='Dabblers and Blowhards'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-115580742802494242</id><published>2006-08-17T19:36:00.000+10:00</published><updated>2007-11-30T23:58:39.675+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pc tips'/><title type='text'>Death to Caps Lock</title><content type='html'>See also: http://capsoff.blogspot.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-115580742802494242?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.wired.com/news/technology/0,71606-0.html?tw=rss.index' title='Death to Caps Lock'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/115580742802494242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=115580742802494242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115580742802494242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115580742802494242'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/08/death-to-caps-lock.html' title='Death to Caps Lock'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-115556032207908826</id><published>2006-08-14T22:54:00.000+10:00</published><updated>2006-08-14T22:58:48.613+10:00</updated><title type='text'>Whoa... JavaScript just got scary!</title><content type='html'>A very clever technique to scan any network using JavaScript (as designed, no bugs required...)

And for the &lt;a href="http://66.102.7.104/search?q=cache:Sm8xV9mJL2kJ:www.spidynamics.com/assets/documents/JSportscan.pdf+&amp;hl=en&amp;ct=clnk&amp;cd=1&amp;client=opera"&gt;pdf challenged&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-115556032207908826?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.spidynamics.com/spilabs/education/articles/JS-portscan.html' title='Whoa... JavaScript just got scary!'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/115556032207908826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=115556032207908826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115556032207908826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115556032207908826'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/08/whoa-javascript-just-got-scary.html' title='Whoa... JavaScript just got scary!'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-115538534683924442</id><published>2006-08-12T22:20:00.000+10:00</published><updated>2006-08-12T22:22:27.966+10:00</updated><title type='text'>President George W. Bush vs Governor George W. Bush on The Daily Show</title><content type='html'>"Strong words from two very different men"!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-115538534683924442?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.youtube.com/watch?v=LHB_NRIojho' title='President George W. Bush vs Governor George W. Bush on The Daily Show'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/115538534683924442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=115538534683924442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115538534683924442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115538534683924442'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/08/president-george-w-bush-vs-governor.html' title='President George W. Bush vs Governor George W. Bush on The Daily Show'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-115517921866665270</id><published>2006-08-10T13:04:00.000+10:00</published><updated>2007-11-30T23:57:20.137+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>Smart Pig!</title><content type='html'>No more eating pork...  An &lt;a href="http://www.itconversations.com/shows/detail1158.html"&gt;interview&lt;/a&gt; with Sy Montgomery about her pig and book &lt;a href="http://www.amazon.com/gp/product/0345481372/ref=nosim/104-1586195-8990349?n=283155"&gt;The Good Good Pig&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-115517921866665270?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.itconversations.com/shows/detail1158.html' title='Smart Pig!'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/115517921866665270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=115517921866665270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115517921866665270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115517921866665270'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/08/smart-pig.html' title='Smart Pig!'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-115456399247863540</id><published>2006-08-03T10:10:00.000+10:00</published><updated>2007-11-30T23:57:20.137+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>The Meatrix</title><content type='html'>Also reading &lt;a href="http://www.amazon.com/gp/product/1594200823/103-0943634-6247802?v=glance&amp;n=283155"&gt;The Omnivores Dilemma&lt;/a&gt;, which is very good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-115456399247863540?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.themeatrix.com/' title='The Meatrix'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/115456399247863540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=115456399247863540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115456399247863540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/115456399247863540'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/08/meatrix.html' title='The Meatrix'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114864326549866519</id><published>2006-05-26T21:30:00.000+10:00</published><updated>2006-05-26T21:34:26.223+10:00</updated><title type='text'>Travel-time Maps of the UK</title><content type='html'>Cool maps showing the relative travel times for getting from one part of the UK to another.  Just need one for Melbourne now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114864326549866519?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mysociety.org/2006/travel-time-maps/' title='Travel-time Maps of the UK'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114864326549866519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114864326549866519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114864326549866519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114864326549866519'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/05/travel-time-maps-of-uk.html' title='Travel-time Maps of the UK'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114769473476724255</id><published>2006-05-15T22:04:00.000+10:00</published><updated>2006-05-15T22:05:35.793+10:00</updated><title type='text'>THEY'RE MADE OUT OF MEAT by Terry Bisson</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114769473476724255?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.terrybisson.com/meat.html' title='THEY&apos;RE MADE OUT OF MEAT by Terry Bisson'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114769473476724255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114769473476724255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114769473476724255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114769473476724255'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/05/theyre-made-out-of-meat-by-terry.html' title='THEY&apos;RE MADE OUT OF MEAT by Terry Bisson'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114648145771923696</id><published>2006-05-01T21:01:00.000+10:00</published><updated>2007-12-01T00:03:22.558+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>Mmmm, nutella!</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114648145771923696?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.pimpmysnack.com/project.php?projectID=46&amp;pageID=1' title='Mmmm, nutella!'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114648145771923696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114648145771923696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114648145771923696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114648145771923696'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/05/mmmm-nutella.html' title='Mmmm, nutella!'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114621300255474479</id><published>2006-04-28T18:28:00.000+10:00</published><updated>2006-04-28T18:30:05.883+10:00</updated><title type='text'>rrrrrrrrrrrrrrRRRRRRR!!!</title><content type='html'>An awesome voice-controlled blender!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114621300255474479?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://web.media.mit.edu/~monster/blendie/' title='rrrrrrrrrrrrrrRRRRRRR!!!'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114621300255474479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114621300255474479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114621300255474479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114621300255474479'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/04/rrrrrrrrrrrrrrrrrrrrr.html' title='rrrrrrrrrrrrrrRRRRRRR!!!'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114613827820262554</id><published>2006-04-27T21:43:00.000+10:00</published><updated>2006-04-27T21:44:38.446+10:00</updated><title type='text'>Computing power!</title><content type='html'>It takes a pound of coal to create, package, store, and move every 10-20 megabytes of data...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114613827820262554?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.worldchanging.com/archives/004350.html' title='Computing power!'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114613827820262554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114613827820262554' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114613827820262554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114613827820262554'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/04/computing-power.html' title='Computing power!'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114502057182976324</id><published>2006-04-14T23:09:00.000+10:00</published><updated>2006-04-14T23:16:22.940+10:00</updated><title type='text'>Where's that taxi?</title><content type='html'>A cool project for San Francisco's Exploratorium graphically mapping the movements of taxis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114502057182976324?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://cabspotting.org/index.html' title='Where&apos;s that taxi?'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114502057182976324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114502057182976324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114502057182976324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114502057182976324'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/04/wheres-that-taxi.html' title='Where&apos;s that taxi?'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114432687247664397</id><published>2006-04-06T22:32:00.000+10:00</published><updated>2006-04-06T22:34:32.613+10:00</updated><title type='text'>Wind Turbines and Birds</title><content type='html'>A comparison of bird deaths by collision with wind turbines and other man made structures.  Summary: We already kill so many birds that any additional deaths as a result of wind turbines are pretty much irrelevant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114432687247664397?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.awea.org/faq/sagrillo/swbirds.html' title='Wind Turbines and Birds'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114432687247664397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114432687247664397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114432687247664397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114432687247664397'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/04/wind-turbines-and-birds.html' title='Wind Turbines and Birds'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114371957232930870</id><published>2006-03-30T22:50:00.000+11:00</published><updated>2006-03-30T22:52:52.733+11:00</updated><title type='text'>NEJM: Should doctors assist with executions?</title><content type='html'>Another argument, as if one was needed, as to why the death penalty can't be made to work.  Chilling stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114371957232930870?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://content.nejm.org/cgi/content/full/354/12/1221' title='NEJM: Should doctors assist with executions?'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114371957232930870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114371957232930870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114371957232930870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114371957232930870'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/03/nejm-should-doctors-assist-with.html' title='NEJM: Should doctors assist with executions?'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114336609571619872</id><published>2006-03-26T20:40:00.000+11:00</published><updated>2006-03-26T20:41:36.816+11:00</updated><title type='text'>Idlewords.com: The Collapse of the Perito Moreno</title><content type='html'>&lt;blockquote&gt;"A glacier forms when more snow falls on it than can melt in a given year. This implies the existence of a point (let us call it point A) where so much snow is falling that it can make up for the spectacular daily losses at the glacier's face (point B). There is also a third point, point C, where it is warm and dry and you can sit at an outdoor table drinking beer in the sun. However, the physics of glacier formation ensure that points A and B are very close together, and point C, if it exists at all, is very far away, most likely in El Calafate, eighty kilometers to the east."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114336609571619872?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://idlewords.com/2006/03/the_collapse_of_the_perito_moreno.htm' title='Idlewords.com: The Collapse of the Perito Moreno'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114336609571619872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114336609571619872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114336609571619872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114336609571619872'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/03/idlewordscom-collapse-of-perito-moreno.html' title='Idlewords.com: The Collapse of the Perito Moreno'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114103925600111051</id><published>2006-02-27T21:57:00.000+11:00</published><updated>2006-02-27T22:20:56.156+11:00</updated><title type='text'>Probabilities in the Game of Monopoly®</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114103925600111051?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.tkcs-collins.com/truman/monopoly/monopoly.shtml' title='Probabilities in the Game of Monopoly®'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114103925600111051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114103925600111051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114103925600111051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114103925600111051'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/02/probabilities-in-game-of-monopoly.html' title='Probabilities in the Game of Monopoly®'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-114103782069217403</id><published>2006-02-27T21:51:00.000+11:00</published><updated>2006-02-27T21:57:00.956+11:00</updated><title type='text'>Get out of (voice)jail, free</title><content type='html'>&lt;a href="http://gethuman.com/"&gt;gethuman.com&lt;/a&gt; has a database of codes to transfer directly to an operator!  They also have (globally) useful &lt;a href="http://gethuman.com/tips.html"&gt;tips&lt;/a&gt;.

(This card may be kept until needed or sold.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-114103782069217403?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/114103782069217403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=114103782069217403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114103782069217403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/114103782069217403'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/02/get-out-of-voicejail-free.html' title='Get out of (voice)jail, free'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-113688970260495173</id><published>2006-01-10T21:40:00.000+11:00</published><updated>2006-01-10T21:41:45.030+11:00</updated><title type='text'>Playing Flickr?</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-113688970260495173?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.giantant.com/antenna/archive/2004_12.php3#000952' title='Playing Flickr?'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/113688970260495173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=113688970260495173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113688970260495173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113688970260495173'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2006/01/playing-flickr.html' title='Playing Flickr?'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-113540234674548228</id><published>2005-12-24T16:32:00.000+11:00</published><updated>2005-12-24T16:32:26.750+11:00</updated><title type='text'>Johann Hari - Friends, Romans, Countrymen.  Lend me your ears about ancient Rome... </title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-113540234674548228?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.johannhari.com/archive/article.php?id=718' title='Johann Hari - Friends, Romans, Countrymen.  Lend me your ears about ancient Rome... '/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/113540234674548228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=113540234674548228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113540234674548228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113540234674548228'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/12/johann-hari-friends-romans-countrymen.html' title='Johann Hari - Friends, Romans, Countrymen.  Lend me your ears about ancient Rome... '/><author><name>Watt Tyler</name><uri>http://www.blogger.com/profile/04750352567610951984</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-113540206243369177</id><published>2005-12-24T16:27:00.000+11:00</published><updated>2005-12-24T16:27:42.463+11:00</updated><title type='text'>Johann Hari - 'The Power and the Idealists' by Paul Berman a review</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-113540206243369177?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.johannhari.com/index.php' title='Johann Hari - &apos;The Power and the Idealists&apos; by Paul Berman a review'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/113540206243369177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=113540206243369177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113540206243369177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113540206243369177'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/12/johann-hari-power-and-idealists-by.html' title='Johann Hari - &apos;The Power and the Idealists&apos; by Paul Berman a review'/><author><name>Watt Tyler</name><uri>http://www.blogger.com/profile/04750352567610951984</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-113481620179278293</id><published>2005-12-17T21:42:00.000+11:00</published><updated>2005-12-17T21:43:22.053+11:00</updated><title type='text'>PARK(ing)</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-113481620179278293?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.rebargroup.org/projects/parking/index.html' title='PARK(ing)'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/113481620179278293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=113481620179278293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113481620179278293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113481620179278293'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/12/parking.html' title='PARK(ing)'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-113143879836197039</id><published>2005-11-08T19:33:00.000+11:00</published><updated>2005-11-08T19:33:18.410+11:00</updated><title type='text'>FlickrFS</title><content type='html'>This is brilliant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-113143879836197039?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tuxmann.blogspot.com/2005/11/announcing-flickrfs_03.html' title='FlickrFS'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/113143879836197039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=113143879836197039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113143879836197039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113143879836197039'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/11/flickrfs.html' title='FlickrFS'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-113066975378382620</id><published>2005-10-30T21:55:00.000+11:00</published><updated>2005-10-30T21:55:54.080+11:00</updated><title type='text'>Republic Dogs</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-113066975378382620?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://web.mit.edu/afs/athena.mit.edu/user/d/r/dryfoo/www/Funny-pages/republic-dogs.html' title='Republic Dogs'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/113066975378382620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=113066975378382620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113066975378382620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113066975378382620'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/10/republic-dogs.html' title='Republic Dogs'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-113066678674691256</id><published>2005-10-30T21:02:00.000+11:00</published><updated>2005-10-30T21:06:33.393+11:00</updated><title type='text'>Paul Graham at OSCON</title><content type='html'>An excellent &lt;a href="http://www.itconversations.com/shows/detail657.html"&gt;talk&lt;/a&gt; (or &lt;a href="http://www.paulgraham.com/opensource.html"&gt;essay&lt;/a&gt;.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-113066678674691256?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.itconversations.com/shows/detail657.html' title='Paul Graham at OSCON'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/113066678674691256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=113066678674691256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113066678674691256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113066678674691256'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/10/paul-graham-at-oscon.html' title='Paul Graham at OSCON'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-113059114463422269</id><published>2005-10-29T23:04:00.000+10:00</published><updated>2005-10-29T23:05:44.646+10:00</updated><title type='text'>I/O Brush</title><content type='html'>This is awesome, taking the clone tool to a whole other level!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-113059114463422269?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://web.media.mit.edu/~kimiko/iobrush/' title='I/O Brush'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/113059114463422269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=113059114463422269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113059114463422269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/113059114463422269'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/10/io-brush.html' title='I/O Brush'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112981146256182283</id><published>2005-10-20T22:28:00.000+10:00</published><updated>2005-10-20T22:31:02.563+10:00</updated><title type='text'>The Clock of the Long Now</title><content type='html'>See also &lt;a href="http://www.longnow.org/projects/clock/"&gt;The 10,000 Year Clock&lt;/a&gt;:
&lt;blockquote&gt;"It's as if the future has been shrinking one year, per year, for my entire life."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112981146256182283?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.discover.com/issues/nov-05/cover/' title='The Clock of the Long Now'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112981146256182283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112981146256182283' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112981146256182283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112981146256182283'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/10/clock-of-long-now.html' title='The Clock of the Long Now'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112981099469796468</id><published>2005-10-20T22:22:00.000+10:00</published><updated>2005-10-20T22:23:14.703+10:00</updated><title type='text'>Oak Island Mystery</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112981099469796468?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.unmuseum.org/oakisl.htm' title='Oak Island Mystery'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112981099469796468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112981099469796468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112981099469796468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112981099469796468'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/10/oak-island-mystery.html' title='Oak Island Mystery'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112720814571976514</id><published>2005-09-20T19:22:00.000+10:00</published><updated>2005-09-20T19:22:25.766+10:00</updated><title type='text'>Speech Bubble Stickers</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112720814571976514?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.pleaseenjoy.com/01Independent%20Projects/03Speech%20Bubbles/00BubblesMain.htm' title='Speech Bubble Stickers'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112720814571976514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112720814571976514' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112720814571976514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112720814571976514'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/09/speech-bubble-stickers.html' title='Speech Bubble Stickers'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112557560885760262</id><published>2005-09-01T21:53:00.000+10:00</published><updated>2005-09-01T21:53:28.886+10:00</updated><title type='text'>worldometers.info</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112557560885760262?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.worldometers.info/' title='worldometers.info'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112557560885760262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112557560885760262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112557560885760262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112557560885760262'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/09/worldometersinfo.html' title='worldometers.info'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112479742296237025</id><published>2005-08-23T21:43:00.000+10:00</published><updated>2005-08-23T21:43:42.966+10:00</updated><title type='text'>A Collection of Word Oddities and Trivia</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112479742296237025?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://plex.us/archives/word.html' title='A Collection of Word Oddities and Trivia'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112479742296237025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112479742296237025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112479742296237025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112479742296237025'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/08/collection-of-word-oddities-and-trivia.html' title='A Collection of Word Oddities and Trivia'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112479375007090041</id><published>2005-08-23T20:42:00.000+10:00</published><updated>2005-08-23T20:42:30.070+10:00</updated><title type='text'>WorldChanging: Another World Is Here: Quake III, Now With GPL Goodness</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112479375007090041?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.worldchanging.com/archives/003336.html' title='WorldChanging: Another World Is Here: Quake III, Now With GPL Goodness'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112479375007090041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112479375007090041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112479375007090041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112479375007090041'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/08/worldchanging-another-world-is-here_23.html' title='WorldChanging: Another World Is Here: Quake III, Now With GPL Goodness'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112479364056304168</id><published>2005-08-23T20:40:00.000+10:00</published><updated>2005-08-23T20:40:40.616+10:00</updated><title type='text'>WorldChanging: Another World Is Here: Alonovo: Shopping for a Better World</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112479364056304168?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.worldchanging.com/archives/003340.html' title='WorldChanging: Another World Is Here: Alonovo: Shopping for a Better World'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112479364056304168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112479364056304168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112479364056304168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112479364056304168'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/08/worldchanging-another-world-is-here.html' title='WorldChanging: Another World Is Here: Alonovo: Shopping for a Better World'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112278495146286888</id><published>2005-07-31T14:42:00.000+10:00</published><updated>2005-07-31T14:42:31.466+10:00</updated><title type='text'>www.zoomquilt.org</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112278495146286888?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://zoomquilt.nikkki.net/' title='www.zoomquilt.org'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112278495146286888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112278495146286888' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112278495146286888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112278495146286888'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/wwwzoomquiltorg.html' title='www.zoomquilt.org'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112278278111491949</id><published>2005-07-31T14:06:00.000+10:00</published><updated>2005-07-31T14:06:21.143+10:00</updated><title type='text'>Wired News: A Hacker Games the Hotel</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112278278111491949?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.wired.com/news/privacy/0,1848,68370,00.html?tw=rss.TOP' title='Wired News: A Hacker Games the Hotel'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112278278111491949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112278278111491949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112278278111491949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112278278111491949'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/wired-news-hacker-games-hotel.html' title='Wired News: A Hacker Games the Hotel'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112272277929057039</id><published>2005-07-30T21:26:00.000+10:00</published><updated>2005-07-30T21:26:19.360+10:00</updated><title type='text'>WORLDPROCESSOR Catalog</title><content type='html'>I want one...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112272277929057039?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://worldprocessor.com/catalog/world/' title='WORLDPROCESSOR Catalog'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112272277929057039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112272277929057039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112272277929057039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112272277929057039'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/worldprocessor-catalog.html' title='WORLDPROCESSOR Catalog'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112272104611188006</id><published>2005-07-30T20:57:00.000+10:00</published><updated>2005-07-30T20:57:28.506+10:00</updated><title type='text'>Boing Boing: Microsoft "Genuine Advantage" cracked in 24h: window.g_sDisableWGACheck='all'</title><content type='html'>Brilliant.  Why validation of data must happen at the server and the browser...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112272104611188006?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.boingboing.net/2005/07/28/microsoft_genuine_ad.html' title='Boing Boing: Microsoft &quot;Genuine Advantage&quot; cracked in 24h: window.g_sDisableWGACheck=&apos;all&apos;'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112272104611188006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112272104611188006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112272104611188006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112272104611188006'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/boing-boing-microsoft-genuine.html' title='Boing Boing: Microsoft &quot;Genuine Advantage&quot; cracked in 24h: window.g_sDisableWGACheck=&apos;all&apos;'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112268981855907305</id><published>2005-07-30T12:16:00.000+10:00</published><updated>2005-07-30T12:16:58.596+10:00</updated><title type='text'>Introducing Slate Audio Tours - The commentary museums don't want you to hear. By Andy Bowers</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112268981855907305?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://slate.msn.com/id/2123266/?nav=ais' title='Introducing Slate Audio Tours - The commentary museums don&apos;t want you to hear. By Andy Bowers'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112268981855907305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112268981855907305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112268981855907305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112268981855907305'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/introducing-slate-audio-tours.html' title='Introducing Slate Audio Tours - The commentary museums don&apos;t want you to hear. By Andy Bowers'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112255119593105658</id><published>2005-07-28T21:46:00.000+10:00</published><updated>2005-07-28T21:46:35.933+10:00</updated><title type='text'>Places &amp; Spaces &gt; You are not here</title><content type='html'>Just in case you thought the world was a rich place, point to where you live...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112255119593105658?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://vw.indiana.edu/places&amp;spaces/dev/big_thumb.php?map_id=88' title='Places &amp; Spaces &gt; You are not here'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112255119593105658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112255119593105658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112255119593105658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112255119593105658'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/places-spaces-you-are-not-here.html' title='Places &amp; Spaces &gt; You are not here'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112255081221374493</id><published>2005-07-28T21:40:00.000+10:00</published><updated>2005-07-28T21:40:12.216+10:00</updated><title type='text'>Wired News: Blind Teen Gamer Obliterates Foes</title><content type='html'>&lt;blockquote&gt;"'I freak people out by playing facing backwards.'"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112255081221374493?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.wired.com/news/games/0,2101,68333,00.html?tw=rss.TOP' title='Wired News: Blind Teen Gamer Obliterates Foes'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112255081221374493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112255081221374493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112255081221374493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112255081221374493'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/wired-news-blind-teen-gamer.html' title='Wired News: Blind Teen Gamer Obliterates Foes'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112169015188255994</id><published>2005-07-18T22:35:00.000+10:00</published><updated>2005-07-18T22:50:33.180+10:00</updated><title type='text'>Something Awful: The Mars Volta</title><content type='html'>&lt;blockquote&gt;"Some people think it’s dull, overwrought, pretentious crap, but some people think it’s a work of prog-rock genius. I would contend that there’s no difference between the two."&lt;/blockquote&gt;
&lt;p&gt;And about &lt;a href="http://www.somethingawful.com/articles.php?a=2006"&gt;covers&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;"In the hierarchy of artistic credibility, the Ironic Punk Cover falls somewhere just below erotic Harry Potter fan-fiction and just above Anne Geddes photography."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112169015188255994?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.somethingawful.com/articles.php?a=2825' title='Something Awful: The Mars Volta'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112169015188255994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112169015188255994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112169015188255994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112169015188255994'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/something-awful-mars-volta.html' title='Something Awful: The Mars Volta'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112168560295750194</id><published>2005-07-18T21:20:00.000+10:00</published><updated>2005-07-18T21:28:04.226+10:00</updated><title type='text'>Wired News: Google Growth Yields Privacy Fear</title><content type='html'>See also &lt;a href="http://www.google-watch.org/"&gt;Google Watch&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112168560295750194?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.wired.com/news/privacy/0,1848,68235,00.html?tw=rss.TOP' title='Wired News: Google Growth Yields Privacy Fear'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112168560295750194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112168560295750194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112168560295750194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112168560295750194'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/wired-news-google-growth-yields.html' title='Wired News: Google Growth Yields Privacy Fear'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112168431341916293</id><published>2005-07-18T20:58:00.000+10:00</published><updated>2005-07-18T20:58:34.353+10:00</updated><title type='text'>Wired News: ITunes Mints Podcasting Stars</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112168431341916293?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.wired.com/news/digiwood/0,1412,68185,00.html?tw=rss.TOP' title='Wired News: ITunes Mints Podcasting Stars'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112168431341916293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112168431341916293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112168431341916293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112168431341916293'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/wired-news-itunes-mints-podcasting.html' title='Wired News: ITunes Mints Podcasting Stars'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112125453298296003</id><published>2005-07-13T21:35:00.000+10:00</published><updated>2005-07-13T21:35:33.030+10:00</updated><title type='text'>Sprol.com » Gunns, Ltd Woodchipping Old Growth Forests</title><content type='html'>Images from Google Earth show very clearly what clear-felling looks like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112125453298296003?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.sprol.com/?p=202' title='Sprol.com » Gunns, Ltd Woodchipping Old Growth Forests'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112125453298296003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112125453298296003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112125453298296003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112125453298296003'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/sprolcom-gunns-ltd-woodchipping-old.html' title='Sprol.com » Gunns, Ltd Woodchipping Old Growth Forests'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7024729.post-112117278616382764</id><published>2005-07-12T22:53:00.000+10:00</published><updated>2005-07-12T22:53:06.216+10:00</updated><title type='text'>MICHAEL LIGHT | 100 SUNS</title><content type='html'>Photos from the USA's atomic tests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7024729-112117278616382764?l=successlessness.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.michaellight.net/100suns/images.html' title='MICHAEL LIGHT | 100 SUNS'/><link rel='replies' type='application/atom+xml' href='http://successlessness.blogspot.com/feeds/112117278616382764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7024729&amp;postID=112117278616382764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112117278616382764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7024729/posts/default/112117278616382764'/><link rel='alternate' type='text/html' href='http://successlessness.blogspot.com/2005/07/michael-light-100-suns.html' title='MICHAEL LIGHT | 100 SUNS'/><author><name>Tom</name><uri>http://www.blogger.com/profile/06694547908603725128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
