<?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-35153410</id><updated>2012-02-15T23:38:44.922-08:00</updated><category term='social networking'/><category term='python html screenscraping tools'/><category term='image processing'/><category term='web2.0'/><category term='admin'/><category term='utility'/><title type='text'>Damned Fine Software, Diane.</title><subtitle type='html'>A personal view of software I like (and don't), systems I like (and don't), and other thoughts about our overgrown technoecology. Where's the machete when you really need it?</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-35153410.post-1046824844020697596</id><published>2011-10-19T10:32:00.000-07:00</published><updated>2011-10-20T04:14:57.006-07:00</updated><title type='text'>fs_usage: When Adobe Flash crashes in every browser in OSX Lion</title><content type='html'>&lt;div&gt;I recently upgraded to OS/X Lion, which I like and will write about at some other time. At about the same time, Adobe Flash started crashing in every browser I had installed (Chrome, Safari, and Firefox). It's was amazing how much I found I needed Flash, and how many other people were experiencing the same problem. Some inspection of the crash dumps and some research on the inter-tubes pointed to corrupt fonts as a potential source of trouble.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But which ones? I had 900+ fonts installed, and that's a lot to test-by-removal, one at a time. Apple Fontbook validated all my fonts as OK -- some duplicates, but nothing marked as serious. Oh, and it wanted my password again for &lt;i&gt;every&lt;/i&gt;&amp;nbsp;duplicate font removed. Uggh.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Step forward &lt;b&gt;fs_usage&lt;/b&gt;, a OSX command line utility that lets you monitor all file system usage by any process in the system. It has to be run as admin (root,sudo, whatever), but produces ...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... way too much information.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo fs_usage -f pathname | grep Font&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;did what I needed: show all files opened where "Font" is part of the name. Then I opened a browser, and refreshed the youtube home page. The following two likes popped up in the middle of a lot of others:&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;12:58:38  open              /Users/seant/Library/Fonts/RyoDispStd-ExtraBold.ttf                              0.000025   plugin-conta&lt;br /&gt;12:58:38  open              /Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib    0.000019   ReportCrash&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;div&gt;I deleted the fon&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;t (/Users/seant/Library/Fonts/RyoDispStd-ExtraBold.ttf), and refreshed the page. After doing this about 10 times (10 bad fonts), youtube.com loaded properly.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Several observations: &lt;b&gt;&lt;i&gt;fs_usage is damned fine software.&lt;/i&gt;&lt;/b&gt; The Adobe Flash plugin 11+, the Apple plugin-container, and the underlying libFontParser ... not so much.&lt;/span&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/35153410-1046824844020697596?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/1046824844020697596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=1046824844020697596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/1046824844020697596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/1046824844020697596'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2011/10/fsusage-when-adobe-flash-crashes-in.html' title='fs_usage: When Adobe Flash crashes in every browser in OSX Lion'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/07379128480793577444</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-1221402882999633497</id><published>2011-08-30T09:40:00.000-07:00</published><updated>2011-08-30T09:40:29.295-07:00</updated><title type='text'>More skin in the game.</title><content type='html'>Gelaskins is a Canadian company that does not make software. They sell gorgeous skins for portable devices. They have, in fact, some very slick software that allows you to upload your own images which is then printed on die-cut vinyl, customized to dozens of portable devices.&lt;br /&gt;&lt;br /&gt;I uploaded my own image ("Windows for iPad") to Gelaskins and got a gorgeous skin back in a few days. Click the link to the right if you want to make your own. "Windows for iPad" is rendered from a photograph I took at the sheep ranch below the summit of Mauna Kea, on the Big Island.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-HH9VHWkrVNs/Tl0Rbt6m5MI/AAAAAAAAB6U/jmQot0ItgBI/s1600/window_edited.JPG" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="238" src="http://4.bp.blogspot.com/-HH9VHWkrVNs/Tl0Rbt6m5MI/AAAAAAAAB6U/jmQot0ItgBI/s320/window_edited.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-1221402882999633497?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/1221402882999633497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=1221402882999633497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/1221402882999633497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/1221402882999633497'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2011/08/more-skin-in-game.html' title='More skin in the game.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/07379128480793577444</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-HH9VHWkrVNs/Tl0Rbt6m5MI/AAAAAAAAB6U/jmQot0ItgBI/s72-c/window_edited.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-8430397309048716315</id><published>2011-02-19T19:20:00.000-08:00</published><updated>2011-02-19T19:20:37.282-08:00</updated><title type='text'>Pearls of (ahem) wisdom.</title><content type='html'>Pearltrees, which I logged about a week or so ago, has added new features to address collaborative curation.&lt;br /&gt;&lt;br /&gt;Teams (see team DIY Electronics http://bit.ly/gUZRyE for an example) now support founder editorial control, tree history, and other things which should help prevent a team member from moving a tree too far from a founders original vision. Since most of these trees grew up as the work of a single person, that kind of change could be most unsettling for a tree founder. Good on the pearltrees developers for addressing this so quickly.&lt;br /&gt;&lt;br /&gt;I've taken the leap, and accepted the help of some other intrepid curators in creating a useful collection of links. Any wisdom which accumulates will be to all our credit.&lt;br /&gt;&lt;br /&gt;Who says you can't beat entropy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-8430397309048716315?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/8430397309048716315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=8430397309048716315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/8430397309048716315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/8430397309048716315'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2011/02/pearls-of-ahem-wisdom.html' title='Pearls of (ahem) wisdom.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/07379128480793577444</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-381566140989818907</id><published>2011-02-09T14:55:00.001-08:00</published><updated>2011-02-09T14:59:48.692-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><title type='text'>Cultured Pearls.</title><content type='html'>&lt;span class="Apple-style-span"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RrGtdn7a7pc/TVMbrlhTnVI/AAAAAAAABkA/tCBrVMP8DFc/s1600/pearls.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 357px; height: 400px;" src="http://3.bp.blogspot.com/_RrGtdn7a7pc/TVMbrlhTnVI/AAAAAAAABkA/tCBrVMP8DFc/s400/pearls.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5571827599607569746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; "&gt;&lt;blockquote type="cite"&gt;&lt;div class="im" style="color: rgb(80, 0, 80); "&gt;&lt;p class="MsoNormal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;b&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  &gt;I’ve found a piece of social software that really works for me. I’m not a big fan of Twitter (too much noise, not enough signal),&lt;span&gt; &lt;/span&gt;and use Facebook and Linked-In to keep in touch with family and colleagues. But even Facebook and Linked-In don’t really get me where I live. What does seem to get me is Pearltrees.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  &gt;Pearltrees (see &lt;a href="http://bit.ly/gUZRyE" target="_blank" style="color: rgb(17, 65, 112); "&gt;http://bit.ly/gUZRyE&lt;/a&gt; for an example) is a Flash application (more on that below) which lets you organize page links (bookmarks) into draggable, organizable trees, which are automatically laid out for you. Add a pearl (link), the layout adjusts. Traverse the tree and the branches expand and contract to match.&lt;/span&gt;&lt;/p&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="im" style="color: rgb(80, 0, 80); "&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  &gt;It’s fluid, its easy, and that’s not even the best part. Pearltrees are published and shareable.&lt;span&gt;  &lt;/span&gt;I can curate links (makes me think of dusty museums, but this information is livelier), share the results, and use the results of others. My research and investment is now leveraged to anyone who uses Pearltrees. They can add my tree to theirs . Or vice versa.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  &gt;Recently Pearltrees have allowed teams to curate trees together. Common trees may suffer the &lt;i&gt;tragedy of the commons&lt;/i&gt; but I haven’t seen that happen yet.&lt;span&gt;  &lt;/span&gt;Wikipedia could suffer from the same issue, and they seem to do quite well!&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  &gt;Those of you who follow my blog (and a damned fine group you are,&lt;span&gt;  &lt;/span&gt;if small),&lt;span&gt;  &lt;/span&gt;may have noticed my blogging dropped off a lot a year or so ago. That coincides oddly with an increase in my use of Pearltrees.&lt;span&gt;  &lt;/span&gt;There are new bits of software that I have&lt;span&gt;  &lt;/span&gt;found to be good, and the links are now there.&lt;span&gt;  &lt;/span&gt;Try the link above and come dig around. This post could be considered the start of a bread crumb trail ...&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  &gt;Like much software written by passionate people, Pearltrees has a couple of idiosyncracies.&lt;span&gt;  &lt;/span&gt;The first and (and much the largest) is that&lt;span&gt;  &lt;/span&gt;your browser has to be Flash friendly. And since the bulk of my reading is now on an iPad, you can imagine my frustration.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  &gt;Secondly, the Pearltrees community is far more international than most of us are used to. The developers are French, and although the core software, docs, and conversations are in English, there is a distinct Francophone tone around the edges. It’s a little different, and that is welcome. &lt;i&gt;&lt;span style="color: black; "&gt;Vive la difference!&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="font-size: 11px; font-family: arial, sans-serif; "&gt; &lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-381566140989818907?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/381566140989818907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=381566140989818907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/381566140989818907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/381566140989818907'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2011/02/cultured-pearls.html' title='Cultured Pearls.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/07379128480793577444</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RrGtdn7a7pc/TVMbrlhTnVI/AAAAAAAABkA/tCBrVMP8DFc/s72-c/pearls.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-7328836671686540158</id><published>2009-08-05T10:48:00.000-07:00</published><updated>2009-08-05T10:55:54.759-07:00</updated><title type='text'>You don't write, you don't call.</title><content type='html'>There are times that I wish using the phone was more like email: that I could call someone up and be guaranteed to get their voice mail. Just to blurt something out and have it get to the recipient without either of us needing to have a conversation.&lt;br /&gt;&lt;br /&gt;Well, now I can. Or, at least &lt;span style="font-style: italic;"&gt;you&lt;/span&gt; can. If you click the &lt;i&gt;Google Voice call-me link&lt;/i&gt; to the right of this page, you can call me with the guarantee that you will not have to talk to me, and that I will get the message and a rough transcript of the message where ever I am.&lt;br /&gt;&lt;br /&gt;And if you leave me voice mail about &lt;span style="font-style: italic;"&gt;damned fine software&lt;/span&gt;, I will publish it here in the blog, with or without a link to your original recording.&lt;br /&gt;&lt;br /&gt;Not bad, Google.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-7328836671686540158?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/7328836671686540158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=7328836671686540158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/7328836671686540158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/7328836671686540158'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2009/08/you-dont-write-you-dont-call.html' title='You don&apos;t write, you don&apos;t call.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/07379128480793577444</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-3727534592777441146</id><published>2009-05-16T07:23:00.000-07:00</published><updated>2009-05-16T07:32:20.918-07:00</updated><title type='text'>You're being too precise.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_k8pGqbymAd0/Sg7N1GwloQI/AAAAAAAAAAo/jKa84QRgxcE/s1600-h/fuzzyclockl.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 40px;" src="http://2.bp.blogspot.com/_k8pGqbymAd0/Sg7N1GwloQI/AAAAAAAAAAo/jKa84QRgxcE/s320/fuzzyclockl.png" alt="" id="BLOGGER_PHOTO_ID_5336428920711782658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;There is no doubt that computers do things that require precision really well. Doing things less precisely is harder.&lt;br /&gt;&lt;br /&gt;Like a lot of us, I've abandoned wristwatch for the cell phone, and wall clocks for the always present clocks on the computers that I spend most of my life at. Now I've found a less precise and more friendly alternative.&lt;br /&gt;&lt;br /&gt;FuzzyClock for the Mac puts a readable time in the menu bar, phrased the way I like it. It doesn't constantly natter by ticking away the seconds. &lt;a href="http://www.objectpark.org/FuzzyClock.html"&gt;Donation ware from ObjectPark.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-3727534592777441146?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/3727534592777441146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=3727534592777441146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/3727534592777441146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/3727534592777441146'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2009/05/youre-being-too-precise.html' title='You&apos;re being too precise.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_k8pGqbymAd0/Sg7N1GwloQI/AAAAAAAAAAo/jKa84QRgxcE/s72-c/fuzzyclockl.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-2045282367228820467</id><published>2009-04-15T08:16:00.000-07:00</published><updated>2009-05-16T07:21:51.625-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='admin'/><title type='text'>A simple thing.</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;a style="font-family: georgia;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_k8pGqbymAd0/SeX6cD7fw1I/AAAAAAAAAAY/mf-eAmcThfY/s1600-h/SSHTunnels.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 256px; height: 188px;" src="http://3.bp.blogspot.com/_k8pGqbymAd0/SeX6cD7fw1I/AAAAAAAAAAY/mf-eAmcThfY/s320/SSHTunnels.png" alt="" id="BLOGGER_PHOTO_ID_5324937494433612626" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;If you work in a collaborative development environment, without benefit of corporate VPNs, you probably already know about SSH tunnels. If you are like me, you spent a lot of time in command shells typing obscure command lines like &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;ssh -L 3306:localhost:3306 yourhostname &lt;/span&gt;in order to connect to MySQL database on yourhostname.&lt;br /&gt;&lt;br /&gt;As usual on the Mac, there is one free program that makes this a lot easier: &lt;span style="font-style: italic;"&gt;SSH Tunnel Manager&lt;/span&gt;. You can download or check it out at &lt;a href="http://projects.tynsoe.org/en/stm/"&gt;tynsoe.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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/35153410-2045282367228820467?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/2045282367228820467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=2045282367228820467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/2045282367228820467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/2045282367228820467'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2009/04/simple-thing.html' title='A simple thing.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_k8pGqbymAd0/SeX6cD7fw1I/AAAAAAAAAAY/mf-eAmcThfY/s72-c/SSHTunnels.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-6210570560148760169</id><published>2009-03-11T18:41:00.000-07:00</published><updated>2009-03-11T18:44:29.873-07:00</updated><title type='text'>Speaking naturally.</title><content type='html'>I'm waiting for a new microphone for MacDictate. While the product name is not as nifty as NaturallySpeaking, it works on my macs. With a little luck the new gooseneck USB microphone will work well enough.&lt;br /&gt;&lt;br /&gt;More news on this as it evolves. If I can go back to typing less, and writing more, you, gentle reader, may hear more of my opinions (gentle or otherwise).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-6210570560148760169?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/6210570560148760169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=6210570560148760169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/6210570560148760169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/6210570560148760169'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2009/03/speaking-naturally.html' title='Speaking naturally.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-8939843318608236998</id><published>2009-01-23T20:12:00.000-08:00</published><updated>2009-01-23T20:30:27.040-08:00</updated><title type='text'>Do Androids dream?</title><content type='html'>I've recently fallen for a new android. Not &lt;span style="font-style: italic;"&gt;Cmdr. Data&lt;/span&gt; (wrong gender, wrong functionality), or even the more gender appropriate, if less aptly named, &lt;span style="font-style: italic;"&gt;7 of 9&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Nope, I've fallen for a cell phone, or more acurately, for the software that runs on it. Google's android is just plain cool.&lt;br /&gt;&lt;br /&gt;Back in the day, I could write entertaining software for my PDA. You could program the Palm in C, if you didn't mind the little bitty living space. And the tools were free. Good plan.&lt;br /&gt;&lt;br /&gt;Then PDAs merged with cell phones, and the carriers locked them down. Nice and tight. The one phone you could develop easily for (the Treo) was a beast. Antique and creaky software. I used one for years. But the others ... Blackberry particularly ... were closed.&lt;br /&gt;&lt;br /&gt;When the iPhone came along, I drooled, but was (am still) locked to my carrier. And then I lost my Blackberry. After waiting a decent interval, I bought a G1, the HTC implementation of the Android for T-Mobile.&lt;br /&gt;&lt;br /&gt;It's enough to get me programming in Java again. If I have time. Meanwhile, I can use the apps that other people build that do really cool stuff. And I do mean &lt;span style="font-weight: bold;"&gt;cool.&lt;/span&gt; It's not as pretty, or have the same smooth UI that you would get on an iPhone. But it gets better with each new application, and because it's an open architecture with free (and elegant tools), change is fast.&lt;br /&gt;&lt;br /&gt;A couple of favorite apps: &lt;span style="font-style: italic;"&gt;ConnectBot&lt;/span&gt;, an SSH application. I can now get an 80x25 screen on any *nix box I own, and run top. Or emacs.  From my cell phone.&lt;br /&gt;&lt;br /&gt;The other current favorite, &lt;span style="font-style: italic;"&gt;Wikitude&lt;/span&gt;, is a wild mashup of geolocative computing, that uses your location and compass bearing to overlay tourist information on the real time video from the camera. Wish I'd had it in London.&lt;br /&gt;&lt;br /&gt;Do androids dream of electric sheep? I don't think my android will have the leisure to sleep.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-8939843318608236998?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/8939843318608236998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=8939843318608236998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/8939843318608236998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/8939843318608236998'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2009/01/do-androids-dream.html' title='Do Androids dream?'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-83548508862662102</id><published>2009-01-14T06:54:00.000-08:00</published><updated>2009-01-14T06:59:35.727-08:00</updated><title type='text'>Lost on the web.</title><content type='html'>It's been a while since I posted regularly. If I ever did, it was inhibited by the overgrowth of Google related logins. Somewhere in the mess, I lost the key.&lt;br /&gt;&lt;br /&gt;Key, of course, being locksmith-speak for password. I switched from Windows to Mac this summer, and lost a few pieces of software that I really liked. Chief being &lt;span style="font-style: italic;"&gt;Roboform.&lt;/span&gt; The Mac work-alike (&lt;span style="font-style: italic;"&gt;iPassword&lt;/span&gt;) doesn't. Work-alike. It's not bad, but it's no where near as nice as Roboform.&lt;br /&gt;&lt;br /&gt;Fortunately, that level of disatisfaction with Mac software is not a daily problem for me. Mostly,&lt;br /&gt;the Mac &lt;span style="font-weight: bold;"&gt;rocks.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-83548508862662102?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/83548508862662102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=83548508862662102' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/83548508862662102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/83548508862662102'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2009/01/lost-on-web.html' title='Lost on the web.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-640172407116103126</id><published>2007-11-13T11:36:00.001-08:00</published><updated>2007-11-13T12:10:15.882-08:00</updated><title type='text'>I Python, you Python, we all scream for ...</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_k8pGqbymAd0/RzoBcpUpr3I/AAAAAAAAAAM/n05Dk2tSPm0/s1600-h/cy.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5132416316982538098" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_k8pGqbymAd0/RzoBcpUpr3I/AAAAAAAAAAM/n05Dk2tSPm0/s320/cy.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Ok, it's not as good as ice cream, but it's really good nonetheless. It's been around since 2001, and I feel like a numb-nut for missing it!&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Python is a great language with an not-so-great interactive command line. It's often easier to edit whole programs in a good text editor and run them in what is effectively batch mode for debugging and testing. In my heart of hearts, however I want more. I want the kind of command line I got with &lt;a href="http://en.wikipedia.org/wiki/Lisp_machine"&gt;LM Lisp&lt;/a&gt; or with &lt;a href="http://www.tenberry.com/ic/faq.htm"&gt;InstantC&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;IPython delivers. You can edit chunks of program, interactively call functions, define macros, and call external programs, mixing input and output pretty freely.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Here's an example:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;files = !ls # Call the OS ls function, put the files in a python variable&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;for file in files:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;if file.endswith(".tmp"): print file&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;You can pass the list back into another program.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;cycle20 = linspace(0,20*3.14,200)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;cycle1= linspace(0,2*3.14,200)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;y = sin(cycle20)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;c = cos(cycle1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;yc = y * c&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;plot(cycle20, yc)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size:0;"&gt;and get the image shown above freely. You can also set up profiles that preload your own libraries and classes and get an interactive workbench which is &lt;em&gt;killer.&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;The &lt;a href="http://ipython.scipy.org/moin/"&gt;IPython project&lt;/a&gt; is broadly affiliated with &lt;a href="http://www.scipy.org/"&gt;scipy&lt;/a&gt;, a movment producing open-source software for math, science, and engineering.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;See a recent article in &lt;a href="http://cise.aip.org/dbt/dbt.jsp?KEY=CSENFA&amp;amp;Volume=9&amp;amp;Issue=3"&gt;Computing in Science and Engineering &lt;/a&gt;for a more complete overview. IPython development is spearheaded by by Fernando Pérez (Fernando.Perez AT colorado.edu). &lt;div&gt;&lt;/div&gt;&lt;div&gt;Thanks, Fernando.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-640172407116103126?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/640172407116103126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=640172407116103126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/640172407116103126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/640172407116103126'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2007/11/i-python-you-python-we-all-scream-for.html' title='I Python, you Python, we all scream for ...'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_k8pGqbymAd0/RzoBcpUpr3I/AAAAAAAAAAM/n05Dk2tSPm0/s72-c/cy.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-9097089648479164979</id><published>2007-11-03T16:45:00.000-07:00</published><updated>2007-11-03T17:17:53.620-07:00</updated><title type='text'>Action at a distance.</title><content type='html'>I've been messing around with remote procedure calls for a long time now. My first serious exposure came with a contract to port the Apollo Computers NIDL compiler to DOS. NIDL was the Network Interface Definition Language, and a key component of the &lt;a href="http://www.pms.ifi.lmu.de/mitarbeiter/ohlbach/multimedia/IT/IBMtutorial/3376c411.html"&gt;Network Computing System (NCS).&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My company at the time (Obsidian Computers, long since vanished) was building real-time satellite servers for data acquisition and control applications. DOS was a good platform for real-time. Unix was not.&lt;br /&gt;&lt;br /&gt;Since then I have flirted with Microsoft &lt;a href="http://msdn2.microsoft.com/en-us/library/ms809340.aspx"&gt;DCOM &lt;/a&gt;(derived from an OSF version of Apollo's NCS), messed with Sun/ONC RPC, built a product around a &lt;a href="http://omniorb.sourceforge.net/"&gt;Corba ORB&lt;/a&gt;, struggled with &lt;a href="http://www.developer.com/services/article.php/641361"&gt;SOAP&lt;/a&gt;, sworn at &lt;a href="http://www.xmlrpc.com/"&gt;XMLRPC&lt;/a&gt;, been kept up late at night by REST APIs, written JSON calls to Python backends, and written bridge code for &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT &lt;/a&gt;Java to call server side Python. They are almost all good. And are all painful, to one degree or another.&lt;br /&gt;&lt;br /&gt;And then there is Pyro. Pyro stands for Python Remote Objects.&lt;br /&gt;&lt;br /&gt;I found Pyro a few years ago. It provides an extremely simple and remote object access protocol. Robust enough to break apart a single program which captured images from and controlled the movement of a pan/scan web camera and run the resulting client/server code over the internet. In about an hour. Including learning curve. On Windows. Using COM interfaces and serial interfaces.&lt;br /&gt;&lt;br /&gt;Pyro is hot. It has many of the features of a full-up ORB, but you don't have to use them. It's stable.  It's been around for years, and is on version 3.7. I'm sure it has bugs, but I don't know what they are, and they don't bother me.&lt;br /&gt;&lt;br /&gt;I'm currently using it in production to support some code which is Python 2.3 specific in the middle of a system which is Python 2.4 based. Once I had isolated the backwards incompatibility (the only one I've ever found in Python, by the way), it took 10 minutes to bridge the subsystems through Pyro.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pyro.sourceforge.net/"&gt;Pyro &lt;/a&gt;is written and © by &lt;a href="http://www.razorvine.net/"&gt;Irmen de Jong &lt;/a&gt;,  is open-source software and is released under the highly favorable &lt;a href="http://pyro.sourceforge.net/manual/LICENSE"&gt;MIT Software License&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-9097089648479164979?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/9097089648479164979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=9097089648479164979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/9097089648479164979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/9097089648479164979'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2007/11/action-at-distance.html' title='Action at a distance.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-7496293452055544643</id><published>2007-07-10T06:06:00.000-07:00</published><updated>2007-07-10T06:12:13.741-07:00</updated><title type='text'>Just in time.</title><content type='html'>Those wacky guys at MIT. Always thinking.&lt;br /&gt;&lt;br /&gt;Visualizing things in time is not an easy thing. Finding free AJAX-y software that does the job seems really unlikely. Hah.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://simile.mit.edu/timeline/"&gt;Simile&lt;/a&gt; is cool. They describe it as "Google maps for time-based information". Pretty nifty.&lt;br /&gt;&lt;br /&gt;And free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-7496293452055544643?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/7496293452055544643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=7496293452055544643' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/7496293452055544643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/7496293452055544643'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2007/07/just-in-time.html' title='Just in time.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-6068219843531574429</id><published>2006-11-15T18:10:00.000-08:00</published><updated>2006-11-15T18:26:48.231-08:00</updated><title type='text'>Flip. Flip. I've always said flip.</title><content type='html'>&lt;em&gt;Flop.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;A few weeks ago I said some nice things about the Google Web Toolkit in the flavor of "Gee, Java is certainly more fun to work in than Javascript". What a difference a set of batteries make.&lt;br /&gt;&lt;br /&gt;Most of my development work is actually done in &lt;a href="http://www.python.org"&gt;Python&lt;/a&gt;, and one of the best descriptions of Python's environment is: "batteries included". It's a not-so-subtle comment on the importance of a language's runtime libraries: &lt;em&gt;the best code is the code someone else debugged.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This brings us to &lt;a href="http://www.dojotoolkit.com/"&gt;Dojo&lt;/a&gt;. There are other Javascript libraries that are possibly better tested (&lt;a href="http://mochikit.com/"&gt;MochiKit&lt;/a&gt;); there are other Javascript libraries that are flashier (&lt;a href="http://script.aculo.us/"&gt;Scriptaculous&lt;/a&gt;). But Dojo has just about everything I really need (so far) in Javascript support. I'm going back over existing code, replacing large chunks with a few dojo.whatever calls, and getting better cross browser support.&lt;br /&gt;&lt;br /&gt;Combine it with a good DOM browser and a good Javascript debugger, and life is pretty good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-6068219843531574429?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/6068219843531574429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=6068219843531574429' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/6068219843531574429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/6068219843531574429'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/11/flip-flip-ive-always-said-flip.html' title='Flip. Flip. I&apos;ve always said flip.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-4396265569436750473</id><published>2006-11-04T18:47:00.000-08:00</published><updated>2006-11-04T19:56:13.385-08:00</updated><title type='text'>Under control.</title><content type='html'>I've been using source code control for a long time. &lt;em&gt;Geezing alert.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;About the first thing I used FTP for was to download a source code control system from a computer at Purdue to the computer I was using for data analysis at MIT.  &lt;a href="http://www.ipd.uka.de/~tichy/"&gt;Walter Tichy's&lt;/a&gt; RCS was an improvement over SCCS -- faster, better, and it was just so cool to download stuff from far, far away. And it worked, too. RCS appears to have been the first use of the reverse delta in source code control (store the current code, remember changes to go back, not forward).&lt;br /&gt;&lt;br /&gt;No one who writes code for a living should do it without source code control to lean on. But we have a lot more alternatives now.&lt;br /&gt;&lt;br /&gt;Since RCS, I have used Polytron's &lt;a href="http://www.synergex.com/solutions/pvcs/"&gt;PVCS&lt;/a&gt;, Burton's &lt;a href="http://www.burtonsys.com/features.html"&gt;Tlib&lt;/a&gt;, Microsoft's &lt;a href="http://msdn.microsoft.com/vstudio/products/vssafe/default.aspx"&gt;SourceSafe&lt;/a&gt;, &lt;a href="http://www.perforce.com/"&gt;Perforce&lt;/a&gt;, CVS, and Subversion. They have varied virtues: RCS, &lt;a href="http://www.nongnu.org/cvs/"&gt;CVS&lt;/a&gt;, and Subversion are free and cross platform. PVCS and Tlib are rock solid. SourceSafe integrates with Microsoft tools nicely. Perforce is a joy to use. CVS and Subversion have an excellent (and common) GUI called Tortoise.&lt;br /&gt;&lt;br /&gt;If I had money to burn, I would go back to Perforce. It's $600 a seat, and worth it. If you have it. But here is the main point, and this applies to most software:&lt;br /&gt;you use 20% of the features, and if they work, you don't care about the rest.&lt;br /&gt;On that basis, the right 20% and free is a good argument.&lt;br /&gt;&lt;br /&gt;I currently use &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;. Runs on every platform I care about (Windows, Linux, Mac), and the &lt;a href="http://tortoisesvn.tigris.org/"&gt;Tortoise &lt;/a&gt;GUI is pretty slick.&lt;br /&gt;&lt;br /&gt;But they have all worked, more or less. In 20+ years of software development I've never had one fail me. More than I can say for a lot of software.&lt;br /&gt;&lt;br /&gt;Thanks, guys. Damned fine job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-4396265569436750473?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/4396265569436750473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=4396265569436750473' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/4396265569436750473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/4396265569436750473'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/11/under-control.html' title='Under control.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-7789788528461915244</id><published>2006-10-20T05:14:00.000-07:00</published><updated>2006-10-20T09:48:28.107-07:00</updated><title type='text'>What you see is what you understand.</title><content type='html'>I have spent a substantial portion of my adult life trying to understand what is going on insidea large bucket of data. While some people are very successful in understanding complex data by staring at columns of numbers, I have always needed to reduce the numbers to the visual. Think charts, graphs, and plots.&lt;br /&gt;&lt;br /&gt;Generating elegant plots has always been hard. One of the key reasons to use a spreadsheet is to be able to use the included charting package. That is not always convenient if you are developing your own software, although if you're working on Windows it is certainly possible to use Excel as your charting engine. Remember the Microsoft mantra: &lt;em&gt;Office &lt;strong&gt;is &lt;/strong&gt;the platform.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;For those who work in a cross-platform environment, the options are more limited. The situation was sufficiently grave that five or six years ago, I ported a presentation graphics package (&lt;a href="http://metagram.webreply.com/"&gt;Jpgraph&lt;/a&gt;) from PHP to Python just so that I could use it for a single project. Fortunately, since then the state-of-the-art has improved.&lt;br /&gt;&lt;br /&gt;In the scientific and engineering world, &lt;a href="http://www.mathworks.com/"&gt;Matlab &lt;/a&gt;from Mathworks is the state-of-the-art in data analysis, scientific mathematics, and data visualization. Widely used leads to widely copied. And the folks at &lt;a href="http://matplotlib.sourceforge.net/"&gt;Matplotlib&lt;/a&gt; have crafted a graphics library whose output is as good as Matlab, and which can be integrated with any Python program. (By the way, if you need the numerical analysis tools that Matlab provides, you should also take a look at the &lt;a href="http://www.scipy.org/"&gt;NumPy and SciPy &lt;/a&gt;projects).&lt;br /&gt;&lt;br /&gt;It is multiplatform, and equally good at interactive graphics and generating graphics for Web services. Cool stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-7789788528461915244?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/7789788528461915244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=7789788528461915244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/7789788528461915244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/7789788528461915244'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/10/what-you-see-is-what-you-understand.html' title='What you see is what you understand.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-6823620052793096397</id><published>2006-10-16T04:38:00.000-07:00</published><updated>2006-10-16T05:13:24.688-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python html screenscraping tools'/><title type='text'>Soup of the evening, ...</title><content type='html'>... &lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;BeautifulSoup&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;BeautifulSoup let's you extract things from someone elses HTML. &lt;em&gt;Fast. &lt;/em&gt;And fast is where it counts: in programmer years.&lt;br /&gt;&lt;br /&gt;Back in the data, screen scraping (the fine, if somewhat distasteful, art of extracting machine usable data from screens formatted for people) was easier, harder, and less necessary.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Easier, &lt;/em&gt;because data used to be displayed in neat rows and columns, separated by white space or commas, and easy to parse.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Harder,&lt;/em&gt; because there was no easy way to get a screen image to process. Lots of obsolete code there. Eh, it was all in Cobol anyway. No regrets.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Less necessary, &lt;/em&gt;because there wasn't any data that you wanted to get. No web, no data publishing, no motivation.&lt;br /&gt;&lt;br /&gt;Now it's harder, because data is all tangled up in HTML. It takes a big program to make that look like neat columns and rows on your screen. Now it's easier, because getting the text of an HTML page is one life of code if you know the URL. And now it is far more necessary. There is useful data everywhere, it's just that everyone makes pretty web pages from it. And no one publishes the good stuff in a form you can load it into your database and do cool stuff with it.&lt;br /&gt;&lt;br /&gt;Here's an example problem. My local police department publishes the police blotter every day on the town web site. Nice for reading, not so good for turning into a database of where the traffic accidents in town are occuring. BeautifulSoup makes it easy to get what is needed:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;text = urllib.urlopen(page).read()&lt;br /&gt;as = BeautifulSoup.BeautifulSoup(text).findAll('a')&lt;br /&gt;pdfs = [a["href"] for a in as if a["href"].endswith(".pdf")]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Doesn't matter if the HTML is crummy, crufty, and broken. This isn't your average XML parse pretending to be useful. This code just &lt;em&gt;works.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Three lines of code give me the links to all the PDF files on the page.  Just what I was looking for. Of course, the data is still in a human readable, machine opaque form: PDF. More on that later.&lt;br /&gt;&lt;br /&gt;In the meantime, getting the data I wanted was two lines of code. Leonard Richardson at crummy.com has made my life better. Thanks!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Beautiful.&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-6823620052793096397?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/6823620052793096397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=6823620052793096397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/6823620052793096397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/6823620052793096397'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/10/soup-of-evening.html' title='Soup of the evening, ...'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-8513907527881339726</id><published>2006-10-09T13:18:00.000-07:00</published><updated>2006-10-09T13:35:05.675-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='image processing'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>One trick pony?</title><content type='html'>It's sometimes hard to know when to stop adding new features to a good piece of software.&lt;br /&gt;&lt;br /&gt;Sometimes a new feature is just that: a new feature that nestles right in with the other good things a piece of software does. And sometimes it's the sign of &lt;a href="http://en.wikipedia.org/wiki/Software_bloat"&gt;software bloat&lt;/a&gt;, which often indicates a rotting program that is about to explode under the pressure of internal gases.&lt;br /&gt;&lt;br /&gt;Microsoft Word is often cited as a clear example of bloated software. But the opposite of unbloated does not have to be feature-poor. &lt;a href="http://www.irfanview.com/"&gt;Irfanview&lt;/a&gt; is rich in features, but they all contribute to a single goal: clean viewing, cleaning, and saving of graphical images.&lt;br /&gt;&lt;br /&gt;Irfanview is also dirt-cheap-ware (free for home use, 12$ for business use). It's the first utility I install on most of my home computers. The features are there, tucked away inside a less than 1MB download. But what is on the surface is what I want in an image viewer: it loads fast, it resizes quickly, and it gets out of the way as fast as it starts.&lt;br /&gt;&lt;br /&gt;One trick, more like a Lipizzaner stallion than a Shetland pony. Good software, from Bosnia.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Thanks, Irfan!&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-8513907527881339726?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/8513907527881339726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=8513907527881339726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/8513907527881339726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/8513907527881339726'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/10/one-trick-pony.html' title='One trick pony?'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-116024965518756743</id><published>2006-10-07T11:44:00.000-07:00</published><updated>2006-10-07T12:35:56.543-07:00</updated><title type='text'>Pack up your sorrows.</title><content type='html'>&lt;div align="left"&gt;"&lt;a href="http://www.youtube.com/watch?v=Yado-3WQP4A"&gt;If somehow, you could pack up your sorrows,&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=Yado-3WQP4A"&gt;and give them all to me, &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=Yado-3WQP4A"&gt;you would lose them, I could use them ...&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=Yado-3WQP4A"&gt;give them all to me.&lt;/a&gt;" ... Richard Farina&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt; &lt;/div&gt;&lt;div align="left"&gt;I'm pretty sure that Richard and Mimi Farina were not singing about the angst of moving everything you work with and depend on from an old computer to a new one. But they could have been. &lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;I've tackled this problem in most of the ways that a person can. I've backed up to and restored from floppy, zip drive, CDRom, and even magnetic tape. I've done Laplink. I even wrote a quick and dirty serial port upload program for reasons that now elude me. I've copied partitions, I've dragged and dropped over networks. I've used Windows file sharing. I've mounted drives in external USB enclosures. I've copied disk images onto a Linux box and copied them back.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;I'm geezing, but it's more like the remembrance of old war wounds. Some of those scars still ache when the wind is in the east and the barometric pressure is doing the happy dance.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;The problem has gotten harder, of course. It's unsafe to just copy program files and expect them to work these days. The information in your registry and other hidden places that programs use does not get copied. And then the programs don't work when you need them.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;It may not qualify as a &lt;a href="http://dsc.discovery.com/fansites/dirtyjobs/viewerstories/viewerstories.html"&gt;Mike Rowe -- Dirty Jobs &lt;/a&gt;kind of job. But then again, it might.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;Then I found some very useful, if not quite damned fine programs.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;There is a small industry (even smaller now, see below) that helps people who find themselves in this situation. Most of the programs out there only move documents, data, and some preferences. If, like me, your Start-&gt;Programs menu overflows three columns, that just wont' cut it.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;Once upon a time there was a great program from &lt;a href="http://www.eisenworld.com/"&gt;Eisenworld&lt;/a&gt; called (now, don't laugh) Ahohabob PC Relocator. Two desktop moves ago, I spent $50 for a one time license to use it,&lt;/div&gt;&lt;div align="left"&gt;held my breath, and uttered a muttered invocation to St. Hopper (intercessor for computer software and sustems). About 8 hours later, I came back to find everything moved, and pretty much everything working.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;By the next time I needed to move a system, a friend had told me about a program he was working on called &lt;a href="http://www.spearit.com/index.html"&gt;MoveMe&lt;/a&gt;. Dan Spear is a &lt;em&gt;smart &lt;/em&gt;guy. He was the lead system programmer and Quarterdeck, and the guy behind QEMM. I tried his program, and I was pleased. A little less detailed control than Alohabob, and about the same results.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;18 months have gone by since then, and I went back out looking for another one-time license to MoveMe. I found that MoveMe had been licensed to the kindly folks at &lt;a href="http://www.laplink.com/pcmover/pcmover.html"&gt;Laplink&lt;/a&gt; as PCmover. So I went to look at Alohabob. Not for sale anymore: they've sold themselves to Microsoft. And will be part of the core upgrade to Windows Vista engine. I'm guessing that Microsoft doesn't much care to help us all move from one old version of Windows to another.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;Back to PCMover. It worked fine, after a few hiccups getting it to connect over the network. Naked IP addresses are your friend - I never trust Microsoft networking to get the names right.&lt;/div&gt;&lt;div align="left"&gt;A little thinking, and 8 hours later, I have a pretty-much clone of my old notebook. Office needed activation, and my VPN settings needed to be reentered. No biggy.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;But here's the thing. It's a pretty-much clone of the old notebook. All the baggage, all the weirdnesses, bogus temporary files, and unused software included. In fact, when I look at my desktop system, which has a history going back to my very first PC/AT, it's like looking at a Nautilus.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;Before I started using the application transfer programs, I would have an image of the last system in a folder on the current system. And inside that image would be an image of the previous one. Each smaller than the last, because disks have been getting bigger, too. &lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;Since using these new programs, the archeaology of my systems is less clear. The strata are less separated. It's more modern: all eras living together at once.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;But either way, my new systems always sing the same song: "&lt;em&gt;Pack up your sorrows, and give them all to me&lt;/em&gt;".&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-116024965518756743?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/116024965518756743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=116024965518756743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/116024965518756743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/116024965518756743'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/10/pack-up-your-sorrows.html' title='Pack up your sorrows.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-115984345670492052</id><published>2006-10-02T19:21:00.000-07:00</published><updated>2006-10-02T19:44:16.713-07:00</updated><title type='text'>Internal exams, auguries, and what's on top?</title><content type='html'>Understanding complex systems can require power tools, from the invasive to the illuminating. Whether the complex system is a stew of open source or the multi-layered, backward compatible Baklava we know as Windows, the tools are just as important.&lt;br /&gt;&lt;br /&gt;I have a few favorites in this space.&lt;br /&gt;&lt;br /&gt;For Linux, there is &lt;em&gt;top&lt;/em&gt; ... and the top-a-likes. Each of these uses a simple character window to provide an animated view of what's going on under the covers.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;top&lt;/em&gt; gives a view of Linux processes, CPU and memory consumption, all in glorious Ascii. &lt;/li&gt;&lt;li&gt;&lt;a href="http://jeremy.zawodny.com/mysql/mytop/"&gt;&lt;em&gt;mytop&lt;/em&gt; &lt;/a&gt;does the same thing for the MySQL database server, with a view of query threads, and overall performance&lt;/li&gt;&lt;li&gt;&lt;a href="http://srparish.net/scripts/"&gt;&lt;em&gt;nettop&lt;/em&gt; &lt;/a&gt;does it for network packets&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Windows has one awesome source for tools for this kind of analysis: the free tools at &lt;a href="http://www.sysinternals.com/"&gt;Sysinternals&lt;/a&gt;. My favorites include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sysinternals.com/Utilities/Filemon.html"&gt;&lt;em&gt;fileinfo &lt;/em&gt;&lt;/a&gt;lets you watch files open, close, read, write in real time. With filters. Watching file activity is a great way to figure out why programs start so slowly.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sysinternals.com/Utilities/ProcessExplorer.html"&gt;&lt;em&gt;processexplorer&lt;/em&gt;&lt;/a&gt; monitors processes, DLLs, shared memory, and more&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Perhaps the most entertaining thing about these is that the founders of Sysinternals give all this excellent software away. They gave it away so successfully that Microsoft acquired them.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Way to go.&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-115984345670492052?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/115984345670492052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=115984345670492052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115984345670492052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115984345670492052'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/10/internal-exams-auguries-and-whats-on.html' title='Internal exams, auguries, and what&apos;s on top?'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-115976278395432548</id><published>2006-10-01T21:02:00.000-07:00</published><updated>2006-10-01T21:19:43.963-07:00</updated><title type='text'>Doing the Cha-cha with the mechanical turk.</title><content type='html'>I'm not sure yet whether either of these systems represents really fine software.  But both &lt;a href="http://www.chacha.com/"&gt;Cha cha &lt;/a&gt;and the &lt;a href="http://www.mturk.com/mturk/welcome"&gt;Mechanical Turk&lt;/a&gt; are signposts on a road towards an unfamiliar future.&lt;br /&gt;&lt;br /&gt;Cha-cha and the Turk represent the intellectual piecework of the future.&lt;br /&gt;&lt;br /&gt;Cha-cha is a new Internet search service which uses &lt;em&gt;guides&lt;/em&gt; to deliver search results which are targeted. Guides have conversations with people using the search service, and can focus the results dramatically. Some of us are Google wizards: this may be the search for the rest of us.  Well, the rest of &lt;strong&gt;you&lt;/strong&gt;, anyway!&lt;br /&gt;&lt;br /&gt;The Mechanical Turk is another Amazon Web service, which offers a way for businesses or even individuals to farm individual bite-size bits of work out to qualified people anywhere in the world. Think of it as distributed computing, where some of the computing nodes are people.&lt;br /&gt;&lt;br /&gt;Although clearly related to each other, these two services point towards different futures.&lt;br /&gt;&lt;br /&gt;Cha-cha is currently using guides to answer questions. It doesn't take much of a leap forward to see them using the knowledge base built to automatically answer these questions in the future.  This either puts the guides out of business, or lets the guides work on  progressively more difficult and esoteric searches. And get paid for it, by the way.&lt;br /&gt;&lt;br /&gt;The amounts of money in question might not keep a family of four fed in the United States, but might seem much more substantial to an English speaker in a country with a ruined or undeveloped economy.&lt;br /&gt;&lt;br /&gt;The Mechanical Turk, on the other hand, offers a much broader marketplace for intellectual piecework.  For those of us who work on problems which are often automatable, but sometimes require a human to make a critical contribution, this could be a godsend.&lt;br /&gt;&lt;br /&gt;These systems could change the world.&lt;br /&gt;&lt;br /&gt;Then again, it could be: &lt;em&gt;"We are the Borg.  Resistance is futile.  You will be assimilated."&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-115976278395432548?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/115976278395432548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=115976278395432548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115976278395432548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115976278395432548'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/10/doing-cha-cha-with-mechanical-turk.html' title='Doing the Cha-cha with the mechanical turk.'/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-115957683666070085</id><published>2006-09-29T17:20:00.000-07:00</published><updated>2006-09-29T17:40:36.676-07:00</updated><title type='text'></title><content type='html'>Fine software. &lt;em&gt;Stupid user.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;That would be me.&lt;br /&gt;&lt;br /&gt;I've been using Emacs for a lot of years. I first ran a cut down version (from an extensibility point of view: no Lisp, not even any Teco) that had been ported to the PDP-11, back in the days when minicomputers were king. Well, heirs apparent, anyway.&lt;br /&gt;&lt;br /&gt;The machines I have at my personal disposal have grown smaller and bigger (now smaller than a breadbox and hugely bigger in every dimension of computing power than the &lt;a href="http://www.columbia.edu/acis/history/pdp10.html"&gt;TOPS-10&lt;/a&gt; and TOPS/20 DEC mainframes I first saw &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs &lt;/a&gt;on). And Emacs has grown with them into an old friend. Emacs and I (and probably Stallman, as well) have grown old and grey together.&lt;br /&gt;&lt;br /&gt;So here is the &lt;em&gt;stupid user &lt;/em&gt;part. It's &lt;strong&gt;stupid&lt;/strong&gt; to stop reading the fine manual, help, or info pages that come with the damned fine software. My hands have been hurting lately, and I was whining to a co-worker about the lack of Python name completion in my favorite editor. He looked at me as if I were a moron (perceptive fellow) and told me Emacs key strokes for doing exactly what I wanted.&lt;br /&gt;&lt;br /&gt;I shared a cubby for a week with &lt;a href="http://www.stallman.org/"&gt;Richard Stallman&lt;/a&gt; because I needed the &lt;a href="http://en.wikipedia.org/wiki/Lisp_machine"&gt;Lisp Machine&lt;/a&gt; (Caddr-2, I think) that was in his office. It had a sweet hardware convolution engine for machine vision, and I was writing some code for it. I don't think I spoke more than two words to him: even then, he was a forbidding presence.&lt;br /&gt;&lt;br /&gt;So Richard, here are two more words: &lt;em&gt;Thank you.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;And for the rest of you using damned fine software: remember to re-read the &lt;strong&gt;damned fine manual.&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-115957683666070085?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/115957683666070085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=115957683666070085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115957683666070085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115957683666070085'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/09/fine-software.html' title=''/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-115947874145306466</id><published>2006-09-28T14:17:00.000-07:00</published><updated>2006-09-28T21:41:57.903-07:00</updated><title type='text'></title><content type='html'>Programming in Java is not so bad -- it is certainly more fun than JavaScript.&lt;br /&gt;&lt;br /&gt;Programming in Javascript reminds me very much of programming in assembly language. So many different things you can do to get in trouble. Between up-and-down level browsers, toolkits, and asynchronous this-and-that there are days that I think that working with JavaScript is like making a bouquet of genetically engineered snakes.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;And I like snakes.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I have been working with the &lt;a href="http://code.google.com/webtoolkit/"&gt;Google GWT toolkit&lt;/a&gt;. It provides good basic scripting support of DHTML, event handling, and Java style layout of dialogues and small applications. Amazingly, this strongly typed language stuff is pretty good: most of my small applications work the first time they compile successfully.&lt;br /&gt;&lt;br /&gt;Underneath the skirts, GWT compiles Java classes into surprisingly small JavaScript. It provides a reasonable subset of the usual Java runtime environment, and has escapes in the native JavaScript. If you're happy using Java servlets on the backend, such as the Tomcat environment, you can get lovely remote transparent procedure calls, with stubs generated for both sides et cetera.&lt;br /&gt;&lt;br /&gt;Hmm, &lt;strong&gt;&lt;em&gt;compiles&lt;/em&gt;&lt;/strong&gt;. JavaScript really is a pretty good assembly language. But the possibilities for wild branches, self modifying code, and undisciplined development are scary. Nothing like a nice compiler to harness the power of a good architecture. And no chance of hitting the &lt;em&gt;HCF&lt;/em&gt; instruction.&lt;br /&gt;&lt;br /&gt;That's the &lt;em&gt;Halt-And-Catch-Fire&lt;/em&gt; instruction, by the way.&lt;br /&gt;&lt;br /&gt;If like me, you prefer to work in a looser backend environment, such as &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;, you may find yourself gluing together asynchronous Ajax calls using GWT's native JavaScript. It's a promising start ... but still requires some significant work.&lt;br /&gt;&lt;br /&gt;Still, it's better than juggling snakes full-time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-115947874145306466?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/115947874145306466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=115947874145306466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115947874145306466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115947874145306466'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/09/programming-in-java-is-not-so-bad-it.html' title=''/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-115941736445155318</id><published>2006-09-27T21:03:00.000-07:00</published><updated>2006-09-27T21:22:44.460-07:00</updated><title type='text'></title><content type='html'>Fine system, pretty fair software.&lt;br /&gt;&lt;br /&gt;When &lt;a href="http://www.amazon.com/gp/browse.html?node=3435361"&gt;Amazon &lt;/a&gt;recently announced the &lt;a href="http://www.amazon.com/b/ref=sc_fe_l_2/103-5145284-1079002?ie=UTF8&amp;node=201590011&amp;amp;no=3435361&amp;me=A36L942TSJ2AJA"&gt;EC2 &lt;/a&gt;server cloud, on the heels of the &lt;a href="http://www.amazon.com/S3-AWS-home-page-Money/b/ref=sc_fe_l_2/103-5145284-1079002?ie=UTF8&amp;amp;node=16427261&amp;no=3435361&amp;amp;me=A36L942TSJ2AJA"&gt;S3 &lt;/a&gt;announcement earlier this year, my spider sense got all tingly. Or my economic opportunity sensors went off. Whatever.&lt;br /&gt;&lt;br /&gt;A credit card exchange later, I've been creating virtual servers in the cloud, and writing backup systems for the &lt;em&gt;often-desired-rarely-achieved-offsite-backup&lt;/em&gt; that every small engineering group or company should have. &lt;br /&gt;&lt;br /&gt;I hacked an improved S3 backend to &lt;a href="http://duplicity.nongnu.org/"&gt;Duplicity&lt;/a&gt; to backup our subversion store, and to backup my home directory. MySQL backups are now running using a combination of mysqldump/gzip/split and a few calls to the S3 storage software. Using the S3 signature (Etag attribute) helps avoid uploading backups that haven't changed.&lt;br /&gt;&lt;br /&gt;The software to access S3 is a little raw, and the software for controlling EC2 is appallingly Java centric, but the whole effect is impressive. Now that I can get my data into the cloud in industrial quantities, it's time to start seeing what I can do about crunching it with the virtual servers.&lt;br /&gt;&lt;br /&gt;There's a pony in here somewhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-115941736445155318?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/115941736445155318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=115941736445155318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115941736445155318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115941736445155318'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/09/fine-system-pretty-fair-software.html' title=''/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35153410.post-115941448798842019</id><published>2006-09-27T20:23:00.000-07:00</published><updated>2006-09-27T20:34:48.006-07:00</updated><title type='text'></title><content type='html'>Software and caffeine. And pie. &lt;em&gt;Heh.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;As the phrase might go on &lt;a href="http://freshmeat.net/"&gt;freshmeat.net&lt;/a&gt;, "&lt;em&gt;This blog aims&lt;/em&gt; to discuss fine software found in the course of my daily wanderings around the technoecology."&lt;br /&gt;&lt;br /&gt;I wonder about software that aims. Do not aim, do? Easier said than done.&lt;br /&gt;&lt;br /&gt;My software creation (and eco-tourism) is generally fueled by coffee that is not charred, and is provided by the damn fine folks at &lt;a href="http://www.empirecoffeetea.com"&gt;Empire Coffee and Tea&lt;/a&gt; in Hoboken. I particularly recommend the &lt;strong&gt;AbFab &lt;/strong&gt;blend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35153410-115941448798842019?l=damnedfinesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damnedfinesoftware.blogspot.com/feeds/115941448798842019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35153410&amp;postID=115941448798842019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115941448798842019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35153410/posts/default/115941448798842019'/><link rel='alternate' type='text/html' href='http://damnedfinesoftware.blogspot.com/2006/09/software-and-caffeine.html' title=''/><author><name>Sean True</name><uri>http://www.blogger.com/profile/06932800841705679269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
