<?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-12558127</id><updated>2012-02-16T03:22:01.721-08:00</updated><category term='ruby dsl metaprogramming'/><category term='v'/><category term='rails ruby training screencasts'/><category term='firefly'/><category term='scifi'/><title type='text'>dreaming of electric sheep</title><subtitle type='html'>politics, philosophy, environment, social criticism, science fiction, film, documentaries, mac osx, software and web development (ruby, rails, python, django, java).</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default?start-index=101&amp;max-results=100'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>111</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12558127.post-6638154378282339628</id><published>2011-02-19T12:35:00.000-08:00</published><updated>2011-02-19T13:20:58.576-08:00</updated><title type='text'>Take that, Amazon!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-xIz4ncLVgJo/TWAw7AJhvNI/AAAAAAAAFQY/k3pVSEXHbhI/s1600/goodreads-search.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 221px;" src="http://4.bp.blogspot.com/-xIz4ncLVgJo/TWAw7AJhvNI/AAAAAAAAFQY/k3pVSEXHbhI/s320/goodreads-search.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5575510128895048914" /&gt;&lt;/a&gt;&lt;br /&gt;I got tired of having to redirect links of books on websites from Amazon to independent bookstores, or copy/pasting them from the NYT book reviews, so I made this simple bookmarklet that lets me select a title and/or author and search Goodreads with one click. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To install: drag the link below to the bookmark bar in your browser.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="javascript:Qr=document.getSelection();if(!Qr){void(Qr=prompt('Enter book title or author.',''))};if (Qr)window.open('http://www.goodreads.com/search/search?query='+ (Qr),'finder','toolbar=0,status=0,resizable=1,width=1000,height=600'); void 0"&gt;Search Goodreads&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To use: &lt;/div&gt;&lt;div&gt;Select the text for the book title and/or author on a web page, then click the "Search Goodreads" bookmark. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It should pass the selected text to Goodreads in a search that it opens in a new window. If you're a member of Goodreads and signed on, you will be able to add the book to your books and find an independent bookseller to buy it from. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can try it out here with this title by one of my favorite authors:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;What Are People For? by Wendell Berry&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(If you're unfamiliar with bookmarklets, &lt;a href="http://www.google.com/search?q=bookmarklets"&gt;ask Google&lt;/a&gt;.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PLEASE, PLEASE, PLEASE SUPPORT your &lt;b&gt;independent booksellers&lt;/b&gt; through local or online book purchases. Right now B&amp;amp;N, Amazon, Wal-mart, and Apple are poised to create a monopoly on books and eBooks and frankly I want to support small businesses with ties to my community. They are some of the few remaining "&lt;a href="http://www.goodreads.com/book/show/4119.The_Great_Good_Place"&gt;Great, Good Places&lt;/a&gt;" we have left in this country. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Disclaimer: I take no responsibility for the use of this bookmarklet, so the risk you take in using it is your own. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It works for me in Firefox and Chrome but I haven't tried it in Internet Exploder. &lt;/div&gt;&lt;div&gt;This is a really a boneheaded bit of Javascript (I don't even bother to encode the query string and just let the browser do it because some characters like apostrophes might not get handled properly by the JS). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also you might have to tweak the size of the window for smaller computers. It's currently set to:&lt;/div&gt;&lt;div&gt;width=1000,height=600&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;If you run into any problems, just post them here and I'll take a look when I can. &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-6638154378282339628?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/6638154378282339628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=6638154378282339628' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/6638154378282339628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/6638154378282339628'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2011/02/take-that-amazon.html' title='Take that, Amazon!'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-xIz4ncLVgJo/TWAw7AJhvNI/AAAAAAAAFQY/k3pVSEXHbhI/s72-c/goodreads-search.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-2454181010756936322</id><published>2010-03-22T21:13:00.000-07:00</published><updated>2010-03-22T22:02:33.316-07:00</updated><title type='text'>Step 2 in health care reform</title><content type='html'>Step 2 in health care reform. Teach our kids and the people that feed them (that's us) about proper nutrition.&lt;br /&gt;&lt;br /&gt;&lt;object width="512" height="296"&gt;&lt;param name="movie" value="http://www.hulu.com/embed/JChbMxU2N0JitcJZOHQZOA"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.hulu.com/embed/JChbMxU2N0JitcJZOHQZOA" type="application/x-shockwave-flash" allowfullscreen="true" width="512" height="296"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;If Her Majesty the Queen of England reads this:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Please, knight Jamie Oliver.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-2454181010756936322?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/2454181010756936322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=2454181010756936322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2454181010756936322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2454181010756936322'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/03/step-2-in-health-care-reform.html' title='Step 2 in health care reform'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-2884621415344070680</id><published>2010-03-22T15:07:00.001-07:00</published><updated>2010-03-22T15:09:59.103-07:00</updated><title type='text'>PALOMINO!!!</title><content type='html'>Did John Boehner forget the safe word? PALOMINO!!!&lt;br /&gt;&lt;br /&gt;&lt;object width="512" height="296"&gt;&lt;param name="movie" value="http://www.hulu.com/embed/qRVuU5rKmcbQCs4hgdvBGg"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.hulu.com/embed/qRVuU5rKmcbQCs4hgdvBGg" type="application/x-shockwave-flash" allowFullScreen="true"  width="512" height="296"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Maybe Mr. Boehner should've worked harder to get his colleagues in the Republican party to work on a bipartisan bill instead of expending all their effort and political capital on attempting to derail health reform altogether.&lt;br /&gt;&lt;br /&gt;Lesson learned? Doubtful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-2884621415344070680?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/2884621415344070680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=2884621415344070680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2884621415344070680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2884621415344070680'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/03/palomino.html' title='PALOMINO!!!'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-8028555960806406547</id><published>2010-02-22T13:26:00.000-08:00</published><updated>2010-02-22T13:36:45.509-08:00</updated><title type='text'></title><content type='html'>&lt;div&gt;&lt;a href="http://bit.ly/aLCClb"&gt;America’s Wind Energy Potential Triples in New Estimate | Wired Science | Wired.com&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;"Current wind technology deployed in nonenvironmentally protected areas could generate 37,000,000 gigawatt-hours of electricity per year, according to the new analysis conducted by the National Renewable Energy Laboratory and consulting firm AWS Truewind. The last comprehensive estimate came out in 1993, when Pacific Northwest National Laboratory pegged the wind energy potential of the United States at 10,777,000 gigawatt-hours.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Both numbers are greater than the 3,000,000 gigawatt-hours of electricity currently consumed by Americans each year. Wind turbines generated just 52,000 gigawatt-hours in 2008, the last year for which annual statistics are available."&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;Physicist and MacArthur Fellow Amory Lovins, among others, has some persuasive arguments that we should be pursuing wind, solar, and other micropower solutions over &lt;a href="http://www.truthdig.com/report/item/obamas_nuclear_option_20100216/"&gt;Obama's nuclear option&lt;/a&gt;, which he believes will actually increase global warming and be uneconomical to boot.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-8028555960806406547?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/8028555960806406547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=8028555960806406547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8028555960806406547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8028555960806406547'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/02/americas-wind-energy-potential-triples.html' title=''/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-5580894811838642443</id><published>2010-02-22T13:00:00.000-08:00</published><updated>2010-02-22T13:02:07.058-08:00</updated><title type='text'></title><content type='html'>&lt;div&gt;Damn. I had this idea for a business years ago but never jumped on it. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[Victor's head shakes violently with regret.]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; color: rgb(128, 128, 128); "&gt;&lt;div class="UIStoryAttachment_Media UIStoryAttachment_MediaSingle" ft="{&amp;quot;type&amp;quot;:&amp;quot;media&amp;quot;}" style="float: left; overflow-x: hidden; overflow-y: hidden; padding-right: 10px; "&gt;&lt;div class="UIMediaItem UIMediaItem_UnknownWidth"&gt;&lt;a href="http://www.facebook.com/l.php?u=http%253A%252F%252Furdoll.com%252F&amp;amp;h=39c1d6239658e66939c617d79a15d458&amp;amp;ref=nf" target="_blank" style="cursor: pointer; color: rgb(59, 89, 152); text-decoration: underline; "&gt;&lt;div class="UIMediaItem_Wrapper" style="overflow-x: hidden; overflow-y: hidden; "&gt;&lt;img src="http://external.ak.fbcdn.net/safe_image.php?d=607197cbf1d6a8b27311d243d2d11dfc&amp;amp;w=90&amp;amp;h=90&amp;amp;url=http%3A%2F%2Furdoll.com%2Fimages%2Fs6300863.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; display: block; max-width: 90px; max-height: 90px; " /&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="UIStoryAttachment_Info" style="display: table; "&gt;&lt;div class="UIStoryAttachment_Title" style="font-weight: bold; padding-top: 3px; "&gt;&lt;a href="http://urdoll.com/"&gt;Custom Bobbleheads Personalized | Custom Made Bobblehead Manufacturer&lt;/a&gt;&lt;/div&gt;&lt;div class="UIStoryAttachment_Caption" style="color: rgb(128, 128, 128); padding-top: 3px; "&gt;&lt;a href="http://urdoll.com/"&gt;urdoll.com&lt;/a&gt;&lt;/div&gt;&lt;div class="UIStoryAttachment_Copy" style="color: rgb(128, 128, 128); padding-top: 3px; "&gt;Custom bobbleheads personalized from your photo, professional custom made bobblehead manufacturer.&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-5580894811838642443?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/5580894811838642443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=5580894811838642443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5580894811838642443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5580894811838642443'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/02/damn.html' title=''/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-3026913872539708207</id><published>2010-02-22T12:47:00.000-08:00</published><updated>2010-02-22T12:54:15.164-08:00</updated><title type='text'>why I live in New York City</title><content type='html'>&lt;div&gt;&lt;b&gt;[Overheard at a NYC diner]&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;She: Is there any way you can speed it up a little? I've got an appointment downtown and I can't be late. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He: You ordered a burger, medium well. There's a physics involved. It takes time for the meat to get to the right temperature.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;She: Well, in that case, just never mind. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He: Uh. Okay.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;She: Can you tell me? Where is the closest subway stop to get downtown?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He: Sure, go down a block, turn right...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;She: Yes?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He: When you get there, there'll be a guy in the booth...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;She: Uh huh.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He: Ask him if he can speed up the train a little.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-3026913872539708207?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/3026913872539708207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=3026913872539708207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/3026913872539708207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/3026913872539708207'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/02/why-i-live-in-new-york-city.html' title='why I live in New York City'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-3998827900465372965</id><published>2010-02-22T11:57:00.000-08:00</published><updated>2010-02-22T12:02:07.027-08:00</updated><title type='text'></title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(51, 51, 51); font-family:'lucida grande', tahoma, verdana, arial, sans-serif;font-size:11px;"&gt;&lt;div class="UIStoryAttachment_Media UIStoryAttachment_MediaSingle" ft="{&amp;quot;type&amp;quot;:&amp;quot;media&amp;quot;}" style="float: left; overflow-x: hidden; overflow-y: hidden; padding-right: 10px; "&gt;&lt;div class="UIMediaItem UIMediaItem_UnknownWidth"&gt;&lt;a href="http://www.facebook.com/l.php?u=http%253A%252F%252Fwww.taxanalysts.com%252Fwww%252Ffeatures.nsf%252FArticles%252F4862392C0AC24550852576CD0077FEA7%253FOpenDocument&amp;amp;h=39c1d6239658e66939c617d79a15d458&amp;amp;ref=mf" target="_blank" style="cursor: pointer; color: rgb(59, 89, 152); text-decoration: underline; "&gt;&lt;div class="UIMediaItem_Wrapper" style="overflow-x: hidden; overflow-y: hidden; "&gt;&lt;img src="http://external.ak.fbcdn.net/safe_image.php?d=a88df32a84b61d3ce86426792c1d922f&amp;amp;w=90&amp;amp;h=90&amp;amp;url=http%3A%2F%2Fwww.taxanalysts.com%2Fwww%2Ffeatures.nsf%2Fd1fdf849d972b14a8525751b000cb317%2F4862392c0ac24550852576cd0077fea7%2FBody%2F0.D1A%3FOpenElement%26FieldElemFormat%3Djpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; display: block; max-width: 90px; max-height: 90px; " /&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="UIStoryAttachment_Info" style="display: table; "&gt;&lt;div class="UIStoryAttachment_Title" style="font-weight: bold; padding-top: 3px; "&gt;&lt;a href="http://www.taxanalysts.com/www/features.nsf/Articles/4862392C0AC24550852576CD0077FEA7?OpenDocument"&gt;taxanalysts.com: Tax Rates for Top 400 Earners Fall as Income Soars, IRS Data&lt;/a&gt;&lt;/div&gt;&lt;div class="UIStoryAttachment_Caption" style="color: rgb(128, 128, 128); padding-top: 3px; "&gt;&lt;a href="http://www.taxanalysts.com/www/features.nsf/Articles/4862392C0AC24550852576CD0077FEA7?OpenDocument"&gt;www.taxanalysts.com&lt;/a&gt;&lt;/div&gt;&lt;div class="UIStoryAttachment_Copy" style="color: rgb(128, 128, 128); padding-top: 3px; "&gt;The incomes of the top 400 American households soared to a new record high in dollars and as a share of all income in 2007, while the income tax rates they paid fell to a record low, newly disclosed tax ...&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;"The incomes of the top 400 American households soared to a new record high in dollars and as a share of all income in 2007, while the income tax rates they paid fell to a record low, newly disclosed tax data show. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In 2007 the top 400 taxpayers had an average income of $344.8 million, up 31 percent from their average $263.3 million income in 2006, according to figures in a report that the IRS posted to its Web site without announcement that were discovered February 16."&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh no, we can't tax the rich more. &lt;div&gt;They'll stop creating real wealth and it won't trickle downtown us and they'll stop giving us jobs. &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh, wait...&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-3998827900465372965?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/3998827900465372965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=3998827900465372965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/3998827900465372965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/3998827900465372965'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/02/taxanalysts.html' title=''/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-8072780355739467118</id><published>2010-02-22T11:53:00.001-08:00</published><updated>2010-02-22T11:55:23.160-08:00</updated><title type='text'>longer winter of our discontent?</title><content type='html'>&lt;div&gt;Dick Cheney crawled out of his underground bunker and didn't see his reflection — again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Does that mean 6 more years of war-profiteering and water-boarding?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 11px; color: rgb(51, 51, 51); "&gt;&lt;div class="UIStoryAttachment_Media UIStoryAttachment_MediaSingle" ft="{&amp;quot;type&amp;quot;:&amp;quot;media&amp;quot;}" style="float: left; overflow-x: hidden; overflow-y: hidden; padding-right: 10px; "&gt;&lt;div class="UIMediaItem UIMediaItem_UnknownWidth"&gt;&lt;a href="http://www.facebook.com/l.php?u=http%253A%252F%252Fwww.punxsutawneyphil.com%252F&amp;amp;h=39c1d6239658e66939c617d79a15d458&amp;amp;ref=mf" target="_blank" style="cursor: pointer; color: rgb(59, 89, 152); text-decoration: none; "&gt;&lt;div class="UIMediaItem_Wrapper" style="overflow-x: hidden; overflow-y: hidden; "&gt;&lt;img src="http://external.ak.fbcdn.net/safe_image.php?d=f11880b95c4485e48672491542046223&amp;amp;w=90&amp;amp;h=90&amp;amp;url=http%3A%2F%2Fwww.punxsutawneyphil.com%2Fimages%2Fphil-jg.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; display: block; max-width: 90px; max-height: 90px; " /&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="UIStoryAttachment_Info" style="display: table; "&gt;&lt;div class="UIStoryAttachment_Title" style="font-weight: bold; padding-top: 3px; "&gt;&lt;a href="http://www.punxsutawneyphil.com/"&gt;Punxsutawney Phil.com&lt;/a&gt;&lt;/div&gt;&lt;div class="UIStoryAttachment_Caption" style="color: rgb(128, 128, 128); padding-top: 3px; "&gt;&lt;a href="http://www.punxsutawneyphil.com/"&gt;www.punxsutawneyphil.com&lt;/a&gt;&lt;/div&gt;&lt;div class="UIStoryAttachment_Copy" style="color: rgb(128, 128, 128); padding-top: 3px; "&gt;PunxsutawneyPhil.com is a tribute site to the world's most famous weather-forecasting groundhog, Punxsutawney Phil!&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-8072780355739467118?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/8072780355739467118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=8072780355739467118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8072780355739467118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8072780355739467118'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/02/longer-winter-of-our-discontent.html' title='longer winter of our discontent?'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-5192857492740990671</id><published>2010-02-22T11:33:00.000-08:00</published><updated>2010-02-22T11:42:50.455-08:00</updated><title type='text'>Corporations Are NOT People</title><content type='html'>Corporations are NOT people. (Though some of their soy products might be.)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's take our democracy back. Please sign the petition at &lt;a href="http://freespeechforpeople.org/petition"&gt;http://freespeechforpeople.org/petition&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;object width="580" height="360"&gt;&lt;param name="movie" value="http://www.youtube-nocookie.com/v/Dx81TeELcik&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube-nocookie.com/v/Dx81TeELcik&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="580" height="360"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;"They [corporations] do everything people do - except breath, die, and go to jail for dumping 1.3 million pounds of PCBs into the Hudson River" ~ Stephen Colbert&lt;div&gt;&lt;br /&gt;[Caption: "GE - We Bring Bad Things to Fish."®]&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-5192857492740990671?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/5192857492740990671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=5192857492740990671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5192857492740990671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5192857492740990671'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/02/corporations-are-not-people.html' title='Corporations Are NOT People'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-3735596185705336259</id><published>2010-01-28T12:31:00.000-08:00</published><updated>2010-01-28T12:35:33.919-08:00</updated><title type='text'>Rumors of Next iPad Model</title><content type='html'>&lt;div&gt;Shh. Rumor has it that Apple and Adobe are working hard to add Flash support to the &lt;a href="http://apple.com/ipad"&gt;iPad&lt;/a&gt; so that it will support all those Flash-based porn sites. This next model will be rebranded and called the iTouchMyself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;New gestures to be added for the touchscreen will include the pinch and grab, the twist and squeal, and the squeeze and shout.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-3735596185705336259?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/3735596185705336259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=3735596185705336259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/3735596185705336259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/3735596185705336259'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/01/rumors-of-next-ipad-model.html' title='Rumors of Next iPad Model'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-2861045051922702209</id><published>2010-01-25T11:21:00.000-08:00</published><updated>2010-01-25T11:24:01.983-08:00</updated><title type='text'></title><content type='html'>&lt;blockquote&gt;"A woman can forgive a man for the harm he does her... but she can never forgive him for the sacrifices he makes on her account."&lt;/blockquote&gt;&lt;blockquote&gt;~ W. Somerset Maugham, The Moon and Sixpence&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Happy birthday, W.S.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-2861045051922702209?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/2861045051922702209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=2861045051922702209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2861045051922702209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2861045051922702209'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2010/01/woman-can-forgive-man-for-harm-he-does.html' title=''/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-131748212586935022</id><published>2009-12-14T10:06:00.000-08:00</published><updated>2009-12-14T10:11:29.041-08:00</updated><title type='text'>Confessions of An Economic Hitman</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://content-2.powells.com/cgi-bin/imageDB.cgi?isbn=9780452287082"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 120px; height: 184px;" src="http://content-2.powells.com/cgi-bin/imageDB.cgi?isbn=9780452287082" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.powells.com/biblio/1-9780452287082-4"&gt;"Confessions of An Economic Hitman"&lt;/a&gt; is a great book to learn more about state and corporate sponsored economic terrorism and manipulation of developing economies and political systems, told by insider John Perkins who decided he had a moral obligation to speak out after 9/11. The &lt;a href="http://www.youtube.com/watch?v=yTbdnNgqfs8"&gt;short version is this radio interview&lt;/a&gt;. (The sound improves quickly).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-131748212586935022?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/131748212586935022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=131748212586935022' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/131748212586935022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/131748212586935022'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2009/12/confessions-of-economic-hitman-is-great.html' title='Confessions of An Economic Hitman'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-1242965793364257132</id><published>2009-12-14T09:46:00.000-08:00</published><updated>2009-12-14T09:48:11.630-08:00</updated><title type='text'>Alternative energy, NOW!</title><content type='html'>&lt;a href="http://www.reuters.com/article/idUSGEE5BB07F20091214"&gt;You go, developing nations.&lt;/a&gt; The economic superpowers need to man up and not try to circumvent the Kyoto Protocol which right now is the only legally binding mechanism in place to force wealthy nations to curb their emissions. Addressing climate change and developing clean energy is not just an economic but a moral imperative. I wonder how far that 1 million per soldier per day about to go to extending the war in Afghanistan could go in that effort. What's the point of saving the world from terrorism if we destroy it with our careless lifestyles?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-1242965793364257132?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/1242965793364257132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=1242965793364257132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/1242965793364257132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/1242965793364257132'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2009/12/alternative-energy-now.html' title='Alternative energy, NOW!'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-2492283870753033229</id><published>2009-12-06T14:52:00.000-08:00</published><updated>2009-12-06T16:55:48.313-08:00</updated><title type='text'>the *really* good things in life are *sometimes* free</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sweetleaflic.com/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 168px; height: 289px;" src="http://sweetleaflic.com/images/best_by_npr.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;New Yorkers: Best coffee in the world is &lt;a href="http://www.liqcity.com/local-biz/liqcity-sponsors-post-for-december"&gt;free this week, 12/7 - 12/13, only&lt;/a&gt;. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://sweetleaflic.com/"&gt;Sweetleaf&lt;/a&gt; is giving away 12 oz. of &lt;a href="http://www.stumptowncoffee.com/"&gt;Stumptown Coffee&lt;/a&gt;. It really is some of the best coffee I think I've had and they sell the beans too. Use the money you save to buy some goodies and take a bag of beans home. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Only one stop east from Grand Central on the 7 and a block east and north. &lt;a href="http://maps.google.com/maps?client=safari&amp;amp;q=10-93+Jackson+Ave.+Long+Island+City,+NYC&amp;amp;oe=UTF-8&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=10-93+Jackson+Ave,+Queens,+New+York+11101&amp;amp;gl=us&amp;amp;ei=JjYcS9f7BpDdlAf-l8DxCQ&amp;amp;ved=0CAkQ8gEwAA&amp;amp;z=16"&gt;Map&lt;/a&gt;. &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-2492283870753033229?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/2492283870753033229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=2492283870753033229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2492283870753033229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2492283870753033229'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2009/12/really-good-things-in-life-are.html' title='the *really* good things in life are *sometimes* free'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-8720702497105535284</id><published>2009-11-27T10:13:00.000-08:00</published><updated>2009-11-27T10:17:11.887-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://videocafe.crooksandliars.com/cspanjunkie/celebrate-buy-nothing-day-reverend-bil"&gt;The Reverend Billy Talen&lt;/a&gt; from the Church of Life After Shopping: &lt;blockquote&gt;"You stop shopping, but start giving. That's what the holidays are for. The good way to do that is to find your gift locally. Walk to your gift this year and buy it there. Buy it from an independent shop on your main street, in your neighborhood, in your community. Local shopping is... a sustainable economy."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-8720702497105535284?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/8720702497105535284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=8720702497105535284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8720702497105535284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8720702497105535284'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2009/11/reverend-billy-talen-from-church-of.html' title=''/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-4888906844101307653</id><published>2009-11-27T09:44:00.001-08:00</published><updated>2009-11-27T09:52:52.803-08:00</updated><title type='text'>Turn Black Friday into Buy Nothing Day</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="hhttps://www.adbusters.org/campaigns/bnd"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 168px; height: 210px;" src="https://www.adbusters.org/files/imagecache/downloads/downloads/preview/BND_classic.jpg" border="0" alt="" /&gt;&lt;/a&gt;Today, please join me, &lt;a href="https://www.adbusters.org/campaigns/bnd"&gt;Adbusters&lt;/a&gt;, the&lt;a href="http://www.revbilly.com/"&gt; Reverend Billy Talen and the Church of Life After Shopping&lt;/a&gt;,  and others across the world in reclaiming our souls from the capitalist/consumerist/corporatist spectacle through the simple defiant non-action of not buying anything. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fight the zombies of the Shopocalypse! It's either that or become one. Your choice.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-4888906844101307653?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/4888906844101307653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=4888906844101307653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/4888906844101307653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/4888906844101307653'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2009/11/turn-black-friday-into-buy-nothing-day.html' title='Turn Black Friday into Buy Nothing Day'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-1110755432258357119</id><published>2009-11-27T09:07:00.000-08:00</published><updated>2009-11-27T09:35:25.903-08:00</updated><title type='text'>Buy Nothing Day TV Spot Rejected by some networks</title><content type='html'>&lt;a href="https://www.adbusters.org/campaigns/bnd#videos"&gt;The Buy Nothing Day TV spot&lt;/a&gt; by Adbusters was rejected by MTV, ABC, and CTV. Listening to the rejection calls are telling.&lt;br /&gt;&lt;blockquote&gt;"Suck it up! It's the real world!... We sell time for many different things but not issues of public importance."&lt;/blockquote&gt;TV doesn't like controversy. Its job is to keep you watching, docile and receptive, and to keep you, above all else, buying. Reflection, thought, and questioning are its enemies.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;embed src="http://blip.tv/play/zUmc6GSG8ms" type="application/x-shockwave-flash" width="320" height="240" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-1110755432258357119?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/1110755432258357119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=1110755432258357119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/1110755432258357119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/1110755432258357119'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2009/11/buy-nothing-day-tv-spot-rejected-by.html' title='Buy Nothing Day TV Spot Rejected by some networks'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-1085491618004026677</id><published>2009-11-23T20:04:00.000-08:00</published><updated>2009-11-27T09:07:48.769-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefly'/><category scheme='http://www.blogger.com/atom/ns#' term='v'/><category scheme='http://www.blogger.com/atom/ns#' term='scifi'/><title type='text'>YARTHPOF</title><content type='html'>(V, or YET ANOTHER REASON TO HATE PARTY OF FIVE.)&lt;br /&gt;&lt;br /&gt;Sorry, &lt;a href="http://www.imdb.com/name/nm1072555/"&gt;Morena&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Loved you in &lt;a href="http://www.hulu.com/firefly"&gt;Firefly&lt;/a&gt; as Mal's love interest, but &lt;a href="http://www.hulu.com/v"&gt;V&lt;/a&gt; just ain't doing it for me. Is it the haircut? Possibly. Could I be that shallow? Possibly. Or could it be the lackluster dialog, clichéd conflict, and bottom-of-the-barrel casting? People, if you're going to do a remake of a corny classic, do your frakking (&lt;a href="http://www.syfy.com/battlestar/"&gt;hint, hint, nudge, nudge&lt;/a&gt;) homework and hire the right people for the job!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-1085491618004026677?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/1085491618004026677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=1085491618004026677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/1085491618004026677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/1085491618004026677'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2009/11/yarthpof.html' title='YARTHPOF'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-8237712319164677504</id><published>2008-08-12T15:38:00.000-07:00</published><updated>2008-08-12T15:55:56.245-07:00</updated><title type='text'>New life to the Blunnies</title><content type='html'>It's unfortunate that so few things are made to last these days. And when I find something that is well made, I am loathe to part with it.&lt;br /&gt;&lt;br /&gt;Fortunately I found &lt;a href="http://www.myshoeman.com/blundstone_shoe_repair.htm"&gt;a shop in Salem, Oregon&lt;/a&gt; that can resole my &lt;a href="http://www.blundstone.com/"&gt;Blundstone 500 boots&lt;/a&gt; with Vibram soles. Most places won't try this because the original soles are injection molded to the leather upper. &lt;br /&gt;&lt;br /&gt;Since Blundstone has moved it's factories from Australia to Asia and I don't know how they compare in terms of quality, and since it's taken me 7 years to get these fellas broken in just the way I like them, I'd rather not part with these old friends that have taken me to so many places. &lt;br /&gt;&lt;br /&gt;If anyone has tried these folks for Blundstone repairs and has feedback, or can recommend someone else who has done a good job, please drop me a post.&lt;br /&gt;&lt;br /&gt;The next question is, "What do I wear while my Blundstones are in the shop?!"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-8237712319164677504?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/8237712319164677504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=8237712319164677504' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8237712319164677504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8237712319164677504'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2008/08/new-life-to-blunnies.html' title='New life to the Blunnies'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-3893788232908334980</id><published>2008-05-15T13:58:00.000-07:00</published><updated>2008-05-15T14:17:08.591-07:00</updated><title type='text'>Google App Engine Finally Working under MacPorts</title><content type='html'>Well, it took some fidgeting but I finally got &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt; 1.0.2 SDK working under &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; by first uninstalling my previous version of Python 2.5 and then re-installing with the socket-ssl package.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: courier new;"&gt;&gt;&gt; sudo port uninstall python25&lt;/div&gt;&lt;div style="font-family: courier new;"&gt;&gt;&gt; sudo port install python25&lt;/div&gt;&lt;div style="font-family: courier new;"&gt;---&gt;  Activating python25 2.5.1_1+darwin_8&lt;br /&gt;---&gt;  Cleaning python25&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: courier new;"&gt;&gt;&gt; sudo port install py25-socket-ssl&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---&gt;  Fetching py25-socket-ssl&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---&gt;  Verifying checksum(s) for py25-socket-ssl&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---&gt;  Extracting py25-socket-ssl&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---&gt;  Configuring py25-socket-ssl&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---&gt;  Building py25-socket-ssl with target build&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---&gt;  Staging py25-socket-ssl into destroot&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---&gt;  Installing py25-socket-ssl 2.5.1_0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---&gt;  Activating py25-socket-ssl 2.5.1_0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---&gt;  Cleaning py25-socket-ssl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Before I installed py25-socket-ssl, I would get the error:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  File "/usr/local/google_appengine/google/appengine/tools/appcfg.py", line 334, in _GetOpener&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    opener.add_handler(urllib2.HTTPSHandler())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;AttributeError: 'module' object has no attribute 'HTTPSHandler'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hope this helps someone else out there.&lt;br /&gt;&lt;br /&gt;Now to actually see if this has been worth all the hassle. ;-)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-3893788232908334980?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/3893788232908334980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=3893788232908334980' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/3893788232908334980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/3893788232908334980'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2008/05/google-app-engine-finally-working-under.html' title='Google App Engine Finally Working under MacPorts'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-6465032201027905221</id><published>2008-01-24T09:42:00.000-08:00</published><updated>2008-01-24T09:45:03.631-08:00</updated><title type='text'>Happy Birthday, Mac!</title><content type='html'>I think one of the reasons we get along so well is that &lt;a href="http://www.wired.com/science/discoveries/news/2008/01/dayintech_0124"&gt;we're both Aquarians&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-6465032201027905221?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/6465032201027905221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=6465032201027905221' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/6465032201027905221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/6465032201027905221'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2008/01/happy-birthday-mac.html' title='Happy Birthday, Mac!'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-8628020602205391898</id><published>2007-10-16T22:09:00.000-07:00</published><updated>2007-10-16T22:29:17.321-07:00</updated><title type='text'>RESTful route changes in Rails 1.2.4+</title><content type='html'>Imagine my surprise when, after updating to Rails 1.2.5 on a new project, all my RESTful urls and paths changed from using the semi-colon (";") character to designate the controller actions and went back to using the forward-slash ("/") character as used for non-RESTful routes.&lt;br /&gt;&lt;br /&gt;At first I thought it was a bug or something I did wrong, but I guess I need to read &lt;a href="http://weblog.rubyonrails.org/2007/10/5/rails-1-2-4-maintenance-release"&gt;those change notices&lt;/a&gt; a little more closely. If you read the comments, you'll see a lively hullabaloo on why ";" might not have been the best idea to start with. Opinionated and perhaps more semantically clear, but not exactly in accordance with other libraries or the RFCs.&lt;br /&gt;&lt;br /&gt;Still I was just getting used to ";" and still think "/" is a bit semantically overloaded.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-8628020602205391898?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/8628020602205391898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=8628020602205391898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8628020602205391898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8628020602205391898'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/10/restful-route-changes-in-rails-124.html' title='RESTful route changes in Rails 1.2.4+'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-5631382905840729834</id><published>2007-09-28T14:54:00.000-07:00</published><updated>2007-09-28T15:02:41.922-07:00</updated><title type='text'>Eureka! Picked Up For 3rd Season</title><content type='html'>Congratulations to my brother Andrew as the &lt;a href="http://www.zap2it.com/tv/news/zap-scifiordersthirdeurekaseason,0,3079662.story?track=rss"&gt;SciFi channel opts for another season of Eureka&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you've missed any of the 2nd season, you can catch them &lt;a href="http://www.scifi.com/eureka/video/index.php"&gt;online&lt;/a&gt; or via &lt;a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewTVSeason?id=259425629&amp;amp;s=143441"&gt;iTunes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-5631382905840729834?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/5631382905840729834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=5631382905840729834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5631382905840729834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5631382905840729834'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/09/eureka-picked-up-for-3rd-season.html' title='Eureka! Picked Up For 3rd Season'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-4755769364466647060</id><published>2007-09-09T11:45:00.000-07:00</published><updated>2007-09-09T12:03:19.509-07:00</updated><title type='text'>Learning R[e]Spec[t]</title><content type='html'>&lt;p&gt;I was really impressed by &lt;a rel="nofollow" href="http://rspec.rubyforge.org/"&gt;RSpec&lt;/a&gt; when I first encountered it in its infancy. &lt;a rel="nofollow" href="http://daveastels.com/"&gt;Dave Astels&lt;/a&gt; gave a presentation at &lt;a rel="nofollow" href="http://canadaonrails.com/"&gt;Canada On Rails&lt;/a&gt; last year but the &lt;span class="caps"&gt;API&lt;/span&gt; was changing so much that I decided to wait til 1.0.&lt;/p&gt;&lt;p&gt;I’ve just finished up the first &lt;a rel="nofollow" href="http://peepcode.com/products/rspec-mocks-and-models"&gt;Peepcode screencast&lt;/a&gt; and am really jazzed to dig deeper and use it on my next Rails project.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-4755769364466647060?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/4755769364466647060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=4755769364466647060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/4755769364466647060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/4755769364466647060'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/09/learning-rspect.html' title='Learning R[e]Spec[t]'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-4814047190705683174</id><published>2007-09-09T11:06:00.001-07:00</published><updated>2007-09-09T11:06:37.250-07:00</updated><title type='text'>24 miles a week</title><content type='html'>Been running 6 miles every other day. I’m slow as hell, 10-12 min miles, but given the flat feet, extra weight, and high school and college sports injuries to my hamstring and knees, I’m just happy that everything stays together (knock wood).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-4814047190705683174?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/4814047190705683174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=4814047190705683174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/4814047190705683174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/4814047190705683174'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/09/24-miles-week.html' title='24 miles a week'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-8401048414127666201</id><published>2007-06-03T22:16:00.000-07:00</published><updated>2007-06-15T19:30:29.381-07:00</updated><title type='text'>Taking out Bin Laden and Killing Innocents</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qbwc0xFFYS0/RmOluEpzKmI/AAAAAAAAABM/FVPL7niUvwQ/s1600-h/taking_out_bin_laden_and_killing_innocents.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qbwc0xFFYS0/RmOluEpzKmI/AAAAAAAAABM/FVPL7niUvwQ/s400/taking_out_bin_laden_and_killing_innocents.png" alt="" id="BLOGGER_PHOTO_ID_5072079816290937442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Unbelievable. When Democratic candidates for the office of President of the United States for the election of 2008 were asked at &lt;a href="http://www.cnn.com/2007/POLITICS/06/03/nh.debate.main/index.html"&gt;tonight's debate in New Hampshire&lt;/a&gt;, "If you were president of the United States, and the intelligence community said to you, 'We know where Osama bin Laden is, he's in Pakistan, we've got the specific target, but he's only going to be there for 20 minutes, you've got to give the order, yes or no to take him out with a Hellfire missile but it's going to cost.. it's going to kill some innocent civilians at the same time,' what would be your decision?"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kucinich.us/"&gt;&lt;span style="font-weight: bold;"&gt;Kucinich&lt;/span&gt;&lt;/a&gt; was the &lt;span style="font-weight: bold;"&gt;only&lt;/span&gt; candidate who had the moral clarity to &lt;span style="font-weight: bold;"&gt;say&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; he wouldn't do it&lt;/span&gt;. He said that Osama should be tried like any international criminal. He said that an America which has a strong stand morally in the world who stands for peace is a strong country, and he doesn't stand for assassination politics and when you do that you bring the assassination of our own leaders into play.&lt;br /&gt;&lt;br /&gt;Obama said that "Osama bin Laden has declared war on us... and under existing law, including  international law... when you've got a military target like bin Laden, you take him out..."&lt;br /&gt;&lt;br /&gt;First of all Obama is wrong. International law does not give you the right to assassinate a military leader (even assuming we can even call bin Laden such a thing, which we can't, since he is an international criminal and not a government representative who can actually declare war against a country), if you are attacking him on another country's soil with which you are not at war or is not occupied by an enemy force and you knowingly are going to kill innocent civilians.&lt;br /&gt;&lt;br /&gt;Does a police officer shoot through a child to kill a bank robber holding him hostage? Does a SWAT agent blow up the bank to prevent the criminal from robbing another bank in the future?&lt;br /&gt;&lt;br /&gt;How is such an act any different than a bomber killing innocents in a coffee shop to kill a government or military leader they are opposed to?&lt;br /&gt;&lt;br /&gt;Answer: there is no difference.&lt;br /&gt;&lt;br /&gt;It's absurd. What have we become? These politicians just like Bush and the Republicans are pandering to Americans' base desire for revenge. They are pandering to the blood lust of the masses without thought to the greater implications of international diplomacy and the rule of law.&lt;br /&gt;&lt;br /&gt;And even if you look at it pragmatically, taking ethical considerations out of the picture, what would be the outcome of killing bin Laden in such a scenario? Huge international outcry, further erosion of our relationships with our allies and further degradation of our reputation across the world. Isn't it bad enough that we've already caused, directly or indirectly, the deaths of tens of thousands of innocents in Iraq?&lt;br /&gt;&lt;br /&gt;And like Kucinich implies, if we cannot lead by example, by the very beliefs we ascribe to, then the world will turn its back on us for good. We would only be adding more evidence to back the terrorists' claims that we are an evil society.&lt;br /&gt;&lt;br /&gt;And do we truly think that the death of bin Laden by such an act would lead to &lt;span style="font-style: italic; font-weight: bold;"&gt;less&lt;/span&gt; terror? It would be escalation. In fact, if bin Laden were to die tomorrow from choking on a chicken bone, someone else just as nasty and capable would replace him - just like in any mafioso cadre.&lt;br /&gt;&lt;br /&gt;Please, don't be naive, people. Bin Laden is a mastermind, no doubt about it, but killing him, just like killing Saddam, is not going to solve America's problems in the Middle East, end our dependence on their oil and support for the oppressive regimes - drug lords in royal clothing - who supply us while denying their people of adequate health and education. Nor will it stop the terror and bloodshed that is ravaging the region. Such an act in this context would only make a great martyr of him and help to recruit even more young disaffected Islamic youth to his cause. And in the meantime, we will have become no better than our enemy: killing innocents for the sake of a short term political goal.&lt;br /&gt;&lt;br /&gt;This hydra has more than one head. By cutting off one, you are not destroying the beast. And if you lose your soul and honor doing so, what have you really gained?&lt;br /&gt;&lt;br /&gt;If we are truly a country that stands for freedom and peace and yet continue to justify short term gains with immoral means, then we have lost everything our founders believed in and what the soldiers who've given their lives for this nation from the Revolution to the present have died for. We will have become no better than those international criminals who flew the planes into the towers and the Pentagon on 9/11 where more than 3,000 innocent souls lost their lives.&lt;br /&gt;&lt;br /&gt;Are we a nation of freedom and peace loving people willing to stand by our beliefs or simply terrorists who will stoop to any level to achieve our aims? It's time to decide.&lt;br /&gt;&lt;br /&gt;It's time to, as a people, really address the issues that have led up to this state of affairs and not blindly turn to simple "solutions." That's how we've gotten to where we are today. By letting our leaders prey upon our emotions rather than understand the history and foreign and economic policies that have led to the hatred and despair that drives a person to strap a bomb to their chest and kill themselves and innocents in confusion, mindless hate, and desperation.&lt;br /&gt;&lt;br /&gt;The best way to defeat your enemy is not to become your enemy, but to understand him.&lt;br /&gt;&lt;br /&gt;Sun Tzu said, "If you know neither the enemy nor yourself, you will succumb in every battle."&lt;br /&gt;&lt;br /&gt;Sadly, we not only do not understand our enemy, but we've forgotten ourselves as well.&lt;br /&gt;&lt;br /&gt;If you &lt;span style="font-style: italic;"&gt;truly&lt;/span&gt; want to end this madness then:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Junk your SUV and buy an electric, hybrid, or biofuel vehicle.&lt;/li&gt;&lt;li&gt;Vote for campaign finance reforms that cap spending on campaigns. Better yet, public finance for campaigns that provides equal access to the television and airwaves.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hold your elected representatives accountable for their votes and where their money is coming from. Follow the issues and pick up a telephone or send an email every now and then.&lt;/li&gt;&lt;li&gt;Teach your children not to fear and hate and let them teach you the same.&lt;/li&gt;&lt;li&gt;Read some history about your country and the rest of the world. Read about the foreign policy of this country in the 20th century.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Read news from alternative sources other than CNN, Fox News, and the mainstream sources. Find out what the world is thinking and don't let mass media tell you what to think.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Stop watching so much damn television and stop buying crap you don't need. Instead put your money into education and causes that you believe in rather than buying that 70" plasma television which is only going to steal more of your mind and health away from you.&lt;/li&gt;&lt;li&gt;Believe that this country could become great again, that creating a great society that sets an example for the rest of the world is the way to win the hearts and minds of the peoples of the world. That building hospitals, roads, and schools is the path to peace and building high tech ordinance just simply further lines the pockets of the rich of this country, wastes precious human life and creates more enemies that will kill your children and their children.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Read the Constitution, the Declaration of Independence, Common Sense by Thomas Paine, Lincoln's speeches and letters, Ben Franklin, Jefferson, Madison, Aristotle, Plato, Montaigne, Locke, Spinoza. For starters. Come on. You're on this planet for how long? Do you really want to waste that time watching reruns?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Vote for people who stand for their beliefs, not people who tell you what they think you want to hear.&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/12558127-8401048414127666201?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/8401048414127666201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=8401048414127666201' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8401048414127666201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/8401048414127666201'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/06/taking-out-bin-laden-and-killing.html' title='Taking out Bin Laden and Killing Innocents'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qbwc0xFFYS0/RmOluEpzKmI/AAAAAAAAABM/FVPL7niUvwQ/s72-c/taking_out_bin_laden_and_killing_innocents.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-5204440219865267371</id><published>2007-05-31T09:26:00.000-07:00</published><updated>2007-05-31T16:19:00.955-07:00</updated><title type='text'>Google Developer Day across the World</title><content type='html'>I was tempted to get up in the wee hours to see the &lt;a href="http://code.google.com/events/developerday/webcast-schedule.html"&gt;first live webcasts&lt;/a&gt; of &lt;a href="http://code.google.com/events/developerday/mv-home.html"&gt;Google Developer Day 2007&lt;/a&gt;  from London. But my brain's desperate need for delta waves overrode its thirst for beta.&lt;br /&gt;&lt;br /&gt;Fortunately &lt;a href="http://youtube.com/results?search_query=google+developer+day&amp;search=Search"&gt;Google is posting them to YouTube&lt;/a&gt; and I'm already seeing &lt;a href="http://youtube.com/watch?v=cQyha30nm6k"&gt;one from Sydney on Ajax&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I will probably try to catch a few of the live ones from California. There's twenty five sessions on five different tracks. But there's one on Python design patterns and a few on geospatial that I'm particularly interested in.&lt;br /&gt;&lt;br /&gt;There's something about a live webcast that makes it more fun. It's like watching a live concert or television broadcast; you know your brain is processing the same information at the exact same moment as millions of others on the planet.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[UPDATE]&lt;br /&gt;&lt;br /&gt;Notes&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Watching the &lt;span style="font-weight: bold;"&gt;keynote&lt;/span&gt; now.&lt;br /&gt;&lt;br /&gt;There will be over 160 sessions around the world! All free with free food. Hopefully they will all be posted to YouTube. [Hopefully they will all be posted to YouTube.]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Google Mashup Editor&lt;/span&gt; lets you build mashups via an online tool in as little as 3 lines of code and serve your mashup via other Google services like Google Desktop.&lt;br /&gt;&lt;br /&gt;Google has now become the largest network. Over .5 billion visitors (per day, month?).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Google gadgets &lt;/span&gt;are very popular and are generating huge amounts of traffic for their authors (in the millions of pages views per month for some). Example is Expedia Fare Calendar.&lt;br /&gt;&lt;br /&gt;Can drop them in Google Pages, Desktop, and hook them into your site and it's served by Google. Pundits talking about "the Google Gadget economy."&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;"Maplets&lt;/span&gt; bring Gadgets to Maps."&lt;br /&gt;Orbitz has a gadget that shows hotel room availability on Google maps.&lt;br /&gt;&lt;br /&gt;The power comes from building "mashups of mashups" from disparate services to combine useful data like mashing in weather data, restaurants nearby, etc.&lt;br /&gt;&lt;br /&gt;Tools to build the world's next generation of web applications.&lt;br /&gt;&lt;br /&gt;Google Web Toolkit lets you code in Java and compiles it to JavaScript and HTML for deployment. [There needs to be a Ruby and Python version. Hmm...]&lt;br /&gt;"Vibrant community around it."&lt;br /&gt;&lt;br /&gt;Limits of Ajax: For one you have to be connected to the net.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Gears&lt;/span&gt; lets you take your web apps offline [similar to Joyent's Slingshot or Dojo's offline features?]&lt;br /&gt;&lt;br /&gt;Works on Firefox, IE, Safari on Mac, Windows, and Linux.&lt;br /&gt;&lt;br /&gt;Adobe using Gears with Flex apps and Apollo to install to your desktop. Works on Windows, Mac, and Linux. Drag and drop data from native application from Apollo to desktop. Uses Sqlite for local datasource.&lt;br /&gt;&lt;br /&gt;Everything will be linked to from code.google.com.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sergei Brin&lt;/span&gt; speaking now.&lt;br /&gt;AI hasn't worked. "You don't have to eliminate the person. You can create the person."&lt;br /&gt;&lt;br /&gt;[Uh oh, here comes the evil part. Skynet is coming!]&lt;br /&gt;&lt;br /&gt;First offspring from online dating is about 12 years old and they are creating maplets right now. So the internet is improving itself already.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Google Gears session&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Are offline apps necessary? Aren't we always connected now?&lt;br /&gt;&lt;br /&gt;But... it's not always reliable even when you can be connected so it's important to have your data available offline. And you have to pay for net access in a lot of cases. Can take 5 minutes or more to hook up.&lt;br /&gt;&lt;br /&gt;You are offline more than you think you are, especially if you are a laptop user.&lt;br /&gt;&lt;br /&gt;Performance of offline is better. No network roundtrip latency. Takes more time than data from the desktop.&lt;br /&gt;&lt;br /&gt;Early release of Google Gears.&lt;br /&gt;&lt;br /&gt;In a perfect world...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One application, one URL&lt;/li&gt;&lt;li&gt;Seamless transitions between online and offline&lt;/li&gt;&lt;li&gt;Ability to use local data, even when online&lt;/li&gt;&lt;li&gt;Available to all users on all platforms&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The user shouldn't have to do syncing. The application should make this transparent.&lt;br /&gt;&lt;br /&gt;[Seems like we're just talking about offline as a cache. You could use local data caching to improve performance of online apps too. For example, first 2000 blog posts show up in Google Reader are cached on your desktop. You want more, it connects to the web.]&lt;br /&gt;&lt;br /&gt;Ajax has been missing offline capability.&lt;br /&gt;&lt;br /&gt;An incremental approach&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do for offline what XMLHttpRequest did for web apps&lt;/li&gt;&lt;li&gt;Browser plugin&lt;/li&gt;&lt;li&gt;IE, Firefox (Wind, Mac, Linux), and Safari (almost!)&lt;/li&gt;&lt;li&gt;Open source: http://code.google.com/p/google-gears (New BSD)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What do Gears apps look like?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Read and write using local store&lt;/li&gt;&lt;li&gt;Changes are queued for later synchronization&lt;/li&gt;&lt;li&gt;Server communication is completely ?...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Tools to build but not to guide you in synchronization and conflict resolution yet.&lt;br /&gt;&lt;br /&gt;With Gears most operations stay local and synchronization happens in background.&lt;br /&gt;&lt;br /&gt;APIs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Localserver, to access the app offline&lt;/li&gt;&lt;li&gt;Database, to store large amounts of structure data&lt;/li&gt;&lt;li&gt;WorkerPool, to perform long operations&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;ManagedResourceStore: Capture entire applications&lt;br /&gt;&lt;ul&gt;&lt;li&gt;List application resources in a separate manifest&lt;/li&gt;&lt;li&gt;Gears captures and updates the application resources atomically.&lt;/li&gt;&lt;li&gt;Gears automatically updates application resources on each view (within reason).&lt;/li&gt;&lt;li&gt;Always run locally.&lt;/li&gt;&lt;li&gt;Supports multiple users per application.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Uses Sqlite for local store. Parameterized SQL for protection against SQL injection attacks.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/google-gears/"&gt;Open source&lt;/a&gt;. Looks like most of the code is C.&lt;br /&gt;&lt;br /&gt;Full text searching in Sqlite using Google search algorithms. Joint project with Sqlite.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Google and the Geoweb&lt;/span&gt;&lt;br /&gt;Bent Hagemark, Lior Ron, Michael Jones&lt;br /&gt;&lt;br /&gt;Michael&lt;br /&gt;&lt;br /&gt;The Google Geo group wants a Star Trek tricoder so you can feel like a local when you're not.&lt;br /&gt;&lt;br /&gt;Geographically organize the world's info and make it universally accessible and useful.&lt;br /&gt;&lt;br /&gt;Odyssey and Iliad mapped on Google Earth.&lt;br /&gt;&lt;br /&gt;Some info belongs on a map, some on a page, some either way.&lt;br /&gt;&lt;br /&gt;People are building maplets while they're viewing the Google Developer Day session.&lt;br /&gt;&lt;br /&gt;Connecting with users. Local data with buildings in 3d. In Zurick can see subway and train lines. Real time traffic. U.S. Senator made a geoblog.&lt;br /&gt;&lt;br /&gt;Sketchup for 3d geometry.&lt;br /&gt;&lt;br /&gt;Be the agent of change. Surf the wave and win.&lt;br /&gt;&lt;br /&gt;Alan Kay. "What's the easiest way to invent the future? Invent it!"&lt;br /&gt;&lt;br /&gt;Bent Hagermark with KML overview.&lt;br /&gt;&lt;br /&gt;[Uh oh. XML...]&lt;br /&gt;&lt;br /&gt;Placemark give you:&lt;br /&gt;&lt;br /&gt;3d/2d view&lt;br /&gt;list view&lt;br /&gt;balloon&lt;br /&gt;&lt;br /&gt;Paste KML into an app and it'll actually do something.&lt;br /&gt;&lt;br /&gt;Placemark:LookAt&lt;br /&gt;lat, long, range, tilt, icons, rollover styles, balloons, points, lines, shapes, 3d shapes, styling, 3d textured models, ground overlay, screen overlay, folder for grouping elements and hierarchies, time with timestamps and timespans, NetworkLink,&lt;br /&gt;&lt;br /&gt;NetworkLink&lt;br /&gt;Divide your docs into many docs. Like and include in C.&lt;br /&gt;&lt;br /&gt;view-based refresh. After motion is stopped can call another script/resource, can do time-based refreshes, refresh after expiration.&lt;br /&gt;&lt;br /&gt;Region-based allows to trigger a fetch of a link when a user moves into a particular region.&lt;br /&gt;&lt;br /&gt;http://code.google.com/apis/kml&lt;br /&gt;&lt;br /&gt;KML is:&lt;br /&gt;geographic display language&lt;br /&gt;hosted XML files&lt;br /&gt;a standard&lt;br /&gt;&lt;br /&gt;[Boy, there needs to be a YAML version, KAML?]&lt;br /&gt;&lt;br /&gt;Amazing developer examples demo with Google Earth flying you around from point to point in 3d. It's like you're flying from point to point like a Superman. All controlled via KML definitions.&lt;br /&gt;&lt;br /&gt;Design interactive and motion-based presentations.&lt;br /&gt;&lt;br /&gt;All Google Earth stuff also works on maps.&lt;br /&gt;&lt;br /&gt;Images from devastation of Kansas town destroyed by tornado.&lt;br /&gt;&lt;br /&gt;Can host the KML files anywhere and have the same functionality.&lt;br /&gt;&lt;br /&gt;3 levels of imagery can be viewed.&lt;br /&gt;&lt;br /&gt;User can fly around and view your data with timespan control for things like viewing a time window of a person walking with a GPS device.&lt;br /&gt;&lt;br /&gt;[Can't wait til some network games take advantage of Google Earth. This has to be the next step toward the holodeck. :)]&lt;br /&gt;&lt;br /&gt;Time instants for time span data. If your data is imagery, you use a timespan and sweep with timestamps. [Did I get that right?]&lt;br /&gt;&lt;br /&gt;Can pop up balloons that are very detailed like a web page. You can keep the balloon up while flying from one location to another. User can navigate dataset without using the side panel, zooming from one point to another.&lt;br /&gt;&lt;br /&gt;[This is amazing to watch!!!]&lt;br /&gt;&lt;br /&gt;New beta spec for photo overlays. You can fly away from the photo and see that they are in space.&lt;br /&gt;&lt;br /&gt;Leor on Geosearch:&lt;br /&gt;&lt;br /&gt;Angelina Jolie has tattooed the long/lat of her adopted children on her arm.&lt;br /&gt;&lt;br /&gt;Maps and balloons for content that has lat/long.&lt;br /&gt;&lt;br /&gt;Can see user created content from geosearch.&lt;br /&gt;&lt;br /&gt;Can link to other results and resources from the geosearch results.&lt;br /&gt;&lt;br /&gt;Now searching for Osama bin Laden. [Too bad Bush doesn't know about this. :)]&lt;br /&gt;&lt;br /&gt;Now searching for all windsurfing locations with aggregated results from 5 different web sites.&lt;br /&gt;&lt;br /&gt;Now searching for dog parks in the Bay area and near his house.&lt;br /&gt;&lt;br /&gt;Users are helping to map the world.&lt;br /&gt;&lt;br /&gt;Use for trip planning. Now searching for tango places in Buenos Aires.&lt;br /&gt;&lt;br /&gt;Can also do business transactions, e.g. can book a place from a map balloon directly.&lt;br /&gt;&lt;br /&gt;Three steps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use KML or GeoRSS instead of JavaScript so your data can be indexed by Google.&lt;/li&gt;&lt;li&gt;Put it on a public server.&lt;/li&gt;&lt;li&gt;Inform them in a sitemap so it can be indexed properly.&lt;/li&gt;&lt;/ul&gt;[This is frikkin' awesome stuff!! Time to write a KML/GeoRSS plugin for Rails. ;-)]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mashups with the Google Mashup Editor &lt;/span&gt;&lt;br /&gt;Rich Burdon, Paul McDonald&lt;br /&gt;&lt;br /&gt;Rich:&lt;br /&gt;&lt;br /&gt;'Hello, world' mashup showing the world in a map.&lt;br /&gt;&lt;br /&gt;Mashups is about feeds.&lt;br /&gt;Pasting url of feed into the editor.&lt;br /&gt;&lt;br /&gt;Feed browser hooks into the Reader framework. Pulls in a feed URL that is a GeoRSS feed.&lt;br /&gt;Creates a template (autocompletion!). Table row with repeat attribute will repeat elements from feed in table rows.&lt;br /&gt;&lt;br /&gt;[Can't really see the code. Someone tell him to increase his browser view!!!]&lt;br /&gt;&lt;br /&gt;Images pulled in now.&lt;br /&gt;Extended map to use the feed and geo points. Setup events so the map can respond to those events from the list.&lt;br /&gt;&lt;br /&gt;Now map has images on the right that you can click to navigate the map.&lt;br /&gt;&lt;br /&gt;List tag with variable substitution syntax to reference app's own custom data store. (Setting up a dataset.) Goes back to add authentication for a login to secure the data.&lt;br /&gt;&lt;br /&gt;Uses atom standard and read-write data store.&lt;br /&gt;&lt;br /&gt;Now he shows a read/write datagrid for changing the data online.&lt;br /&gt;&lt;br /&gt;[Finally some one asked him to increase the size of the browser view!]&lt;br /&gt;&lt;br /&gt;Simple relations supported in the data store.&lt;br /&gt;&lt;br /&gt;Can use different templates and controls. Schema and query work is done for you.&lt;br /&gt;&lt;br /&gt;Google Base integration, pulling in GData feed. Geoencoded info and images pulled in.&lt;br /&gt;Search tag with autocomplete with parameters, binds data from Google Base.&lt;br /&gt;List tag with variable substitution hooked to id of search control.&lt;br /&gt;Builds a list from the data and binds map to results of the query.&lt;br /&gt;Hits Test tab to load the mashup in the sandbox.&lt;br /&gt;&lt;br /&gt;[Wow, it occurs to me. How does one write test for all this stuff?]&lt;br /&gt;&lt;br /&gt;Now he's deploying the application.&lt;br /&gt;&lt;br /&gt;Can now deploy mashup as a Google Gadget to add to his Google Desktop.&lt;br /&gt;&lt;br /&gt;Paul:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Simple online interfaces&lt;/li&gt;&lt;li&gt;Pluggable extensible services&lt;/li&gt;&lt;li&gt;Standards based approach&lt;/li&gt;&lt;/ul&gt;Still experimental and need some help.&lt;br /&gt;A lot of people are &lt;a href="http://code.google.com/support/mashupeditorsignup"&gt;signing up&lt;/a&gt; [myself included] but right now it's a limited beta.&lt;br /&gt;&lt;br /&gt;[Wow, the room looked kind of empty as they closed out so I wonder if another session was more popular.]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Python Design Patterns&lt;/span&gt;&lt;br /&gt;Alex Martelli&lt;br /&gt;&lt;br /&gt;Forces controted with  not under your control.&lt;br /&gt;&lt;br /&gt;Facade interposes a simpler object/class exposing a controlled subset of functiionality.&lt;br /&gt;&lt;br /&gt;Patterns not created but rather discovered from "Known Uses." (KU)&lt;br /&gt;&lt;br /&gt;Some Facade KUs&lt;br /&gt;* dbhash&lt;br /&gt;* os.path: split + indexing; isdir; os.stat&lt;br /&gt;&lt;br /&gt;A structural DP like Adapter.&lt;br /&gt;Sometimes they merge.&lt;br /&gt;&lt;br /&gt;No good books on Python design patterns.&lt;br /&gt;&lt;br /&gt;Creational&lt;br /&gt;Structural&lt;br /&gt;Behavioral&lt;br /&gt;Also can have object or class-level.&lt;br /&gt;&lt;br /&gt;Program to an interface, not an implementation.&lt;br /&gt;Python's duck typing.&lt;br /&gt;&lt;br /&gt;Favor object composition over class inheritance.&lt;br /&gt;In Python, hold, or wrap&lt;br /&gt;Inherit only with it's really convenient.&lt;br /&gt;&lt;br /&gt;Hold: strong coupling on the wrong axis. Revealing to world as it's built.&lt;br /&gt;&lt;br /&gt;Wrap: explicit, automatic, gets coupling right (Law of Demeter: have only one . in your expression.)&lt;br /&gt;&lt;br /&gt;Creational pattern not common in Python because factories are built into the language.&lt;br /&gt;&lt;br /&gt;Only one instance to exist. Use a module. (works 90% of time).&lt;br /&gt;Can't subclass and not special methods (can't override method)&lt;br /&gt;Make 1 instance (no enforcement) and trust that we're all adults.&lt;br /&gt;&lt;br /&gt;Singleton ("Highlander")&lt;br /&gt;There can be only one.&lt;br /&gt;Subclassing is a problem.&lt;br /&gt;&lt;br /&gt;Monostate ("Borg") Guido dislikes it.&lt;br /&gt;We don't care how many instances as long as they share state.&lt;br /&gt;&lt;br /&gt;Subclassing is not a problem.&lt;br /&gt;&lt;br /&gt;Python lets you override data not just methods.&lt;br /&gt;&lt;br /&gt;Dependency injection. Don't create anything at all in the class. Creation is done from outside and passed into the object/class. Doesn't work write if you need to do mulitple creations. Factory fixes that.&lt;br /&gt;&lt;br /&gt;[Here I gave up trying to keep up with Alex. But I found his &lt;a href="http://www.aleax.it/goo_pydp.pdf"&gt;slides&lt;/a&gt; and some other &lt;a href="http://www.aleax.it/python_mat_en.html"&gt;presentations on design patterns&lt;/a&gt; online.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-5204440219865267371?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/5204440219865267371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=5204440219865267371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5204440219865267371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5204440219865267371'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/05/google-developer-day-across-world.html' title='Google Developer Day across the World'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-7598403164852240655</id><published>2007-05-29T17:12:00.000-07:00</published><updated>2007-06-14T19:13:18.279-07:00</updated><title type='text'>"ReCAPTCHA" your forms and email while helping the world to read</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qbwc0xFFYS0/RlzrAAm1U-I/AAAAAAAAAA0/uY5Ju70QBwE/s1600-h/recaptcha_widget.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_qbwc0xFFYS0/RlzrAAm1U-I/AAAAAAAAAA0/uY5Ju70QBwE/s320/recaptcha_widget.png" alt="" id="BLOGGER_PHOTO_ID_5070185665907741666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The computer scientists from the &lt;a href="http://www.cs.cmu.edu/"&gt;School of Computer Science&lt;/a&gt; at &lt;a href="http://www.cmu.edu/"&gt;Carnegie Mellon University&lt;/a&gt;, with support from &lt;a style="font-weight: bold;" href="http://www.intel.com/"&gt;Intel&lt;/a&gt;, &lt;a href="http://www.novell.com/"&gt;Novell&lt;/a&gt; and &lt;a href="http://www.macfound.org/"&gt;The MacArthur Foundation&lt;/a&gt;,  have put together a really nifty service that kills two birds with one click of the submit button.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://recaptcha.net/"&gt;reCAPTCHA&lt;/a&gt; is a free web service that anyone can use to prevent spammers and bots from posting to your web form or sending you email by scraping your mailto links. They do a really &lt;a href="http://recaptcha.net/learnmore.html"&gt;nice job of explaining their service&lt;/a&gt; and the whole &lt;a href="http://recaptcha.net/captcha.html"&gt;subject of CAPTCHA&lt;/a&gt; in general but I'll try to sum it up.&lt;br /&gt;&lt;br /&gt;To submit a form or reveal an email link on a web page, you must enter two words presented to you as images that have been slightly obfuscated so that only a human brain is likely to make them out. One of the words is known by the system and if you enter it correctly, the submission is considered to be by made by a human and not some spambot. The other word is not known by the system but if you entered the the known word correctly, the system will make the reasonable assumption that the other word is also likely correct - that is, was entered by someone with a brain - and it will compare your entry with the other potentially correct entries for that word to determine what that unknown word really is.&lt;br /&gt;&lt;br /&gt;OK, well, so what? Well, those words are very important. They come from texts that have been scanned in with &lt;a href="http://en.wikipedia.org/wiki/Optical_character_recognition"&gt;OCR (optical character recognition)&lt;/a&gt; software but were not fully recognized and matched to their text equivalents. So by using the reCAPTCHA service, you are helping to digitize books from the &lt;a href="http://www.archive.org/"&gt;Internet Archive&lt;/a&gt;. With each accurate challenge response input by a human - or very lucky monkey - a hard-to-decipher piece of text from a book gets that much closer to being translated.&lt;br /&gt;&lt;br /&gt;Simple but clever solution, eh? &lt;a style="font-weight: bold;" href="http://en.wikipedia.org/wiki/Turing_test"&gt;Turing&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; would be proud&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It's sort of like &lt;a href="http://setiathome.berkeley.edu/"&gt;SETI@home&lt;/a&gt; except instead of sharing processors to &lt;a href="http://www.seti.org/"&gt;hunt for alien messages from space&lt;/a&gt;, they're farming human neurons to decode messages - in the form of books - from our own earthbound species. It's a real-time human &lt;a href="http://en.wikipedia.org/wiki/Neural_network"&gt;neural net&lt;/a&gt;, a collectively conscious form of web-based &lt;a href="http://en.wikipedia.org/wiki/Wetware"&gt;wetware&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Some important things to note about how this service is different than many others:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The widget offers a reload button so if you can't identify the two words you can try another two.&lt;/li&gt;&lt;li&gt;The widget provides audio CAPTCHA so it's accessible to the visually impaired. A series of numbers are read out with a slight fuzzing noise in the background (a aural equivalent to the visual obfuscation in the image version) and you enter them instead of the words.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The same widget GUI is available in a bonus feature, &lt;a href="http://mailhide.recaptcha.net/"&gt;reCAPTCHA Mailhide&lt;/a&gt;, that lets you hide your mailto links via a popup window linked to the obfuscated email address.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Most of the software on the backend is FOSS, heavy on the Python side.  But &lt;a href="http://recaptcha.net/resources.html"&gt;there are plugins and libraries&lt;/a&gt; for wiring up PHP, Python, Ruby, Rails, Perl and some of the more popular bulletin boards, blogging, and publishing tools out there like Wordpress, phpBB, and MoveableType to name just a few. I'm sure the list will grow.&lt;br /&gt;&lt;br /&gt;In fact, I wanted support in both &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt; and &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt; for controlling the CSS themes and tabindex in the widget per the &lt;span style="font-weight: bold;"&gt;"Look and Feel"&lt;/span&gt; section of &lt;a href="http://recaptcha.net/apidocs/captcha/"&gt;the API&lt;/a&gt;, so I just contributed a little code of my own to &lt;a href="http://ambethia.com/"&gt;Jason L. Perry&lt;/a&gt;'s most excellent &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://agilewebdevelopment.com/plugins/recaptcha"&gt;Rails plugin&lt;/a&gt; and &lt;a href="http://bmaurer.blogspot.com/"&gt;Ben Maurer&lt;/a&gt;'s handy &lt;a href="http://python.org/pypi/recaptcha-client"&gt;Python library&lt;/a&gt;. (I know the functionality is now in the Rails plugin and it will probably be available shortly in the Python version.)&lt;br /&gt;&lt;br /&gt;There is a &lt;a href="http://groups.google.com/group/recaptcha/"&gt;Google reCAPTCHA group&lt;/a&gt; for questions and support and you can download some of the &lt;a href="http://code.google.com/p/recaptcha/"&gt;plugin and library code with subversion from Google Code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Kudos to the folks at CMU for such a nice implementation and all the developer's who've been contributing plugins for it. &lt;/span&gt;&lt;span&gt;I'm going to recommend this solution to my clients as it's the best I've seen to date.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Please help spread the word about this great new service and contribute code to help support their effort.&lt;br /&gt;&lt;br /&gt;Death to spam!!!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[UPDATE]&lt;/span&gt;&lt;br /&gt;I've just checked in the same widget styling functionality to &lt;a href="http://loonsoft.com/"&gt;McClain Looney&lt;/a&gt;'s &lt;a href="http://loonsoft.com/recaptcha/"&gt;recaptcha Ruby gem&lt;/a&gt;. The nice thing about McClain's solution is that it can also be used outside of Rails. It also supports Mailhide nicely.&lt;br /&gt;&lt;br /&gt;(In the process McClain introduced me to &lt;a href="http://www.selenic.com/mercurial/"&gt;Mercurial, a light-weight, distributed scm built in Python&lt;/a&gt;. There's even a &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; &lt;a href="http://macromates.com/svn/Bundles/trunk/Bundles/Mercurial.tmbundle/"&gt;bundle for Mercurial&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;p.s. Here are the &lt;a href="http://blog.wired.com/monkeybites/2007/05/recaptcha_fight.html"&gt;Wired article&lt;/a&gt; and &lt;a href="http://bmaurer.blogspot.com/2007/05/recaptcha-new-way-to-fight-spam.html"&gt;Ben Maurer's blog post&lt;/a&gt; that first turned me on this.&lt;br /&gt;&lt;br /&gt;p.p.s. For you Django developers, here's a view code example of a contact form (with newforms) using Ben's library with my changes for CSS themes and tabindex.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;settings.py:&lt;br /&gt;...&lt;br /&gt;# you API keys here...&lt;br /&gt;RECAPTCHA_PUBLIC_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxx'&lt;br /&gt;RECAPTCHA_PRIVATE_KEY = 'yyyyyyyyyyyyyyyyyyyyyyyyyyy'&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;forms.py:&lt;br /&gt;&lt;br /&gt;from django import newforms as forms&lt;br /&gt;&lt;br /&gt;class ContactForm(forms.Form):&lt;br /&gt;subject = forms.CharField(max_length=100)&lt;br /&gt;message = forms.CharField()&lt;br /&gt;sender = forms.EmailField()&lt;br /&gt;cc_myself = forms.BooleanField(required=False)&lt;br /&gt;&lt;br /&gt;views.py:&lt;br /&gt;&lt;br /&gt;from recaptcha.client import captcha&lt;br /&gt;from citizencoder.blog.forms import ContactForm&lt;br /&gt;from citizencoder import settings&lt;br /&gt;&lt;br /&gt;def contact(request):&lt;br /&gt;captcha_error = ''&lt;br /&gt;captcha_html = captcha.displayhtml(settings.RECAPTCHA_PUBLIC_KEY,&lt;br /&gt;                                 True, theme='white', tabindex=5)&lt;br /&gt;if request.method == 'POST':&lt;br /&gt;  form = ContactForm(request.POST, auto_id=True)&lt;br /&gt;  captcha_response = captcha.submit(request.POST['recaptcha_challenge_field'],&lt;br /&gt;                                    request.POST['recaptcha_response_field'],&lt;br /&gt;                                    settings.RECAPTCHA_PRIVATE_KEY,&lt;br /&gt;                                    request.META['REMOTE_ADDR'])&lt;br /&gt;  if captcha_response.is_valid:&lt;br /&gt;      if form.is_valid():&lt;br /&gt;          # Form processing here...&lt;br /&gt;          return HttpResponseRedirect('/blog/thanks/')&lt;br /&gt;      else:&lt;br /&gt;          captcha_error = """&lt;br /&gt;Captcha was correct but you will need to reenter it&lt;br /&gt;because other form fields weren't correct.&lt;br /&gt;"""&lt;br /&gt;  else:&lt;br /&gt;      #captcha_error = captcha_response.error_code&lt;br /&gt;      # TODO: map captcha error_codes to different messages...&lt;br /&gt;      captcha_error = "Invalid captcha entry. Please try again."&lt;br /&gt;else:&lt;br /&gt;  form = ContactForm(auto_id=True)&lt;br /&gt;&lt;br /&gt;return render_to_response('blog/contact.html',&lt;br /&gt;                        {'form' : form,&lt;br /&gt;                         'captcha_html' : captcha_html,&lt;br /&gt;                         'captcha_error' : captcha_error })&lt;br /&gt;&lt;br /&gt;contact.html:&lt;br /&gt;&lt;br /&gt;{% extends "base.html" %}&lt;br /&gt;{% block title %} Contact Me {% endblock %}&lt;br /&gt;{% block content %}&lt;br /&gt;...&lt;br /&gt;&amp;lt;form method="post"&amp;gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;{{ form }}&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;{% if captcha_error %}&lt;br /&gt;&amp;lt;p&amp;gt;{{ captcha_error }}&amp;lt;/p&amp;gt;&lt;br /&gt;{% endif %}&lt;br /&gt;&amp;lt;p&amp;gt;{{ captcha_html }}&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="submit" /&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;{% endblock %}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-7598403164852240655?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/7598403164852240655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=7598403164852240655' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7598403164852240655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7598403164852240655'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/05/recaptcha-your-forms-and-email-while.html' title='&quot;ReCAPTCHA&quot; your forms and email while helping the world to read'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qbwc0xFFYS0/RlzrAAm1U-I/AAAAAAAAAA0/uY5Ju70QBwE/s72-c/recaptcha_widget.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-7360668343493225212</id><published>2007-05-26T22:17:00.000-07:00</published><updated>2007-05-26T22:31:19.804-07:00</updated><title type='text'>Eureka 2nd season coming in July</title><content type='html'>Got nothing to watch now that Lost and Heroes are over.&lt;br /&gt;&lt;br /&gt;Waiting for season two of my brother Andrew's TV series &lt;a href="http://scif.com/eureka/"&gt;Eureka&lt;/a&gt; which now comes up as &lt;a href="http://www.google.com/search?hl=en&amp;q=eureka"&gt;#2 on Google&lt;/a&gt; right after the &lt;a href="http://www.eureka.com/"&gt;vacuum cleaner company&lt;/a&gt; (no sucks jokes, pleeease).&lt;br /&gt;&lt;br /&gt;Hoping they punch it up with a bit more edginess this round.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-7360668343493225212?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/7360668343493225212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=7360668343493225212' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7360668343493225212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7360668343493225212'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/05/eureka-2nd-season-coming-in-july.html' title='Eureka 2nd season coming in July'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-7392231796345544252</id><published>2007-05-26T20:25:00.000-07:00</published><updated>2007-05-26T21:32:17.185-07:00</updated><title type='text'>Crime does pay! - but in a good way</title><content type='html'>&lt;a href="http://www.holovaty.com/"&gt;Adrian Holavaty&lt;/a&gt;, one of the creators of &lt;a href="http://www.djangoproject.org/"&gt;Django&lt;/a&gt; &lt;sup&gt;&lt;a href="#f1n"&gt;1&lt;/a&gt;&lt;/sup&gt; and the mind behind &lt;a href="http://www.chicagocrime.org/"&gt;ChicagoCrime.org&lt;/a&gt; and many wonderful creations at &lt;a href="http://www.lawrence.com/"&gt;Lawrence.com&lt;/a&gt; and the &lt;a href="http://www.washingpost.com/"&gt;Washington Post&lt;/a&gt;, was just awarded a grant from the &lt;a href="http://www.newschallenge.org/"&gt;Knight News Challenge&lt;/a&gt; to build some really cool, participatory, civic-minded sites - something this country really needs. Adrian's new startup, &lt;a href="http://www.everyblock.com/"&gt;EveryBlock&lt;/a&gt;, will be something to keep an eye on in the coming months.&lt;br /&gt;&lt;br /&gt;I've been following Adrian's work ever since I heard a phenomenal podcast by his former boss &lt;a href="http://www.itconversations.com/shows/detail550.html"&gt;Rob Curley about their work at Lawrence.com and World Online&lt;/a&gt;. It was like the &lt;a href="http://www.parc.com/"&gt;Xerox PARC &lt;/a&gt;of online journalism. These guys really did some wonderful stuff and innovated every day.&lt;br /&gt;&lt;br /&gt;As a freelance Web developer &lt;sup&gt;&lt;a href="#f2n"&gt;2&lt;/a&gt;&lt;/sup&gt; and as someone who majored in politics &lt;sup&gt;&lt;a href="#f3n"&gt;3&lt;/a&gt;&lt;/sup&gt; and came &lt;a href="http://en.wikipedia.org/wiki/Rowan_&amp;amp;_Martin%27s_Laugh-In"&gt;fickled-finger-of-fate&lt;/a&gt;-close to going back to school for a masters in journalism, I've been toying with some ideas of my own about how to use the Web to give this country and the neighborhoods back to the citizens who should truly own them and bring participatory democracy back to this nation.&lt;br /&gt;&lt;br /&gt;That's why another grant awarded by the Knight News Challenge to &lt;a href="http://www.medill.northwestern.edu/medill/admissions/programmers.html"&gt;Northwestern University for nine scholarships to developers interested in journalism&lt;/a&gt; is so very tempting to me - despite the chill factor of Chicago &lt;sup&gt;&lt;a href="#f4n"&gt;4&lt;/a&gt;&lt;/sup&gt;. There's still that nagging twinge of "the road not taken" that pinches the back of my noggin' every so often. And with the many recent failures of our media to challenge the powers-that-be and hold them accountable to the truth, the siren call to take the news back from the sophists and profiteers is getting that much louder.&lt;br /&gt;&lt;br /&gt;Delusions of grandeur? Maybe. But check in with Adrian in a year or two and you might be surprised. Oh, and the dude is only only 26.&lt;br /&gt;&lt;br /&gt;&lt;a name="f1n" style="color: #fff;"&gt;1&lt;/a&gt; - As someone who's currently working in &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;, I may be &lt;a href="http://en.wikipedia.org/wiki/List_of_people_burned_as_heretics"&gt;labeled a heretic&lt;/a&gt; by saying this but I think Django is really excellent project with a lot to teach Rails. In fact, these two projects could learn a lot from each other if there was less Ruby vs. Python machismo in both camps (yeah shut up already, you know who you are).&lt;br /&gt;&lt;a name="f2n" style="color: #fff;"&gt;2&lt;/a&gt; - Yes, I've left &lt;a href="http://www.gehealthcare.com/"&gt;GE Healthcare&lt;/a&gt; for those who haven't heard. Been so busy I haven't even gotten my own shingle up.&lt;br /&gt;&lt;a name="f3n" style="color: #fff;"&gt;3&lt;/a&gt; - &lt;a href="http://www.blogger.com/www.uci.edu"&gt;Irvine&lt;/a&gt; (go Anteaters!) and &lt;a href="http://www.indiana.edu/"&gt;Indiana&lt;/a&gt; (go Hoosiers!)&lt;br /&gt;&lt;a name="f4n" style="color: #fff;"&gt;4&lt;/a&gt; - I spent a couple of years of my youth living in the burbs outside Chicago and I have the frostbite scars to prove it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-7392231796345544252?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/7392231796345544252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=7392231796345544252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7392231796345544252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7392231796345544252'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/05/crime-does-pay-but-in-good-way.html' title='Crime does pay! - but in a good way'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-2233404251193403763</id><published>2007-04-24T10:49:00.000-07:00</published><updated>2007-04-24T11:39:17.882-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails ruby training screencasts'/><title type='text'>Peepcode is your very own Rails personal trainer</title><content type='html'>If you are developing with &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; and haven't tried Geoffrey Grosenbach's (&lt;a href="http://topfunky.com/"&gt;topfunky&lt;/a&gt;) &lt;a href="http://www.peepcode.com/"&gt;Peepcode screencasts&lt;/a&gt;, then you are missing out on the world's most affordable Rails training. &lt;br /&gt;&lt;br /&gt;At a mere 7 clams a pop (I went with the 10-pack subscription), you get over an hour of high quality, step-by-step, hands-on instruction in full size or iPod format. Each episode is chock-full of nifty tips, techniques, and practices that'll hone you into a stellar Rails developer. You can even post support questions on his &lt;a href="http://peepcode.com/pages/community"&gt;Google groups mailing list&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's like having your very own Rails personal trainer.  &lt;br /&gt;&lt;br /&gt;The pig in me wants to rush through all the screencasts at once in a marathon orgy of glorious geek-out, while the &lt;a href="http://poignantguide.net/ruby/chapter-3.html"&gt;cartoon fox&lt;/a&gt; in me wants to pace myself, slowly savoring each episode like a haiku running at 5 fps.&lt;br /&gt;&lt;br /&gt;Kudos to Geoffrey for this top-notch service. I've no doubt the knowledge gleaned from each of these will likely save my &lt;a href="http://chunkybacon.com/"&gt;chunky bacon&lt;/a&gt; many times over.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-2233404251193403763?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/2233404251193403763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=2233404251193403763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2233404251193403763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/2233404251193403763'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/04/peepcode-is-your-very-own-rails.html' title='Peepcode is your very own Rails personal trainer'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-7569017080452316583</id><published>2007-04-24T10:12:00.000-07:00</published><updated>2007-04-24T10:34:30.557-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby dsl metaprogramming'/><title type='text'>Metaprogramming and DSL Resources?</title><content type='html'>As a newcomer to Ruby and metaprogramming, I'm still looking for good resources on this and the art of creating DSLs. &lt;br /&gt;&lt;br /&gt;I'm picking up a little here and there by reading blog posts and &lt;a href="http://www.infoq.com/news/2007/04/article-adding-ruby-properties"&gt;articles like this one on InfoQ&lt;/a&gt;, as well as pouring over code from Rails and other Ruby projects, but it seems like there would be a market for a &lt;span style="font-weight:bold;"&gt;book&lt;/span&gt; written by someone who has done a lot in this area.&lt;br /&gt;&lt;br /&gt;p.s. Here's a modification of an implementation from the aforementioned article that supports passing in a lambda expression, a block, or both. I suspect there may be better ways to do some of this and would love to hear it. Regardless, I'm continually astounded by the power of mixins and the reflection capabilities built into Ruby. &lt;br /&gt;&lt;pre&gt;module Properties&lt;br /&gt;  &lt;br /&gt;  def self.extended(base) &lt;br /&gt;    base.class_eval do&lt;br /&gt;      def fire_event_for(sym, arg)&lt;br /&gt;        @listener[sym].each {|l| l.call(arg) }&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def property(sym, predicate=nil, &amp;block)&lt;br /&gt;    define_method(sym) do&lt;br /&gt;      instance_variable_get("@#{sym}")&lt;br /&gt;    end&lt;br /&gt;  &lt;br /&gt;    define_method("#{sym}=") do |arg|&lt;br /&gt;      if block_given? and predicate&lt;br /&gt;        return if !predicate.call(arg) and !block.call(arg) &lt;br /&gt;      elsif predicate&lt;br /&gt;        return if !predicate.call(arg)&lt;br /&gt;      elsif block_given?&lt;br /&gt;        return if !block.call(arg)&lt;br /&gt;      end&lt;br /&gt;      instance_variable_set("@#{sym}", arg)&lt;br /&gt;      fire_event_for(sym, arg)&lt;br /&gt;    end&lt;br /&gt;  &lt;br /&gt;    define_method("add_#{sym}_listener") do |x| &lt;br /&gt;      @listener ||= {}&lt;br /&gt;      @listener[sym] ||= []&lt;br /&gt;      @listener[sym] &lt;&lt; x&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    define_method("remove_#{sym}_listener") do |x| &lt;br /&gt;      @listener[sym].delete_at(x)&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def is?(test)&lt;br /&gt;    lambda {|val| test === val }&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def includes?(*test)&lt;br /&gt;    lambda {|val| test.include? val }&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class CruiseShip&lt;br /&gt;  extend Properties&lt;br /&gt;  &lt;br /&gt;  # property :direction&lt;br /&gt;  # property :direction, includes?('north', 'south', 'east', 'west')&lt;br /&gt;  property :speed, is?(0..300)&lt;br /&gt;  property(:direction, includes?('north', 'south', 'east', 'west')) {|v| v == 'thataway' }&lt;br /&gt;  # property(:speed) {|v| v &gt;= 0 &amp;&amp; v &lt;= 300 }&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;h = CruiseShip.new&lt;br /&gt;&lt;br /&gt;h.add_direction_listener(lambda {|x| puts "Oy... someone changed the direction to #{x}"})&lt;br /&gt;h.direction = "north"&lt;br /&gt;&lt;br /&gt;h.add_speed_listener(lambda {|x| puts "Oy... someone changed the speed to #{x}"})&lt;br /&gt;h.add_speed_listener(lambda {|x| puts "Yo, dude... someone changed the speed to #{x}"})&lt;br /&gt;&lt;br /&gt;h.speed = 200&lt;br /&gt;h.speed = 300&lt;br /&gt;h.speed = 301&lt;br /&gt;h.speed = -1&lt;br /&gt;&lt;br /&gt;h.direction = "south"&lt;br /&gt;&lt;br /&gt;puts h.direction&lt;br /&gt;puts h.speed&lt;br /&gt;&lt;br /&gt;h.remove_speed_listener(1)&lt;br /&gt;&lt;br /&gt;h.speed = 200&lt;br /&gt;h.speed = 350&lt;br /&gt;&lt;br /&gt;h.direction = "thataway"&lt;br /&gt;h.direction = "whatever"&lt;br /&gt;&lt;br /&gt;puts h.direction&lt;br /&gt;puts h.speed&lt;br /&gt;&lt;/pre&gt;Output:&lt;br /&gt;&lt;pre&gt;Oy... someone changed the direction to north&lt;br /&gt;Oy... someone changed the speed to 200&lt;br /&gt;Yo, dude... someone changed the speed to 200&lt;br /&gt;Oy... someone changed the speed to 300&lt;br /&gt;Yo, dude... someone changed the speed to 300&lt;br /&gt;Oy... someone changed the direction to south&lt;br /&gt;south&lt;br /&gt;300&lt;br /&gt;Oy... someone changed the speed to 200&lt;br /&gt;Oy... someone changed the direction to thataway&lt;br /&gt;thataway&lt;br /&gt;200&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-7569017080452316583?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/7569017080452316583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=7569017080452316583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7569017080452316583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7569017080452316583'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/04/metaprogramming-and-dsl-resources.html' title='Metaprogramming and DSL Resources?'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-1921300458217308684</id><published>2007-02-10T12:57:00.000-08:00</published><updated>2007-02-07T11:41:58.711-08:00</updated><title type='text'>Voice of Reason in the Senate</title><content type='html'>Hats off and eternal gratitude to our honorable &lt;a href="http://murray.senate.gov/"&gt;Senator Patty Murray&lt;/a&gt; for standing up and &lt;a href="http://murray.senate.gov/news.cfm?id=268610"&gt;speaking out&lt;/a&gt; against the surge and the Republican filibuster preventing debate earlier this week. Makes me proud to be a Washingtonian.&lt;br /&gt;&lt;blockquote&gt;"... I strongly oppose the surge. Escalation is the wrong direction. I will vote to put this Senate on record opposing the surge, if the Republicans will end their filibuster. And I will continue to fight for a new direction in Iraq. For too long, the voices of our troops and our citizens have been blocked, and today Senate Republicans are trying to continue that obstruction. I say - no longer. The debate must begin -- our country will be the better for it."&lt;/blockquote&gt;Now let's just hope the rest of Congress and President will listen and begin true dialogue so I can be proud to be an American again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-1921300458217308684?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/1921300458217308684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=1921300458217308684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/1921300458217308684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/1921300458217308684'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/02/voice-of-reason-in-senate.html' title='Voice of Reason in the Senate'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-5903251144027617011</id><published>2007-02-01T20:56:00.000-08:00</published><updated>2007-02-07T11:41:58.788-08:00</updated><title type='text'>Congratulations, America! Molly Ivins, rest her soul, would be proud.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pol.moveon.org/virtualmarch/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_qbwc0xFFYS0/RcLGo8O361I/AAAAAAAAAAY/euuJ5KwmMuo/s400/moveon.jpg" alt="" id="BLOGGER_PHOTO_ID_5026798540764474194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Congratulations to &lt;a href="http://www.moveon.org/"&gt;MoveOn.org &lt;/a&gt;and my fellow Americans who called their Congresspersons today to protest the Iraq surge and urged them to vote against this senseless, last ditch effort by an executive in denial and delusion.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pol.moveon.org/virtualmarch/"&gt;Over 1 million calls made today&lt;/a&gt;. Let's hope Congress is listening. Our president certainly isn't.&lt;br /&gt;&lt;br /&gt;And thanks to Senator Maria Cantwell, &lt;a href="http://cantwell.senate.gov/news/record.cfm?id=268424&amp;"&gt;who has already pledged to vote against the escalation of the war in Iraq&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are so many reasons this will not work and little evidence that it would make any difference at this stage. It will only put more of our young people in jeopardy. It's time for the administration to take responsibility for the mistakes they've made in waging this war in the first place, give real consideration to the recommendations made by the &lt;a href="http://www.bakerinstitute.org/Pubs/iraqstudygroup_findings.pdf"&gt;Iraq Study Group report&lt;/a&gt;, and engage the international community to help end the strife between the Shia, Sunni, and Kurds before full scale civil war occurs.&lt;br /&gt;&lt;br /&gt;I hope Congress will go beyond this non-binding motion and use their constitutional power to do whatever they can to prevent more bloodshed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; The final tally on calls is 1,057,012 with 467 calls coming from my district, the first district of Washington state.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qbwc0xFFYS0/RcNxncO362I/AAAAAAAAAAk/I0lrp_cllEY/s1600-h/district_1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_qbwc0xFFYS0/RcNxncO362I/AAAAAAAAAAk/I0lrp_cllEY/s400/district_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5026986531483020130" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-5903251144027617011?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/5903251144027617011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=5903251144027617011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5903251144027617011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/5903251144027617011'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/02/congratulations-america-molly-ivins.html' title='Congratulations, America! Molly Ivins, rest her soul, would be proud.'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qbwc0xFFYS0/RcLGo8O361I/AAAAAAAAAAY/euuJ5KwmMuo/s72-c/moveon.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-7628978608385517473</id><published>2007-02-01T11:20:00.000-08:00</published><updated>2007-02-01T11:23:10.800-08:00</updated><title type='text'>His name is Fenway</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qbwc0xFFYS0/RcI9-MO360I/AAAAAAAAAAM/sO2ABeXOh_U/s1600-h/fenway4.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_qbwc0xFFYS0/RcI9-MO360I/AAAAAAAAAAM/sO2ABeXOh_U/s400/fenway4.jpg" alt="" id="BLOGGER_PHOTO_ID_5026648272743689026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="entrybody"&gt; &lt;p&gt;We’ve had him for a couple of months now. He’s an 11 month old Red/Yellow Lab mix. A very loving, energetic guy who is great around the kids. Everyone that meets him thinks he’s quite a handsome chap.&lt;/p&gt;&lt;p&gt;But he has turned our lives a bit upside down right now. We’re trying to train him on some of finer points of good doggie behavior, such as not chewing up the kids’ toys or dragging us when he’s on the leash.&lt;/p&gt;&lt;p&gt;I haven’t had a dog since I was a young boy, but &lt;a href="http://www.dogsbestfriend.com/"&gt;the books and &lt;span class="caps"&gt;DVD&lt;/span&gt; by the Monks of New Skete&lt;/a&gt; are helping.&lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-7628978608385517473?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/7628978608385517473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=7628978608385517473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7628978608385517473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/7628978608385517473'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/02/his-name-is-fenway.html' title='His name is Fenway'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qbwc0xFFYS0/RcI9-MO360I/AAAAAAAAAAM/sO2ABeXOh_U/s72-c/fenway4.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-117012920832877765</id><published>2007-01-29T18:38:00.000-08:00</published><updated>2007-02-22T08:40:42.771-08:00</updated><title type='text'>RSpec does Autotest</title><content type='html'>I finally got around to updating to the latest version of &lt;a href="http://rspec.rubyforge.org/"&gt;RSpec&lt;/a&gt; and got it working with Rails and Autotest thanks to &lt;a href="http://www.robbyonrails.com/articles/2007/01/10/the-zen-of-auto-rspec"&gt;a helpful post by Robby On Rails&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But there were a couple of little things that tripped me up:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You must match the versions of the rspec_for_rails plugin with your version of RSpec.&lt;/li&gt;&lt;li&gt;The path structure for 0.7.5.1 has changed from the previous paths. It's now found at &lt;code&gt;svn://rubyforge.org/var/svn/rspec/tags/REL_0_7_5_1/&lt;br /&gt;rspec_on_rails/vendor/plugins/rspec_on_rails&lt;/code&gt;&lt;br /&gt;(Don't know if this is a bug or not...)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The API has changed to align should_eql/should_equal with ruby's eql?/equal? - a bit different than what I'm used to with Test::Unit, but I suppose more Rubyish. (&lt;a href="http://rspec.rubyforge.org/upgrade.html"&gt;more info&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Also, running autotest against the spec server really helps with performance, which is key when you're doing test-first development.&lt;br /&gt;&lt;br /&gt;Here's how you can automate that in a rake task:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add your own task at lib/tasks/rspec_autotest.rake (I put it here so it doesn't get clobbered when I update the plugin):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;namespace :spec do&lt;br /&gt;&lt;br /&gt;task :autotest_server do&lt;br /&gt; require File.join(File.dirname(__FILE__),&lt;br /&gt;   '../../vendor/plugins/rspec_autotest',&lt;br /&gt;   'lib', 'rspec_autotest')&lt;br /&gt; autotest = RspecOnRailsAutotest.new&lt;br /&gt; autotest.spec_command = "drbspec --diff unified"&lt;br /&gt; autotest.run&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Kick off the spec server:&lt;br /&gt;&lt;pre&gt;script/rails_spec_server&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;And start up autotest:&lt;br /&gt;&lt;pre&gt; rake spec:autotest_server&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;UPDATE:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Oh, and here's how I got autotest color to work with rspec. (Thanks for asking, Scott!)&lt;br /&gt;&lt;br /&gt;First, I added this to ~/.autotest to load redgreen which comes with the lastest version of ZenTest.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;require 'autotest/redgreen'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Second, I updated my copy of redgreen.rb at /opt/local/lib/ruby/gems/1.8/gems/ZenTest-3.4.3/lib/autotest/redgreen.rb&lt;br /&gt;(your location may vary)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;module Autotest::RedGreen&lt;br /&gt;  BAR = "=" * 80&lt;br /&gt;  RED = 31&lt;br /&gt;  GREEN = 32&lt;br /&gt;  &lt;br /&gt;  Autotest.add_hook :ran_command do |at|&lt;br /&gt;    if at.results.match /specification/&lt;br /&gt;      #rspec&lt;br /&gt;      at.results.gsub!(/^.* specifications?, (\d+) failures?$/) { |match|&lt;br /&gt;        code = ($1 != "0") ? RED : GREEN&lt;br /&gt;        match_string(code, BAR, match)&lt;br /&gt;      }&lt;br /&gt;    else&lt;br /&gt;      at.results.gsub!(/^.* (\d+) failures, (\d+) errors$/) { |match|&lt;br /&gt;        code = ($1 != "0" or $2 != "0") ? RED : GREEN&lt;br /&gt;        match_string(code, BAR, match)&lt;br /&gt;      }&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  private&lt;br /&gt;  &lt;br /&gt;  def self.match_string(code, bar, match)&lt;br /&gt;    "\e[#{code}m#{bar}\n#{match}\e[0m\n\n"&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-117012920832877765?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/117012920832877765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=117012920832877765' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/117012920832877765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/117012920832877765'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2007/01/rspec-does-autotest.html' title='RSpec does Autotest'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-116183636706862255</id><published>2006-10-25T21:12:00.000-07:00</published><updated>2006-10-25T21:19:27.080-07:00</updated><title type='text'>Adam Keys Channels the Next Generation at RubyConf</title><content type='html'>I challenge you to find something as hilariously geeky as Adam Keys and the USS Ruby from RubyConf this weekend. &lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yJ-bnIKbOwM"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/yJ-bnIKbOwM" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=-5830318882717959520"&gt;Erlang, The Movie&lt;/a&gt;, which was actually shown before the first session, comes a close second.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-116183636706862255?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/116183636706862255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=116183636706862255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116183636706862255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116183636706862255'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/10/adam-keys-channels-next-generation-at.html' title='Adam Keys Channels the Next Generation at RubyConf'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-116183400727069639</id><published>2006-10-25T20:36:00.000-07:00</published><updated>2006-10-25T20:40:07.283-07:00</updated><title type='text'>Notes from RubyConf</title><content type='html'>I was going to post my notes, but &lt;a href="http://blog.nicksieger.com/"&gt;Nick Sieger's beat the crap out of mine&lt;/a&gt;. Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-116183400727069639?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/116183400727069639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=116183400727069639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116183400727069639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116183400727069639'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/10/notes-from-rubyconf.html' title='Notes from RubyConf'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-116183268708201976</id><published>2006-10-25T19:58:00.000-07:00</published><updated>2006-10-25T20:18:07.123-07:00</updated><title type='text'>matzcast</title><content type='html'>Right on the heels of RubyConf 2006, ITConversations has posted an interview with &lt;a href="http://www.itconversations.com/shows/detail1638.html"&gt;the Benevolent Dictator of Ruby on the design of his language&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;RubyConf was a great time. Some very interesting projects are in the works. The future of the language is bright. I was very impressed by the caliber of talent I met and the passion people feel for the language and their work.&lt;br /&gt;&lt;br /&gt;It was really nice to finally talk with so many people from the community. I learned a lot and picked up some great ideas.&lt;br /&gt;&lt;br /&gt;Some sessions were recorded on video. Hopefully Chad and Rich will make these and the slides available for those who couldn't make the conference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-116183268708201976?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/116183268708201976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=116183268708201976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116183268708201976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116183268708201976'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/10/matzcast.html' title='matzcast'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-116164640450371021</id><published>2006-10-23T16:16:00.000-07:00</published><updated>2006-10-23T16:36:56.793-07:00</updated><title type='text'>Want my job?</title><content type='html'>&lt;a href="http://tinyurl.com/y59nh9"&gt;Up for grabs&lt;/a&gt; for someone wanting to do .NET, C#, and web development in the healthcare domain. After 5 plus years at &lt;a href="http://www.gehealthcare.com/"&gt;GE/IDX&lt;/a&gt;, I'm moving on to other exciting things.&lt;br /&gt;&lt;br /&gt;Can't say much yet about what I'll be doing, but I will say that I'll be working in &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt; and &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt;. (Thanks &lt;a href="http://www.artima.com/intv/ruby.html"&gt;Matz&lt;/a&gt; and &lt;a href="http://www.loudthinking.com/"&gt;DHH&lt;/a&gt;!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-116164640450371021?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/116164640450371021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=116164640450371021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116164640450371021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116164640450371021'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/10/want-my-job.html' title='Want my job?'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-116132379742110551</id><published>2006-10-19T23:20:00.000-07:00</published><updated>2006-10-19T23:47:11.116-07:00</updated><title type='text'>big day</title><content type='html'>October 19th ROCKS!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;My 10th wedding anniversary (Though we're postponing the celebration since I'm out of town. I have the most understanding wife. La, you're the best.)&lt;/li&gt;&lt;li&gt;I'm an uncle for the second time! My brother Andrew and his wife Corey just had a new baby girl about 8 hours ago. A week early but a healthy 8 lbs, 11 oz. No definite name yet, but I've put in for Ruby. :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Just got into Denver a few hours ago for &lt;a href="http://www.rubyconf.org/"&gt;RubyConf&lt;/a&gt;. Briefly met and shared a ride to the hotel with some of the Seattle.rb crowd. Looking forward to tomorrow.&lt;br /&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/12558127-116132379742110551?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/116132379742110551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=116132379742110551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116132379742110551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116132379742110551'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/10/big-day.html' title='big day'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-116132492283322408</id><published>2006-10-19T22:57:00.000-07:00</published><updated>2006-10-19T23:25:47.073-07:00</updated><title type='text'>Eureka picked up for second season</title><content type='html'>Good news for my brother Andrew, the cast, crew, and we loyal viewers: &lt;a href="http://www.scifi.com/scifiwire/index.php?category=0&amp;amp;id=38513"&gt;Eureka has been picked up for a second season&lt;/a&gt;. They should start filming in spring for next summer's episodes. So we can all breath a sigh of relief knowing that we'll have something to watch after &lt;a href="http://www.scifi.com/battlestar"&gt;Battlestar&lt;/a&gt; wraps up.&lt;br /&gt;&lt;br /&gt;Way to go, bro. Kudos on a great show that will likely only get better.&lt;br /&gt;&lt;br /&gt;I thoroughly enjoyed &lt;a href="http://www.scifi.com/eureka/episodes/112/"&gt;the season finale&lt;/a&gt;. I think the show started to hit its stride with the last 4 or 5 episodes. The actors seem to be getting more comfortable with their characters, relationships are gelling, backstory is being revealed, plotlines are connecting, the stories are getting edgier, and the editing has vastly improved.&lt;br /&gt;&lt;br /&gt;Got to hand it to SCIFI too. I really like some of the smart web promotions they're doing for the show, namely the "&lt;a href="http://www.scifi.com/eureka/video/webisodes/"&gt;webisodes&lt;/a&gt;" and &lt;a href="http://www.scifi.com/eureka/downloads/podcast/"&gt;podcast commentary&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also a good sign: &lt;a href="http://www.scifi.com/eureka/"&gt;Eureka&lt;/a&gt; now comes up as the second link on Google.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-116132492283322408?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/116132492283322408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=116132492283322408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116132492283322408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/116132492283322408'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/10/eureka-picked-up-for-second-season.html' title='Eureka picked up for second season'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115766596324918498</id><published>2006-09-07T14:37:00.000-07:00</published><updated>2006-09-07T14:53:35.950-07:00</updated><title type='text'>EUReKA among top 10 downloads on iTunes</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2885/426/1600/eureka_itunes_top10.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/2885/426/320/eureka_itunes_top10.png" alt="" border="0" /&gt;&lt;/a&gt;My brother emailed me to tell me that three of &lt;a href="http://www.scifi.com/eureka/"&gt;his show's episodes&lt;/a&gt; are among the top 10 downloads on iTunes.&lt;br /&gt;&lt;br /&gt;I fired back that he needed to get episodes #2 and #4 up there so he could try to sweep it. For some reason they aren't posted and people are clamoring to buy them.&lt;br /&gt;&lt;br /&gt;I think I enjoyed this week's episode the most because it explored the connection between Jack and Zoey in more depth and showed some real human conflict there.&lt;br /&gt;&lt;br /&gt;I thought Stark could have said a bit more about his connection to robot boy, providing more insight into how he viewed his own biological son vs. his artificial one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115766596324918498?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115766596324918498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115766596324918498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115766596324918498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115766596324918498'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/09/eureka-among-top-10-downloads-on.html' title='EUReKA among top 10 downloads on iTunes'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115758619226297023</id><published>2006-09-06T16:39:00.000-07:00</published><updated>2006-09-06T18:50:43.036-07:00</updated><title type='text'>The Robots Want Your Job!</title><content type='html'>It's &lt;a href="http://asia.news.yahoo.com/060902/ap/d8jsuec00.html"&gt;just a matter of time&lt;/a&gt; now before the first &lt;a href="http://www.imdb.com/title/tt0088247/"&gt;Terminator&lt;/a&gt; model is complete.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"When a reporter's hand was placed against the robot's taste sensor, it was identified as prosciutto. A cameraman was mistaken for bacon."&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Quit NOW, or be EATEN!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115758619226297023?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115758619226297023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115758619226297023' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115758619226297023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115758619226297023'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/09/robots-want-your-job.html' title='The Robots Want Your Job!'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115654895541164765</id><published>2006-08-25T16:17:00.000-07:00</published><updated>2006-08-25T16:35:55.440-07:00</updated><title type='text'>Finally a Windows feed reader I can live with - JetBrains Omea Reader</title><content type='html'>If you’re a blog junkie like me, you owe it to yourself to &lt;a href="http://www.jetbrains.com/omea/reader/"&gt;try out JetBrains Omea Reader&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It has a really clean UI and is very responsive.&lt;br /&gt;&lt;br /&gt;Some of my favorite features&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Firefox integration that lets you queue up subscriptions&lt;/li&gt;&lt;li&gt;Create clippings from posts&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Quick find&lt;/li&gt;&lt;li&gt;Subscribe to new feeds that you navigate to from posts&lt;/li&gt;&lt;li&gt;Read entry comments&lt;/li&gt;&lt;li&gt;Notifications of blog entry updates&lt;/li&gt;&lt;li&gt;Create rules and views&lt;br /&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/12558127-115654895541164765?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115654895541164765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115654895541164765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115654895541164765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115654895541164765'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/08/finally-windows-feed-reader-i-can-live.html' title='Finally a Windows feed reader I can live with - JetBrains Omea Reader'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115386881815803832</id><published>2006-07-25T15:30:00.000-07:00</published><updated>2006-08-24T21:41:46.916-07:00</updated><title type='text'>Ruby, the Consummate Delegator - Part 2</title><content type='html'>Back in June, I posted about &lt;a href="http://electricsheep.blogspot.com/2006/06/ruby-consummate-delegator.html"&gt;using Ruby's method_missing for simplified delegation&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Well, I might have known Ruby would have &lt;span style="font-style:italic;"&gt;even&lt;/span&gt; more options for handling delegation. &lt;br /&gt;&lt;br /&gt;The following achieves the same result without having to implement method_missing. &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/delegate/rdoc/index.html"&gt;DelegateClass&lt;/a&gt; implements method_missing for you, along with some other conveniences.&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;require 'delegate'&lt;br /&gt;&lt;br /&gt;class CardDeck &lt; DelegateClass(ShuffleArray)&lt;br /&gt;  def initialize(cards)&lt;br /&gt;    super(ShuffleArray.new(cards))&lt;br /&gt;  end&lt;br /&gt;end&lt;/pre&gt;&lt;/div&gt;I suppose the downside here is that we are back to using inheritance, even though we're delegating to ShuffleArray, and we wanted to avoid that since we thought CardDeck was going to evolve a bit more.&lt;br /&gt;&lt;br /&gt;Now if we wanted to selectively delegate certain methods to certain objects, we could instead extend our class with &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/forwardable/rdoc/index.html"&gt;Forwardable&lt;/a&gt;.  Here we avoid inheritance at the expense of some repetition as we'd have to call def_delegators for each method that we want to expose from ShuffleArray.&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;require 'forwardable'&lt;br /&gt;&lt;br /&gt;class CardDeck&lt;br /&gt;  extend Forwardable&lt;br /&gt;&lt;br /&gt;  def initialize(cards)&lt;br /&gt;    @cards = ShuffleArray.new(cards)&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def_delegators :@cards, :shuffle, :size, &lt;br /&gt;                          :[], :find, &lt;br /&gt;                          :reverse, :each, &lt;br /&gt;                          :sort_by&lt;br /&gt;end&lt;/pre&gt;&lt;/div&gt;This might be a better approach as we've left CardDeck open for later inheritance and we can now delegate to other composed objects in the future. Though we could still do that with method_missing with just an extra if block, so I'm not sure how much we've gained here.&lt;br /&gt;&lt;br /&gt;For one thing we're somewhat back to writing those pesky delegation methods that we hoped to avoid in the first place. def_delegators certainly makes it a bit easier than doing the same thing in say C# or Java, and I suppose we shouldn't be too lazy. But we also could forget to pass in some methods and if Array or ShuffleArray gets redefined at runtime, then we won't delegate to them like we would with method_missing.&lt;br /&gt;&lt;br /&gt;I'll grant you this whole CardDeck example is a bit contrived and if I thought about it a bit more I could probably come up some better examples of when to use these different approaches &amp;quot;in the real world.&amp;quot; &lt;br /&gt;&lt;br /&gt;For example, Forwardable could be useful for writing an adapter for a class that needs to conform to the same interface as another, or for building a fa&amp;ccedil;ade to expose a subset of a delegate's interface.&lt;br /&gt;&lt;br /&gt;I'd certainly be interested in hearing about how others have used these nifty features in Ruby.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115386881815803832?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115386881815803832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115386881815803832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115386881815803832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115386881815803832'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/07/ruby-consummate-delegator-part-2.html' title='Ruby, the Consummate Delegator - Part 2'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115362233797934357</id><published>2006-07-22T19:20:00.000-07:00</published><updated>2006-07-22T19:38:57.990-07:00</updated><title type='text'>Please ditch your gas guzzler</title><content type='html'>I love it. I saw this &lt;a href="http://www.greenpeace.org.uk/gasguzzler/"&gt;great Greenpeace ad&lt;/a&gt; referenced from &lt;a href="http://www.grist.org/"&gt;grist.org&lt;/a&gt; (a great site by the way).&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ANYfxhYpzWc"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ANYfxhYpzWc" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;This is what makes me see Seattle as a whole so hypocritical. Everyone thinks they are so environmentally conscious, but there are bloody SUVs EVERYWHERE!&lt;br /&gt;&lt;br /&gt;The thing that really makes we want to scream is when I see a sticker on the back of one these things that says "Support our troops." If you really support our troops, then why don't you put your wallet where your mouth is and drive a responsible vehicle that doesn't require an expansionist foreign policy that kills for oil? Why don't you elect a government that would work toward alternative energy solutions and invest in companies that are researching those technologies? &lt;br /&gt;&lt;br /&gt;Wake up, America.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115362233797934357?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115362233797934357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115362233797934357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115362233797934357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115362233797934357'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/07/please-ditch-your-gas-guzzler.html' title='Please ditch your gas guzzler'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115345096539102018</id><published>2006-07-20T19:43:00.000-07:00</published><updated>2006-07-20T21:24:43.206-07:00</updated><title type='text'>There's A Preferred Way To Do It - But Go Ahead If You Need To</title><content type='html'>I finally got around to watching &lt;a href="http://www.loudthinking.com/"&gt;DHH&lt;/a&gt;'s &lt;a href="http://blog.scribestudio.com/articles/2006/07/09/david-heinemeier-hansson-railsconf-2006-keynote-address"&gt;keynote address at RailsConf 2006&lt;/a&gt;. It's good to listen to it while flipping &lt;br /&gt;&lt;a href="http://www.loudthinking.com/arc/000593.html"&gt;the slide deck&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;David made a good point about Ruby's and Rail's opinionated nature. While they are opinionated, they aren't draconian; they allow for flexibility outside of convention if that's what you need.&lt;br /&gt;&lt;br /&gt;The example he gives is Ruby's ability to call private methods externally. By convention you can't break that encapsulation and Ruby's nature is to discourage it and push you to do the right thing. BUT if you feel for some reason you absolutely must - perhaps you are doing some meta-programming or reflection - Ruby makes it possible and easy to do. The responsibility is ultimately left to the developer.&lt;br /&gt;&lt;br /&gt;He also talks about how he's working on leveraging the HTTP protocol's built-in strengths by using POST, GET, PUT, and DELETE to map to CRUD operations and using models to simplify and encapsulate relationships while keeping controllers simpler with fewer actions. Rails also will be extending support for HTTP's accept header to return the desired formats from the same controller methods without having to repeat yourself for different content types like XML, JavaScript and RJS templates, icl, atom, rss, etc. And he's bringing in the recognition of file extensions to define content types if you aren't sending in the accept header.&lt;br /&gt;&lt;br /&gt;The new ActiveResource will be provide way of building APIs and mapping models, represented as Structs, to RESTful services much like ActiveRecord does with models and CRUD operations. A slick approach, providing a proxy to the REST service - simpler than a .NET generated proxy from a WSDL on top of SOAP and it's all done at runtime. Even nicer, both ActiveRecord and ActiveModel will descend from ActiveModel, enabling you to create subclasses for things like ActiveLDAP, ActiveSOAP and ActiveFileSystem, etc. and reuse the shared concerns such as model validations. He hasn't quite thought through associations between resources and database models. ActiveResource will be available as a separate gem.&lt;br /&gt;&lt;br /&gt;DHH is truly a master of abstraction.&lt;br /&gt;&lt;br /&gt;My favorite quote:&lt;br /&gt;&lt;blockquote&gt;"Doing things by hand is another one of those constraints. If you have the initial assumption that things should be able to be done by hand without leaving you crying, it leads to better designs. And I think that is Ruby in general. At lot of Java people are crying "We need our IDEs!" Yeah, you do need your IDE in Java. You'd be insane to write Java without an IDE."&lt;/blockquote&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;br /&gt;irb(main):003:0&amp;gt; class Foo&lt;br /&gt;irb(main):004:1&amp;gt; private&lt;br /&gt;irb(main):005:1&amp;gt;   def bar&lt;br /&gt;irb(main):006:2&amp;gt;     puts "baz"&lt;br /&gt;irb(main):007:2&amp;gt;   end&lt;br /&gt;irb(main):008:1&amp;gt; end&lt;br /&gt;=&amp;gt; nil&lt;br /&gt;irb(main):09:0&amp;gt; foo = Foo.new&lt;br /&gt;=&gt; #&amp;lt;Foo:0x2c4acc0&amp;gt;&lt;br /&gt;irb(main):010:0&amp;gt; foo.bar&lt;br /&gt;NoMethodError: private method `bar' called for #&amp;lt;Foo:0x2c4acc0&amp;gt;&lt;br /&gt;       from (irb):12&lt;br /&gt;irb(main):011:0&amp;gt; foo.send(:bar)&lt;br /&gt;baz&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115345096539102018?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115345096539102018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115345096539102018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115345096539102018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115345096539102018'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/07/theres-preferred-way-to-do-it-but-go.html' title='There&apos;s A Preferred Way To Do It - But Go Ahead If You Need To'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115342339274488884</id><published>2006-07-20T12:13:00.000-07:00</published><updated>2006-07-21T14:09:30.550-07:00</updated><title type='text'>EUReKA sets new SCIFI ratings record</title><content type='html'>To all those who watched &lt;a href="http://www.imdb.com/name/nm1184676/"&gt;my brother Andrew&lt;/a&gt;'s &lt;a href="http://www.scifi.com/eureka/"&gt;new series EUReKA on the SCIFI channel&lt;/a&gt;, thanks for helping &lt;a href="http://www.broadcastingcable.com/article/CA6354845.html?display=Breaking+News"&gt;the show set a new record&lt;/a&gt; with over 4 million viewers.&lt;br /&gt;&lt;blockquote&gt;"(Broadcasting &amp; Cable) _ Sci Fi Channel's premiere of Eureka ranked as the network's highest-rated series telecast ever with a 3.2 household rating and more than 4 million total viewers, according to Nielsen Media Research. The two-hour premiere of the series, about an unknown U.S. town of geniuses, ran at 9 p.m. Tuesday night (July 18)."&lt;br /&gt;-- &lt;span class="articlebyline"&gt;Anne Becker&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;If you didn't get a chance to see it, Sci Fi is broadcasting &lt;a href="http://www.scifi.com/eureka/video/"&gt;the pilot episode in its entirety on their site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you have any feedback about the show, post it here and I'll see that it gets back to my brother. Hopefully I can convince him to start blogging about the show.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE&lt;/span&gt;: Check out the season promo below. And Sci Fi is running a "&lt;a href="http://www.scifi.com/eureka/madeineureka/"&gt;Made in Eureka" promo sweepstakes&lt;/a&gt; where you can win a&lt;br /&gt;Sony HDTV and BluRay player.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0u3ceBx7OR4"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/0u3ceBx7OR4" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115342339274488884?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115342339274488884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115342339274488884' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115342339274488884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115342339274488884'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/07/eureka-sets-new-scifi-ratings-record.html' title='EUReKA sets new SCIFI ratings record'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115336203157975389</id><published>2006-07-19T18:36:00.000-07:00</published><updated>2006-07-19T19:32:00.120-07:00</updated><title type='text'>Saving the planet, one gallon at a time</title><content type='html'>The green machine has gone green. Finally got around to converting my Jetta TDI to &lt;a href="http://en.wikipedia.org/wiki/Biodiesel"&gt;biodiesel&lt;/a&gt; the other day.&lt;br /&gt;&lt;br /&gt;Filled the tank with some golden natural goodness, courtesy of our local supplier, Quality Auto Service. They apparently don't have a web site, but if you drive a diesel and live on the island or commute via the ferry, &lt;a href="http://maps.google.com/maps?q=220+Olympic+Drive+SE,+Bainbridge%20Island,+WA+98110"&gt;they are conveniently located&lt;/a&gt;. If you have any questions, give 'em a call @ 206-780-8088.&lt;br /&gt;&lt;br /&gt;If you live somewhere else, check out &lt;a href="http://www.brevardbiodiesel.org/map/bd.html"&gt;this nifty biodiesel mashup with Google maps&lt;/a&gt; to find a location near you.&lt;br /&gt;&lt;br /&gt;So what was involved with conversion? Well, I pulled up to the station, the friendly attendant opened the fuel cap, and stuck in the nozzle. Voila! And full service, no less.&lt;br /&gt;&lt;br /&gt;The cost was $3.40/gal which is a bit more than the going price of regular diesel on the island, but seems like a small price to pay for decoupling my car from the war for oil, investing in our country's own economy, and helping to keep the air and water cleaner because biodiesel has lower emissions. And since the Jetta gets about 40 city and 45 freeway, and I drive very little, the hit to the wallet should be marginal.&lt;br /&gt;&lt;br /&gt;I haven't driven much since the 'conversion,' but so far I haven't noticed any decrease in power and I swear the engine runs more quietly.&lt;br /&gt;&lt;br /&gt;I spoke to my own mechanic and several owners who have made the switch before making the conversion, which I would definitely recommend. Also check with your auto manufacturer, especially if your car is still under warranty. For example, &lt;a href="http://www.vw.com/contactus/faqs.html#5.1"&gt;Volkswagen officially approves a B5 grade&lt;/a&gt; (5% biodiesel) for TDI engines and it might void your warranty if you use anything with a higher percentage. My car is past its warranty, so that wasn't a concern.&lt;br /&gt;&lt;br /&gt;It's likely that I will have to change the fuel filter (and prefilter if there is one) after a couple of tanks; since biodiesel runs much cleaner than regular diesel, there will be lots of dislodged crud. A buddy of mine who has also made the switch with his Mercedes told me that in a couple of years, I might need to replace the fuel lines.&lt;br /&gt;&lt;br /&gt;For more info, check out &lt;a href="http://www.greaseworks.org/"&gt;GreaseWorks&lt;/a&gt; and &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.biodiesel.org/"&gt;NBB&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115336203157975389?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115336203157975389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115336203157975389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115336203157975389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115336203157975389'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/07/saving-planet-one-gallon-at-time.html' title='Saving the planet, one gallon at a time'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115291693174473645</id><published>2006-07-14T15:35:00.000-07:00</published><updated>2006-07-14T17:01:46.433-07:00</updated><title type='text'>EUReKA, my bro's new TV show, premieres next week</title><content type='html'>My brother’s new TV series starts on the SCIFI channel next week, Tues, July 18 @ 9/8C. Tell your family and friends!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scifi.com/eureka/"&gt;http://www.scifi.com/eureka/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And yes, that is the &lt;a href="http://imdb.com/title/tt0087004/"&gt;Brother from Another Planet&lt;/a&gt; and &lt;a href="http://imdb.com/title/tt0088565/"&gt;Max Headroom&lt;/a&gt; in the cast. The 80’s are making a comeback!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115291693174473645?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115291693174473645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115291693174473645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115291693174473645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115291693174473645'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/07/eureka-my-bros-new-tv-show-premieres.html' title='EUReKA, my bro&apos;s new TV show, premieres next week'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115187542602712234</id><published>2006-07-02T13:54:00.000-07:00</published><updated>2006-08-10T12:45:38.316-07:00</updated><title type='text'>TextMate Withdrawal; jEdit to the Rescue</title><content type='html'>Since my powerbook crapped out on me (long story to be continued), I've been going through &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;/MacOS withdrawal. But thanks to some nifty plug-ins for &lt;a href="http://jedit.org/"&gt;jEdit&lt;/a&gt;, and some very helpful tutorials, I'm finding a workable interim 'fix' on Windows and Ubuntu.&lt;br /&gt;&lt;br /&gt;In fact, there are some nice features like pop-up code-completion with context sensitive rdoc (including Rails docs) that I'd like to see in TextMate.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2885/426/1600/jedit_ruby_ide2.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://photos1.blogger.com/blogger/2885/426/400/jedit_ruby_ide2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you're on Windows or *nix - or you don't have the moolah for TM - then it might be worth a look.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://rubyjedit.org/"&gt;Rob McKinnon's jEdit Ruby Plugin&lt;/a&gt; (&lt;a href="http://rubyjedit.org/features/"&gt;features&lt;/a&gt;)&lt;a href="http://rubyjedit.org/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="mailto:sune_simonsen@users.sourceforge.net"&gt;Sune Simonsen's Superabbrevs&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ifakedit.com/log/2006/02/19/jedit-tutorial-a-how-to-on-abbreviations-superabbrevs-in-html-ruby-on-rails-and-more/"&gt;Jesse Crouch's Superabbrevs Tutorial&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://synthesis.sbecker.net/articles/2006/03/20/jedit-snippets-for-ruby-on-rails"&gt;JScott Becker's Superabbrev snippets for RoR&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eadz.co.nz/blog/article/ruby-rails-jedit.html"&gt;Eadz's Ruby on Rails for jEdit&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Drop me a comment if you know of any other useful tips or plug-ins for jEdit. I'm not too happy with the default syntax color scheme.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;Full screenshot of jEdit and context sensitive rdoc (click for full view)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2885/426/1600/jedit_ruby_ide1.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/2885/426/400/jedit_ruby_ide1.png" alt="link to jedit screenshot" title="Full screenshot of jEdit and context sensitive rdoc (click for full view)" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[UPDATE]&lt;/span&gt;&lt;br /&gt;I'm having a few problems getting some things to work. Please let me know if you know how to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;run script/console or irb inside the Console. It just sits and spins when I run anything that takes input.&lt;/li&gt;&lt;li&gt;hook up to Subversion.&lt;/li&gt;&lt;li&gt;get tabbed views for file buffers instead of the buffer dropdown.&lt;br /&gt;[I got this working with the &lt;a href="http://plugins.jedit.org/plugins/?BufferTabs"&gt;BufferTabs plug-in&lt;/a&gt;]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;get class and method folding to work.&lt;br /&gt;[This just required setting Utilities &gt; Global Options &gt; Editing &gt; Folding Mode to Sidekick]&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115187542602712234?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115187542602712234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115187542602712234' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115187542602712234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115187542602712234'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/07/textmate-withdrawal-jedit-to-rescue.html' title='TextMate Withdrawal; jEdit to the Rescue'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115163861069219241</id><published>2006-06-29T20:29:00.000-07:00</published><updated>2006-06-30T16:54:02.800-07:00</updated><title type='text'>Eureka, "Small Town, Big Secrets"</title><content type='html'>My brother Andrew's new TV series &lt;span style="font-style:italic;"&gt;&lt;a href="http://www.scifi.com/eureka/"&gt;EUR&lt;sup&gt;e&lt;/sup&gt;KA&lt;/a&gt;&lt;/span&gt; premieres July 18 @ 9/8C on the &lt;a href="http://www.scifi.com/"&gt;SCIFI channel&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Think 'Twin Peaks' meets 'Mayberry RFD'.&lt;br /&gt;&lt;br /&gt;Don't miss it! Tell your friends. If you're a SCIFI geek, tell your enemies too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115163861069219241?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115163861069219241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115163861069219241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115163861069219241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115163861069219241'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/06/eureka-small-town-big-secrets.html' title='Eureka, &quot;Small Town, Big Secrets&quot;'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115163805782356070</id><published>2006-06-29T20:20:00.000-07:00</published><updated>2006-06-30T16:49:34.803-07:00</updated><title type='text'>Dreadful Ed</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;camp=1789&amp;tag=dreamingofele-20&amp;creative=9325&amp;path=ASIN/1593075758/qid=1116188522/sr=2-1/ref=pd_bbs_b_2_1"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://images.amazon.com/images/P/1593075758.01._SCMZZZZZZZ_.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;camp=1789&amp;tag=dreamingofele-20&amp;creative=9325&amp;path=ASIN/1593075758/qid=1116188522/sr=2-1/ref=pd_bbs_b_2_1"&gt;Dreadful Ed&lt;/a&gt;&lt;/span&gt; is a new children’s book written by my talented kid brother Andrew. I read it to my daughter last night. Published by &lt;a href="http://www.darkhorse.com/profile/profile.php?sku=10-776"&gt;DarkHorse comics&lt;/a&gt;, it’s a sweet story about a little boy who thinks he doesn't quite meet with his father’s or schoolmates’ approval and expectations.&lt;br /&gt;&lt;br /&gt;(Oh, btw: Ed’s family and school chums are spooky monsters! Perhaps my brother is working out some childhood issues here...)&lt;br /&gt;&lt;br /&gt;My daughter really enjoyed the story and the creepy artwork. It’s not a scary story by any means, but afterwards she didn’t want to go to sleep with the book in the same room. ;)&lt;br /&gt;&lt;br /&gt;From the back cover:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"It's a little known fact among those in the know&lt;br /&gt;that on one night each year when the howling winds blow&lt;br /&gt;if you stay up past bedtime 'til thirteen past three&lt;br /&gt;there's a place not like this place you're likely to see."&lt;br /&gt;&lt;br /&gt;"Welcome to Nocturnia, home to nightmares, monsters, and one little misfit named Edgar Grimm. Like most kids, Ed would love to make his parents proud. For Ed that means following in the big, frightful footprints of his dad, who just happens to be the Bogeyman! Unfortunately, unlike his famous father, Ed's not very scary. You see, Ed isn't like the other monsters his age. In fact, he isn't a monster at all... but that won't stop him from trying to prove that even a good little boy can find a place among the biggest, baddest monsters there are."&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115163805782356070?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115163805782356070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115163805782356070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115163805782356070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115163805782356070'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/06/dreadful-ed.html' title='Dreadful Ed'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-115095038326027774</id><published>2006-06-24T10:25:00.000-07:00</published><updated>2006-07-25T15:29:11.683-07:00</updated><title type='text'>Ruby, the Consummate Delegator</title><content type='html'>Maybe one of the reasons inheritance is so overused in certain static languages like Java and C# is that it can be a pain in the ass to write those tiny methods that hand off operations to the delegate class.&lt;br /&gt;&lt;br /&gt;Ruby, on the other hand, makes it a no-brainer with the &lt;a href="http://www.rubycentral.com/book/ref_c_object.html#Object.method_missing"&gt;method_missing&lt;/a&gt; callback.&lt;br /&gt;&lt;br /&gt;Here a ShuffleArray extends Array to add some shuffling behavior. Since a ShuffleArray's relationship to Array is an "is a" relationship, that seems a valid use of inheritance.&lt;br /&gt;&lt;br /&gt;But a CardDeck is much more than a ShuffleArray - or will be anyway as it will provide more behavior in the future - and its relationship to ShuffleArray is more of a "uses a" association. Still I'd like CardDeck to be able to make use of all the nifty methods and properties of a ShuffleArray, and I'd like to do that without having to write all those methods to pass through from CardDeck to ShuffleArray. &lt;br /&gt;&lt;br /&gt;To do that CardDeck uses Ruby's method_missing callback to delegate any messages other than its own to the ShuffleArray that it composes. This way CardDeck gets the same behaviors and properties of a ShuffleArray (and Array by extension) without having to subclass ShuffleArray and without having to explicitly define those pass-through delegate methods.&lt;br /&gt;&lt;br /&gt;Each class is very small, cohesive, and extensible.&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;&lt;pre&gt;class ShuffleArray &amp;lt; Array&lt;br /&gt;  def shuffle&lt;br /&gt;    sort_by { rand }&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class CardDeck &lt;br /&gt;  alias :method_missing_orig :method_missing &lt;br /&gt;  def initialize(cards)&lt;br /&gt;    @cards = ShuffleArray.new(cards)&lt;br /&gt;  end&lt;br /&gt;  def method_missing(m, *args, &amp;block)&lt;br /&gt;    if @cards.respond_to?(m) &lt;br /&gt;      @cards.send(m, *args, &amp;block)  &lt;br /&gt;    else&lt;br /&gt;      method_missing_orig(m, *args, &amp;block)&lt;br /&gt;      # or you could just raise the exception or return nil&lt;br /&gt;      # raise NoMethodError&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class Card&lt;br /&gt;  attr_reader :face, :suit&lt;br /&gt;  def initialize(face, suit)&lt;br /&gt;    @face, @suit = face, suit&lt;br /&gt;  end&lt;br /&gt;  def to_s&lt;br /&gt;    puts "#{face} of #{suit}"&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;aos = Card.new("Ace", "Spades")&lt;br /&gt;kod = Card.new("King", "Diamonds")&lt;br /&gt;qoh = Card.new("Queen", "Hearts")&lt;br /&gt;joc = Card.new("Jack", "Clubs")&lt;br /&gt;&lt;br /&gt;cards = [aos, kod, qoh, joc]&lt;br /&gt;card_deck = CardDeck.new(cards)&lt;br /&gt;&lt;br /&gt;irb(main):041:0&amp;gt; puts card_deck.size&lt;br /&gt;4&lt;br /&gt;=&amp;gt; nil&lt;br /&gt;irb(main):042:0&amp;gt; card_deck.each {|card| puts card }&lt;br /&gt;Ace of Spades&lt;br /&gt;#&amp;lt;Card:0x2c1d510&amp;gt;&lt;br /&gt;King of Diamonds&lt;br /&gt;#&amp;lt;Card:0x2c19820&amp;gt;&lt;br /&gt;Queen of Hearts&lt;br /&gt;#&amp;lt;Card:0x2c15c08&amp;gt;&lt;br /&gt;Jack of Clubs&lt;br /&gt;#&amp;lt;Card:0x2c12170&amp;gt;&lt;br /&gt;=&amp;gt; [#&amp;lt;Card:0x2c1d510 @suit="Spades", @face="Ace"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c19820 @suit="Diamonds", @face="King"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c15c08 @suit="Hearts", @face="Queen"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c12170 @suit="Clubs", @face="Jack"&amp;gt;]&lt;br /&gt;&lt;br /&gt;irb(main):043:0&amp;gt; puts card_deck[3]&lt;br /&gt;Jack of Clubs&lt;br /&gt;#&amp;lt;Card:0x2c12170&amp;gt;&lt;br /&gt;=&amp;gt; nil&lt;br /&gt;&lt;br /&gt;irb(main):044:0&amp;gt; cards_shuffled = card_deck.shuffle&lt;br /&gt;=&amp;gt; [#&amp;lt;Card:0x2c15c08 @suit="Hearts", @face="Queen"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c1d510 @suit="Spades", @face="Ace"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c19820 @suit="Diamonds", @face="King"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c12170 @suit="Clubs", @face="Jack"&amp;gt;]&lt;br /&gt;&lt;br /&gt;irb(main):046:0&amp;gt; cards_shuffled = card_deck.shuffle&lt;br /&gt;=&amp;gt; [#&amp;lt;Card:0x2c12170 @suit="Clubs", @face="Jack"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c15c08 @suit="Hearts", @face="Queen"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c1d510 @suit="Spades", @face="Ace"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c19820 @suit="Diamonds", @face="King"&amp;gt;]&lt;br /&gt;&lt;br /&gt;irb(main):050:0&amp;gt; cards_shuffled = card_deck.shuffle&lt;br /&gt;=&amp;gt; [#&amp;lt;Card:0x2c1d510 @suit="Spades", @face="Ace"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c12170 @suit="Clubs", @face="Jack"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c19820 @suit="Diamonds", @face="King"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c5c08 @suit="Hearts", @face="Queen"&amp;gt;]&lt;br /&gt;&lt;br /&gt;irb(main):051:0&amp;gt; card_deck.find {|c| c.face == "Ace" }&lt;br /&gt;=&gt; #&amp;lt;Card:0x2c1d510 @suit="Spades", @face="Ace"&amp;gt;&lt;br /&gt;&lt;br /&gt;irb(main):052:0&amp;gt; card_deck.reverse&lt;br /&gt;=&amp;gt; [#&amp;lt;Card:0x2c12170 @suit="Clubs", @face="Jack"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c15c08 @suit="Hearts", @face="Queen"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c19820 @suit="Diamonds", @face="King"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c1d510 @suit="Spades", @face="Ace"&amp;gt;]&lt;br /&gt;&lt;br /&gt;irb(main):053:0&amp;gt; card_deck.sort_by { |c| c.suit }&lt;br /&gt;=&amp;gt; [#&amp;lt;Card:0x2c12170 @suit="Clubs", @face="Jack"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c19820 @suit="Diamonds", @face="King"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c15c08 @suit="Hearts", @face="Queen"&amp;gt;, &lt;br /&gt;#&amp;lt;Card:0x2c1d510 @suit="Spades", @face="Ace"&amp;gt;]&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Other approaches might include adding the shuffle behavior to the core Array class itself, but changing core class behavior might get you in trouble with other core or imported classes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPDATE&lt;/span&gt;: Thanks to Roy and Rick for getting me to think about this a bit more. Earlier I was needlessly delegating shuffle behavior from ShuffleArray to Array with the overhead of an extra call to method_missing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-115095038326027774?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/115095038326027774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=115095038326027774' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115095038326027774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/115095038326027774'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/06/ruby-consummate-delegator.html' title='Ruby, the Consummate Delegator'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114814484269492259</id><published>2006-05-20T10:05:00.000-07:00</published><updated>2006-05-20T10:07:22.706-07:00</updated><title type='text'>I still want to make a documentary film</title><content type='html'>When I first moved to Seattle in the early 90’s, my goal was to learn documentary filmmaking and make some films about how globalism and modernization were transforming indigenous cultures. I wanted to draw attention to how there was wisdom being lost there, wisdom which modern societies should try to preserve and use to guide their direction (appropriate use of technology, maintaining balance with ecosystems and the human body, preservation of cultural history and diversity, etc.).&lt;br /&gt;&lt;br /&gt;So I took some courses at the University of Washington, got a certificate in film and video production, and even wrote and directed a little student project short.&lt;br /&gt;&lt;br /&gt;But this was before the days of cheap digital video production. I was short on cash, couldn’t afford any equipment, and the need for food and shelter pulled me into the 9-12 world of software development. I suppose like many others fresh out of college, I got side-tracked.&lt;br /&gt;&lt;br /&gt;Nevertheless, the dream lives on, and every now and then I get the urge to pick up the videocam and head out the door to see what may be left of those indigenous societies in this &lt;a href="http://www.thomaslfriedman.com/worldisflat.htm"&gt;ever flattening world&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114814484269492259?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114814484269492259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114814484269492259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114814484269492259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114814484269492259'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/05/i-still-want-to-make-documentary-film.html' title='I still want to make a documentary film'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114814234394902491</id><published>2006-05-20T09:18:00.000-07:00</published><updated>2006-05-20T09:27:43.626-07:00</updated><title type='text'>I want to master TextMate</title><content type='html'>Sadly, my powerbook is currently kaput (I dropped it). I'm trying to decide whether to pay to fix it or just get a new MacBook. While &lt;a href="http://radrails.org"&gt;RadRails&lt;/a&gt; is a nice stand-in on Windows and Ubuntu, I am going through &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; withdrawal.&lt;br /&gt;&lt;br /&gt;In the meantime, I can live varicariously through others.&lt;br /&gt;&lt;br /&gt;Mike Clark has posted a &lt;a href="http://www.clarkware.com/cgi/blosxom/2006/05/03#TMCheatSheet"&gt;nifty cheat sheet for Rails coding&lt;/a&gt; in TextMate.&lt;br /&gt;&lt;br /&gt;There are several others out there:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For &lt;a href="http://feldpost.com/lighthaus/textmate_rails.pdf"&gt;SyncPeoplebundle [pdf]&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feldpost.com/lighthaus/textmate_rails.pdf"&gt;g-design [pdf]&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://garrettsnider.backpackit.com/pub/367902"&gt;Migrations&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;It might be nice to collect all these into a concisely formatted little popup/tool-tip you could invoke while using TextMate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114814234394902491?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114814234394902491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114814234394902491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114814234394902491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114814234394902491'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/05/i-want-to-master-textmate.html' title='I want to master TextMate'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114671346981823467</id><published>2006-05-03T20:13:00.000-07:00</published><updated>2006-05-03T20:43:36.060-07:00</updated><title type='text'>Dave Astels makes some RSpec revisions</title><content type='html'>&lt;a href="http://canadaonrails.com/"&gt;Canada on Rails&lt;/a&gt; was a great chance to meet some new people and pick up some more Ruby and Rails tidbits.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.daveastels.com/"&gt;Dave Astels&lt;/a&gt; gave a presentation on the state of &lt;a href="http://rspec.rubyforge.org/"&gt;RSpec&lt;/a&gt;, which seems to be coming right along. They've made some major revisions since &lt;a href="http://electricsheep.blogspot.com/2005/10/dave-astels-behavior-driven-design.html"&gt;my previous post back in October&lt;/a&gt; to provide some very nice syntactic sugar. I think he's spot on with most of the changes, but I agree with what he's said about changing "should" to "must."&lt;br /&gt;&lt;br /&gt;If you missed his presentation in Vancouver, &lt;a href="http://video.google.com/videoplay?docid=8135690990081075324"&gt;here's a similar one on google video&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To compare the old way with the new way, here is what the spec from my earlier post would look like now.&lt;br /&gt;&lt;br /&gt;movie_list_spec.rb:&lt;br /&gt;&lt;pre&gt;require 'spec' &lt;br /&gt;require 'movie' &lt;br /&gt;require 'movie_list' &lt;br /&gt;&lt;br /&gt;context "An empty movie list" do&lt;br /&gt;  &lt;br /&gt;  setup do&lt;br /&gt;    @movie_list = MovieList.new &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  specify "should have a size of zero" do&lt;br /&gt;    @movie_list.size.should.be 0 &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  specify "should not include the movie 'Star Wars'" do&lt;br /&gt;    @movie_list.should.not.include "Star Wars" &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;context "A movie list with one movie" do&lt;br /&gt;  &lt;br /&gt;  setup do&lt;br /&gt;    @movie_list = MovieList.new &lt;br /&gt;    @movie_list.add Movie.new("Star Wars") &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  specify "should have a size of one" do&lt;br /&gt;    @movie_list.size.should.be 1&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  specify "should include the movie 'Star Wars'" do&lt;br /&gt;    @movie_list.should.include "Star Wars" &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  specify "should not include the movie 'Serenity'" do&lt;br /&gt;    @movie_list.should.not.include "Serenity" &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see, they've done away with the class and method definitions, in favor or a more expressive DSL with methods like 'context', 'setup', and 'specify' to which you pass in a block of assertions. And they've removed the underscore named methods with a method chain ('should.not.be', 'should.not.include') that, while maybe a bit unrubish, you could argue reads a bit more naturally - in English, anyway.&lt;br /&gt;&lt;br /&gt;Dave has also said that they will be porting RSpec to Java and C# at some point, though it won't be quite as pretty an API as Ruby. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114671346981823467?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114671346981823467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114671346981823467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114671346981823467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114671346981823467'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/05/dave-astels-makes-some-rspec-revisions.html' title='Dave Astels makes some RSpec revisions'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114499801281778640</id><published>2006-04-13T08:58:00.000-07:00</published><updated>2006-04-14T00:00:12.830-07:00</updated><title type='text'>Canada on Rails - Day 1</title><content type='html'>DHH is about to give the keynote "Where to next with Ruby on Rails." The room is packed. I hope the AC is good in here, or we'll be shedding layers soon.&lt;br /&gt;&lt;br /&gt;Got in late last night after a 7 hour drive from Pragmatic Rails Studio in Portland, OR. The Hotel LeSoleil was a welcome sight. Friendly staff and very comfortable rooms, an excellent choice by conference organizer Nathaniel Brown. Still running on 4 hours sleep, coffee, and pure fumes. It's been a long week and it's only half over. &lt;br /&gt;&lt;br /&gt;More to come...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114499801281778640?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114499801281778640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114499801281778640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114499801281778640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114499801281778640'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/04/canada-on-rails-day-1.html' title='Canada on Rails - Day 1'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114499883399776117</id><published>2006-04-13T01:45:00.000-07:00</published><updated>2006-04-19T23:13:05.516-07:00</updated><title type='text'>Rails Studio - Day 3</title><content type='html'>Wrapped up the class with web forms, ActiveRecord, filters, interface design, security, and deployment. Left wanting for a bit more, but overall really happy with the course. I think a 5 day course is probably a must to get the full burrito, but I'll probably be able to pick up the rest on my own.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114499883399776117?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114499883399776117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114499883399776117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114499883399776117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114499883399776117'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/04/rails-studio-day-3.html' title='Rails Studio - Day 3'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114499847549004638</id><published>2006-04-12T22:00:00.000-07:00</published><updated>2006-04-14T00:07:55.490-07:00</updated><title type='text'>Rails Studio - Day 2</title><content type='html'>Controllers, views, partials, layouts, Ajax, RJS, and testing. Went for another run around Portland's riverfront. Fabulous evening. Expect to sleep better tonight after popping a couple of Tylenol PM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114499847549004638?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114499847549004638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114499847549004638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114499847549004638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114499847549004638'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/04/rails-studio-day-2.html' title='Rails Studio - Day 2'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114471767358496120</id><published>2006-04-10T18:04:00.000-07:00</published><updated>2006-04-11T15:44:43.413-07:00</updated><title type='text'>Rails Studio - Day 1</title><content type='html'>I'm in lovely Portland, Oregon. I just wrapped up the first day of the &lt;a href="http://pragmaticstudio.com/rails/index.html"&gt;Pragmatic Rails Studio&lt;/a&gt;. Dave and Mike are great instructors.&lt;br /&gt;&lt;br /&gt;Dave and Mike spent the first half of the day going over basic Ruby syntax and idioms. Not a lot of new stuff there for me. But the second half of the day was spent on Rails, mvc, and migrations. The migrations stuff was fairly new to me, so lots of good stuff there. Fun crowd of folks. Picking up some nifty tips and tricks I will post later.&lt;br /&gt;&lt;br /&gt;After class, I went for a nice 3 mile run around the river. What a great town. Must visit more often!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114471767358496120?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114471767358496120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114471767358496120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114471767358496120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114471767358496120'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/04/rails-studio-day-1.html' title='Rails Studio - Day 1'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114331927830588167</id><published>2006-03-25T12:22:00.000-08:00</published><updated>2006-03-25T13:32:44.013-08:00</updated><title type='text'>Tired: Amazon Lists; Wired: All Consuming and Lists of Bests</title><content type='html'>I've been under a large rock for the last month, so it came as a surprise to me that the &lt;a href="http://www.robotcoop.com/"&gt;Robots&lt;/a&gt; had done it again and expanded their suite of free online apps for managing your lists.&lt;br /&gt;&lt;br /&gt;In addition to &lt;a href="http://www.43things.com/"&gt;43 Things&lt;/a&gt;, &lt;a href="http://www.43places.com/"&gt;43 Places&lt;/a&gt;, and &lt;a href="http://www.43people.com/"&gt;43 People&lt;/a&gt;, &lt;a href="http://www.robotcoop.com/articles/2006/03/10/welcome-to-the-new-lists-of-bests-and-the-all-consuming"&gt;they have integrated&lt;/a&gt; &lt;a href="http://43.allconsuming.net/"&gt;All Consuming&lt;/a&gt; with a new offering - &lt;a href="http://www.listsofbests.com/"&gt;Lists of Bests&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've always been dissatisfied with Amazon's list and recommendation implementations, primarily because they've lacked the ability to create lasting personal networks along with threaded discussions and recommendations among folks with similar interests. In my mind Amazon has created more of a competitive and individualistic network on their site (Listmania!, My Wish Lists, Top Reviewers), rather  than a truly cooperative community that openly shares information and builds trust over time.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/discussionboard/content/db-guidelines.html/002-1739166-1315266"&gt;Amazon's new "Customer Discussions" beta&lt;/a&gt; seems to be an attempt to finally address this deficiency, but the very name they chose for this feature belies how they view you first and foremost - as a  customer, not a member of a community.&lt;br /&gt;&lt;br /&gt;I think the Robots' approach is more savvy because it's more about people's interests and interactions than just the things they buy. The community tools they are building with their integrated sites recognize that we humans are multi-faceted* social creatures - we do things, we have opinions, we consume, we meetup, and we go places - together! And of course, their designs are simply KICK-ASS!&lt;br /&gt;&lt;br /&gt;* subliminal nod to &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt; which the Robots use to build their stuff. ;)&lt;br /&gt;&lt;br /&gt;p.s. The Robots provide &lt;a href="http://www.allconsuming.net/account/javascript"&gt;a simple javascript API&lt;/a&gt; to display your All Consuming list on your blog or web page. I've added mine here, below and to the left.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114331927830588167?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114331927830588167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114331927830588167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114331927830588167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114331927830588167'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/03/tired-amazon-lists-wired-all-consuming.html' title='Tired: Amazon Lists; Wired: All Consuming and Lists of Bests'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114231035392407758</id><published>2006-03-13T20:16:00.000-08:00</published><updated>2006-03-18T08:11:07.820-08:00</updated><title type='text'>Road Trip! Rails week in April.</title><content type='html'>It's a done deal. I'll be heading to Portland for the &lt;a href="http://pragmaticstudio.com/rails/index.html"&gt;Rails Pragmatic Studio&lt;/a&gt; and zipping up to Vancouver immediately after for the &lt;a href="http://canadaonrails.com"&gt;Canada on Rails conference&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I'll probably drive so if anyone needs a ride down from Seattle or up from Portland to Seattle or B.C., drop me a line. &lt;br /&gt;&lt;br /&gt;I'll be taking the &lt;a href="http://tdiclub.com/TDIFAQ/"&gt;TDI&lt;/a&gt; so I think a full tank of biodiesel may get me there and back again. &lt;br /&gt;&lt;br /&gt;Does anyone know of any biodiesel stations en route just in case?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114231035392407758?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114231035392407758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114231035392407758' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114231035392407758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114231035392407758'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/03/road-trip-rails-week-in-april.html' title='Road Trip! Rails week in April.'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114219308157136323</id><published>2006-03-12T11:23:00.000-08:00</published><updated>2006-04-10T15:21:01.806-07:00</updated><title type='text'>Dating Ruby. And Mom, I think it's serious this time</title><content type='html'>I finally got around to downloading the &lt;a href="http://snakesandrubies.com/event/"&gt;December meeting of the Chicago Snakes and Rubies&lt;/a&gt;. &lt;a href="http://www.loudthinking.com/"&gt;DHH&lt;/a&gt; gave a presentation where he talked about his "pursuit of beauty" within &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt; and the &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt; framework, and starts his talk with a quote from the physicist &lt;a href="http://en.wikipedia.org/wiki/Richard_Feynman"&gt;Richard Feynman&lt;/a&gt; which is worth repeating:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;emphasis&gt;"You can recognize truth by its beauty and simplicity.&lt;br /&gt;When you get it right, it is obvious that it is right."&lt;/emphasis&gt;&lt;br /&gt;-- Richard Feynman, Scientist&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;It got me to thinking about BEAUTY, along with my somewhat jaded dating history with certain programming languages which should go unnamed. OK, why not kiss and tell: Basic (H.S.), Pascal (University), C++ and Perl (Adobe), Java, Visual Basic and C# (IDX/GE) - in that order. I can't but help wondering now if I'd only gotten to know Ruby better earlier, how much heartbreak and mental anguish could I have avoided?&lt;br /&gt;&lt;br /&gt;But I guess you can't expect your first love to be the one true love of your life, like in the fairy tales. You've got to put yourself out there, mingle a bit, kiss a few frogs, test the waters, have some blowout fights, win some and lose some to know what's possible. After all, how many seasons did it take for &lt;a href="http://www.davidandmaddie.com/"&gt;David Addison and Maddie Hayes&lt;/a&gt; to finally hook up? Love is HARD. &lt;br /&gt;&lt;br /&gt;I suppose there is some truth to the old saw that what doesn't kill us makes us stronger. But I can't help wishing I could at least get back some of the last 11 years and spend a bit of it with that mysterious beauty from the Pacific Rim, Ruby. We had a brief flirtation in the late 90's. Nothing serious. Passing ships in the night really. We met at a speed dating event. We had scheduling conflicts and then we lost each other's cell number. Bad timing, I guess.&lt;br /&gt;&lt;br /&gt;At the time I was distracted and fairly into &lt;a href="http://www.perl.com/"&gt;Perl&lt;/a&gt;. She wasn't my first, but she taught me a lot. While there were things I really dug about her (regular expression handling, reporting, file operations), she just never fit well with my mental makeup. Not very objective and way too religious: all that &lt;a href="http://www.codeproject.com/perl/camel_poop.asp"&gt;"bless"-ed sillyness&lt;/a&gt;. (To Ruby, &lt;a href="http://www.rubycentral.com/book/ref_c_object.html"&gt;everyone is a child of God&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;I don't want to seem shallow here, but I'm sorry, forget beauty even with a small "b." She was far from a looker. I think was primarily attracted to her nimble efficiency and subtle - dare I say Vulcan - intellect. But half the time I had to get her to repeat herself six ways to Sunday to finally get what she was trying to tell me.  No universal translator for us, no "my mind to your mind, my thoughts to your thoughts." And &lt;a href="http://www.catb.org/jargon/html/T/TMTOWTDI.html"&gt;sooo indecisive&lt;/a&gt;. Trust me, the last creature in this or any other galaxy you want to date is a wishy-washy Vulcan.&lt;br /&gt;&lt;br /&gt;So, when I later met &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;, that alluring snake in the grass, &lt;a href="http://diveintopython.org/"&gt;in a local dive bar&lt;/a&gt;, I found and immediate appeal in her strict constraints and draconian philosophies. Unlike Perl, Py was a no-nonsense dominatrix who laid down the law, smooth black leather whip in one hand, ostrich feather in the other. And man, did you like it. You couldn't get enough. When it hurt, it hurt &lt;em&gt;GOOD&lt;/em&gt;. And she always left you wanting more, more, MORE!&lt;br /&gt;&lt;br /&gt;But then, I abruptly ended it. She struck me as a tad bossy and, frankly, a bit castrating. Always insisting I do things her way, crossing all my t's, etc.  I admit that maybe my male ego got in the way. And perhaps it was also a style thing. No one's fault. But I had needed a bit more freedom. Nevertheless, we still talk. In the end, I think we might make good platonic friends, the kind you call up at the end of a rough day for a little perspective. &lt;br /&gt;&lt;br /&gt;But after my brief affair with Py things went seriously down hill for me. You see, over the past five years I've been seeing a lot of &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/vcsharp/"&gt;C#&lt;/a&gt;. I met both of them at work after a painful re-org, which makes me think I was probably on the rebound. Licking my wounds, I suppose I wanted more stability, a sure thing. As if. &lt;br /&gt;&lt;br /&gt;I found them both compelling for many reasons. Like a lot of my friends and coworkers, I got sucked in by their sexy promises. And what a HUGE network of &lt;a href="http://www.gotdotnet.com/"&gt;friends&lt;/a&gt; and &lt;a href="http://java.sun.com/community/"&gt;family&lt;/a&gt;. And I confess I'd never been asked to participate in a threesome. So what red-blooded guy is gonna say no to that? (Though it did bug me how afterwards they were always &lt;a href="http://www.gotdotnet.com/team/compare/petshop.aspx"&gt;comparing each other's&lt;/a&gt; &lt;a href="http://java.sun.com/developer/releases/petstore/"&gt;performance in bed&lt;/a&gt;, ad nauseum).&lt;br /&gt;&lt;br /&gt;But when you get right down to it there never has been much physical attraction there. Very little chemistry between us. Just going through the motions, really. Nothing like the blood-rushing zing I had with Py, or even the "ahas" from my long conversations with Perl. Anyway, it's probably a bad idea to date two of your coworkers. Better to meet at an out-of-town bar or in an AOL chatroom.&lt;br /&gt;&lt;br /&gt;OK, here's the truth. They're really not that hot after you spend much time with them. I'm &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0743544676?v=glance"&gt;just not that into them&lt;/a&gt;. They just aren't that beautiful to me.&lt;br /&gt;&lt;br /&gt;Case in point... &lt;br /&gt;&lt;br /&gt;What better way to "compare" them to Ruby than with &lt;a href="http://www.onjava.com/pub/a/onjava/2003/03/12/java_comp.html"&gt;Java's Comparator/Comparable&lt;/a&gt;, &lt;a href="http://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_csref/html/a8fa49a1-6e78-4a09-87e5-84a0b9f5ffbe.asp"&gt;C#'s IComparable&lt;/a&gt;, and Ruby's &lt;a href="http://ruby-doc.org/core/classes/Enumerable.html#M002092"&gt;sort_by&lt;/a&gt; for &lt;a href="http://ruby-doc.org/core/classes/Enumerable.html"&gt;Enumerable&lt;/a&gt; implementations for sorting. (How "meta" is that?). &lt;br /&gt;&lt;br /&gt;I won't clutter up this already long post with the Java and C# ugliness (there are fine examples in the previous links), but here is Ruby's terse, elegant, and BEAUTIFUL solution:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;class Person       &lt;br /&gt;attr_accessor :first_name, :last_name&lt;br /&gt;  def initialize(first_name, last_name)&lt;br /&gt;    @first_name = first_name&lt;br /&gt;    @last_name = last_name&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;people = [ Person.new("Andy", "Hunt"),&lt;br /&gt;           Person.new("David Heinemeier", "Hansson"),&lt;br /&gt;           Person.new("Dave", "Thomas"),&lt;br /&gt;           Person.new("Yukihiro", "Matsumoto") ]&lt;br /&gt;&lt;br /&gt;sorted = people.sort_by            {|person| [person.last_name, &lt;br /&gt;                      person.first_name] }&lt;br /&gt;sorted.each           { |person| puts "#{person.first_name}                            #{person.last_name}" }&lt;br /&gt;&lt;br /&gt;==&amp;gt;&lt;br /&gt;&lt;br /&gt;David Heinemeier Hansson&lt;br /&gt;Andy Hunt&lt;br /&gt;Yukihiro Matsumoto&lt;br /&gt;Dave Thomas&lt;/pre&gt;&lt;br /&gt;I think it's not surprising who I'd rather take home with me from this party. Assuming I haven't had too much to drink.&lt;br /&gt;&lt;br /&gt;This is of course, just one example, but I think it is representive of the differences in their expressiveness. And it illustrates the BEAUTY of some of Ruby's concepts like &lt;a href="http://www.artima.com/intv/closures.html"&gt;blocks and closures&lt;/a&gt; that are available to other dynamic ladies like Lisp, Python, and Smalltalk.&lt;br /&gt;&lt;br /&gt;Now I find my heart pining for what I've been missing, the dynamic nature of some of my earlier loves.&lt;br /&gt;&lt;br /&gt;So last year, I took a leap. Tracked down Ruby again (thanks Google!). Apparently she was still available, hadn't settled down one bit (no 2.3 kids, Chrysler mini-van, and surburban cell for her). She has an even bigger network of &lt;a href="http://www.rubygarden.org/ruby"&gt;friends &lt;/a&gt;(and &lt;a href="http://www.rubyonrails.org/community"&gt;lovers&lt;/a&gt;), is doing some really amazing things with &lt;a href="http://www.loudthinking.com/"&gt;this Danish guy&lt;/a&gt;, and is as &lt;a href="http://www.opensource.org/"&gt;open to the world&lt;/a&gt; as ever.&lt;br /&gt;&lt;br /&gt;Here's my thinking. I figure that I dump Java and C# for a fulltime relationship with Ruby ("Sorry, girls. But it's &lt;em&gt;you&lt;/em&gt; - not me - this time."). I increase my happiness by an order of magnitude of 10 (at least!) and I'll be 10 billion times more productive. I should make up for those lost 11 years in no time flat.&lt;br /&gt;&lt;br /&gt;Of course, this will mean some major changes in my life. A lot of work and risk. But maybe that's the price of true love. It'll be worth it all if, at the end of each night, on the long walk home from the date, I can look up into the night sky and get that same oceanic feeling I had so many years ago. That life is good, beauty is all around me, and I can once again kiss the stars.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114219308157136323?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114219308157136323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114219308157136323' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114219308157136323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114219308157136323'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/03/dating-ruby-and-mom-i-think-its.html' title='Dating Ruby. And Mom, I think it&apos;s serious this time'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114210349654066369</id><published>2006-03-11T10:25:00.000-08:00</published><updated>2006-03-12T09:54:07.590-08:00</updated><title type='text'>Barbarians at the Gate?</title><content type='html'>I think &lt;a href="http://java.sys-con.com/read/193146.htm"&gt;Gosling is in total denial&lt;/a&gt; about Java losing ground with a large class of problems and developers. &lt;a href="http://weblogs.java.net/blog/batate/"&gt;Some of&lt;/a&gt; &lt;a href="Justin" gehtland=""&gt;the top&lt;/a&gt; &lt;a href="http://jroller.com/page/dgeary"&gt;Java evangelists&lt;/a&gt; are turning to &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt; because they feel ignored and to some extent betrayed.&lt;br /&gt;&lt;br /&gt;His comment about Ruby being just a scripting language that generates&lt;br /&gt;web pages without power in the application domain shows a lack of&lt;br /&gt;understanding of Ruby as a provider for &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;DSLs&lt;/a&gt;. If he'd ever actually looked at any &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt; code surely he would see this. &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/classes/ERB.html"&gt;ERB&lt;/a&gt;, embedded ruby, is what actually generates web pages (from rhtml templates) in Rails. Rails itself is a DSL with ORM, cross-cutting concerns, and business logic written in Ruby. Ruby's power to create DSLs shows that Ruby is the anti-thesis of a specialized language (as Gosling claims) and it's one of the reasons &lt;a href="http://www.loudthinking.com/"&gt;DHH&lt;/a&gt; wrote Rails in Ruby.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt;'s main problems are much like &lt;a href="http://www.perl.com/"&gt;Perl&lt;/a&gt;'s: bolted on OO lacking DSL&lt;br /&gt;capability. And it's grown too organically to be consistent and&lt;br /&gt;manageable. Ruby has the advantage that the language has borrowed&lt;br /&gt;concepts from the best of Smalltalk, Python, Lisp, etc. and the&lt;br /&gt;community has been small and smart. It's found a pleasant balance&lt;br /&gt;between Python's rigidity and Perl's TMTOWTDI ("There's More Than One Way To Do It").&lt;br /&gt;&lt;br /&gt;And Gosling's comment about complexity reveals that he may not subscribe to Einstein's maxim: "Make everything as simple as possible, but not simpler." Perhaps Gosling's version would be "Make everything as difficult as possible, even the simple things."&lt;br /&gt;&lt;br /&gt;Instead of &lt;a href="http://www.reference.com/browse/wiki/Nero"&gt;fiddling while the city burns&lt;/a&gt;, Java would be better served by leaders who took these realities to heart and talked about how they are going to address them.&lt;br /&gt;&lt;br /&gt;I can understand why they want to protect their language's persona, but if they really want to keep their customer base, I think they should &lt;a href="https://gettingreal.37signals.com/"&gt;"get real" and take some advice from the guys at 37signals&lt;/a&gt; about being forthright and responsive: admitting your faults to customers and fixing them as soon as possible.&lt;br /&gt;&lt;br /&gt;Take it from someone who spent almost &lt;a href="http://www.adobe.com/support/"&gt;3 years in technical support and training&lt;/a&gt;, this is how you build lasting customer loyalty. Through acceptance that you are not perfect, the desire to improve, and an honest willingness to help your client. Not through denial and neglect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114210349654066369?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114210349654066369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114210349654066369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114210349654066369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114210349654066369'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/03/barbarians-at-gate.html' title='Barbarians at the Gate?'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114187171121646009</id><published>2006-03-08T18:25:00.000-08:00</published><updated>2006-03-08T19:01:30.063-08:00</updated><title type='text'>Established corporate healthcare IT, meet your new competition</title><content type='html'>I'd like to introduce you to a &lt;a href="http://www.revolution.com/health/default.asp"&gt;Revolution&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;First you should check out who is on the &lt;a href="http://www.revolution.com/health/founding.asp"&gt;board of directors&lt;/a&gt;, then take a peek at &lt;a href="http://www.revolution.com/health/executiveteam.asp"&gt;the executive team&lt;/a&gt; leading the charge.&lt;br /&gt;&lt;br /&gt;Now take a look at &lt;a href="http://jobs.rubynow.com/jobs/show/222"&gt;the technology they'll be using&lt;/a&gt;. The 3 R's are for &lt;em&gt;R&lt;/em&gt;uby on &lt;em&gt;R&lt;/em&gt;ails for the &lt;em&gt;R&lt;/em&gt;evolution.&lt;br /&gt;&lt;br /&gt;Did the earth just move a little?&lt;br /&gt;&lt;br /&gt;Are you worried? &lt;br /&gt;&lt;br /&gt;You should be.&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114187171121646009?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114187171121646009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114187171121646009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114187171121646009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114187171121646009'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/03/established-corporate-healthcare-it.html' title='Established corporate healthcare IT, meet your new competition'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-114141270661478666</id><published>2006-03-03T10:48:00.000-08:00</published><updated>2006-03-27T18:50:13.396-08:00</updated><title type='text'>Subversion ASP.NET hack - Ruby and Rake to the rescue</title><content type='html'>I recently began using &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; to manage some Microsoft VS.NET solutions when I encountered &lt;a href="http://www.codefez.com/Home/tabid/36/articleType/ArticleView/articleId/191/SubversionandtheASPNETHack.aspx"&gt;this nasty problem with ASP.NET web projects&lt;/a&gt;. No one seems to know exactly why, but VS.NET has trouble loading Web projects from the server when there are folders that begin with a dot.&lt;br /&gt;&lt;br /&gt;Tigris does offer a hack workaround that simply renames the ".svn" folders to "_svn", but it requires that you constantly change environment variables and reboot your system if you want to keep your .svn directories and remain compatible with command-line svn and other non-Windows systems.&lt;br /&gt;&lt;br /&gt;After listening to &lt;a href="http://topfunky.com/"&gt;Geoffrey Grosenbach&lt;/a&gt;'s &lt;a href="http://podcast.rubyonrails.com/"&gt;Ruby on Rails podcast&lt;/a&gt; with &lt;a href="http://onestepback.org/"&gt;Jim Weirich&lt;/a&gt; about his most excellent build tool &lt;a href="http://rake.rubyforge.org/"&gt;Rake&lt;/a&gt;, I thought this would be a case for the  dynamic duo.&lt;br /&gt;&lt;br /&gt;So I picked up the &lt;a href="http://www.millionaireplayboy.com/toys/batphone.php"&gt;Batphone&lt;/a&gt; (you did notice it is red, no?), and a few minutes later I had a way to switch the directories to an ASP.NET compatible version any time I need to reload the Web project. It takes under a second to recurse over 2,000 folders on my Dell D600. Not bad, especially considering how long it takes  that cursed laptop to reboot.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ruby-lang.org/"&gt;Ruby Fu&lt;/a&gt;! HIYAH!!&lt;br /&gt;&lt;br /&gt;&lt;code&gt;fileutils.rb:&lt;/code&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;&lt;pre&gt;require "ftools"&lt;br /&gt;&lt;br /&gt;module YaYaSoft&lt;br /&gt;  class FileUtils&lt;br /&gt;    def self.rename_all(dir, from, to)&lt;br /&gt;      return nil unless FileTest.directory?(dir)&lt;br /&gt;      Dir.foreach(dir) do |e|&lt;br /&gt;        next if [".", ".."].include? e&lt;br /&gt;        fullname = dir + File::Separator + e&lt;br /&gt;        if FileTest.directory?(fullname) &amp;&amp; e == from&lt;br /&gt;          puts "Renaming #{fullname} to #{to}"&lt;br /&gt;          File.move(fullname, dir + File::Separator + to)&lt;br /&gt;        elsif FileTest.directory?(fullname)&lt;br /&gt;          #puts "Checking directory: #{fullname}"&lt;br /&gt;          rename_all(fullname, from, to)&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;code&gt;rakefile.rb:&lt;/code&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;&lt;pre&gt;require 'yayasoft/fileutils'&lt;br /&gt;&lt;br /&gt;DIRS = ['../webapps/Web', '../webapps/dotNET/WebService']&lt;br /&gt;&lt;br /&gt;desc 'Switch to ASP.NET compatible'&lt;br /&gt;task :switch_aspnet do&lt;br /&gt;  DIRS.each do |dir| &lt;br /&gt;    YaYaSoft::FileUtils.rename_all(dir, '.svn', '_svn')&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;desc 'Switch to standard .svn'&lt;br /&gt;task :switch_svn do&lt;br /&gt;  DIRS.each do |dir| &lt;br /&gt;    YaYaSoft::FileUtils.rename_all(dir, '_svn', '.svn')&lt;br /&gt;  end&lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-114141270661478666?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/114141270661478666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=114141270661478666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114141270661478666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/114141270661478666'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/03/subversion-aspnet-hack-ruby-and-rake.html' title='Subversion ASP.NET hack - Ruby and Rake to the rescue'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113902453103683306</id><published>2006-02-03T19:28:00.000-08:00</published><updated>2006-03-27T18:51:23.196-08:00</updated><title type='text'>Rails assertion logging</title><content type='html'>&lt;a href="http://www.robbyonrails.com/"&gt;Robby Russell&lt;/a&gt;, who is working on a &lt;a href="http://www.programmingrails.com/"&gt;new book for O'Reilly press&lt;/a&gt;, posted a &lt;a href="http://www.robbyonrails.com/articles/2006/01/25/rails-logger-and-those-pesky-tests"&gt;neat trick on logging from within your tests&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;By adding this in addition to his logger method, I'm also able to log all the assertion messages to test.log when they fail - without any changes to my tests. I wouldn't usually care about logging in tests unless they fail, so that works even better for me.&lt;br /&gt;&lt;br /&gt;#test_helper.rb:&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;br /&gt;class Test::Unit::TestCase&lt;br /&gt;&lt;br /&gt; # Robby's method&lt;br /&gt; def logger&lt;br /&gt;   RAILS_DEFAULT_LOGGER&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# my addition&lt;br /&gt;module Test&lt;br /&gt; module Unit&lt;br /&gt;   module Assertions&lt;br /&gt;     alias_method :assert_block_original, :assert_block&lt;br /&gt;    &lt;br /&gt;     def assert_block(message="assert_block failed.", &lt;br /&gt;                      &amp;block)&lt;br /&gt;       assert_block_original(message, &amp;amp;block)&lt;br /&gt;     rescue AssertionFailedError =&amp;gt; error&lt;br /&gt;       logger.info(message.to_s)&lt;br /&gt;       raise error&lt;br /&gt;     end&lt;br /&gt;   end&lt;br /&gt; end&lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I'm looking forward to Robby's book. Should be chock full of goodly nuggets. He's also presenting at &lt;a href="http://canadaonrails.com/yvr06-schedule.html"&gt;Canada on Rails ("Sneaking Rails into the (Legacy) System")&lt;/a&gt;. As a guerilla Rubyist, I'm hoping for some new tricks from that too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113902453103683306?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113902453103683306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113902453103683306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113902453103683306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113902453103683306'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/02/rails-assertion-logging.html' title='Rails assertion logging'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113874808195842388</id><published>2006-01-31T14:49:00.000-08:00</published><updated>2006-01-31T14:57:45.843-08:00</updated><title type='text'>top jobs 2006 - watch your back</title><content type='html'>I was flipping through &lt;a href="http://www.fastcompany.com/slideshow/slideviewer.cgi?list=top-jobs-2006&amp;dir=&amp;config=&amp;refresh=8&amp;direction=forward&amp;scale=0&amp;cycle=on&amp;slide=10&amp;design=default&amp;total=27"&gt;this slideshow&lt;/a&gt; on the top jobs for 2006 as reported by &lt;a href="http://www.fastcompany.com"&gt;Fast Company&lt;/a&gt;, and got a laugh. &lt;br /&gt;&lt;br /&gt;Just go to the slideshow link, read job #9, click the "Next Slide" link, and you'll see what I mean.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113874808195842388?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113874808195842388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113874808195842388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113874808195842388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113874808195842388'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/top-jobs-2006-watch-your-back.html' title='top jobs 2006 - watch your back'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113763621432569355</id><published>2006-01-18T17:56:00.000-08:00</published><updated>2006-01-18T18:03:34.343-08:00</updated><title type='text'>Canada on Rails schedule finalized</title><content type='html'>The &lt;a href="http://canadaonrails.com/yvr06-schedule.html"&gt;schedule for Canada On Rails&lt;/a&gt; has been finalized.&lt;br /&gt;&lt;br /&gt;I'm particularly interested in &lt;a href="http://canadaonrails.com/yvr06-david-astels.html"&gt;David Astel's presentation on Behavior-Driven Design&lt;/a&gt; and &lt;a href="http://canadaonrails.com/node/22"&gt;Steven Baker's Test-Driving the Rails&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Talks covering AJAX, engines and plug-ins too! Yummy stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113763621432569355?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113763621432569355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113763621432569355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113763621432569355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113763621432569355'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/canada-on-rails-schedule-finalized.html' title='Canada on Rails schedule finalized'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113736790210829882</id><published>2006-01-15T15:13:00.000-08:00</published><updated>2006-02-03T19:47:55.390-08:00</updated><title type='text'>The Maple Leaf is Red for a Reason</title><content type='html'>I just registered for &lt;a href="http://canadaonrails.com/"&gt;CanadaOnRails&lt;/a&gt;, the first international &lt;a href="http://rubyonrails.com/"&gt;Ruby on Rails&lt;/a&gt; conference. There is a great line-up of &lt;span style="font-weight: bold;"&gt;15&lt;/span&gt; &lt;a href="http://canadaonrails.com/10-5-rails-experts-to-speak-in-vancouver-bc-for-the-canada-on-rails-yvr06-conference.html"&gt;speakers&lt;/a&gt;, so the topics are bound to be fun and enlightening. I think I'll hang out in &lt;a href="http://www.city.vancouver.bc.ca/"&gt;Vancouver&lt;/a&gt; over the weekend cause I just loooove that city.&lt;br /&gt;&lt;br /&gt;For 155 USD, this must be the most inexpensive conference in this galaxy. Now if I drive up in the VW camper bus, sleep in the hotel parking lot,  eat top ramen through December, and send my kids to state schools instead of ivy league, I might also be able to swing &lt;a href="http://us.pycon.org/TX2006/HomePage"&gt;PyCon&lt;/a&gt;, &lt;a href="http://conferences.oreillynet.com/os2006/"&gt;OSCON&lt;/a&gt;, &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; &lt;a href="http://www.rubyconf.org/"&gt;RubyConf&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113736790210829882?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113736790210829882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113736790210829882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113736790210829882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113736790210829882'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/maple-leaf-is-red-for-reason.html' title='The Maple Leaf is Red for a Reason'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113727536226549617</id><published>2006-01-14T13:39:00.000-08:00</published><updated>2006-01-14T13:58:10.900-08:00</updated><title type='text'>Murderball</title><content type='html'>Last night Lindsay and I &lt;a href="http://www.apple.com/trailers/independent/murderball/"&gt;watched&lt;/a&gt; &lt;a href="http://www.imdb.com/title/tt0436613/"&gt;this incredible documentary&lt;/a&gt; about quadriplegic rugby players who participate in the &lt;a href="http://www.paralympic.org/"&gt;&lt;span style="text-decoration: underline;"&gt;International Paralympics&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It was moving and inspiring. Watch this film and you'll never complain about your lower back pain or waste your time on another episode of "Survivors" again. The folks in this film are the real survivors, real-life heroes with guts and heart.&lt;br /&gt;&lt;br /&gt;People are amazing creatures when you get to know them.&lt;br /&gt;&lt;br /&gt;The camera work and editing are phenomenal. It won Best Documentary at the 2005 &lt;a href="http://festival.sundance.org/"&gt;Sundance Film Festival&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113727536226549617?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113727536226549617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113727536226549617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113727536226549617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113727536226549617'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/murderball.html' title='Murderball'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113726748912274855</id><published>2006-01-14T11:22:00.000-08:00</published><updated>2006-01-14T23:43:10.323-08:00</updated><title type='text'>regional blogging conference</title><content type='html'>I read about this new blogging conference &lt;a href="http://2006.northernvoice.ca/"&gt;Northern Voice&lt;/a&gt; held in Vancouver, BC on the blogs of fellow islanders &lt;a href="http://www.julieleung.com/archives/002076.html"&gt;Julie Leung&lt;/a&gt; and &lt;a href="http://www.sauria.com/blog/2006/01/13#1459"&gt;Ted Leung&lt;/a&gt;. Tempting.&lt;br /&gt;&lt;br /&gt;It's great to see online communities acting as catalysts for face-to-face friendships.&lt;br /&gt;&lt;br /&gt;It might be cool to do a mash-up of &lt;a href="http://maps.google.com/"&gt;Google maps&lt;/a&gt; with bloggers so that everyone can see their proxity to each other. You could also build identity profiles to link yourself in to other groups, like book groups, discussion groups, etc.  Perhaps &lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt;  already has this feature?&lt;br /&gt;&lt;br /&gt;(BTW: If you haven't tried it, Google Earth is &lt;a href="http://googleblog.blogspot.com/2006/01/google-earth-in-mac-world-pc-too.html"&gt;now available for the Mac&lt;/a&gt;. It is simply awesome software.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113726748912274855?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113726748912274855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113726748912274855' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113726748912274855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113726748912274855'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/regional-blogging-conference.html' title='regional blogging conference'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113726409025848868</id><published>2006-01-14T10:16:00.000-08:00</published><updated>2006-01-14T13:07:11.300-08:00</updated><title type='text'>calling all portable hard drives</title><content type='html'>With under 1 GB left on the ole powerbook, I'm in the market for a portable hard drive. I need more space for movies, music, backups, and &lt;a href="http://imdb.com/name/nm0000170/"&gt;Milla Jovovich&lt;/a&gt; photo collection.&lt;br /&gt;&lt;br /&gt;Please let me know if you have any recommendations or warnings on models out there. Links to reviews would be much appreciated. Thanks!&lt;br /&gt;&lt;br /&gt;My specs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;80 GB or better; probably should go for 120 GB.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fast spindle (at least 5400rpm, but preferably 7200 rpm; I've seen benchmarks on some 5400's that were faster than 7200 due to other other factors)&lt;/li&gt;&lt;li&gt;USB 2.0 and/or Firewire 800 (seems like the industry has settled on USB)&lt;/li&gt;&lt;li&gt;Decent cache (~2 MB)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fast benchmarks for read, write, transfer done by reputable tester&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Works flawlessly with Mac and Windows; no extra drivers to install and troubleshoot&lt;/li&gt;&lt;li&gt;Prefer some kind of disk management and backup tool included&lt;/li&gt;&lt;li&gt;Solid construction and gravity tolerant; high G-shock rating. I'm hard on hardware - I mean is IS called "hardware" - and drop something every 10 minutes. Come to think of it, why doesn't &lt;a href="http://www.apple.com/"&gt;Apple&lt;/a&gt; make portable hard drives using their &lt;a href="http://www.kernelthread.com/software/ams/ams.html"&gt;"sudden motion sensor" drive parking technology&lt;/a&gt;?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Capable of being self-powered through USB 2.0 / Firewire 800&lt;/li&gt;&lt;li&gt;Small form factor and light. Should fit in a large shirt pocket. A deck of cards or pack of cigarettes would be nice, but I'd be willing to go bigger for extra padding and durability.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Replaceable disk would be very nice (OK, I may be asking for too much for this one, but it would be nice to reuse the case when the disk plays out)&lt;/li&gt;&lt;li&gt;Attractive, thoughtful design. A portable drive should say, "Take me with you! I'm sleek and sexy. Show me off."&lt;/li&gt;&lt;li&gt;Can boot Mac OS X and/or Linux&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I'm currently leaning toward the &lt;a href="http://www.wdc.com/en/products/Products.asp?DriveID=110&amp;amp;Language=en"&gt;Western Digital Passport&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;UPDATE:&lt;br /&gt;My friend &lt;a href="http://www.kellyandbrian.com/"&gt;Brian&lt;/a&gt; recommends an &lt;a href="http://www.apple.com/ipod/"&gt;iPod&lt;/a&gt;, which is a good idea so I'm thinking on that. I have a 1st gen 5 GB (still going strong) and a &lt;a href="http://www.apple.com/ipodshuffle/"&gt;Shuffle&lt;/a&gt;, but I know if I get a &lt;a href="http://www.apple.com/ipod/ipod.html"&gt;Video iPod&lt;/a&gt; (and I'd have to), I'd fill it up too fast since they are only up to 60 GB. They may need to be bigger and faster for my needs. I suspect they are also going to be coming out with large capacity flash versions in the not too distant future, so I'm sorta waiting to see. I mean, Jobs is cranking out so many different versions, I'm convinced they've built some kind of iPod &lt;a href="http://www.google.com/search?q=fuzzy-pumper+barber+shop"&gt;Fuzzy-Pumper Barber Shop&lt;/a&gt; in the basement of &lt;a href="http://en.wikipedia.org/wiki/Infinite_Loop_%28street%29"&gt;One Infinite Loop&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Brian also recommends &lt;a href="http://www.lacie.com"&gt;LaCie&lt;/a&gt; for their desktop drives, and I've heard good things about them. They are coming out with &lt;a href="http://www.lacie.com/products/product.htm?pid=10718"&gt;this very tough looking new portable&lt;/a&gt; and a &lt;a href="http://www.lacie.com/products/product.htm?pid=10697"&gt;sort-of lego-looking brick&lt;/a&gt;, both due out in February. Unfortunately their rotational speeds are 5400, so I'd have to really see some solid benchmark comparisons to see how they perform. I had been considering their &lt;a href="http://www.lacie.com/products/product.htm?pid=10651"&gt;Porsche portable&lt;/a&gt;, but knowing me I'd break it just pulling it out of the box.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113726409025848868?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113726409025848868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113726409025848868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113726409025848868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113726409025848868'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/calling-all-portable-hard-drives.html' title='calling all portable hard drives'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113693977201605778</id><published>2006-01-10T16:34:00.000-08:00</published><updated>2006-01-11T19:11:06.386-08:00</updated><title type='text'>geek porn</title><content type='html'>Apple has announced &lt;a href="http://www.apple.com/macbookpro/"&gt;first Apple Intel laptop, the MacBook Pro&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Some very cool &lt;a href="http://www.apple.com/macbookpro/design.html"&gt;designs&lt;/a&gt; and &lt;a href="http://www.apple.com/macbookpro/intelcoreduo.html"&gt;features&lt;/a&gt; and some &lt;a href="http://www.apple.com/macbookpro/whatsinside.html"&gt;impressive specs&lt;/a&gt; including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1.67 or 1.83GHz Intel Core Duo processor 2MB on chip with shared L2 cache for dramatic boost in performance&lt;/li&gt;&lt;li&gt;Runs cooler&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Front Row media software and remote control&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Built in &lt;a href="http://www.apple.com/macbookpro/isight.html"&gt;iSight&lt;/a&gt;&lt;/li&gt;&lt;li&gt;MagSafe power connection (This could have saved me some grief with my current 15" powerbook which got dented next to the power connection port.)&lt;/li&gt;&lt;li&gt;Motion sensor for locking hard drive head in a fall&lt;/li&gt;&lt;li&gt;Optional digital audio&lt;/li&gt;&lt;li&gt;Faster, brighter, larger display with ATI Mobility Radeon X1600&lt;/li&gt;&lt;li&gt;Thinner (1") and lighter (5.6 lbs)&lt;/li&gt;&lt;li&gt;Updates to &lt;a href="http://www.apple.com/ilife/"&gt;iLife&lt;/a&gt;, including some interesting publishing/subscribing features for photos and integration into .Mac.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;However:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No mention of improvement to battery life. I get a little under 3 hours now with my 15" aluminum powerbook and I pine for the days of 5 with my old pismo.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No specs for maximum RAM, but I read elsewhere it may be 2G. Would have liked to seen more, &lt;span style="font-style: italic;"&gt;but&lt;/span&gt; it is much faster.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Single firewire port is 400 Mbps, not 800&lt;/li&gt;&lt;li&gt;Moving the wireless antennae from the display to the hinge, while improving the form factor may decrease receptivity&lt;/li&gt;&lt;li&gt;Display resolution could be higher&lt;/li&gt;&lt;li&gt;Hard drives could be faster rpm (7200)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Case is still difficult to open and access. Again, the pismo was &lt;span style="font-weight: bold;"&gt;much&lt;/span&gt; better with it's removable keyboard.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I'm looking forward to demoing them at the Seattle Apple store in February. But I won't likely be a first adopter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113693977201605778?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113693977201605778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113693977201605778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113693977201605778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113693977201605778'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/geek-porn.html' title='geek porn'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113692470804617555</id><published>2006-01-10T12:12:00.000-08:00</published><updated>2006-01-10T12:25:08.063-08:00</updated><title type='text'>New Intel Macs Announced</title><content type='html'>Sweet. A buddy just IM-ed me with a real-time report from &lt;a href="http://live.ilounge.com/"&gt;ilounge&lt;/a&gt; on the &lt;a href="http://www.macworldexpo.com/live/20/"&gt;Macworld&lt;/a&gt; keynote from &lt;a href="http://www.apple.com/"&gt;Apple&lt;/a&gt;'s Steve Jobs.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1:11 - First intel mac, First of new generation of Macs - iMac - We're going to put intel processor inside new iMac.&lt;br /&gt;1:12 - iMac - Same sizes 17 and 20', Same design, Same features, Same prices, What's different - New iMac is 2-3x faster than iMac G5. Uses intel's core duo chip, Two processors on one die, 2mb l2 cache, 2mb l2 cache, Each processor is faster than G5 - iMac Core Duo is name. 2.0Ghz Core Duo is much faster than 2.1ghz iMac g5. Every iMac is now dual processor.&lt;br /&gt;&lt;br /&gt;1:26 - iMac Core Duo - 1.83ghz 17' $1299, 2.0ghz 20' $1699, Shipping today.&lt;br /&gt;&lt;br /&gt;1:30 - New notebook MacBook Pro - Intel Core Duo, Dual processors in every macbook pro. 4-5x faster than g4. Fastest mac notebook ever, Thinnest ever - 1" thin. 15.4 display widescreen as bright as the cinema's. iSight built-in.&lt;br /&gt;&lt;br /&gt;1:33 - Live demo - Ir sensor and apple remote, front row built in. MagSafe - prevents mac from being snagged, new power adapter that's magnetic - Pulls right off. 5.6 lbs. Std features are like prior pb. Dvi video out for 30" cinema display. $1999 1.67, $2499 1.83ghz. Shipping february, Orders today.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I'm reluctant to be an earlier adopter, but I'm drooling over the MacBook and I haven't even seen it yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113692470804617555?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113692470804617555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113692470804617555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113692470804617555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113692470804617555'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/new-intel-macs-announced.html' title='New Intel Macs Announced'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113671564892952597</id><published>2006-01-08T02:10:00.000-08:00</published><updated>2006-01-08T02:20:48.930-08:00</updated><title type='text'>Agiles Rails Development at Canada on Rails</title><content type='html'>&lt;a href="http://blog.lavalamp.ca/"&gt;Steven Baker&lt;/a&gt; is giving a workshop on &lt;a href="http://canadaonrails.com/workshop-agile_rails_development.html"&gt;Agile Rails Development at Canada on Rails&lt;/a&gt; this April. Looks like he will be talking about TDD vs. BDD (Behavior Driven Development) and likely &lt;a href="http://rubyforge.org/projects/rspec/"&gt;RSpec&lt;/a&gt;, his BDD testing framework which &lt;a href="http://electricsheep.blogspot.com/2005/10/dave-astels-behavior-driven-design.html"&gt;I posted about previously&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;This could be a really nice supplement to the book &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;camp=1789&amp;tag=dreamingofele-20&amp;creative=9325&amp;path=ASIN/097669400X/qid=1116188522/sr=2-1/ref=pd_bbs_b_2_1"&gt;Agile Web Development with Rails&lt;/a&gt;, which I liked but wanted to go into more detail about testing. &lt;br /&gt;&lt;br /&gt;I'm having trouble deciding which conference I should attend this year. Vancouver is closer (and cheaper) than Chicago, but the conference web site hasn't yet announced who the speakers are or what the sessions will be about, so it's hard to say.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113671564892952597?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113671564892952597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113671564892952597' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113671564892952597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113671564892952597'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/agiles-rails-development-at-canada-on.html' title='Agiles Rails Development at Canada on Rails'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113671055528893698</id><published>2006-01-08T00:39:00.000-08:00</published><updated>2006-01-08T15:13:59.420-08:00</updated><title type='text'>Idea for blog auto-linking feature</title><content type='html'>What if your blog tracked the links you put in your posts, associated with the linked text, and automatically linked the first term in your future posts with the matching URL. Of course, multiple matches would need some interface for letting you choose the desired URL, and you might want some way to cancel a link as you typed it.&lt;br /&gt;&lt;br /&gt;Maybe you could also invoke the feature on the selected text so that it would return the first 10 results from Google to allow you to choose the best link. (This is sort of what I do manually using &lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox&lt;/a&gt;'s "Search Web For..." feature. ) Seems like that would be a no-brainer for &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt;, &lt;a href="http://typo.leetsoft.com/"&gt;Typo&lt;/a&gt;, or even &lt;a href="http://diveintogreasemonkey.org/"&gt;GreaseMonkey&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You might also want an admin view to manage those URLs so that you can change them and have all your previously links updated. And then you'd just have to have a built-in link checker to alert you to broken links...&lt;br /&gt;&lt;br /&gt;(UH OH. I'm feeling an attack of feature-itis coming on.)&lt;br /&gt;&lt;br /&gt;Does anyone know whether any of the blogging tools out there supports anything like this?&lt;br /&gt;&lt;br /&gt;Might be a nice enhancement to &lt;a href="http://typo.leetsoft.com/"&gt;Typo&lt;/a&gt; which I'm planning to migrate to. Has anyone done this migration from Blogger?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113671055528893698?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113671055528893698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113671055528893698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113671055528893698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113671055528893698'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/idea-for-blog-auto-linking-feature.html' title='Idea for blog auto-linking feature'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113661282122905989</id><published>2006-01-06T21:44:00.000-08:00</published><updated>2006-01-09T17:28:45.773-08:00</updated><title type='text'>"Small town. Big secrets."</title><content type='html'>Andrew sent me a link to a new trailer for his upcoming show on the SCIFI channel, "Eureka", that has more dialog and closeups. I'll update this post when it's ready to be released to the public. I love the deadpan, cynical deliveries of the lead, and the music tracks sound cool.&lt;br /&gt;&lt;br /&gt;More info as it comes in, so stayed tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113661282122905989?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113661282122905989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113661282122905989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113661282122905989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113661282122905989'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/small-town-big-secrets.html' title='&quot;Small town. Big secrets.&quot;'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113652268120727934</id><published>2006-01-05T20:26:00.000-08:00</published><updated>2006-01-05T20:44:41.226-08:00</updated><title type='text'>Done deal</title><content type='html'>Well, it's official. I'm now working for one of the &lt;a href="http://www.gehealthcare.com/company/pressroom/releases/pr_release_10389.html"&gt;world's largest corporations&lt;/a&gt;. How did that happen?&lt;br /&gt;&lt;br /&gt;I'm cautiously hopeful. Only time will tell whether GE "gets the Web" and has the vision - along with concrete strategies - to take eHealth to the next level for healthcare providers AND patients. I'm hearing some good things, but I can't help but wonder how a company this large handles the &lt;a href="http://www.amazon.com/gp/product/0875845851"&gt;innovator's dilemma&lt;/a&gt;  - aside from acquiring smaller companies. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113652268120727934?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113652268120727934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113652268120727934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113652268120727934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113652268120727934'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2006/01/done-deal.html' title='Done deal'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113416560005651765</id><published>2005-12-09T13:56:00.000-08:00</published><updated>2006-01-09T17:26:29.456-08:00</updated><title type='text'>Eureka! coming to SCIFI channel in 2006</title><content type='html'>My brother &lt;a href="http://imdb.com/name/nm1184676/"&gt;Andrew&lt;/a&gt;'s new TV series called &lt;a href="http://www.scifi.com/eureka/"&gt;"Eureka"&lt;/a&gt; is airing this spring/summer on the &lt;a href="http://www.scifi.com/"&gt;SCIFI channel&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's about a small town in the Pacific Northwest full of super-intelligent eccentric geniuses and a ultra-secret organization that taps their talents. Sort of like &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt; + &lt;a href="http://www.twinpeaks.org/"&gt;Twin Peaks&lt;/a&gt; + &lt;a href="http://www.imdb.com/title/tt0120902/"&gt;The X-Files&lt;/a&gt; + &lt;a href="http://www.mi5.gov.uk/"&gt;MI-5&lt;/a&gt; + &lt;a href="http://www.imdb.com/title/tt0118276/"&gt;Buffy the Vampire Slayer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It promises to be dark, quirky, comedic, and strange all in one. And, of course, chock full of cool FX. The &lt;a href="http://imdb.com/title/tt0466369/"&gt;cast looks tremendous&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;They are showing &lt;a href="http://www.vpoint.net/Projects/scfi53710/project_1/quicktimes/EUREKA_30_FINAL.mov"&gt;this trailer (quicktime)&lt;/a&gt; on the SCIFI channel.&lt;br /&gt;&lt;br /&gt;There's another even better trailer on its way later this week, so check back here.&lt;br /&gt;&lt;br /&gt;Tell your friends!&lt;br /&gt;&lt;br /&gt;I'll be posting more about show as I hear it from my bro, so check back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113416560005651765?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113416560005651765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113416560005651765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113416560005651765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113416560005651765'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/12/eureka-coming-to-scifi-channel-in-2006.html' title='Eureka! coming to SCIFI channel in 2006'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113243833099522312</id><published>2005-11-19T13:43:00.000-08:00</published><updated>2005-11-19T14:57:16.670-08:00</updated><title type='text'>My Job Went to India (52 meditations for the 21st century programmer)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;camp=1789&amp;amp;amp;tag=dreamingofele-20&amp;creative=9325&amp;amp;path=ASIN/0976694018/qid=1116188522/sr=2-1/ref=pd_bbs_b_2_1"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/2885/426/320/mjwti_small.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Last night I finished reading &lt;a href="http://www.chadfowler.com/"&gt;Chad Fowler&lt;/a&gt;'s &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;camp=1789&amp;amp;amp;tag=dreamingofele-20&amp;creative=9325&amp;amp;path=ASIN/0976694018/qid=1116188522/sr=2-1/ref=pd_bbs_b_2_1"&gt;My Job Went to India (And All I Got Was This Lousy Book)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's a gold mine of savvy advice on how to increase your value to the business and your marketability in the software industry in the midst of increased offshoring. Sprinkled throughout are shiny little jeweled anecdotes relating Chad's experiences setting up a team of software developers in Bangalore, India for a large corporation.&lt;br /&gt;&lt;br /&gt;His main premise is one worth taking to heart: simply "coding don't cut it anymore. " You have to invest in and guide your career, wear many hats, always be looking for ways to understand your business better while bringing more value to it, actively promote yourself at work and within the software community, and never stand still. I guess you could say if we want to make it to the next stage of evolution, we have to learn to swim like sharks but play together like dolphins.&lt;br /&gt;&lt;br /&gt;This is a timely read for me personally because &lt;a href="http://www.idx.com/"&gt;the company I &lt;span style="text-decoration: line-through"&gt;work for&lt;/span&gt; add value to&lt;/a&gt;  is being purchased by &lt;a href="http://www.ge.com/"&gt;GE&lt;/a&gt;, that very same company that Chad worked for in India.&lt;br /&gt;&lt;br /&gt;I especially liked the format of the book. Each chapter is a quick read (a perfect addition to your bathroom reading :) ) and ends with a list of action items (Act on it!) to help you put his advice into practice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113243833099522312?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113243833099522312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113243833099522312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113243833099522312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113243833099522312'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/11/my-job-went-to-india-52-meditations.html' title='My Job Went to India (52 meditations for the 21st century programmer)'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113168630211389066</id><published>2005-11-10T21:15:00.000-08:00</published><updated>2005-11-16T18:19:53.323-08:00</updated><title type='text'>New Ruby &lt;=&gt; CLR bridge in the works</title><content type='html'>&lt;a href="http://www.iunknown.com/articles/2005/11/01/why-another-ruby-to-clr-bridge"&gt;John Lam is working&lt;/a&gt; on his own version that promises to be faster. Sweet. &lt;br /&gt;&lt;br /&gt;As businesses and startups increasingly &lt;a href="http://scobleizer.wordpress.com/2005/11/01/ross-doesnt-trust-microsofts-approach-to-web/"&gt;avoid Microsoft for various reasons&lt;/a&gt; - high cost of licensing and compliance administration, unpredictable cost of upgrades over the long-run, and concerns over security - wouldn't it be smart if your .NET business layer could be ported to *nix without having to convert your C# and VB.NET to Java, PHP, or Python?&lt;br /&gt;&lt;br /&gt;Speaking of Python, has anyone heard anything new about &lt;a href="http://www.ironpython.com/"&gt;IronPython&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113168630211389066?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113168630211389066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113168630211389066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113168630211389066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113168630211389066'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/11/new-ruby-clr-bridge-in-works.html' title='New Ruby &lt;=&gt; CLR bridge in the works'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113168323105481710</id><published>2005-11-10T19:50:00.000-08:00</published><updated>2005-11-10T21:00:56.853-08:00</updated><title type='text'>silicon flashback</title><content type='html'>A couple of buddies and I were reminiscing the other day over the computers we had in our jaded youth. I guess that makes us real geeks since we weren't reminiscing over old girlfriends. &lt;br /&gt;&lt;br /&gt;This inspired me to produce a list, in order of acquisition. This doesn't include the PCs I've used at my places of employment - just ones I've owned. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://oldcomputers.net/coco.html"&gt;Radio Shack TRS-80 Color Computer&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://oldcomputers.net/c64.html"&gt;Commodore 64&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://oldcomputers.net/atari800.html"&gt;Atari 800&lt;/a&gt; (fun games!)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://oldcomputers.net/appleii.html"&gt;Apple ][e&lt;/a&gt; (my dad's but i used it when he wasn't looking)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mac512.com/cclassic.htm"&gt;Mac Color Classic&lt;/a&gt; (not in use, still works but makes a funny crackling noise)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Compaq Presario 1610 Laptop (not in use, but still works)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.apple-history.com/?page=gallery&amp;model=7500&amp;amp;performa=off&amp;sort=date&amp;amp;order=ASC"&gt;Power Macintosh 7500&lt;/a&gt; (Loaned this to a friend but never got it back. Had it running Yellow Dog Linux at one time.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.apple-history.com/?page=gallery&amp;model=g3blue&amp;amp;performa=off&amp;sort=date&amp;amp;order=ASC"&gt;Power Macintosh G3 (Blue &amp; White)&lt;/a&gt; (currently my iTunes music server)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Custom built Pentium III, 500mhz (now a Gentoo Linux development server)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.apple-history.com/?page=gallery&amp;amp;model=pg3sbronze&amp;performa=off&amp;amp;sort=date&amp;order=ASC"&gt;PowerBook G3 (Bronze Keyboard)&lt;/a&gt; (not in use right, but it still works)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.apple-history.com/?page=gallery&amp;amp;model=pg4_15_800&amp;performa=off&amp;amp;sort=date&amp;amp;order=ASC"&gt; PowerBook G4 (15" FireWire 800)&lt;/a&gt; (daily workhorse)&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;I suspect the TRS-80, Commodore, Atari, and Apple ][e may still be at my Mom's house.&lt;br /&gt;&lt;br /&gt;I predict number 12 will be an Intel PowerBook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113168323105481710?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113168323105481710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113168323105481710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113168323105481710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113168323105481710'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/11/silicon-flashback.html' title='silicon flashback'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113151499494293143</id><published>2005-11-08T21:15:00.000-08:00</published><updated>2005-11-09T18:35:53.100-08:00</updated><title type='text'>REST on Rails article</title><content type='html'>&lt;a href="http://www.xml.com/pub/au/243"&gt;Matt Biddulph&lt;/a&gt; has an &lt;a href="http://www.xml.com/pub/a/2005/11/02/rest-on-rails.html?page=1"&gt;intriguing article&lt;/a&gt; on how to use xml templates and Rail's built-in class reflection to expose a CRUD interface to your models.&lt;br /&gt;&lt;br /&gt;You could take his &lt;a href="http://www.xml.com/2005/11/02/examples/rest_resource.rb"&gt;module file&lt;/a&gt;, put it in your appname/lib directory, include the following into your application.rb or environment.rb along with an authorization method:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;class ApplicationController &lt; ActionController::Base&lt;br /&gt;  include RestResource&lt;br /&gt;&lt;br /&gt;  def authorize &lt;br /&gt;    unless session[:user_id] &lt;br /&gt;      ...&lt;br /&gt;    end &lt;br /&gt;  end &lt;br /&gt;&lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;then call the method in your class along with an authentication filter:&lt;br /&gt;&lt;pre&gt;class AdminController &lt; ApplicationController&lt;br /&gt;&lt;br /&gt;  rest_resource :product&lt;br /&gt;  rest_resource :order&lt;br /&gt;  rest_resource :user&lt;br /&gt;  before_filter :authorize&lt;br /&gt;&lt;br /&gt;  ...&lt;/pre&gt;&lt;br /&gt;and you've got yourself an authenticated REST service for listing, updating, deleting, and inserting your models.&lt;br /&gt;&lt;br /&gt;You don't even want to know what something like this would take with .NET. And you really wouldn't want to do it because you'd essentially be exposing your data to the mercy of the client. But with Rails, you still get the same validation logic provided by your controller as if you were building a separate service API.&lt;br /&gt;&lt;br /&gt;Of course, you'd still bypass any other logic in your controller methods so this would not be a good approach to take for all your model classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113151499494293143?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113151499494293143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113151499494293143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113151499494293143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113151499494293143'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/11/rest-on-rails-article.html' title='REST on Rails article'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113124111811124332</id><published>2005-11-05T17:24:00.000-08:00</published><updated>2005-11-05T17:38:38.126-08:00</updated><title type='text'>Riding the Rails with Locomotive</title><content type='html'>After having some trouble compiling &lt;a href="http://www.lighttpd.net"&gt;lighttpd&lt;/a&gt; on my powerbook, and not really feeling like updating my version of automake, I decided to try &lt;a href="http://locomotive.sourceforge.net/"&gt;Locomotive&lt;/a&gt; which includes &lt;a href="http://www.lighttpd.net"&gt;lighttpd&lt;/a&gt;, mysql and postgresql bindings, &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt;, and bundles for Rails 0.14.1 and Rails 0.14.2. Installation was drag-n-drop per all good Mac software, it doesn't interfere with your current Rails installation, and thus far the operation has been seamless for me.&lt;br /&gt;&lt;br /&gt;I really like the way they are integrating it with other Rails/Mac-centric tools like &lt;a href="http://macromates.com"&gt;TextMate&lt;/a&gt; (you can open your project via a menu) and preferences for the Mac OS X terminal or &lt;a href="http://iterm.sourceforge.net/"&gt;iTerm&lt;/a&gt;. You can also preview apps in the default browser (no preferences for different browsers).&lt;br /&gt;&lt;br /&gt;The interface is simple, clear, and unpretentious. Just like RoR!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113124111811124332?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113124111811124332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113124111811124332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113124111811124332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113124111811124332'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/11/riding-rails-with-locomotive.html' title='Riding the Rails with Locomotive'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113123999614325156</id><published>2005-11-05T17:11:00.000-08:00</published><updated>2005-11-05T17:23:19.026-08:00</updated><title type='text'>Imagine my surprise. Christmas in November?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.activestate.com/Products/Komodo/more_information.plex"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/2885/426/320/komodo_osx_general.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://activestate.com/"&gt;ActiveState&lt;/a&gt;'s &lt;a href="http://www.activestate.com/Products/Komodo/more_information.plex"&gt;Komodo&lt;/a&gt; + Ruby + RoR + Mac OS X?&lt;br /&gt;&lt;br /&gt;Haven't tried it yet. It will have to really shine to supplant &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;. But if the debugging works out of the box (I haven't gotten Eclipses to work yet on my powerbook) and it has good support for Rails, then it could be a contender for the toolkit. Especially given its support for Python, XSLT, PHP, and Perl.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113123999614325156?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113123999614325156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113123999614325156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113123999614325156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113123999614325156'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/11/imagine-my-surprise-christmas-in.html' title='Imagine my surprise. Christmas in November?'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113091626602625546</id><published>2005-11-01T23:16:00.000-08:00</published><updated>2005-11-01T23:25:26.516-08:00</updated><title type='text'>rubyconf next year, fer shure</title><content type='html'>I am &lt;span style="font-style: italic;"&gt;so&lt;/span&gt; disappointed that I couldn't make &lt;a href="http://www.rubyconf.org/"&gt;rubyconf&lt;/a&gt; this year. Looks like a &lt;a href="http://www.rubygarden.org/ruby?RubyConf2005Facebook"&gt;great bunch of smart folks&lt;/a&gt; sharing their enthusiasm for this wonderful programming language.&lt;br /&gt;&lt;br /&gt;Ah well, I will do my damnest to make it in 2006. In the meantime, I'm going to attend this month's &lt;a href="http://www.zenspider.com/Languages/Ruby/Seattle/"&gt;Seattle Ruby brigade&lt;/a&gt; come hell or high water.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113091626602625546?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113091626602625546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113091626602625546' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113091626602625546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113091626602625546'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/11/rubyconf-next-year-fer-shure.html' title='rubyconf next year, fer shure'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113070465214203062</id><published>2005-10-30T12:13:00.000-08:00</published><updated>2006-01-09T12:18:16.106-08:00</updated><title type='text'>my kid brother has an new TV series</title><content type='html'>&lt;a href="http://www.imdb.com/name/nm1184676/"&gt;Andrew&lt;/a&gt; has a &lt;a href="http://www.imdb.com/title/tt0473027/"&gt;new film&lt;/a&gt; in the works, based on his comic &lt;a href="http://www.darkhorse.com/profile/profile.php?sku=10-566"&gt;Damn Nation&lt;/a&gt;, recently released by &lt;a href="http://www.darkhorse.com/"&gt;Dark Horse Comics&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;He's a busy guy. He only just wrapped up the pilot for a new TV series called &lt;a href="http://www.imdb.com/title/tt0466369/"&gt;Eureka! &lt;/a&gt;that has been &lt;a href="http://www.scifi.com/scifiwire2005/index.php?category=2&amp;id=32581&amp;amp;type=0"&gt;picked up&lt;/a&gt; by the &lt;a href="http://www.scifi.com/"&gt;SciFi channel&lt;/a&gt;. They start filming the first season in January. And it looks like one of my favorite actors &lt;a href="http://www.imdb.com/name/nm0608012/"&gt;Joe Morton&lt;/a&gt; (&lt;a href="http://www.imdb.com/title/tt0087004/"&gt;Brother From Another Planet&lt;/a&gt;) is in the cast!&lt;br /&gt;&lt;br /&gt;Can you tell I'm proud? Hell, yes! He's rolling with some really cool stuff, and I can't wait to see it.&lt;br /&gt;&lt;br /&gt;But there's some strange synchronicity going on here that makes me wonder if there is a higher power somewhere out there trying to tell &lt;span style="font-style: italic;"&gt;me&lt;/span&gt; something.&lt;br /&gt;&lt;br /&gt;Only last month &lt;a href="http://www.ge.com/"&gt;General Electric&lt;/a&gt; announced that their &lt;a href="http://www.gehealthcare.com/"&gt;healthcare division&lt;/a&gt; was merging with the company I work for, &lt;a href="http://www.idx.com/"&gt;IDX Systems&lt;/a&gt;, in a &lt;a href="http://www.gehealthcare.com/company/pressroom/releases/pr_release_10324.html"&gt;$1.3 billion deal&lt;/a&gt;. Well, GE also owns NBC, who in turn owns the Sci-Fi channel. So indirectly, Andy and I may end up working for the same company. Only &lt;span style="font-style: italic;"&gt;he&lt;/span&gt; gets to do the really fun, imaginative stuff.&lt;br /&gt;&lt;br /&gt;Yes, there &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; a smidge of jealousy here, a green-eyed gargoyle lurking in my mid-brain, as you see, growing up, I was the biggest sci-fi geek in the family. There are still boxes of old paperbacks in my mom's attic that can attest to a large chunk of my misspent youth and failing eyesight. Andy was more into the D&amp;amp;D stuff with which I had a short-lived romance due to the Tolkien influence, but then high school, sports, and girls came into the picture for me, and well... my hormones and ADD kicked into high gear and I found other romances with which to 'mis-spend' my youth.&lt;br /&gt;&lt;br /&gt;Of course, we kids were all into comics in a big way. Like it was only yesterday, I can recall those countless trips to &lt;a href="http://atlanta.judysbook.com/books/123246/Dr_No_s_Comics_Games_Books_and_Cards.htm"&gt;Dr. No's&lt;/a&gt; where we spent hours digging through the comic racks and stacks of sci-fi and fantasy books. (Andy, can you believe they're still in business!?) I was hip on Silver Surfer, Fantastic Four, X-men, Green Lantern, Thor, Iron Man, to name just a few. Who'd ever thought it would ever be useful to one of us?&lt;br /&gt;&lt;br /&gt;From junior high through college, I found time to write stories, mostly scifi and fantasy, but after graduation making a living wage got in the way of pursuing it further. I spent a few years working at a bookstore in Atlanta - probably mostly from a desire to be close to my heroes - then I left for Seattle, where I studied film and video production at the University of Washington. But I had trouble finding work in film, got sidetracked into programming - something I had a knack for back in college - and the money was just too tempting. Not so much for what it could buy me, as I've never been a big consumer of anything except maybe books, but the lure was more for not having to worry about how I was going to pay the rent that month. Then the next thing you know, I have a wife, mortgage, kids, and life insurance.&lt;br /&gt;&lt;br /&gt;I often find myself looking back, wondering what I might be doing now if I'd stuck it out a bit longer or moved back to L.A. to find work.&lt;br /&gt;&lt;br /&gt;So I'm doing a lot of self-questioning these days, having strange dreams and seeing messages in things, books, and movies that seem directed toward me personally. Is this a mid-life crisis, or the early onset of schizophrenia? Or is the '&lt;a href="/2005/10/no-truer-shiny-words-were-spoken.html"&gt;Verse&lt;/a&gt; trying to tell me it's time to dust off the old dreams and try something new (and old)?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113070465214203062?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113070465214203062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113070465214203062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113070465214203062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113070465214203062'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/10/my-kid-brother-has-new-tv-series.html' title='my kid brother has an new TV series'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113072559654402203</id><published>2005-10-29T18:17:00.000-07:00</published><updated>2005-10-30T18:45:04.276-08:00</updated><title type='text'>do you really want to know?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;camp=1789&amp;tag=dreamingofele-20&amp;creative=9325&amp;path=ASIN/1576753018/qid=1116188522/sr=2-1/ref=pd_bbs_b_2_1"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.economichitman.com/pix/EconHitMan.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Want to know why a good portion of the world hates the U.S.?&lt;br /&gt;Want to know the real reasons behind 9/11?&lt;br /&gt;Want to know why we are fighting a war in Iraq?&lt;br /&gt;Want to know what's wrong with corporate America and the current state of "free market" capitalism?&lt;br /&gt;&lt;br /&gt;If you really want to know, then read &lt;a style="font-style: italic;" href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;camp=1789&amp;tag=dreamingofele-20&amp;creative=9325&amp;path=ASIN/1576753018/qid=1116188522/sr=2-1/ref=pd_bbs_b_2_1"&gt;Confessions of an Economic Hit Man&lt;/a&gt; by &lt;a href="http://www.johnperkins.org/"&gt;John Perkins&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113072559654402203?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113072559654402203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113072559654402203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113072559654402203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113072559654402203'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/10/do-you-really-want-to-know.html' title='do you really want to know?'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113070952652718677</id><published>2005-10-29T13:51:00.000-07:00</published><updated>2005-10-30T20:42:10.636-08:00</updated><title type='text'>no truer shiny words were spoken</title><content type='html'>I'm at a place in my life where these words hit me in a deep place.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Capt. Malcolm Reynolds: It ain't all buttons and charts little Albatross. You know what the first rule of flyin' is? Well I suppose you do, since you already know what I'm about to say.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;River Tam: I do, but I like to hear you say it.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Capt. Malcolm Reynolds: Love. You can know all the math in the 'Verse, but take a boat in the air you don't love, she ain't keepin' up just as sure as the turning of worlds. Love keeps her up when she ought to fall down, tells ya she's hurtin' 'fore she keens, makes her home.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;River Tam: Storm's getting worse.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Capt. Malcolm Reynolds: We'll pass through it soon enough.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;-- From the movie &lt;a href="http://www.imdb.com/title/tt0379786/quotes"&gt;Serenity&lt;/a&gt;, written and directed by Joss Whedon.&lt;br /&gt;&lt;br /&gt;Am I flying the wrong ship? Will I make it through this storm?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113070952652718677?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113070952652718677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113070952652718677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113070952652718677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113070952652718677'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/10/no-truer-shiny-words-were-spoken.html' title='no truer shiny words were spoken'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-113038659375744924</id><published>2005-10-26T21:03:00.000-07:00</published><updated>2005-10-26T21:18:58.213-07:00</updated><title type='text'>Textile Templates with Rails in 10 lines or less</title><content type='html'>The template code goes in myapp/lib/textile_template.rb:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2885/426/1600/textile_template.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2885/426/1600/textile_template.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You register the file suffix with the template handler in either the myapp/app/controllers/application.rb or myapp/config/environment.rb:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2885/426/1600/application_setup.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2885/426/1600/application_setup.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Put your textile formatted file in your view:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2885/426/1600/textile_input.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2885/426/1600/textile_input.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And you're done!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2885/426/1600/textile_output.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2885/426/1600/textile_output.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-113038659375744924?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/113038659375744924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=113038659375744924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113038659375744924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/113038659375744924'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/10/textile-templates-with-rails-in-10.html' title='Textile Templates with Rails in 10 lines or less'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-112941191090093919</id><published>2005-10-15T13:45:00.000-07:00</published><updated>2006-01-08T02:09:01.303-08:00</updated><title type='text'>dave astel's behavior driven design with ruby</title><content type='html'>I read &lt;a href="http://blog.daveastels.com"&gt;Dave Astel&lt;/a&gt;'s &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;amp;camp=1789&amp;amp;tag=dreamingofele-20&amp;amp;creative=9325&amp;amp;path=http://www.amazon.com/gp/product/0130674826"&gt;A Pratical Guide to Extreme Programming&lt;/a&gt; some time back, and I just started reading &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;amp;camp=1789&amp;amp;tag=dreamingofele-20&amp;amp;creative=9325&amp;amp;path=http://www.amazon.com/gp/product/0131016490"&gt;Test-Driven Development&lt;/a&gt;. So, I'm excited to hear that he may start work on a new book about what he is calling &lt;span style="font-weight:bold;"&gt;Behavior Driven Design&lt;/span&gt;, an approach that extends the concept of unit testing to a higher level where you are thinking less about verification of code at the unit level and more about the specification of design at the behavior and context level. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://rubyforge.org/project/memberlist.php?group_id=797"&gt;Dave and company&lt;/a&gt; have begun an xUnit type framework around this idea. Low and behold, &lt;a href="http://blog.lavalamp.ca/"&gt;Steven Baker&lt;/a&gt;, Aslak Hellesoy, Gabriel Baumann, and Dave wrote &lt;a href="http://rubyforge.org/projects/rspec/"&gt;rSpec&lt;/a&gt; in Ruby, available as a gem.&lt;br /&gt;&lt;br /&gt;In his &lt;a href="http://daveastels.com/files/sdbp2005/BDD%20Intro.pdf"&gt;intro paper on BDD&lt;/a&gt;, Dave says:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&amp;quot;Thinking about unit testing leads us to divide tests in a way that reflects the structural arrangement of the code. For example, having text classes and production classes in a 1-1 relationship. That's not what we want... we want behavioural divisions.. we want to work at a level of granularity much smaller than that of the typical unit test. As I've said before when talking about TDD, we should be working with very small, focused pieces of behaviour... one small aspect of a single method.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;He goes on to show an example of some specs for a Movie and MovieList class:&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;&lt;pre&gt;require 'spec' &lt;br /&gt;require 'movie' &lt;br /&gt;require 'movie_list' &lt;br /&gt;&lt;br /&gt;class EmptyMovieList &lt; Spec::Context &lt;br /&gt;  def setup &lt;br /&gt;    @list = MovieList.new &lt;br /&gt;  end &lt;br /&gt;  def should_have_size_of_0 &lt;br /&gt;    @list.size.should_equal 0 &lt;br /&gt;  end &lt;br /&gt;  def should_not_include_star_wars &lt;br /&gt;    @list.should_not_include "Star Wars" &lt;br /&gt;  end &lt;br /&gt;end &lt;br /&gt;&lt;br /&gt;class OneMovieList &lt; Spec::Context &lt;br /&gt;  def setup &lt;br /&gt;    @list = MovieList.new &lt;br /&gt;    star_wars = Movie.new "Star Wars" &lt;br /&gt;    @list.add star_wars &lt;br /&gt;  end &lt;br /&gt;  def should_have_size_of_1 &lt;br /&gt;    @list.size.should_equal 1 &lt;br /&gt;  end &lt;br /&gt;  def should_include_star_wars &lt;br /&gt;    @list.should_include "Star Wars" &lt;br /&gt;  end &lt;br /&gt;  # vc: I added this bit&lt;br /&gt;  def should_not_include_serenity &lt;br /&gt;    @list.should_not_include "Serenity" &lt;br /&gt;  end&lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;So now with a specification for the behavior of the classes, you implement the system to pass the spec. &lt;br /&gt;&lt;br /&gt;Here's what I came up with to implement the classes to test out rSpec:&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;br /&gt;class Movie&lt;br /&gt;  attr_accessor :title&lt;br /&gt;  def initialize(title)&lt;br /&gt;    @title = title&lt;br /&gt;  end&lt;br /&gt;  def to_s&lt;br /&gt;    @title&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class MovieList&lt;br /&gt;  def initialize&lt;br /&gt;    @list = []&lt;br /&gt;  end&lt;br /&gt;  def size&lt;br /&gt;    @list.size&lt;br /&gt;  end&lt;br /&gt;  def add(movie)&lt;br /&gt;    @list &lt;&lt; movie&lt;br /&gt;  end&lt;br /&gt;  def include?(title)&lt;br /&gt;    (@list.find {|movie| movie.title == title }) != nil&lt;br /&gt;  end&lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now you run 'spec' from the command line. (I don't think they have a runner yet).&lt;br /&gt;&lt;pre&gt;&amp;gt;&amp;gt; spec spec_movie_list.rb&lt;br /&gt;&lt;br /&gt;.....&lt;br /&gt;&lt;br /&gt;Finished in 0.01058 seconds&lt;br /&gt;&lt;br /&gt;5 specifications, 5 expectations, 0 failures&lt;/pre&gt;&lt;br /&gt;Voila, the classes pass the specification!&lt;br /&gt;&lt;br /&gt;You can find out more on &lt;a href="http://blog.daveastels.com/?p=53"&gt;Dave Astel's blog&lt;/a&gt;, the &lt;a href="http://daveastels.com/index.php?p=5"&gt;original post that started it all&lt;/a&gt;, and &lt;a href="http://agiletoolkit.libsyn.com/index.php?post_id=15586"&gt;this podcast&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[UPDATE: &lt;a href="http://blog.lavalamp.ca/"&gt;Steven Baker&lt;/a&gt; is giving a workshop on &lt;a href="http://canadaonrails.com/agile-rails-development-workshop-details.html"&gt;Agile Rails Development at Canada on Rails this April&lt;/a&gt;. Looks like he will be talking about TDD vs. BDD and likely his RSpec testing framework. I'm having trouble deciding which conference I should attend this year. Vancouver is closer (and cheaper) than Chicago, but they haven't announced who the speakers are or what the sessions will be yet, so hard to say.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-112941191090093919?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/112941191090093919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=112941191090093919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/112941191090093919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/112941191090093919'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/10/dave-astels-behavior-driven-design.html' title='dave astel&apos;s behavior driven design with ruby'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-112867394834807542</id><published>2005-10-07T01:07:00.000-07:00</published><updated>2006-01-12T00:27:42.146-08:00</updated><title type='text'>quick and dirty xmlserializer in ruby</title><content type='html'>I've been thinking about how one might transfer objects in Ruby to XML and &lt;a href="http://www.crockford.com/JSON/index.html"&gt;JSON&lt;/a&gt; for use in an &lt;a href="http://en.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt; application. There may be libraries   that do it already, but I thought it might be an interesting exercise anyway.&lt;br /&gt;&lt;br /&gt;Here's my first stab at adding XML serialization to any object. The idea is that all public attributes would be available as XML elements.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Object&lt;br /&gt;    def xml&lt;br /&gt;      root_name = self.class.name.downcase&lt;br /&gt;      s = start_element(root_name)&lt;br /&gt;      self.instance_variables.each do |getter| &lt;br /&gt;        getter.gsub!(/@/, '')&lt;br /&gt;        # Set an id property as a class attribute&lt;br /&gt;        if getter == 'id'&lt;br /&gt;          s.gsub!(/&lt;#{root_name}/, &lt;br /&gt;            "&lt;#{root_name} id=\"#{self.send(:id).to_s}\"")&lt;br /&gt;        else&lt;br /&gt;          s &lt;&lt; build_element(getter, self.send(getter).to_s)&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;      s &lt;&lt; end_element(root_name)&lt;br /&gt;    end&lt;br /&gt;  private&lt;br /&gt;    def build_element(name, value)&lt;br /&gt;      start_element(name) +&lt;br /&gt;        value.gsub(/&lt;/, '&amp;amp;lt;')&lt;br /&gt;          .gsub(/&gt;/, '&amp;amp;gt;').gsub(/'/, '&amp;amp;apos;') +&lt;br /&gt;        end_element(name)&lt;br /&gt;    end&lt;br /&gt;    def start_element(name)&lt;br /&gt;      "&lt;"+name+"&gt;"&lt;br /&gt;    end&lt;br /&gt;    def end_element(name)&lt;br /&gt;      "&lt;/"+name+"&gt;"&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;require 'date'&lt;br /&gt;&lt;br /&gt;class Person&lt;br /&gt;  attr_accessor :name, :dob, :phone, :id, :email&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;p = Person.new&lt;br /&gt;p.id    = 12345&lt;br /&gt;p.name  = "Shawn O'Malley"&lt;br /&gt;p.dob   = Date.new(1975, 1, 28)&lt;br /&gt;p.phone = "555-555-5555"&lt;br /&gt;p.email = "somalley@foobar.com"&lt;br /&gt;&lt;br /&gt;puts p.xml&lt;br /&gt;&lt;br /&gt;# =&gt; &amp;lt;person id="12345"&amp;gt;&lt;br /&gt;# &amp;lt;dob&amp;gt;1975-01-28&amp;lt;/dob&amp;gt;&lt;br /&gt;# &amp;lt;email&amp;gt;somalley@foobar.com&amp;lt;/email&amp;gt;&lt;br /&gt;# &amp;lt;name&amp;gt;Shawn O'Malley&amp;gt;/name&amp;gt;&amp;lt;phone&amp;gt;555-555-5555&amp;lt;/phone&amp;gt;&lt;br /&gt;# &amp;lt;/person&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-112867394834807542?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/112867394834807542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=112867394834807542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/112867394834807542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/112867394834807542'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/10/quick-and-dirty-xmlserializer-in-ruby.html' title='quick and dirty xmlserializer in ruby'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-112839976722437110</id><published>2005-10-03T21:05:00.000-07:00</published><updated>2005-10-05T01:11:30.946-07:00</updated><title type='text'>TextMate and Rails</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2885/426/1600/rails_textmate_commands1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/2885/426/400/rails_textmate_commands.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've been twidling with &lt;a href="http://www.macromates.com/"&gt;TextMate&lt;/a&gt;'s commands in an attempt to automate some of the common &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt; commands.&lt;br /&gt;&lt;br /&gt;Unfortunately, as far as I can tell TextMate doesn't have a way to invoke a pop-up for input (like &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;), so I've had to settle for sending in single arguments via selected text. So after creating a new app, I just create a setup.txt file in the project root where I can enter things like the port to start WEBrick and the names of the controllers, scaffolds, and models I want to generate.&lt;br /&gt;&lt;br /&gt;Another issue: I've had to start WEBrick as a daemon with the -d switch; otherwise TextMate locks up. And another downside is I have to shut it down via command line after checking for it's process id. There's got to be a better way to start and stop the server from inside TextMate, but I haven't worked it out.&lt;br /&gt;&lt;br /&gt;Here's the &lt;a href="http://homepage.mac.com/victorcosby/transfer/Rails.tmbundle.zip"&gt;bundle of commands&lt;/a&gt;. You can unzip it to your /Users/[username]/Library/Application Support/TextMate/Bundles/ folder.&lt;br /&gt;&lt;br /&gt;If anyone has any better versions of these commands, please let me know.&lt;br /&gt;&lt;br /&gt;[UPDATE: Thanks to suggestions from the author of TextMate I now have some better ways to enter input and control WEBrick using HTML and JavaScript. I'll post the changes as soon as I've got them working the way I want. Check the comments for Allan's recommendations or see his &lt;a href="http://macromates.com/blog/"&gt;blog&lt;/a&gt;.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-112839976722437110?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/112839976722437110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=112839976722437110' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/112839976722437110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/112839976722437110'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/10/textmate-and-rails.html' title='TextMate and Rails'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-112840237727773937</id><published>2005-09-30T21:57:00.000-07:00</published><updated>2005-10-16T15:12:32.370-07:00</updated><title type='text'>Serenity is sci-fi with a heart (and soul)</title><content type='html'>No spoilers, promise. &lt;br /&gt;&lt;br /&gt;I checked off one of my &lt;a href="http://www.43things.com/person/vcosby"&gt;43things&lt;/a&gt; by seeing &lt;a href="http://www.serenitymovie.com/"&gt;Serenity&lt;/a&gt; on release day. &lt;br /&gt;&lt;br /&gt;I have been looking forward to this film for over a year, and I can say I loved every minute of it. Real character development, brilliant and witty dialog, compelling narrative, and great FX. I can't wait to see it again. In the meantime, I'll be watching the &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;amp;camp=1789&amp;amp;tag=dreamingofele-20&amp;amp;creative=9325&amp;amp;path=http://www.amazon.com/gp/product/B0000AQS0F"&gt;Firefly DVDs&lt;/a&gt; all over again.&lt;br /&gt;&lt;br /&gt;My greatest hope is that the movie is successful enough that &lt;a href="http://www.nbc.com"&gt;NBC&lt;/a&gt; reinstates the series (&lt;a href="http://www.nbcuni.com/"&gt;NBC Universal&lt;/a&gt; is the film studio). It's currently &lt;a href="http://imdb.com/chart/"&gt;number 2 for box office revenues&lt;/a&gt; and getting great reviews. &lt;a href="http://tvplex.go.com/buenavista/ebertandroeper/today.html"&gt;Ebert and Roeper&lt;/a&gt; gave it 2 thumbs up and you can tell they really enjoyed it, so maybe mainstream America will take notice. They went so far as to compare its spirit to that of the original Star Wars. Eat your heart out, &lt;a href="http://electricsheep.blogspot.com/2005/06/end-of-empire.html"&gt;Mr. Lucas&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-112840237727773937?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/112840237727773937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=112840237727773937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/112840237727773937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/112840237727773937'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/09/serenity-is-sci-fi-with-heart-and-soul.html' title='Serenity is sci-fi with a heart (and soul)'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-111990873929119741</id><published>2005-06-27T14:42:00.000-07:00</published><updated>2005-06-27T14:46:53.746-07:00</updated><title type='text'>End of an Empire</title><content type='html'>4 major problems w/ Menace, Clones, and Revenge in my opinion:&lt;br /&gt;&lt;br /&gt;1) too much money... spent on special effects at the neglect of story, plot, and character development. &lt;br /&gt;&lt;br /&gt;2) too much ego. George Lucas knows he's not a screenwriter, he's a brilliant story/ideas/technical guy; but he insists on writing. He knows he's not a great director, but he insists on directing. He should have given the dialogue over to a seasoned screenwriter and directing to accomplished directors like he did with Empire and Jedi. Instead the actors were left with lame dialogue, muddy motives, half-baked plots, and weak direction. &lt;br /&gt;&lt;br /&gt;Too bad George doesn't follow his own advice:&lt;br /&gt;&lt;br /&gt;    Anakin: What must I do, Master Yoda?&lt;br /&gt;    Yoda: Train yourself to let go of everything you fear to lose.&lt;br /&gt;&lt;br /&gt;3) Vader has no real menace for me at the end of Revenge. George really needed a plot that would allow for a few more conflict scenes after Anakin is defeated by Kenobi.  He needed to better establish Anakin's full conversion to the dark side and his self-hatred and anger after the loss of Padmé, to become the Darth Vader we first met and feared from the earlier films. One brief scene with him breaking pipes and having a tantrum does not an all powerful, super-villain make. &lt;br /&gt;&lt;br /&gt;4) In the last 2 movies George and Hayden did a really poor job of making us like/care about Anakin to the point where we can feel the depths of the tragedy of his fall. Vader is an anti-hero who ultimately redeems himself by sacrificing himself and his power for love, ultimately doing exactly what Yoda told him to do. But now, because I feel less for Anakin, his final redemption in Jedi is cheapened for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-111990873929119741?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/111990873929119741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=111990873929119741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/111990873929119741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/111990873929119741'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/06/end-of-empire.html' title='End of an Empire'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-111973520022289690</id><published>2005-06-25T14:23:00.000-07:00</published><updated>2005-06-25T14:33:20.226-07:00</updated><title type='text'>oh well</title><content type='html'>Got a call earlier this week from Mike Clark that they were having to cancel the &lt;a href="http://studio.pragprog.com/"&gt;pragmatic studio workshops&lt;/a&gt; due to low enrollment. Too bad! I was really looking forward to this. And work was even going to foot the bill. Maybe we can get them to come to us.&lt;br /&gt;&lt;br /&gt;I thought that at around $700 for a 2 day seminar, it was quite a good deal. So does this mean that 1) there are already plenty of pragmatic programmers out there and there is no room for their improvement, or 2) there aren't enough interested in becoming better programmers, or 3) there aren't enough companies out there in funding their engineers to become more pragmatic? &lt;br /&gt;&lt;br /&gt;It doesn't bode well for getting the pragmatic programmers to come to Seattle for a public &lt;a href="http://wiki.pragprog.com/cgi-bin/wiki.cgi/RailsTrainingVenue"&gt;Ruby on Rails workshop&lt;/a&gt;. I might just have to go to them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-111973520022289690?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/111973520022289690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=111973520022289690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/111973520022289690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/111973520022289690'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/06/oh-well.html' title='oh well'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12558127.post-111794991155308501</id><published>2005-06-04T22:38:00.000-07:00</published><updated>2005-06-04T22:48:12.820-07:00</updated><title type='text'>gentoo is bringing my old pentium III back to life</title><content type='html'>&lt;div&gt;&lt;div class="goalentry"&gt;installing &lt;a href="http://www.gentoo.org"&gt;gentoo&lt;/a&gt; has been a good learning experience. and now i have a dev server for ruby and rails in addition to my powerbook.&lt;/div&gt;&lt;div class="goalprogresslink"&gt;See more progress on: &lt;a href="http://43things.com/people/progress/vcosby?on=333250"&gt;Install Gentoo&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12558127-111794991155308501?l=electricsheep.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://electricsheep.blogspot.com/feeds/111794991155308501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12558127&amp;postID=111794991155308501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/111794991155308501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12558127/posts/default/111794991155308501'/><link rel='alternate' type='text/html' href='http://electricsheep.blogspot.com/2005/06/gentoo-is-bringing-my-old-pentium-iii.html' title='gentoo is bringing my old pentium III back to life'/><author><name>victorcosby</name><uri>http://www.blogger.com/profile/00063532705446449554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://homepage.mac.com/victorcosby/photos/victor_gray.jpg'/></author><thr:total>0</thr:total></entry></feed>
