stillhq.com : Mikal, a geek from Canberra living in Silicon Valley http://www.stillhq.com The life, times, travel and software of Michael Still en Copyright (c) Michael Still 2000 - 2006 blosxom simplerss20 v20050208hh 180 http://blogs.law.harvard.edu/tech/rss Foundation and Earth /book/Isaac_Asimov Sat, 22 Nov 2008 12:05:00 PST <table width=100%><tr><td valign=top><img src="/book/Isaac_Asimov/Foundation_and_Earth.cover.jpg"><br/><br/><br/>ISBN: 0586071105<br/><a href="http://www.librarything.com/isbn/0586071105">LibraryThing</a><br/><script type="text/javascript">GBS_insertPreviewButtonPopup('ISBN:0586071105');</script></td><td valign=top>I really like how Asimov wraps up the <a href="http://www.stillhq.com/book/Isaac_Asimov/Foundation_Series.html">extended Foundation series</a>. Specifically, I'd previously complained while reading <a href="http://www.stillhq.com/book/Isaac_Asimov/Pebble_In_The_Sky.html">Pebble in the Sky</a> that it was hard to believe that everyone simply forgets that they originated on Earth -- this book and <a href="http://www.stillhq.com/book/Isaac_Asimov/Foundations_Edge.html">Foundation's Edge</a> go a long way to resolving that annoyance for me. Its also good to find out what happened to Aurora and Solaria finally -- especially given the Solaria mystery has been bothering me since <a href="http://www.stillhq.com/book/Isaac_Asimov/Robots_and_Empire.html">Robots and Empire</a>. <br/><br/> Speaking just about this book so a moment, I do find the use of sex as a plot development method quite odd. There are three examples that bother me -- when Bliss is slipped through interstellar customs with the explanation that she's just a whore and therefore not important enough to make an issue of; the second is when Trevize basically shags his way out of an awkward situation, despite the other protagonist being quite hostile initially; and finally where he bonks someone on a rural world. I find all three of those incidents a little out of place with the rest of the book, and in fact the rest of the series. Other authors use those kinds of plot elements, but they seem out of place in Asimov's work. <br/><br/> Overall, I loved this book and it was a good conclusion to the series. <br/><br/><i>Tags for this post: book(<a href="http://www.stillhq.com/book"><img src="http://www.stillhq.com/tagicon.cgi?post=/book/Isaac_Asimov/Foundation_and_Earth&tag=book&format=.png" border="0" alt="S"></a>) Isaac_Asimov(<a href="http://www.stillhq.com/Isaac_Asimov"><img src="http://www.stillhq.com/tagicon.cgi?post=/book/Isaac_Asimov/Foundation_and_Earth&tag=Isaac_Asimov&format=.png" border="0" alt="S"></a>) </i></td></tr></table> <a href="http://www.stillhq.com/book/Isaac_Asimov/Foundation_and_Earth.commentform.html">Comment</a> http://www.stillhq.com/book/Isaac_Asimov/Foundation_and_Earth.html http://www.stillhq.com/book/Isaac_Asimov/Foundation_and_Earth.html Blathering for Friday, 21 November 2008 /blather Fri, 21 Nov 2008 15:00:00 GMT <b>09:45</b>: Mikal shared: <a href="http://feeds.gawker.com/~r/consumerist/full/~3/nW8NPeCHVJ8/buy-one-dodge-ram-get-one-free">Buy One Dodge Ram, Get One Free [Deals]</a><br/><ul><i>You know the US auto industry is in trouble when they start offering buy one get one free deals on cars.</i></ul><br/> <b>15:00</b>: Mikal shared: <a href="http://feeds.feedburner.com/~r/boingboing/iBag/~3/461240069/article-about-backya.html">Article about backyard chicken owners</a><br/><ul><i>I didn't realize that other people found chickens entertaining too. I figured it was just me. There is nothing more entertaining than throwing a mound of kitchen scraps into the coup and then watching the chickens argue over a banana peel. Its hard to explain... Perhaps when I move back to Australia I'll setup ChickenCam.</i></ul><br/> <br/><br/><i>Tags for this post: blather(<a href="http://www.stillhq.com/blather"><img src="http://www.stillhq.com/tagicon.cgi?post=/blather/20081121&tag=blather&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/blather/20081121.commentform.html">Comment</a> <a href="http://www.stillhq.com/index.noblather.rss20">RSS with no blather</a> http://www.stillhq.com/blather/20081121.html http://www.stillhq.com/blather/20081121.html Blathering for Wednesday, 19 November 2008 /blather Wed, 19 Nov 2008 22:00:00 GMT <b>09:15</b>: Mikal shared: <a href="http://feeds.gawker.com/~r/consumerist/full/~3/FOUJkv1R3Qo/are-you-spending-145-a-year-just-to-leave-your-ps3-on-all-the-time">Are You Spending $145 A Year Just To Leave Your PS3 On All The Time? [Frugality]</a><br/><ul><i>Wow. A PS3 left on permanently will cost $145 USD a year in electricity. I knew there was a reason I was turning that thing off.</i></ul><br/> <b>22:00</b>: Mikal shared: <a href="http://15minutelunch.blogspot.com/2007/10/strap-in-shut-up-and-hold-on-were-going.html">15 Minute Lunch: Strap in, shut up and hold on. We're going back.</a><br/><ul><i>I want that jumpsuit. 1977 fashion was awesome.</i></ul><br/> <br/><br/><i>Tags for this post: blather(<a href="http://www.stillhq.com/blather"><img src="http://www.stillhq.com/tagicon.cgi?post=/blather/20081119&tag=blather&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/blather/20081119.commentform.html">Comment</a> <a href="http://www.stillhq.com/index.noblather.rss20">RSS with no blather</a> http://www.stillhq.com/blather/20081119.html http://www.stillhq.com/blather/20081119.html Foundation's Edge /book/Isaac_Asimov Mon, 17 Nov 2008 18:40:00 PST <table width=100%><tr><td valign=top><img src="/book/Isaac_Asimov/Foundations_Edge.cover.jpg"><br/><br/><br/>ISBN: 0586058397<br/><a href="http://www.librarything.com/isbn/0586058397">LibraryThing</a><br/><script type="text/javascript">GBS_insertPreviewButtonPopup('ISBN:0586058397');</script></td><td valign=top>I'm back to reading <a href="http://www.stillhq.com/book/Isaac_Asimov/Foundation_Series.html">Foundation Series</a> books actually written by <a href="http://www.stillhq.com/book/Isaac_Asimov/">Isaac Asimov</a>. This one is the fourth in the Foundation Series if you count them in the order they were written, but is the second last in chronological terms. Its set 500 years after the failure of the first galactic empire, and follows the first Foundation's attempt to discover if the second Foundation still exists. Well, its a bit more complicated than that, but I don't want to ruin it for you. <br/><br/> As an aside, the user interface described for the ship's computer is really cool. Its a bit like augmented reality, mixed with gesture control, mixed with a direct interface into the brain. I'm not saying I want one in my house, but its cool that a book written in 1983 still has a user interface description which isn't dated, and still seems plausible. <br/><br/> This book has minor inconsistencies with the story presented in the second foundation trilogy (<a href="http://www.stillhq.com/book/Gregory_Benford/Foundations_Fear.html">Foundation's Fear</a>, <a href="http://www.stillhq.com/book/Greg_Bear/Foundation_and_Chaos.html">Foundation and Chaos</a> and <a href="http://www.stillhq.com/book/David_Brin/Foundations_Triumph.html">Foundation's Triumph</a>), but I see that more as a failure in those followup authors than in this book. In fact, I've already complained about how untrue to Asimov's vision some of those books are elsewhere. <br/><br/> This is a good read, and I enjoyed it greatly. <br/><br/><i>Tags for this post: book(<a href="http://www.stillhq.com/book"><img src="http://www.stillhq.com/tagicon.cgi?post=/book/Isaac_Asimov/Foundations_Edge&tag=book&format=.png" border="0" alt="S"></a>) Isaac_Asimov(<a href="http://www.stillhq.com/Isaac_Asimov"><img src="http://www.stillhq.com/tagicon.cgi?post=/book/Isaac_Asimov/Foundations_Edge&tag=Isaac_Asimov&format=.png" border="0" alt="S"></a>) </i></td></tr></table> <a href="http://www.stillhq.com/book/Isaac_Asimov/Foundations_Edge.commentform.html">Comment</a> http://www.stillhq.com/book/Isaac_Asimov/Foundations_Edge.html http://www.stillhq.com/book/Isaac_Asimov/Foundations_Edge.html Blathering for Monday, 17 November 2008 /blather Mon, 17 Nov 2008 16:15:00 GMT <b>16:15</b>: Mikal shared: <a href="http://feeds.gawker.com/~r/consumerist/full/~3/bLOAhS8kxto/20-of-citigroup-cardholders-can-expect-rate-increases-for-2009">20% Of Citigroup Cardholders Can Expect Rate Increases For 2009 [Citibank]</a><br/><ul><i>Here comes the credit card crunch. Its interesting that Citi isn't increasing the interest rate on the riskiest 20% of card, just a semi-random 20%. That doesn't make sense to me at all.</i></ul><br/> <br/><br/><i>Tags for this post: blather(<a href="http://www.stillhq.com/blather"><img src="http://www.stillhq.com/tagicon.cgi?post=/blather/20081117&tag=blather&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/blather/20081117.commentform.html">Comment</a> <a href="http://www.stillhq.com/index.noblather.rss20">RSS with no blather</a> http://www.stillhq.com/blather/20081117.html http://www.stillhq.com/blather/20081117.html Automatically creating folders for mailing lists /procmail Mon, 17 Nov 2008 14:59:00 PST I've been using some simple procmail rules to automatically create folders for mailing lists for ages. Tony asked me for those rules today, so I figured I'd just put them online. <br/><br/> <ul><pre> ########################################################################## # Mailman :0: * List-Id:.*<\/[^>]* $MATCH :0: * List-Post: <mailto:\/[^>]* $MATCH ########################################################################## # Majordomo lists (sometimes don't have <>'s around the address :0: * X-Mailing-List:.*<\/[^>]* $MATCH :0: * X-Mailing-List:.*\/.* $MATCH ########################################################################## # Ezmlm :0: * Mailing-List: .* \/[^ ;]* $MATCH ########################################################################## # I'm not sure what creates this one... :0: * X-Loop: \/.* $MATCH </pre></ul> <br/><br/><i>Tags for this post: procmail(<a href="http://www.stillhq.com/procmail"><img src="http://www.stillhq.com/tagicon.cgi?post=/procmail/000001&tag=procmail&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/procmail/000001.commentform.html">Comment</a> http://www.stillhq.com/procmail/000001.html http://www.stillhq.com/procmail/000001.html Wanted: someone to edit / review some MythTV stuff for me /mythtv Sun, 16 Nov 2008 19:00:00 PST I'm looking for someone with solid MythTV experience and a good grasp of the English language to help me out with a project. All I can promise in return is glory, and that will be proportional to the eventual success of the project. If you're interested in spending some time (probably around 40 hours or so, spread over a couple of months) on such a project <a href="mailto:mikal@stillhq.com">drop me a line</a>. <br/><br/><i>Tags for this post: mythtv(<a href="http://www.stillhq.com/mythtv"><img src="http://www.stillhq.com/tagicon.cgi?post=/mythtv/000022&tag=mythtv&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/mythtv/000022.commentform.html">Comment</a> http://www.stillhq.com/mythtv/000022.html http://www.stillhq.com/mythtv/000022.html Andrew and Matthew turn 2 and 3 /events/pictures/20050314 Sat, 15 Nov 2008 21:34:00 PST Wow, these pictures are really old. I'm in the process of going through my photo collection and regenerating all the associated HTML. In the process I found these pictures of Andrew and Matthew's shared birthday party from when they turned 3 and 2 respectively. Heck, its only three years late, so I guess I should put them online. <br/><br/> Looking back, I think I forgot to put these online because about that time I was run off my feet with LCA 2005. That's my excuse and I'm sticking to it. <br/><br/> <a href="http://images.stillhq.com/events/pictures/20050314//image1.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_toddler_mikal-small-DSC01160.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image2.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_toddler-small-DSC01161.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image3.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_toddler_mikal-small-DSC01162.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image4.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_toddler_birthday_cake_dinosaur-small-DSC01173.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image5.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_toddler_allister-small-DSC01175.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image6.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_toddler-small-DSC01176.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image7.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_toddler_birthday_cake_dinosaur-small-DSC01177.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image8.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01179.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image9.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01181.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image10.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01182.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image11.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01183.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image12.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01185.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image13.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01188.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image14.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01189.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image15.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01191.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image16.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01192.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image17.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01195.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image18.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake_dinosaur-small-DSC01197.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image19.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake-small-DSC01199.JPG"></a>&nbsp; <a href="http://images.stillhq.com/events/pictures/20050314//image20.html"><img src="http://images.stillhq.com/events/pictures/20050314//andrew_matthew_catherine_toddler_birthday_cake-small-DSC01200.JPG"></a>&nbsp; <br/><br/><a href="http://images.stillhq.com/events/pictures/20050314/thumbnails.html">See more thumbnails</a> <br/><br/><i>Tags for this post: events(<a href="http://www.stillhq.com/events"><img src="http://www.stillhq.com/tagicon.cgi?post=/events/pictures/20050314/000001&tag=events&format=.png" border="0" alt="S"></a>) pictures(<a href="http://www.stillhq.com/pictures"><img src="http://www.stillhq.com/tagicon.cgi?post=/events/pictures/20050314/000001&tag=pictures&format=.png" border="0" alt="S"></a>) 20050314(<a href="http://www.stillhq.com/20050314"><img src="http://www.stillhq.com/tagicon.cgi?post=/events/pictures/20050314/000001&tag=20050314&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/events/pictures/20050314/000001.commentform.html">Comment</a> http://www.stillhq.com/events/pictures/20050314/000001.html http://www.stillhq.com/events/pictures/20050314/000001.html Blathering for Saturday, 15 November 2008 /blather Sat, 15 Nov 2008 19:30:00 GMT <b>19:30</b>: Mikal shared: <a href="http://www.tams.act.gov.au/move/green_vehicles_stamp_duty_scheme">Territory and Municipal Services - Green Vehicles Stamp Duty Scheme</a><br/><ul><i>Interesting. Transferring registration of a vehicle in Australia incurs a tax called "stamp duty". In the ACT, the amount you pay is now dependent on how environmentally friendly the car is. That's a good idea.</i></ul><br/> <b>19:30</b>: Mikal shared: <a href="http://www.nytimes.com/2008/11/16/us/politics/16blackberry.html?_r=1&hp&oref=slogin">Say Goodbye to BlackBerry? If Obama Has to, Yes He Can - NYTimes.com</a><br/><ul><i>Huh. The Presidential Records Act might require Obama to give up standard business tools like smart phones and email. I guess we'll allow him a set of crayolas?</i></ul><br/> <br/><br/><i>Tags for this post: blather(<a href="http://www.stillhq.com/blather"><img src="http://www.stillhq.com/tagicon.cgi?post=/blather/20081115&tag=blather&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/blather/20081115.commentform.html">Comment</a> <a href="http://www.stillhq.com/index.noblather.rss20">RSS with no blather</a> http://www.stillhq.com/blather/20081115.html http://www.stillhq.com/blather/20081115.html The Riftwar Series /book/Raymond_E_Feist Sat, 15 Nov 2008 14:39:00 PST This series follows to young kids who grow up in a rural castle on the edge of an empire. Pug ends up being the greatest Magician to ever live, and Thomas ends up being merged with an ancient being of massive power. Its a good series, even if people accuse it of being steeped in cliche. <br/><br/> <table> <tr><td><b>Year</b></td><td><b>Title</b></td></tr> <tr bgcolor="#DDDDDD"><td>1982</td><td>Magician (later sold as <a href="http://www.stillhq.com/book/Raymond_E_Feist/Magician_Apprentice.html">Magician: Apprentice</a> and <a href="http://www.stillhq.com/book/Raymond_E_Feist/Magician_Master.html">Magician: Master</a>)</td></tr> <tr><td>1985</td><td><a href="http://www.stillhq.com/book/Raymond_E_Feist/Silverthorn.html">Silverthorn</a></td></tr> <tr bgcolor="#DDDDDD"><td>1986</td><td><a href="http://www.stillhq.com/book/Raymond_E_Feist/A_Darkness_At_Sethanon.html">A Darkness at Sethanon</a></td></tr> </table> <br/><br/><i>Tags for this post: book(<a href="http://www.stillhq.com/book"><img src="http://www.stillhq.com/tagicon.cgi?post=/book/Raymond_E_Feist/Riftwar_Series&tag=book&format=.png" border="0" alt="S"></a>) Raymond_E_Feist(<a href="http://www.stillhq.com/Raymond_E_Feist"><img src="http://www.stillhq.com/tagicon.cgi?post=/book/Raymond_E_Feist/Riftwar_Series&tag=Raymond_E_Feist&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/book/Raymond_E_Feist/Riftwar_Series.commentform.html">Comment</a> http://www.stillhq.com/book/Raymond_E_Feist/Riftwar_Series.html http://www.stillhq.com/book/Raymond_E_Feist/Riftwar_Series.html A Darkness at Sethanon /book/Raymond_E_Feist Sat, 15 Nov 2008 14:33:00 PST <table width=100%><tr><td valign=top><img src="/book/Raymond_E_Feist/A_Darkness_At_Sethanon.cover.jpg"><br/><br/><br/>ISBN: 0553263285<br/><a href="http://www.librarything.com/isbn/0553263285">LibraryThing</a><br/><script type="text/javascript">GBS_insertPreviewButtonPopup('ISBN:0553263285');</script></td><td valign=top>This book took longer to read that I would have liked, because I have been busy with other things. Its a good book though, and a fine conclusion to the <a href="http://www.stillhq.com/book/Raymond_E_Feist/Riftwar_Series.html">Riftwar Series</a>. I liked this book a lot, although I do think that Magician (<a href="http://www.stillhq.com/book/Raymond_E_Feist/Magician_Apprentice.html">Apprentice</a> and <a href="http://www.stillhq.com/book/Raymond_E_Feist/Magician_Master.html">Master</a>) was a better book. <br/><br/><i>Tags for this post: book(<a href="http://www.stillhq.com/book"><img src="http://www.stillhq.com/tagicon.cgi?post=/book/Raymond_E_Feist/A_Darkness_At_Sethanon&tag=book&format=.png" border="0" alt="S"></a>) Raymond_E_Feist(<a href="http://www.stillhq.com/Raymond_E_Feist"><img src="http://www.stillhq.com/tagicon.cgi?post=/book/Raymond_E_Feist/A_Darkness_At_Sethanon&tag=Raymond_E_Feist&format=.png" border="0" alt="S"></a>) </i> </td></tr></table> <a href="http://www.stillhq.com/book/Raymond_E_Feist/A_Darkness_At_Sethanon.commentform.html">Comment</a> http://www.stillhq.com/book/Raymond_E_Feist/A_Darkness_At_Sethanon.html http://www.stillhq.com/book/Raymond_E_Feist/A_Darkness_At_Sethanon.html Blathering for Friday, 14 November 2008 /blather Fri, 14 Nov 2008 22:29:00 GMT <b>20:53</b>: Memeomatic found a new meme: <a href="http://www.flamingspork.com/blog/2008/11/12/phrase-from-nearest-book/">Stewart Smith: phrase from nearest book</a>, <a href="http://noisymime.org/blog/?p=66">Josh Stewart: random book content</a>, <a href="http://jon.oxer.com.au/blog/id/292">Jon Oxer: Phrase from nearest book</a>, <a href="http://www.cafuego.net/2008/11/14/blog-meme-42">Peter Lieverdink: blog meme #42</a>, <a href="http://jamespurser.com.au/blog/The_Meme_of_the_Book">James Purser: The Meme of the Book</a>, <a href="http://www.michaeldavies.org/weblog/tech/books/book-meme.html">Michael Davies: Meme #42</a>, <a href="http://jeremy.visser.name/2008/11/14/book-meme/">Jeremy Visser: Book meme</a>, <a href="http://arctanx.id.au/blog/?p=57">Thomas Karpiniec: The Book Thing</a>, <a href="http://www.noogz.net/website/blog/20081114-Meme42.html">Chris Neugebauer: Meme #42</a>, <a href="http://kattekrab.livejournal.com/50475.html">Donna Benjamin: meme-ege</a>, <a href="http://blog.darkmere.gen.nz/2008/11/economist-plus-meme/">Simon Lyall: Economist plus meme</a><br/> <b>21:14</b>: Memeomatic extended an existing meme: <a href="http://www.csamuel.org/2008/11/15/book-meme">Chris Samuel: Book Meme</a><br/> <b>21:41</b>: Memeomatic extended an existing meme: <a href="http://www.stillhq.com/meme/000001.html">Book meme de jour</a><br/> <b>22:05</b>: Memeomatic extended an existing meme: <a href="http://www.stillhq.com/meme/000002.html">On a memeomatic</a><br/> <b>22:21</b>: Memeomatic extended an existing meme: <a href="http://www.outflux.net/blog/archives/2008/11/11/phrase-from-nearest-book-meme/">Kees Cook: phrase from nearest book meme</a><br/> <b>22:21</b>: Memeomatic extended an existing meme: <a href="http://glandium.org/blog/?p=213">Mike Hommey: Book meme reloaded</a><br/> <b>22:29</b>: Memeomatic extended an existing meme: <a href="http://jacob.peddicord.net/blog/2008/11/12/open-source-bridge/">Jacob Peddicord: Open Source Bridge</a><br/> <br/><br/><i>Tags for this post: blather(<a href="http://www.stillhq.com/blather"><img src="http://www.stillhq.com/tagicon.cgi?post=/blather/20081114&tag=blather&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/blather/20081114.commentform.html">Comment</a> <a href="http://www.stillhq.com/index.noblather.rss20">RSS with no blather</a> http://www.stillhq.com/blather/20081114.html http://www.stillhq.com/blather/20081114.html On a memeomatic /meme Fri, 14 Nov 2008 22:04:00 PST I'm on vacation today, and so I had a bit more time that usual to just think. So, when <a href="http://bethesignal.org/blog/2008/11/14/eumemics/">Jeff posited a meme detector for planets</a>, I wrote one. Except its of course never just that simple. My initial implementation only took a few minutes to write, but sucked. <br/><br/> What I did was I wrote a script which scanned through the list of posts from the planet's RSS feed, and kept a tally of which sequences of words (let's call them sentences, even though they're not) appear in which posts. Then, if a sentence appears in more than four posts, and those posts are from at least two domains, we've found a meme. <br/><br/> That's actually a reasonable algorithm. Its big advantage is that it only has to take one pass through the posts, which means its <a href="http://en.wikipedia.org/wiki/Big_O_notation">order</a> is linear -- O(n). Now, the problem with that algorithm is that there a small differences in some of the sentences (for example people mistype a sentence), and I ended up finding too many copies of the same meme. <br/><br/> Here's some sample output from that version: <br/><br/> <ul> Found memes: <li>"the cool book or the intellectual one pick the closest": <a href="http://www.noogz.net/website/blog/20081114-Meme42.html">Chris Neugebauer: Meme #42</a>, <a href="http://arctanx.id.au/blog/?p=57">Thomas Karpiniec: The Book Thing</a>, <a href="http://jeremy.visser.name/2008/11/14/book-meme/">Jeremy Visser: Book meme</a>, <a href="http://www.michaeldavies.org/weblog/tech/books/book-meme.html">Michael Davies: Meme #42</a>, <a href="http://jamespurser.com.au/blog/The_Meme_of_the_Book">James Purser: The Meme of the Book</a>, <a href="http://jon.oxer.com.au/blog/id/292">Jon Oxer: Phrase from nearest book</a>, <a href="http://noisymime.org/blog/?p=66">Josh Stewart: random book content</a>, <a href="http://www.flamingspork.com/blog/2008/11/12/phrase-from-nearest-book/">Stewart Smith: phrase from nearest book</a> <li>"find the fifth sentence post the text of the sentence": <a href="http://kattekrab.livejournal.com/50475.html">Donna Benjamin: meme-ege</a>, <a href="http://www.noogz.net/website/blog/20081114-Meme42.html">Chris Neugebauer: Meme #42</a>, <a href="http://arctanx.id.au/blog/?p=57">Thomas Karpiniec: The Book Thing</a>, <a href="http://jeremy.visser.name/2008/11/14/book-meme/">Jeremy Visser: Book meme</a>, <a href="http://www.michaeldavies.org/weblog/tech/books/book-meme.html">Michael Davies: Meme #42</a>, <a href="http://jamespurser.com.au/blog/The_Meme_of_the_Book">James Purser: The Meme of the Book</a>, <a href="http://www.cafuego.net/2008/11/14/blog-meme-42">Peter Lieverdink: blog meme #42</a>, <a href="http://jon.oxer.com.au/blog/id/292">Jon Oxer: Phrase from nearest book</a>, <a href="http://noisymime.org/blog/?p=66">Josh Stewart: random book content</a>, <a href="http://www.flamingspork.com/blog/2008/11/12/phrase-from-nearest-book/">Stewart Smith: phrase from nearest book</a> <li>"journal along with these instructions dont dig for your favorite": <a href="http://jeremy.visser.name/2008/11/14/book-meme/">Jeremy Visser: Book meme</a>, <a href="http://www.michaeldavies.org/weblog/tech/books/book-meme.html">Michael Davies: Meme #42</a>, <a href="http://jamespurser.com.au/blog/The_Meme_of_the_Book">James Purser: The Meme of the Book</a>, <a href="http://www.cafuego.net/2008/11/14/blog-meme-42">Peter Lieverdink: blog meme #42</a>, <a href="http://jon.oxer.com.au/blog/id/292">Jon Oxer: Phrase from nearest book</a>, <a href="http://noisymime.org/blog/?p=66">Josh Stewart: random book content</a>, <a href="http://www.flamingspork.com/blog/2008/11/12/phrase-from-nearest-book/">Stewart Smith: phrase from nearest book</a> <li>"grab the nearest book open it to page 56 find": <a href="http://www.noogz.net/website/blog/20081114-Meme42.html">Chris Neugebauer: Meme #42</a>, <a href="http://arctanx.id.au/blog/?p=57">Thomas Karpiniec: The Book Thing</a>, <a href="http://jeremy.visser.name/2008/11/14/book-meme/">Jeremy Visser: Book meme</a>, <a href="http://www.michaeldavies.org/weblog/tech/books/book-meme.html">Michael Davies: Meme #42</a>, <a href="http://jamespurser.com.au/blog/The_Meme_of_the_Book">James Purser: The Meme of the Book</a>, <a href="http://www.cafuego.net/2008/11/14/blog-meme-42">Peter Lieverdink: blog meme #42</a>, <a href="http://jon.oxer.com.au/blog/id/292">Jon Oxer: Phrase from nearest book</a>, <a href="http://noisymime.org/blog/?p=66">Josh Stewart: random book content</a>, <a href="http://www.flamingspork.com/blog/2008/11/12/phrase-from-nearest-book/">Stewart Smith: phrase from nearest book</a> mi </ul> <br/><br/> If you look at those you'll see that they're all the same meme, but the code found it three different ways. I need an algorithm which accurately finds the meme only once. <br/><br/> I should stop here and mention that I think this problem would be an excellent interview question. If you were going to ask the question in an interview you'd probably phrase it more as: <br/><br/> <div align=center><i>Given a list of strings, find substrings repeated between the strings, and return a list of the substrings and the strings containing them</i>.</div> <br/><br/> When the problem is phrased like that, I am sure that some folk think of an algorithm which compares each string with each other, looks for some sort of largest substring between the two, and then builds a table of those. However, the problem with that is that the order would be O(N^2), which is ok for a planet RSS feed, but wouldn't be so great if the set of strings you wanted to compare was something like every page on the Internet. <br/><br/> Anyway, I think its possible to rescue my initial implementation by providing a final pass which checks if matches overlap and combines them if they do. For example, if the only difference between two detected memes is one post, then they're probably the same meme and can be combined. <br/><br/> That's a interesting problem in itself. Its easy to measure the difference in the list of matching posts for two memes, but that comparison has O(N^2), which I just said was a bad thing. However, this is a vacation day and I couldn't think of anything better, so that's what I ended up using. I guess I'll wait for a smart interview candidate to think of a better way for me. <br/><br/> You can see output from memeomatic in <a href="http://www.stillhq.com/blather/20081114.html">this blather post for today</a>. The blather code I wrote a while ago makes it really to post messages to my site, which is why I've reused it here (you just call a method on a python module, and a pre-existing Rube Goldberg machine takes care of the rest). <br/><br/> My code: <br/><br/> <ul><pre> import feedparser import os import re import shelve import sys import unicodedata import urllib _SENTENCE_LENGTH = 5 def Normalize(value): normalized = unicodedata.normalize('NFKD', unicode(value)) normalized = normalized.encode('ascii', 'ignore') return normalized def ListDifference(l1, l2): delta = [] for l in l2: if l not in l1: delta.append(l) return len(delta) plugins_dir = '%s/plugins' % os.getcwd() print 'Appending %s to module path' % plugins_dir sys.path.append(plugins_dir) import blather data = shelve.open('memes.slf', writeback=True) data.setdefault('sentences', {}) data.setdefault('titles', {}) data.setdefault('content', {}) data.setdefault('content_orig', {}) data.setdefault('memes', []) ds = blather.DataStore() changed = False # Scan feeds, looking for new posts. This just populates the database. for feed in data['feeds']: print print 'Fetching %s' % feed d = feedparser.parse(feed) # Newest entries are first entries = d.entries entries.reverse() for ent in entries: print ' Considering %s' % ent.title data['titles'][ent.link] = ent.title content = Normalize(ent.description) data['content_orig'][ent.link] = content content = ' '.join(content.split('\n')) content = re.sub('&lt;[^&gt;]*&gt;', '', content) content = re.sub('[^\w]+', ' ', content) content = content.lower() data['content'][ent.link] = content words = content.split() for i in range(len(words) - _SENTENCE_LENGTH): key = ' '.join(words[i:i + _SENTENCE_LENGTH]) data['sentences'].setdefault(key, []) if not ent.link in data['sentences'][key]: data['sentences'][key].append(ent.link) # Now we have a database of sentences and the posts which share them. What we # really want is a collection of shared sentences that form a meme, and the # posts which contain those sentences. for sentence in data['sentences']: found = False if len(data['sentences'][sentence]) &gt; 4: domains = {} # Its possible that they're all from one domain... for url in data['sentences'][key]: domain = url.strip('http://').split('/')[0] domains[domain] = True # Its not a meme unless the sentence is shared by at least four posts. # Try to find an existing meme which contains these posts. for (sentences, urls, published) in data['memes']: if not found and ListDifference(urls, data['sentences'][sentence]) &lt; 2: data['memes'].remove((sentences, urls, published)) if sentence not in sentences: sentences.append(sentence) new_titles = [] for u in data['sentences'][sentence]: if not u in urls: urls.append(u) new_titles.append('&lt;a href="%s"&gt;%s&lt;/a&gt;' %(u, data['titles'][u])) data['memes'].append((sentences, urls, published)) found = True if published and new_titles: print 'Added posts to an existing meme' ds.AddMessage('Memeomatic extended an existing meme: %s' % ', '.join(new_titles)) changed = True if not found and len(domains) &gt; 1: print ('Created a new meme for "%s" with %s' %(sentence, data['sentences'][sentence])) data['memes'].append(([sentence], data['sentences'][sentence], False)) # Publish new memes for meme in data['memes']: (sentences, urls, published) = meme if not published: titles = [] for url in urls: titles.append('&lt;a href="%s"&gt;%s&lt;/a&gt;' %(url, data['titles'][url])) ds.AddMessage('Memeomatic found a new meme: %s' % ', '.join(titles)) data['memes'].remove((sentences, urls, published)) data['memes'].append((sentences, urls, True)) print 'Published a new meme' changed = True if changed: ds.Save() data.close() </pre></ul> <br/><br/> So there you go. I haven't set this as a cron job yet, as I want to baby sit it for a while to make sure its doing the right thing. I might one day get around to trusting it enough to just turn it on. <br/><br/><i>Tags for this post: meme(<a href="http://www.stillhq.com/meme"><img src="http://www.stillhq.com/tagicon.cgi?post=/meme/000002&tag=meme&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/meme/000002.commentform.html">Comment</a> http://www.stillhq.com/meme/000002.html http://www.stillhq.com/meme/000002.html It seems planet is a bit too trusting with dates? /diary Fri, 14 Nov 2008 21:55:00 PST It seems that <a href="http://www.planetplanet.org">planet</a> is a bit too trusting with dates. For example, if you have a post with a date well into the future, then you can keep that post at the top of the planet output until that date comes around. Its interesting that no one has used that maliciously yet. <br/><br/> You can see an example of what I'm talking about at <a href="http://planet.linux.org.au">Planet Linux Australia</a>, where some forward dated posts sit at the top of the page... <br/><br/><i>Tags for this post: blog(<a href="http://www.stillhq.com/diary"><img src="http://www.stillhq.com/tagicon.cgi?post=/diary/001105&tag=blog&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/diary/001105.commentform.html">Comment</a> http://www.stillhq.com/diary/001105.html http://www.stillhq.com/diary/001105.html Book meme de jour /meme Fri, 14 Nov 2008 21:29:00 PST I don't normally get involved in this whole meme thing, but I want to test memeomatic some more. So, here goes... <br/><br/> Instructions: <ul> <li>Grab the nearest book.</li> <li>Open it to page 56.</li> <li>Find the fifth sentence.</li> <li>Post the text of the sentence in your journal along with these instructions.</li> <li>Don't dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.</li> </ul> <br/><br/> So, I'm currently reading <i>A Darkness at Sethanon</i>, which means its close to hand. The sentence is "They are correct as written, Commander." <br/><br/><i>Tags for this post: meme(<a href="http://www.stillhq.com/meme"><img src="http://www.stillhq.com/tagicon.cgi?post=/meme/000001&tag=meme&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/meme/000001.commentform.html">Comment</a> http://www.stillhq.com/meme/000001.html http://www.stillhq.com/meme/000001.html Bypassing Australia's imminent internet filter /diary Thu, 13 Nov 2008 21:25:00 PST <a href="http://weblog.leapster.org/archives/122-How-to-bypass-Australias-forthcoming-internet-filter..html">Paul has thoughts on how to avoid Rudd's internet filter</a>. I am left wondering why he doesn't just suggest Tor though. Its designed for exactly this sort of censorship, requires no account in another country, and is cross platform. The only catch is that Tor does block some traffic (for example bittorrent), so you can't just use it for all your traffic. <br/><br/><i>Tags for this post: blog(<a href="http://www.stillhq.com/diary"><img src="http://www.stillhq.com/tagicon.cgi?post=/diary/001104&tag=blog&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/diary/001104.commentform.html">Comment</a> http://www.stillhq.com/diary/001104.html http://www.stillhq.com/diary/001104.html Another dynamic element to the site /site Thu, 13 Nov 2008 19:55:00 PST I got adventurous tonight, and whipped up some javascript which updates the sentence at the end of each post which lists how many comments there are on a post. This means that the site is always up to date, even though all the HTML is static files on disk. It also means I can finally kill that silly hourly regenerate cron job. <br/><br/> Oh, and this is post 3,000 on this site. <br/><br/><i>Tags for this post: site(<a href="http://www.stillhq.com/site"><img src="http://www.stillhq.com/tagicon.cgi?post=/site/000103&tag=site&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/site/000103.commentform.html">Comment</a> http://www.stillhq.com/site/000103.html http://www.stillhq.com/site/000103.html Blathering for Thursday, 13 November 2008 /blather Thu, 13 Nov 2008 12:45:00 GMT <b>09:15</b>: Mikal shared: <a href="http://feeds.gawker.com/~r/consumerist/full/~3/C4Rzs1WQL-w/banks-want-to-forgive-credit-card-debt-++-but-the-government-says-no">Banks Want To Forgive Credit Card Debt -- But The Government Says No [Money</a><br/><ul><i>Hmmm, here comes the credit card crisis. I don't know how I feel about forgiving credit card debt. As someone who has used his cards responsibly (and therefore wont have any debt forgiven) it seems unfair. Then again, I guess I benefit from a smaller recession.</i></ul><br/> <b>12:45</b>: Mikal shared: <a href="http://xsdg.blogspot.com/2008/11/knee-slappin-good-time.html">The Doppler Effect: A Knee-Slappin' Good Time</a><br/><ul><i>So, Hodgman came to talk at Google. These pictures taken by a coworker are awesome.</i></ul><br/> <br/><br/><i>Tags for this post: blather(<a href="http://www.stillhq.com/blather"><img src="http://www.stillhq.com/tagicon.cgi?post=/blather/20081113&tag=blather&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/blather/20081113.commentform.html">Comment</a> <a href="http://www.stillhq.com/index.noblather.rss20">RSS with no blather</a> http://www.stillhq.com/blather/20081113.html http://www.stillhq.com/blather/20081113.html irtrans remote control stops working /mythtv Tue, 11 Nov 2008 19:04:00 PST I've been using a Zalman HD160B media center case for quite some time, and I love it. It came with an irtrans based LCD and remote control built into the case, which has always worked nicely as well. Until yesterday when the remote stopped working. <br/><br/> When I run the irserver command in a terminal so I can see the output, I get this: <br/><br/> <ul><pre> # ./irserver -codedump -debug_code -loglevel 4 /dev/ttyUSB0 Name : Version: D5.03.08 FW SNo : 18780 Capab : Power On; FW Cap : 3964953 USB SNo: Node : /dev/ttyUSB0 IRServer Version 5.7.08 [ 0]: D5.03.08 SN: 18780 Remote zalman compiled: 1 Timings - 45 Commands Total: 1 Remotes - 1 Timings - 45 Commands 0 CCF Data - 0 CCF RAW - 0 CCF Error </pre></ul> <br/><br/> No joy. Rebooting the machine, replacing all the batteries, and restarting the server all did nothing. The server still doesn't see events from the remote. I'm not sure how to determine if this is a receiver hardware problem or not -- I'm kinda out of other ideas. Suggestions welcome. <br/><br/> <i>Update</i>: of course, disassembling the PC and reseating all the cables fixed the problem. I wonder if it is temperature related? <br/><br/><i>Tags for this post: mythtv(<a href="http://www.stillhq.com/mythtv"><img src="http://www.stillhq.com/tagicon.cgi?post=/mythtv/000021&tag=mythtv&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/mythtv/000021.commentform.html">Comment</a> http://www.stillhq.com/mythtv/000021.html http://www.stillhq.com/mythtv/000021.html Finding locking deadlocks in python /python Tue, 11 Nov 2008 15:46:00 PST I re-factored some code today, and in the process managed to create a lock deadlock for myself. In the end it turned out to be an exception was being thrown when a lock was held, and adding a try / finally resolved the real underlying problem. However, in the process I ended up writing this little helper that I am sure will be useful in the future. <br/><br/> <ul><pre> import gflags import thread import threading import traceback import logging ... FLAGS = gflags.FLAGS gflags.DEFINE_boolean('dumplocks', False, 'If true, dumps information about lock activity') ... class LockHelper(object): """A wrapper which makes it easier to see what locks are doing.""" lock = thread.allocate_lock() def acquire(self): if FLAGS.dumplocks: logging.info('%s acquiring lock' % threading.currentThread().getName()) for s in traceback.extract_stack(): logging.info(' Trace %s:%s [%s] %s' % s) self.lock.acquire() def release(self): if FLAGS.dumplocks: logging.info('%s releasing lock' % threading.currentThread().getName()) for s in traceback.extract_stack(): logging.info(' Trace %s:%s [%s] %s' % s) self.lock.release() </pre></ul> <br/><br/> Now I can just use this helper in the place of thread.allocate_lock() when I want to see what is happening with locking. It saved me a lot of staring at random code today. <br/><br/><i>Tags for this post: python(<a href="http://www.stillhq.com/python"><img src="http://www.stillhq.com/tagicon.cgi?post=/python/000006&tag=python&format=.png" border="0" alt="S"></a>) </i> <a href="http://www.stillhq.com/python/000006.commentform.html">Comment</a> http://www.stillhq.com/python/000006.html http://www.stillhq.com/python/000006.html