<?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-18011646</id><updated>2011-07-07T16:34:39.870-04:00</updated><title type='text'>gengnosis</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18011646.post-1043977580674371302</id><published>2010-10-07T10:18:00.003-04:00</published><updated>2010-10-07T10:54:38.489-04:00</updated><title type='text'>HTTPS + Basic Auth: Java vs Ruby</title><content type='html'>For the past couple of weeks I've been working on automating the process of creating an OVA.  I considered various tools for the automation but for various reasons that aren't especially relevant here, I ended up going with rake running on top of JRuby.  Net result is that for most of the logic I'm writing I have the option of doing it the Java way or the Ruby way.  Almost without fail I found myself preferring the more concise Ruby solutions.&lt;br /&gt;&lt;br /&gt;Then I found myself needing to do an HTTP GET with basic authentication over HTTPS and verify the server's SSL certificate.  Here's the interesting bits of the rakefile with the Java solution:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;require 'java'&lt;br /&gt;&lt;br /&gt;java.lang.System.setProperty('javax.net.ssl.trustStore', 'mykeystore')&lt;br /&gt;java.lang.System.setProperty('javax.net.ssl.trustStorePassword', 'password')&lt;br /&gt;&lt;br /&gt;class MyAuthenticator &amp;lt; java.net.Authenticator&lt;br /&gt;  def getPasswordAuthentication()&lt;br /&gt;    java.net.PasswordAuthentication.new('userid', java.lang.String.new('password').toCharArray())&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;java.net.Authenticator.setDefault(MyAuthenticator.new())&lt;br /&gt;&lt;br /&gt;task :testjava do&lt;br /&gt;  huc = java.net.URL.new('https://foo.com/abc').openConnection()&lt;br /&gt;  print huc.inputStream.to_io.readlines&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It's a bit screwy that I have to replace a global authenticator to supply credentials for a single host, but this is just a rakefile so I didn't feel too bad about cutting corners in MyAuthenticator.&lt;br /&gt;&lt;br /&gt;Here's the equivalent Ruby code:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;require 'net/https'&lt;br /&gt;require 'uri'&lt;br /&gt;&lt;br /&gt;task :testruby do&lt;br /&gt; https = Net::HTTP.new('foo.com', 443)&lt;br /&gt; https.use_ssl = true&lt;br /&gt; https.ca_file = 'foo.crt'&lt;br /&gt; https.verify_mode = OpenSSL::SSL::VERIFY_PEER&lt;br /&gt;&lt;br /&gt; request = Net::HTTP::Get.new('/abc')&lt;br /&gt; request.basic_auth 'userid', 'password'&lt;br /&gt; response = https.request(request)&lt;br /&gt;&lt;br /&gt; print response.body&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Open-uri would have improved the Ruby code dramatically but as far as I can tell open-uri has some hardcoded assumptions about using the machine-wide CA certs.  Setting the userid/password per request is nice, but Java wins the certificate handling hands-down.  Ruby has a marginal LOC lead for a single request, but Java catches up as soon as you make the second HTTP request.&lt;br /&gt;&lt;br /&gt;Chalk up a rare win for Java on this one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-1043977580674371302?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/1043977580674371302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=1043977580674371302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/1043977580674371302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/1043977580674371302'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2010/10/https-basic-auth-java-vs-jruby.html' title='HTTPS + Basic Auth: Java vs Ruby'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-5290329618081601239</id><published>2007-09-28T10:44:00.001-04:00</published><updated>2007-09-28T11:22:23.934-04:00</updated><title type='text'>WIMP no more?</title><content type='html'>As I was about to fall asleep last night, the acronym WIMP came up in my steam-of-consciousness mental meanderings.  For those of you who haven't been around sufficiently long to remember WIMP, it stood for (I believe, and assuming my senility isn't too far advanced) Windows, Icons, Menus, Pointer.  While everyone takes this type of user interface for granted today, it was all the rage when personal computers first got sufficiently powerful to sport GUIs.&lt;br /&gt;&lt;br /&gt;Anyway, back to last night.  It occurred to me that my use of windows and menus has fallen precipitously over the past few years and is in danger of disappearing altogether.  As I do more and more of my daily computing on the web, some curious things have happened.&lt;br /&gt;&lt;br /&gt;Things that I used to accomplish by switching windows I now do by switching tabs in my browser.  My personal email, to-do lists, news, reading material, etc. are all accessed via the web now.  In fact, on a typical day I only spend non-trivial amounts of time in 4 different windows:  my web browser, Lotus Notes (which I wish fervently I didn't have to use), a command line window and emacs.&lt;br /&gt;&lt;br /&gt;Similarly, I almost NEVER use menus anymore.  I long ago learned the mouse-click or keyboard shortcut for everything that I typically do and I find myself annoyed whenever I have to actually LOOK for something in an application's menus.  Since web pages don't have the luxury of adding items to the browser's menus, web designers have found other ways to expose their functionality (rollover text, GUI's that morph in real-time, etc.).&lt;br /&gt;&lt;br /&gt;So for me, at least, WIMP is dead.  Long live...uh...TIP (tabs, icons, pointers)!...or WILT (web apps, icons, links, tabs)!...or something else!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-5290329618081601239?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/5290329618081601239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=5290329618081601239' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/5290329618081601239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/5290329618081601239'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2007/09/wimp-no-more.html' title='WIMP no more?'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18011646.post-3572236830234417642</id><published>2007-09-26T14:23:00.000-04:00</published><updated>2007-09-26T14:35:58.402-04:00</updated><title type='text'>Ex Post Forko</title><content type='html'>This may be unique to me, but I often find myself wanting to retroactively control-click a link on a web page.  The following scenario seems to happen to me all too frequently:&lt;br /&gt;&lt;br /&gt;1. I Google something &amp; get the results back.&lt;br /&gt;2. One of the search results looks promising, so I click it.&lt;br /&gt;3. The page turns out to be interesting, but not really what I'm looking for at the moment.&lt;br /&gt;&lt;br /&gt;At this point what I really want to do is rewind the clock a few seconds and control-click on the link in the search results to farm the interesting-but-not-immediately-relevant page to another tab for future consideration.  Accomplishing this requires a click on the back button, scanning the page to find the link, then a control-click on the link.  Am I the only one that would find it useful to do this with a single click/keystroke?&lt;br /&gt;&lt;br /&gt;If there's anyone out there looking to write a Firefox plugin, could you please write an "ex post forko" extension that does this is with a single gesture?  Control-forward comes to mind as a good candidate, but I'll take whatever I can get.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-3572236830234417642?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/3572236830234417642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=3572236830234417642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/3572236830234417642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/3572236830234417642'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2007/09/ex-post-forko.html' title='Ex Post Forko'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-8625878254020150175</id><published>2007-05-30T22:08:00.000-04:00</published><updated>2007-05-30T22:40:29.254-04:00</updated><title type='text'>MacBook adventures:  Additional Proggies</title><content type='html'>By sheer coincidence, I appear to have purchased my MacBook about the same time &lt;a href="http://www.sutor.com/newsite/blog-open/"&gt;Bob Sutor&lt;/a&gt; got his Mac.  By even sheerer coincidence, we both use Ubuntu as well.  And we both work for IBM.  This is getting spooky.  I'm almost glad I missed his talk at UNC a few months ago -- the universe might have imploded if we were in the same vicinity.&lt;br /&gt;&lt;br /&gt;Anyway, this is my first (well, first-and-a-half if you count the blog entry I almost-posted about locating a new screen background) blog entry about setting up my new MacBook.  Today's ramblings are about additional programs I've installed on the Mac to make myself more comfortable.  Mac purists (sorry John, that's you) will probably scoff at some of these, but productivity trumps purity everyday in my world.&lt;br /&gt;&lt;br /&gt;Safari was ok as far as it went, but that wasn't quite far enough.  Gmail's chat didn't work.  &lt;a href="http://www.loudthinking.com/"&gt;David Heinemeier-Hansson&lt;/a&gt; is somewhat enamored of &lt;a href="http://www.caminobrowser.org/"&gt;Camino&lt;/a&gt;, and after using it for a month or so I have to concur.  Gmail is working fine &amp; it's done a bangup job on every webpage I care about thus far.&lt;br /&gt;&lt;br /&gt;Next Terminal.app had to go (no tabs?!  WTF?!).  &lt;a href="http://iterm.sourceforge.net/"&gt;iTerm&lt;/a&gt; is the replacement, but even it has some uglies that need to be configured around.  In particular, I was pulling my hair out until I figured out how to create a new keyboard profile that sends option as meta.  The bookmarks with associated commands and corresponding keyboard shortcuts are nice too.  Emacs over ssh to the Ubuntu box is looking pretty good with Monaco 10.&lt;br /&gt;&lt;br /&gt;Lastly (for this post, at least): &lt;a href="http://www.apple.com/downloads/macosx/unix_open_source/carbonemacspackage.html"&gt;Carbon Emacs&lt;/a&gt;.  I drank the emacs koolaid in college about 18 years ago and Meta-X has been my constant companion ever since.  It was a pleasant surprise to run across a Macified flavor of my favorite tool and defer an onerous retraining of the fingers for a few more years (ctrl-P is NOT print, damnit!).&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/18011646-8625878254020150175?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/8625878254020150175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=8625878254020150175' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/8625878254020150175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/8625878254020150175'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2007/05/macbook-adventures-additional-proggies.html' title='MacBook adventures:  Additional Proggies'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18011646.post-6077086081792104419</id><published>2007-04-25T14:01:00.000-04:00</published><updated>2007-04-25T14:38:46.399-04:00</updated><title type='text'>Adventures with XP and Ubuntu</title><content type='html'>About a month ago I got a new laptop at work.  A nice one (or at least, nicer than my old one) -- a Lenovo ThinkPad T60p.  The little bundle of computing power has a Core 2 Duo processor, 3GB of memory and a 100GB hard drive.  Emboldened by the success stories of &lt;a href="http://www.intertwingly.net/blog/2007/04/20/Feisty-Fawn"&gt;Sam Ruby&lt;/a&gt; and Jason McGee, I installed PartitionMagic 8.0, shrank the XP partition down to 65GB and carved out 35GB to install Ubuntu.  As I said, this was about a month ago.  I use Ubuntu on my custom-built desktop at home (which is another, even longer story), and knew that Feisty Fawn was due in mid-April so I decided to leave the partition empty.&lt;br /&gt;&lt;br /&gt;Fast forward to April 19.  Feisty Fawn goes public!  Woohoo!  Fire up BitTorrent, snag the ISO's (i386, BTW -- I got burned putting AMD64 binaries on my home machine) and start the install.  On the whole, I'd say it went pretty cleanly.  Had to click through a few quasi-nasty messages about using non-open video drivers for the ATI chips in the laptop, but that's far better than the old status quo.  So I'm sitting there looking at my newly-installed Ubuntu 7.04 desktop and it occurs to me that I've done this all wrong...&lt;br /&gt;&lt;br /&gt;I expect I could have mounted my NTFS partition as read-only under Ubuntu, but there are still several internal things at IBM that only run cleanly under Windows XP.  Things like accessing printers, submitting expenses and building presentations.  I'd spend a significant portion of my time rebooting back and forth between Ubuntu and XP.  It occurred to me that I could get all the things I wanted from Ubuntu (rich command line tools, real filesystem, superior editors, etc.) by running it in a virtual machine -- I didn't need to let it own the entire machine!  No problem, I figured, I'll just boot back to XP, use PartitionMagic to rejoin the partitions and host Ubuntu under VMware.  That's when the fun began.&lt;br /&gt;&lt;br /&gt;Apparently installing grub on the boot partition modifies the master boot record (MBR) in such a way that PartitionMagic can't recognize it anymore.  PM steadfastly reported error 117 and refused to even start.  That sucked.  So I googled various combinations of "remove", "grub", "fix" and "MBR".  The universal solution seemed to be to boot off the XP CD, go into recovery mode and do "fdisk /mbr".  Except I don't have an XP CD -- we have a group of folks at work that install XP for us and we never see the CD's.  That sucked even more.&lt;br /&gt;&lt;br /&gt;I was desperate.  So desperate that I made it all the way to the 3rd page of Google results before I ran across &lt;a href="http://www.novell.com/coolsolutions/qna/1742.html"&gt;exactly what I was looking for on the Novell website&lt;/a&gt;.  15 minutes later, the partition was gone.  An hour after that, Ubuntu was running under VMware and things have been peachy ever sine.  Thank you Novell!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-6077086081792104419?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/6077086081792104419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=6077086081792104419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/6077086081792104419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/6077086081792104419'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2007/04/adventures-with-xp-and-ubuntu.html' title='Adventures with XP and Ubuntu'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-5280982335636650291</id><published>2007-03-02T13:17:00.000-05:00</published><updated>2007-03-09T09:47:50.588-05:00</updated><title type='text'>Ruby code blocks</title><content type='html'>I first started looking at Ruby in late 2005/early 2006 as part of a project at work.  While the Ruby aspects of the project were eventually eaten by the vagaries of the IBM funding process, my fascination with the language continues.  One thing about Ruby that really clicked with me was the use of code blocks.&lt;br /&gt;&lt;br /&gt;Looking over the Ruby code I've written, it appears that I like them a lot, but it didn't occur to me until a few days ago to wonder why.  I put a (very) little bit of thought into it and here are the reasons I came up with:&lt;br /&gt;&lt;br /&gt;1. They allow me to represent a chunk of code as first-class object.  This is horribly trite and pretty much straight out of the Ruby books, but it happens to be true.  I never used to think this would be all that useful; then I used it.  Man, was I wrong.&lt;br /&gt;&lt;br /&gt;2. I can express my intentions so much more precisely and succinctly.  The important bits of my code's logic all seem to wind up in the code blocks, and the boilerplate all seems to fade into the method calls and parameters.  I have no idea if this is a universal in the Ruby world or just my style of writing Ruby, but I like it.&lt;br /&gt;&lt;br /&gt;3. They are way more versatile than I ever guessed.  Besides the obvious uses like iterator bodies (with each), accumulators (with inject), discriminators (with select/reject), pluggable algorithms (e.g. comparators) and elegant try/finally blocks (e.g. File.open), I have used them as (re)initializers, validators, formatters, slicers, dicers and julienne fry-makers.&lt;br /&gt;&lt;br /&gt;My biggest gripe is that I can only pass one code block to a method.  I know I could do Proc.new or Kernel.lambda, but they just don't have the same elegance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-5280982335636650291?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/5280982335636650291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=5280982335636650291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/5280982335636650291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/5280982335636650291'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2007/03/ruby-code-blocks.html' title='Ruby code blocks'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-3302288274369966623</id><published>2007-02-16T13:43:00.000-05:00</published><updated>2007-02-16T14:33:03.487-05:00</updated><title type='text'>D8a</title><content type='html'>I happen to work in the same department at IBM as &lt;a href="http://bitworking.org"&gt;Joe Gregorio&lt;/a&gt;.  On the whole that little factoid is not likely to get you very far on Jeopardy, but it does happen to be the starting point for this post.  A few weeks ago, I was talking to our common manager and asked him if Joe had made some special deal with the IBM lawyers since he seemed to be allowed to write open source software with impunity while I distinctly remember signing an "IBM owns everything you ever think of" contract on my first day of work 17 years ago (holy crap, have I been here that long?).&lt;br /&gt;&lt;br /&gt;Mr. Manager did a little research on the official guidelines and confirmed that, in fact, IBMers are allowed to write/contribute open source software on their own time as long as said software does not compete with anything IBM sells or advantage an IBM competitor (and before anyone whines, I looked it up and you &lt;span style="font-weight:bold;"&gt;can&lt;/span&gt; verbify "advantage").  Cool!&lt;br /&gt;&lt;br /&gt;I had been working on a simple little backup utility program at home and decided it was time to start building my open source portfolio.  Hence &lt;a href="http://rubyforge.org/projects/d8a/"&gt;D8a&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The original impetus was pretty simple.  We've had a digital camera for a few years now and have managed to amass about 8GB of pictures.  While many are just unflattering dross, there are a significant number that my wife and I would like to keep around.  Being a battle-hardened survivor of at least my fair share of hard drive crashes, I was wise enough not to trust our precious bits to a single set of spinning magnetic platters and keep the data replicated across at least 2 physical drives at home.  Then my wife pointed out that we'd still end up pictureless if our house was ever burglarized.  Or flooded.  Or burned.  Or hit by an asteroid.  Or squashed by a derelict satellite.  Or picked as a landing site by an alien invasion fleet.  She had a point (except for the alien invasion part -- that's just silly).&lt;br /&gt;&lt;br /&gt;Her solution was to burn the data to CD's or DVD's and store them at strategic offsite locations (nee "relatives' houses").  But I had a hosting provider.  And I pay them for 100GB of space.  And I am using approximately 0.5% of that space.  And I decided I could justify the $80 a year I spend on hosting and fix my picture backup problem in one glorious endeavor.  And burning CD's is &lt;span style="font-style:italic;"&gt;so&lt;/span&gt; tedious.&lt;br /&gt;&lt;br /&gt;My initial thoughts were just to use curlftpfs (FTP is the only way to access my hosted content) and the same rsync that I use to sync the pictures across filesystems at home.  Didn't work -- curlftpfs (and from what I can gather, FTP in general) has no provisions for setting the timestamps on files which means that rsync would have to transfer my entire picture library to check for diffs every time it synced.  Bummer.  But what if I could store some metadata on the FTP site?  Maybe store the files' checksums and logical timestamps so they could just be read rather than computed?  Sounds like I need a tool!  I like writing tools!&lt;br /&gt;&lt;br /&gt;Writing the logic to mirror a set of data is pretty trivial.  I've done it at least half a dozen times in the past.  The tedious part is creating a uniform way to access data that is stored in local files and an FTP site.  Enter D8a.&lt;br /&gt;&lt;br /&gt;D8a is a Ruby library that provides a simplistic, uniform abstraction of data that lives (initially) in the filesystem or on an FTP site.  A "D8a" is a collection of named pieces of data, each of which consists of a sequence of bytes plus some metadata.  The naming is hierarchal and the mapping onto both the filesystem and FTP space is obvious.  The metadata consists of things like size, modification time, checksum, etc. (the exact set depends on where the data is stored).  The initial code is already committed &amp; version 0.1 should (hopefully) be available in the next couple weeks.  It won't do much, but my current schedule has D8a doing nightly backups of our pictures by the end of March.&lt;br /&gt;&lt;br /&gt;Come check out the &lt;a href="http://rubyforge.org/projects/d8a/"&gt;D8a&lt;/a&gt; project on RubyForge if it sounds interesting to you.  I've already got several ideas for future expansion (mapping onto HTTP, zip/tar files, Amazon S3, databases, etc.; better integration with Ruby's IO class; addition of orthogonal behaviors (already started this one)), but I'm always looking for new ideas and collaborators!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-3302288274369966623?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/3302288274369966623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=3302288274369966623' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/3302288274369966623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/3302288274369966623'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2007/02/d8a.html' title='D8a'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18011646.post-3424426668937653824</id><published>2007-01-23T11:08:00.000-05:00</published><updated>2007-01-23T16:32:43.417-05:00</updated><title type='text'>Level-triggered and edge-triggered</title><content type='html'>More years ago than I care to admit, I took a series of classes in digital logic as part of my undergraduate curriculum.  By the end of the most advanced of these classes, we were writing microcode to add new instructions to a real microprocessor &amp; debugging said microcode with logic analyzers.  Most of that experience has faded into the dim recesses of memory, but one tidbit has stayed fresh because it comes up and bites me in the butt every few years.  That one tidbit is the distinction between level-triggered logic and edge-triggered logic.&lt;br /&gt;&lt;br /&gt;Edge triggered things happen when some stimulus changes; level-triggered things happen when some stimulus crosses a threshold.  In the case of digital circuits, the stimulus is voltage on a wire -- edge-triggered things happen when the voltage changes, level-triggered things happen when the voltage is above or below some preset amount.  As a more mundane example, consider your telephone.  It rings when someone dials your phone number (edge-triggered) and has an indicator to let you know when there's at least one message waiting (level-triggered).  Equally mundanely, consider a traffic light.  You stop whenever it's red (level-triggered).  You go when the jerk behind you honks his horn because the light's green and you aren't moving (edge-triggered).&lt;br /&gt;&lt;br /&gt;But I don't design digital circuits anymore -- I write software.  What do edge-triggered and level-triggered have to do with software?&lt;br /&gt;&lt;br /&gt;Most simple programs are level-triggered.  Their execution depends on the inputs they are given and those inputs tend not to change during execution of the program.  Think "hello world" and most command-line utilities.  As complexity increases, however, programs tend to take on more edge-triggered behavior.  Complex applications tend to be decomposed into simpler components that communicate with one another using paradigms like producer/consumer or event source/subscriber.&lt;br /&gt;&lt;br /&gt;Most of the software I have worked on in my career falls under the broad label "distributed".  That is, it is part of a system that spans multiple machines connected over a network.  Over and over (and over) again I have watched people (sometimes myself) try to extend edge-triggered programming paradigms to distributed systems.  And almost without fail, every one of those attempts has either failed outright or resulted in complex, sloppy, error-prone code.  After an especially painful experience with this 6-7 years ago, I did some thinking about why edge-triggered programming tends not to work so well in distributed systems.&lt;br /&gt;&lt;br /&gt;In distributed system, single points of failure (SPOFs) are anathema.  Customers hate them and will generally give you hell if your system has any because they know from experience that any SPOF *WILL* eventually cause unplanned outages.  Why?  Simple statistics -- as the number of moving parts in your system increases, the chances that all of them will be functioning correctly at any given time approaches zero.  Edge-triggered paradigms work marvelously within a single process.  Within a single process events don't get lost.  It doesn't matter if the event subscriber dies because the event source will die along with it.  In a distributed system, there are a million and one ways for components on different machines to get out of synch:  networks get congested or fail, processes terminate, hard drives crash, storms cause power outages, etc.  When bad things inevitably happen, how do you get your edge-triggered distributed system synchronized again?  You guessed it -- you drop back to a level-triggered mechanism that reconcile discrepancies in state.  So if you have to build level-triggered mechanisms as a fallback anyway, why bother with edge-triggered mechanisms in the first place?&lt;br /&gt;&lt;br /&gt;Let me try to make this more concrete with a real example from a past project.  We were building a configuration datastore for a large distributed system (100s of nodes initially, 1000s eventually).  For various reasons, we chose an early draft of the java.util.preferences API (this was before it was finalized).  Preferences uses a fairly typical Java event/listener model to notify consumers of changes to the data.  We had a version of the API up and running on top of local files in a few weeks and the other teams started building on top of it.  Then we tried to make our code run in a distributed system.  The first design was to extend the event listener mechanism and generate messages to remote nodes whenever data changed.  What should we do for nodes that are down?  We couldn't queue the messages indefinitely -- that requires unbounded storage somewhere in the system.  Maybe we queue messages for a certain amount of time, then give up and just say that if a node comes back up after too long an absence we toss whatever configuration data they had and transfer a new set.  Transferring the whole set of configuration data could take awhile, so we added some simple partitioning/timestamp checking to pare down the amount of data transferred.  At this point the design just rubbed me the wrong way -- it seemed WAY too complex (as indeed it was).  We had built a pretty solid level-triggered distribution mechanism (partitioning, timestamp checking, transfer out-of-date partitions) and layered a flaky edge-triggered mechanism (messages) on top of it.  Once I realized this, the right design was obvious and we tossed the messaging.&lt;br /&gt;&lt;br /&gt;Having witnessed variations of this over many years of software development, I have come up with:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Mike's First Maxim of Distributed Systems&lt;/span&gt;&lt;br /&gt;In a distributed system you should move state information, not work items.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Corollary to the Mike's First Maxim of Distributed Systems&lt;/span&gt;&lt;br /&gt;It's fine to centralize data, but avoid centralized decision making whenever possible.  Instead, distribute information about the desired state and let each node determine how best to get to that state.&lt;br /&gt;&lt;br /&gt;I'm most definitely not asserting that edge-triggered approaches are NEVER correct in distributed systems, but hopefully this little composition will encourage you to think about what you're doing before you make a mess that I'm going to have to live with some day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-3424426668937653824?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/3424426668937653824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=3424426668937653824' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/3424426668937653824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/3424426668937653824'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2007/01/level-triggered-and-edge-triggered.html' title='Level-triggered and edge-triggered'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18011646.post-8159805671172780673</id><published>2006-10-29T22:35:00.000-05:00</published><updated>2006-10-29T23:00:28.043-05:00</updated><title type='text'>Heroscape</title><content type='html'>My 8-year-old got the basic Heroscape set over the summer, and I have to say it is by far the best $40 we've spent in a LONG time.&lt;br /&gt;&lt;br /&gt;I recall with crystal clarity (and equal distaste) the AD&amp;D miniature I "painted" in 8th grade for a contest.  While I was quite proud of "Hanse the Thief" (with a shout out to all the Thieves' World fans out there), my miniature-painting skills are best suited to rendering characters near the final stages of leprosy.  Imagine my surprise when we pulled a couple dozen superbly-painted miniatures from the box.  And the surprises kept coming...&lt;br /&gt;&lt;br /&gt;The rules were simple, the gameplay engaging and the game is expandable.  6 expansion sets later, my son is still avidly saving his money for the next one.  Using terrain pieces and assembling the battlefield is equally brilliant.  Granted, it lets Milton Bradley sell new terrain pieces ad infinitum, but it lets you add variation to the game whenever you want.&lt;br /&gt;&lt;br /&gt;The last piece that impressed me was the army-building.  I'm still trying to get across to my son the benefits of assembling an army from complementary characters, but at least this game helps him think some about strategy rather than just stronger-army-beats-the-crap-out-of-weaker-army.&lt;br /&gt;&lt;br /&gt;If you're looking for a visually appealing mix of Risk and AD&amp;D with reasonably simple yet engaging gameplay, Heroscape (http://www.hasbro.com/heroscape/) is definitely for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-8159805671172780673?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/8159805671172780673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=8159805671172780673' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/8159805671172780673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/8159805671172780673'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2006/10/heroscape.html' title='Heroscape'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18011646.post-115340408450468019</id><published>2006-07-20T09:50:00.000-04:00</published><updated>2006-10-29T22:31:37.525-05:00</updated><title type='text'>Talk at NYPHPCON</title><content type='html'>Not sure why it didn't occur to me to post this sooner, but better late than never...&lt;br /&gt;&lt;br /&gt;Last month (June 16th to be exact), I gave a talk at &lt;a href="http://www.nyphpcon.com"&gt;NYPHPCON&lt;/a&gt;.  I'm not (yet) important enough to be a keynote speaker or anything, but if you happened to attend the Friday 2:45pm session on the .org track, you saw yours truly pontificate on "Using PHP and SOA for Situational Applications in the Enterprise".  If you're dying for more details, check out &lt;a href="http://www.nyphpcon.com/speakers.php#75aa0572f6e2e07fe80b508b770182b2"&gt;the speaker's page on the conference website&lt;/a&gt;.  The session was also &lt;a href="http://www.php-mag.net/magphpde/magphpde_news/psecom,id,26017,nodeid,5.html"&gt;written up&lt;/a&gt; by &lt;a href="http://www.php-mag.net/"&gt;International PHP Magazine&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-115340408450468019?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/115340408450468019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=115340408450468019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/115340408450468019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/115340408450468019'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2006/07/talk-at-nyphpcon.html' title='Talk at NYPHPCON'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-115290808372947525</id><published>2006-07-14T15:57:00.000-04:00</published><updated>2006-10-29T22:31:37.447-05:00</updated><title type='text'>Vote with your pocketbook; spend your franchise</title><content type='html'>The other day I heard the expression "vote with your pocketbook" for about the zillionth time.  For the two people in the world who have never run across this expression, it simply means that if you don't like something you should spend your money elsewhere.  Once enough people do this, the entity responsible for the object-non-grata will either get the idea and change or go out of business.&lt;br /&gt;&lt;br /&gt;My mind took a weird twist this time, however, and I started wondering what would it be like if the metaphor worked the other way around?  That is, instead of likening economics to politics, what would happen if we likened politics to economics?&lt;br /&gt;&lt;br /&gt;For example, give everyone 100 "voting dollars" per year.  Just like with real money, you could spend all your voting dollars on one candidate in one election or spread it across several candidates in several elections.  The candidate that received the most voting dollars wins the election.  Some interesting things become possible in this system:&lt;br /&gt;&lt;br /&gt;- I can express my political opinions with much finer granularity.  I can show EXACTLY how much it means to me that candidate X beats candidate Y.&lt;br /&gt;&lt;br /&gt;- If I'm a "think globally, act locally" kinda guy, I can choose to blow all my voting dollars on local or state elections and none on national elections.  Or vice versa.&lt;br /&gt;&lt;br /&gt;- If I think all the candidates suck (which happens more often than I like), I can save my voting dollars.  Then when a candidate comes along that I REALLY believe in, I can give her a much bigger boost.  (But should I get interest on my voting dollars?)&lt;br /&gt;&lt;br /&gt;- How about extending the concept beyond candidates to issues.  E.g. maybe it takes 15 billion voting dollars to pass an amendment to the U.S. Constitution.&lt;br /&gt;&lt;br /&gt;It won't ever happen, but it's fun to let your mind wander once in awhile...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-115290808372947525?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/115290808372947525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=115290808372947525' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/115290808372947525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/115290808372947525'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2006/07/vote-with-your-pocketbook-spend-your.html' title='Vote with your pocketbook; spend your franchise'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18011646.post-114322937903847071</id><published>2006-03-24T14:06:00.000-05:00</published><updated>2006-10-29T22:31:37.372-05:00</updated><title type='text'>Confidential, Schmonfidential</title><content type='html'>IBM likes to protect information.  We're reasonably good at it, too.  When I started working at IBM in 1990 (yes, I really am &lt;b&gt;that&lt;/b&gt; old), there was a rigid hierarchy of &amp;quot;protectedness&amp;quot; for information:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Some stuff wasn't worth protecting at all.  In an all-to-rare case of corporate genius, this information had no label associated with it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Next, there was information that we could share with anyone that received an IBM paycheck without regard for why they wanted to know it.  This information was labelled &amp;quot;Internal Use Only&amp;quot;, commonly abbreviated &amp;quot;IUO&amp;quot;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Next in the hierarchy came &amp;quot;IBM Confidential&amp;quot;.  This could be shared with anyone within IBM, as long as they had a business need to know the information.  To be  honest, I never really grokked the distinction between IUO and confidential since in my experience nobody ever asked about anything they didn't need to know anyway.  That is, in 16 years working for IBM, I have never refused to tell someone something because they didn't need to know it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Beyond IBM Confidential there was &amp;quot;IBM Confidential Restricted&amp;quot;.  In my entire IBM career I personally have only ever seen one thing that was ICR -- the aggregated design/architecture documents for a very large communications subsystem.  ICR was &lt;b&gt;serious&lt;/b&gt; -- if you wanted access to see (not to &lt;b&gt;have&lt;/b&gt;, mind you, just &lt;b&gt;see&lt;/b&gt;) this documentation, you had to have your manager approve the request  and get your name added to the magic list.  You were never allowed to leave it unattended and unlocked, not even to go take a wizz.  To help you remember how vitally important this was, the document itself was even printed on pink paper and photocopying was verboten.  Needless to say, I looked at one part of this document on one occasion and immediately decided my life would be much simpler if I just went and read the source code from then on (the source files were only IBM Confidential unless they were aggregated, at which point they became ICR, although it was never explained to me exactly what the critical mass for achieving ICR was).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I heard rumors, but never had any direct or indirect experience with, levels of holiness beyond even ICR.  For this, I am grateful.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Fast forward 16 years.  From what I can tell, only unclassified and confidential still survives.  To their credit, the thought police evidently realized the value of having so many different levels of classification was far outweighed by the cost of implementing these levels.&lt;br /&gt;&lt;br /&gt;My only regret is that they picked confidential instead of IUO.  I am an information worker.  I consume bits of information like strategies and customer requirements and generate other bits of information like designs and code.  Everything that impedes information flow between me and other folks in IBM causes me to do my job less efficiently.  I understand that some information is more important.  I understand that some information has to stay inside IBM for competitive and/or legal reasons.  The solution to these difficulties should be to make sure I understand what I can do with the information, &lt;b&gt;not&lt;/b&gt; to deny me access.  Let's face it -- if I really wanted to screw over IBM (which I most emphatically do &lt;b&gt;not&lt;/b&gt; want), I would just do something like upload the source code for WebSphere to SourceForge.&lt;br /&gt;&lt;br /&gt;Constrast this with the open-source world where information flows freely.  Everybody makes fully informed, transparent (ostensibly, anyway) decisions.  While these decisions are openly discussed and (frequently) debated, in the end at least everybody understands why certain decisions were made.&lt;br /&gt;&lt;br /&gt;IBM is definitely getting better, but every once in awhile I still run into an anomaly that makes me want to jump up and down, or scream, or write a letter to Sam Palmisano, or ... write a blog entry like this one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-114322937903847071?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/114322937903847071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=114322937903847071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/114322937903847071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/114322937903847071'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2006/03/confidential-schmonfidential.html' title='Confidential, Schmonfidential'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-114201390333528522</id><published>2006-03-10T12:50:00.000-05:00</published><updated>2006-10-29T22:31:37.303-05:00</updated><title type='text'>Quotes from a high school math teacher</title><content type='html'>I can't recall exactly what, but a few weeks ago something triggered my recollection of a math teacher I had in high school in Seminole, Florida.  If I recall correctly, I had him for one semester of Algebra 2 in 10th grade and then again for a full year of Calculus my senior year (1985-86).  Besides being one of the better teachers I had in high school, David Everling had an exceptionally dry wit that resonated with many of his pupils.  I vividly recall writing down 15-20 of his best witticisms on my newly-purchased Amiga 1000 computer during 12th grade, but that list has long since vanished.  Here are a few of the gems from that list that I DO still recall.  If you happen to run across this page while googling SuperDave &amp; can recall any additional quotes, please add them as comments!&lt;br /&gt;&lt;br /&gt;- "Men, pay attention, you might need to know this someday!  Women, you should pay attention too -- you might marry a man someday who needs to know this!" (I never said he was politically correct, did I?)&lt;br /&gt;- "Men, women, Marlo..." (Marlo was a girl in his Calculus class and a common target of his jokes)&lt;br /&gt;- "U is ah....what is you?" (in reference to du/dt calculus examples)&lt;br /&gt;- "I'm so bright my Dad calls me son (sun)"&lt;br /&gt;- "I remember the first time I saw this.  It must have taken me a whole 4 or 5 milliseconds to understand it."&lt;br /&gt;- "Where I come from, we learn this in 2nd grade.  I come from Krypton."&lt;br /&gt;- "You can't mix apples and oranges unless you're a fruit!"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-114201390333528522?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/114201390333528522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=114201390333528522' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/114201390333528522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/114201390333528522'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2006/03/quotes-from-high-school-math-teacher.html' title='Quotes from a high school math teacher'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-114081444217071472</id><published>2006-02-24T15:38:00.000-05:00</published><updated>2006-10-29T22:31:37.199-05:00</updated><title type='text'>GTD and Backpack</title><content type='html'>In late 2005, I had the good fortune to stumble across &lt;a href="http://www.backpackit.com/"&gt;Backpack&lt;/a&gt;.  Even today, I am still amazed at how something so simple can be so incredibly useful.  If you haven't looked at it you should.  Really.  Right now.&lt;br /&gt;&lt;br /&gt;I am a novice practitioner of &lt;a href="http://www.davidco.com/"&gt;GTD&lt;/a&gt; -- that is, I'm reasonably good at the writing down part and abysmal at the review part.  In no particular order, here are some scribbles on how I (ab)use Backpack for GTD:&lt;br /&gt;&lt;br /&gt;1.  I use the lists for actions and the notes for projects.  The next action for each project on a page is always in one of the lists on the same page.  I put the project in curly braces after the action to remind me to promote the next action from the project when I finish the current one.  E.g. "take pictures of old LPs { sell stuff on ebay }".&lt;br /&gt;&lt;br /&gt;2.  One page for home stuff, one page for work stuff, one page for my shopping list (each list is stuff I'm likely to be able to get on the same trip), one page for stuff I'm waiting for, one page to keep track of people's wish lists (one list per person).&lt;br /&gt;&lt;br /&gt;3.  If an action has a specific due date, annotate it with the date at the beginning.  E.g. "[ 2006Apr15 ] file tax return".  This makes it much easier to rearrange the list by due date as needed.&lt;br /&gt;&lt;br /&gt;I'm always looking for ways to use tools more effectively.  If you've come up with ways to GTD better with Backpack, please let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-114081444217071472?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/114081444217071472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=114081444217071472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/114081444217071472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/114081444217071472'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2006/02/gtd-and-backpack.html' title='GTD and Backpack'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-114020054497252343</id><published>2006-02-17T13:04:00.000-05:00</published><updated>2006-10-29T22:31:37.131-05:00</updated><title type='text'>WSDL and XSLT, yada, yada, yada</title><content type='html'>Last December, I finally got off my butt and completed a &lt;a href="http://www.ibm.com/developerWorks"&gt;developerWorks&lt;/a&gt; article I'd been working on since mid/late-2004.  This past Tuesday, they actually posted the drivel I managed to slap together!  If you ever have a burning desire to do unholy things to WSDL documents using XSLT, &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-xsltwsdl/"&gt;give it a read&lt;/a&gt;; if you want to show off at the next web-service-geek party, &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-xsltwsdl/"&gt;give it a read&lt;/a&gt;; if you ever have difficulty falling asleep at night, &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-xsltwsdl/"&gt;give it a read&lt;/a&gt;; if you're someone who likes to write glowing reviews of material you've never actually read, &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-xsltwsdl/"&gt;give it a read&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-114020054497252343?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/114020054497252343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=114020054497252343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/114020054497252343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/114020054497252343'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2006/02/wsdl-and-xslt-yada-yada-yada.html' title='WSDL and XSLT, yada, yada, yada'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-113104028731751383</id><published>2006-02-10T15:44:00.000-05:00</published><updated>2006-10-29T22:31:36.978-05:00</updated><title type='text'>Zen and the Art of Using a Computer</title><content type='html'>I've recently had cause to use and learn several new applications and programming languages that I had not previously been exposed to.  As is typically the case, some of these systems "feel" right to me (Ruby, Backpack and GMail, for example), and some just don't resonate (PHP, STAF/STAX and urpmi, for example).  I'm not trying to denigrate this latter set -- each serves a useful purpose for thousands (in PHP's case, millions) of people every day.&lt;br /&gt;&lt;br /&gt;The problem here is Zen.  All of my past experiences have shaped my mind so that I think about the world in a certain way.  When faced with a new situation, my brain immediately starts matching it against these entrenched paradigms and patterns so I can select an appropriate response.  Thus when I design/write new software, my zen dictates how I address not only the large issues that invariably arise, but the myriad of smaller choices as well.  When it's finished, the software is as much a reflection of me and my own thought process (my "zen") as it is a reflection of the original requirements.&lt;br /&gt;&lt;br /&gt;Taking the next step, I postulate that the software that feels right to me was written by folks with a zen simliar to my own.  That is, their minds approach and solve problems similar to the way my mind does.  Stuff that rubs me the wrong way, conversely, was most likely written by folks whose minds work very differently than mine.&lt;br /&gt;&lt;br /&gt;While it may be true that on the Internet no one can tell you're a dog, I suspect we're never going all like the same dog food.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-113104028731751383?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/113104028731751383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=113104028731751383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/113104028731751383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/113104028731751383'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2006/02/zen-and-art-of-using-computer.html' title='Zen and the Art of Using a Computer'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-112981831655454609</id><published>2006-02-03T10:09:00.000-05:00</published><updated>2006-10-29T22:31:36.899-05:00</updated><title type='text'>&lt;not-a-programming-language/&gt;</title><content type='html'>I've recently had the chore (nee "opportunity") of putting together some test scripts using &lt;a href="http://staf.sourceforge.net/index.php"&gt;STAF/STAX&lt;/a&gt;.  To be fair, I should also mention that IBM internally also has several layers of test tooling built on top of STAF and STAX to make testing "easier".  "Easier" in the previous sentence was originally going to be "easier [sic]", but I'll withhold final judgement until I learn enough to have an informed opinion.&lt;br /&gt;&lt;br /&gt;STAF makes a lot of sense to me -- it's a simple service-based distributed framework with enough low-level services (processes, events, logging, file manipulation, etc.) provided that you can build more interesting higher-level services.&lt;br /&gt;&lt;br /&gt;STAX, however, just rubs me the wrong way.  STAX is a programming language for test environments.  For some reason known only to their mothers and respective deities, the folks who put together decided to use XML for a programming language.  Now don't get me wrong -- I have nothing against XML per se.  I have used it to represent data on several occasions and am continually amazed at the XSLT tricks that skilled practitioners manage to pull out of their butts.  Let's consider briefly what makes XML a good way to express data.&lt;br /&gt;&lt;br /&gt;1. It is self-contained.  That is, you don't HAVE to have any external meta-information (character set, schema, etc.) to successfully parse it.  This makes working with XML data fairly simple -- any XML parser can read any XML file.  Note that this assumes you don't need to do validation -- that still requires some meta-information about what constitutes "valid".&lt;br /&gt;&lt;br /&gt;2. The data is extensible.  Namespaces allow 3rd (or 4th or 5th or...) parties to augment the data in any way they see fit without hosing each other.&lt;br /&gt;&lt;br /&gt;3. There are really cool mechanisms like XPath, XQuery and XSLT that allow the data to be easily reorganized and combined with other data in ways the original author never intended.&lt;br /&gt;&lt;br /&gt;How many of these are applicable to test scripts?  Let's see...&lt;br /&gt;&lt;br /&gt;1. What kind of metadata do you need for a test script?  Perhaps some information about the environment needed to execute the script, change history, build instructions, etc.  Does STAX let you put any of this in the test script?  Not as far as I can tell.  How about having multiple parsers?  Only a test script interpreter/compiler is ever going to read these.  We've known for decades how to define programming languages precisely enough that multiple people can independently write compilers.&lt;br /&gt;&lt;br /&gt;2. You can't add new constructs to a programming language without hacking the interpreter/compiler.&lt;br /&gt;&lt;br /&gt;3. I can't tell you how many times I've wanted to know how many "if" statements there are in my test scripts.  Oh wait, yes I can -- NEVER!&lt;br /&gt;&lt;br /&gt;And not only does using XML as a programming language NOT give you any benefits, you get to do a lot of extra typing as well!  I need to scrounge some venture capital to start a company that manufactures steel &lt;, &gt; and / keys.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But the insanity doesn't stop there.  The folks who put together STAX *were* bright enough to figure out that XML was totally inappropriate for writing expressions (which you tend to do a lot of in programming languages).  Kudos for that.  They elected to use &lt;a href="http://www.jython.org"&gt;Jython&lt;/a&gt; for expressions.  Kudos again.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Now why the hell didn't they figure out that they should have used Jython (or Ruby or JavaScript or ...) for the whole language!?!&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-112981831655454609?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/112981831655454609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=112981831655454609' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/112981831655454609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/112981831655454609'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2006/02/ive-recently-had-chore-nee-opportunity.html' title='&amp;lt;not-a-programming-language/&amp;gt;'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-112975675496314258</id><published>2005-10-19T17:18:00.000-04:00</published><updated>2006-10-29T22:31:36.816-05:00</updated><title type='text'>Trash bags</title><content type='html'>"Trash bag! Trash bag!" -- &lt;a href="http://www.imdb.com/name/nm0776239/"&gt;Dwight Schultz&lt;/a&gt; (as Capt. H.M. "Howling Mad" Murdock)&lt;br /&gt;&lt;br /&gt;Apologies for the above quote, but it is one of those TV images from my teenage years that is indelibly burned into my memory. For anyone that cares, it was from one of Murdock's schemes to escape from the mental hospital on an &lt;a href="http://www.imdb.com/title/tt0084967/"&gt;A-Team&lt;/a&gt; episode (IIRC, he constructed a parachute from the trash bags and leaped out of a window on an upper floor).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Being the official trash-taker-outer at our house, it has always annoyed me that the box of trash bags is situated under the kitchen sink while the trashcan itself is some 8-10 feet away at the end of the cabinet. About a year ago, it occurred to me that I could reduce trips between the two loci by stashing a few spare trash bags at the bottom of the trash can before putting the new bag in. Over time, the number of spare trash bags has grown until I now routinely place the entire roll of 50(-ish) trash bags there as soon as we start a new box of trash bags.&lt;br /&gt;&lt;br /&gt;It occurred to me a couple months ago that someone should just make a box of trash bags that fits in the bottom of a standard 13-gallon kitchen trash can. It would be so nice to just reach down and pull up the next bag after taking out the previous full bag. If some clever inventor wants to score a few bonus points, the last bag in the box should dispense in such a way that the empty box ends up inside the bag.&lt;br /&gt;&lt;br /&gt;So if you know anyone that works at &lt;a href="http://www.glad.com/"&gt;Glad&lt;/a&gt; or &lt;a href="http://www.pactiv.com/"&gt;Hefty&lt;/a&gt;, please tell them to pick up the phone and call &lt;a href="http://www.rubbermaid.com/"&gt;Rubbermaid&lt;/a&gt; or &lt;a href="http://www.sterilite.com/"&gt;Sterilite&lt;/a&gt;, work out an acceptable set of dimensions and make my life a little bit simpler.!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-112975675496314258?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/112975675496314258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=112975675496314258' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/112975675496314258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/112975675496314258'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2005/10/trash-bags.html' title='Trash bags'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-112972897731051454</id><published>2005-10-19T09:35:00.000-04:00</published><updated>2006-10-29T22:31:36.706-05:00</updated><title type='text'>And the point of all this would be... (continued)</title><content type='html'>&lt;span style="font-family:lucida grande;"&gt;(continuing from yesterday...)&lt;br /&gt;&lt;br /&gt;So how could I goad myself into thinking more? I have managed to produce passable prose on occasion, so it occurred to me that an enforced writing regimen might address more than one deficiency in my life:&lt;br /&gt;&lt;/span&gt; &lt;ol style="font-family: lucida grande;"&gt;   &lt;li&gt;I don't think enough.&lt;/li&gt;   &lt;li&gt;I need to write/publish more (at least according to my immediate managers at work).&lt;/li&gt;   &lt;li&gt;I don't read enough&lt;span style="font-family:lucida grande;"&gt;.&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;span style="font-family:lucida grande;"&gt;That is, writing requires thinking (at least worthwhile writing does), thinking requires exposure to new ideas, reading provides that exposure. So, do I care if anybody reads this? While that would be a nice little ego boost, I certainly don't consider it a condition of success for this exercise.&lt;br /&gt;&lt;br /&gt;I expect the subject of most of my posts will be technology-related since computers are both my job and my hobby, but other subjects will inevitably find their way into my musings as well. I'll try to minimize the dross.&lt;br /&gt;&lt;br /&gt;Have a nice day!&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/18011646-112972897731051454?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/112972897731051454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=112972897731051454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/112972897731051454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/112972897731051454'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2005/10/and-point-of-all-this-would-be_19.html' title='And the point of all this would be... (continued)'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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-18011646.post-112966960508412603</id><published>2005-10-18T17:05:00.000-04:00</published><updated>2006-10-29T22:31:32.741-05:00</updated><title type='text'>And the point of all this would be...</title><content type='html'>&lt;span style="font-family:lucida grande;"&gt;I've been aware of blogging for quite some time now, but it only recently occurred to me that scribbling down my own thoughts might be a worthwhile endeavor. I regularly follow several blogs, but the authors always seemed to be these unapproachable, well-connected, in-the-know super-geniuses (-genii?). A week or two ago I was in a small-ish meeting with Sam Ruby (1), one of these aforementioned super-geniuses, and it struck me that aside from being really smart, he was a pretty normal guy.&lt;br /&gt;&lt;br /&gt;Gears started turning. I read several entries in Sam's blog. More gears turned. I searched out and read blogs from some other folks whose ideas I respect and it occurred to me that I don't do nearly enough real thinking anymore. I cogitate enough to get my work done, but it seems like I had more, better, grander ideas 10-15 years ago than now (I just turned 37). Extrapolating this trend ends up someplace I'd rather not be, so my October 18th resolution is to reverse it.&lt;br /&gt;&lt;br /&gt;(to be continued soon...am out of time and if I don't publish this now, I'll spend forever trying to get it perfect)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(1) There were 4 folks in the meeting. Like Sam, I happen to work for IBM, but had never had a reason to converse with him before.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18011646-112966960508412603?l=gengnosis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gengnosis.blogspot.com/feeds/112966960508412603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18011646&amp;postID=112966960508412603' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/112966960508412603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18011646/posts/default/112966960508412603'/><link rel='alternate' type='text/html' href='http://gengnosis.blogspot.com/2005/10/and-point-of-all-this-would-be.html' title='And the point of all this would be...'/><author><name>Mike Burr</name><uri>http://www.blogger.com/profile/11365928735141670244</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></feed>
