<?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'><id>tag:blogger.com,1999:blog-5009853746322785312</id><updated>2009-10-13T01:05:25.813-07:00</updated><title type='text'>535 Design</title><subtitle type='html'>A cross-section of what passes through my mind while coding.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://535design.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-4226314449168099259</id><published>2007-12-11T21:56:00.001-08:00</published><updated>2007-12-12T06:32:33.503-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>We're moving</title><content type='html'>&lt;p&gt;Sorry about all the excuses and missed posts.  I'm officially putting this blog on hold for the next few days while I bring our new domain on line.  After the hiatus, the blog will continue there.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-4226314449168099259?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/4226314449168099259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=4226314449168099259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/4226314449168099259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/4226314449168099259'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/12/were-moving.html' title='We&apos;re moving'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-8551191742236158140</id><published>2007-12-09T10:10:00.000-08:00</published><updated>2007-12-09T10:10:46.739-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>A good excuse</title><content type='html'>&lt;p&gt;Sorry about the missed post yesterday.  It's a little depressing that I didn't make it two weeks without missing a post, but at least I have a good excuse.  You see, my girlfriend and I broke my bed (again) yesterday and clearing the pieces out of my room took quite a long time.  It's a king-size futon bed, which means the mattress is a pain to move (takes three people) and too big to leave in the room while we disassembled the bed (which itself isn't a quick process).  In the end, we had something we could sleep on (a futon on the floor, but still) but it took hours to get to that point.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-8551191742236158140?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/8551191742236158140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=8551191742236158140' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/8551191742236158140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/8551191742236158140'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/12/good-excuse.html' title='A good excuse'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-2793135592126968283</id><published>2007-12-07T20:25:00.000-08:00</published><updated>2007-12-07T20:25:59.632-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>Hosted, colo, or home server?</title><content type='html'>&lt;p&gt;It's high time that I got my own domain name, but I'm having trouble deciding what kind of service it should call home.  I'd always vaguely planned on having a home web server, but if I want to use it for anything serious (and I do), I'd need to start worrying about saturating my upstream bandwidth.  We're already running into the occasional problem when both my roommate and I are both torrenting and playing WoW.&lt;/p&gt;

&lt;p&gt;The first logical alternative is hosting.  I have a couple of friends (including my SO) who have sites over at &lt;a href="http://www.dreamhost.com/"&gt;Dreamhost&lt;/a&gt; and I've been pretty impressed with them so far.  They offer a decent amount of space and bandwidth without charging an arm and a leg, they offer a full &lt;abbr title="Linux, Apache, MySQL, and PHP"&gt;LAMP&lt;/abbr&gt; environment, and &amp;mdash; for the near-obsessive, like me &amp;mdash; it's even possible to roll and use a custom PHP build.  I'm still iffy, though.  It wouldn't be a stretch to call me "territorial" when it comes to my technology and the idea of hosting &lt;i&gt;my&lt;/i&gt; website on someone else's computer makes me a little leery.&lt;/p&gt;

&lt;p&gt;The logical compromise, then, would seem to be colo, right?  I'm within biking distance of &lt;a href="http://www.he.net/"&gt;&lt;abbr title="Hurricane Electric"&gt;HE&lt;/abbr&gt;&lt;/a&gt;'s Fremont 1 center and I doubt I'd have any trouble finding a secondhand rackmount.  The big problem with colo is the cost.  I could run a home server for no additional cost beyond the electricity, and $10/mo or less for hosting is easy to find.  Colo, on the other hand, is usually in the $50/mo and up range, in my experience, and that's simply more than I want to pay for what's essentially going to be a personal playground.&lt;/p&gt;

&lt;p&gt;So I'm not quite happy with any of the three solutions I currently have on the table and I'm worried that if I choose poorly and regret the decision later that it's going to be a major fight to get my domain transfered elsewhere.  Bleh.  I should probably just host and have done with it&amp;hellip;  If nothing else, I think being forced to keep hosting after changing my mind would piss me off less than being forced to keep using a home server or colo.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-2793135592126968283?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/2793135592126968283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=2793135592126968283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/2793135592126968283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/2793135592126968283'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/12/hosted-colo-or-home-server.html' title='Hosted, colo, or home server?'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-2951972742674213697</id><published>2007-12-06T19:54:00.000-08:00</published><updated>2007-12-06T19:54:17.741-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quotes'/><title type='text'>That something is impossible does not make it wrong</title><content type='html'>&lt;p&gt;The original formulation of this quote was "never redefine your processor's bit-depth on the fly".  In my misspent youth, I once encountered a maddening bug in the code I was working on.  It kept performing 16-bit arithmetic on 32-bit numbers.  I'd double- and triple-checked everything I could think of.  It was a 32-bit processor, I was using a 32-bit compiler with 32-bit integers, and it kept chopping them off!  I eventually began stepping through the code in a debugger.&lt;/p&gt;

&lt;p&gt;Partway though the program, I realized that the memory address representing the mode to use was, indeed, set for 16-bit math.  Thinking I was on to something (I wasn't, as it turned out), I began digging into documentation and compiler options for how to change it, but nothing worked.  Finally, in frustration, I used the debugger's memory editor to change the mode to 32-bit &lt;i&gt;while the code was running!&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Needless to say, things did not progress well from that point.  I can well imagine the pins spinning off into darkened corners, cogs cracking from the strain, and billowing columns of smoke reaching up to the sky in my poor workstation's inner clockwork as it tried to interpret the 16-bit pointer table as a series of overlapping 32-bit pointers.  Fortunately, I had the pretense of mind to shut the whole thing down before something triggered a disk write and started doing &lt;i&gt;serious&lt;/i&gt; damage.&lt;/p&gt;

&lt;p&gt;The lesson that I took away from this was that impossibility does not necessarily represent error.  In this case, the mode was turned down to 16-bit as a form of sandboxing (to reduce the amount of addressable memory) and was not affecting arithmetic at all.  Instead, I had accidentally redefined the keyword for 32-bit integers to point to the 16-bit integer type.  I wish I could say this lesson had proved more valuable, however&amp;hellip; I still find myself butting heads with the "impossible" distressingly often.  At least I haven't recently made any response as dramatic as redefining my processor's bit-depth on the fly&amp;hellip;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-2951972742674213697?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/2951972742674213697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=2951972742674213697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/2951972742674213697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/2951972742674213697'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/12/that-something-is-impossible-does-not.html' title='That something is impossible does not make it wrong'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-3910485068699742092</id><published>2007-12-05T20:10:00.000-08:00</published><updated>2007-12-05T20:11:07.565-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>I, borg</title><content type='html'>&lt;p&gt;I recently got my first iPod (yes, I'm several years behind the curve, but that's a long and unrelated story) and have taken to it like a fish to water.  It's amazing how much of a difference having music playing 80+% of my waking hours has made to my stress levels.&lt;/p&gt;

&lt;p&gt;It took me a while to find the right headphones.  I don't really like the sound of earbuds and "word on the street" (i.e. unsubstantiated rumor from my friends) has it that buds are more likely than most headphones to damage hearing, even at lower volumes.  Because I wanted to listen to music while riding my bike, I couldn't use over-the-head or even behind-the-head earphones; what I really wanted was some kind of supra-aural headphone which clipped to my ears.  It was with some chagrin that, a couple hours of frustrated searching later, I learned that many manufacturers call these "earclips" (moral of the story: always try the simplest solution first).  Nevertheless, I found &lt;a href="http://www.amazon.com/gp/product/B000G36GO0"&gt;a likely-looking pair&lt;/a&gt; on Amazon and put in an order.&lt;/p&gt;

&lt;p&gt;I don't regret buying them &amp;mdash; they're as close to the perfect headphones for me as exist on the market &amp;mdash; but they're still the weakest link in the chain.  The cord tangles and tugs, even under my shirt; the hooks interfere with my glasses and bite into my ears; the one I usually keep hooked to my shirt (one ear on music, on the world) has started to seriously distend the necks of some of my tees.  The more I thought about it, the more I came to realize that I didn't &lt;i&gt;want&lt;/i&gt; headphones, not even perfect ones.  What I &lt;i&gt;really&lt;/i&gt; want is a datajack in my head which pumps external audio (be it music, phone calls, or TV) directly into my ears.&lt;/p&gt;

&lt;p&gt;It seems to me that ears are a natural starting point for learning to "mod" the human body.  Neural interface &amp;mdash; especially sensory interface &amp;mdash; is going to play a large part in any future attempts we make to make electronics more "personal".  As with anything new, it's best to start small and it seems (to this &lt;i&gt;complete&lt;/i&gt; layman) that the signals generated by one's sense of hearing are relatively simple compared to other senses.  It's my understanding that sound is carried from the ears to the brain in parallel as channels representing amplitude over time for all the sound ranges to which the ear is sensitive.  While that's certainly more complex than how sound is typically represented digitally, it sounds likely to be &lt;i&gt;less&lt;/i&gt; complex than the signals used for sight and less total data than touch.  What's more, I see it as a "safer gamble".  If I'm going to risk damaging or losing one of my senses in the pursuit of science, I'd rather risk hearing in one ear than sight in one eye!&lt;/p&gt;

&lt;p&gt;It's unsurprising, then, that some work has already been done in this area, at least correctively.  &lt;a href="http://www.nidcd.nih.gov/health/hearing/coch.htm"&gt;Cochlear implants&lt;/a&gt; are already being used to restore partial hearing in the deaf.  These implants involve direct electrical stimulation of the auditory nerve at points corresponding to various frequency ranges.  Despite the relative simplicity of the technology (the "business end" is nothing more than a string of electrodes on the cochlea), these implants already can restore sufficient hearing for the user to interpret speech!  To me, that's simply astounding.  It looks like the major limiting factor, from a technical standpoint, is the size and insertion of the electrodes.  Whereas the human ear can distinguish thousands of frequencies, even the most advanced implant available has only 22 electrodes.  Smaller electrodes would undoubtedly improve the quality of sound, but could quickly become impossibly small to implant surgically.&lt;/p&gt;

&lt;p&gt;I sometimes wonder whether humanity's future lies in augmentation (non-corrective gene therapy, non-prosthetic cybernetics) or some kind of human essentialism (shunning augmentation as dehumanizing).  I tend to lean towards the former, and I sometimes find myself looking eagerly towards this kind of "techno-prosthetic" in hopes of catching glimpses of the future.&lt;/p&gt;

&lt;p style="font-size:smaller;font-weight:bold;margin-bottom:0"&gt;Related Links&lt;/p&gt;
&lt;ul style="margin-top:0"&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Cochlear_implant"&gt;Cochlear implants on Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-3910485068699742092?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/3910485068699742092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=3910485068699742092' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/3910485068699742092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/3910485068699742092'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/12/i-borg.html' title='I, borg'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-3401807268166019049</id><published>2007-12-04T18:46:00.000-08:00</published><updated>2007-12-04T18:49:09.768-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>An Obvious Distraction</title><content type='html'>&lt;p&gt;Crap.  I spent all day working on my &lt;a href="http://535design.blogspot.com/2007/11/blogger-enhanced-post-editor.html"&gt;Blogger post editor&lt;/a&gt; and now I can't think of anything to post in my blog.  Ironic, much?  I need to start doing this earlier in the day.&lt;/p&gt;

&lt;p&gt;Um&amp;hellip; &lt;a href="http://www.liveleak.com/view?i=109_1195663753"&gt;distractionary exoskeleton&lt;/a&gt;?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-3401807268166019049?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/3401807268166019049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=3401807268166019049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/3401807268166019049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/3401807268166019049'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/12/obvious-distraction.html' title='An Obvious Distraction'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-5798250706430907302</id><published>2007-12-03T20:22:00.000-08:00</published><updated>2007-12-03T20:22:49.259-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>Ye Olde Assemblie Shoppe</title><content type='html'>&lt;p&gt;I sometimes miss programming in assembly.  Perhaps that sounds strange, but things were so much more concrete back then.  You didn't worry about code profiling or variable types; you just counted clocks and used the data however you saw fit.  And the flexibility was amazing &amp;mdash; nothing I've since encountered quite compares to a program which rewrites its own jumps.&lt;/p&gt;

&lt;p&gt;Of course, the flaws were equally impressive.  Infinite loops, stack over-/underruns, and the dreaded Jump to Who-Knows-Where were sure to ruin your day &amp;mdash; and your data &amp;mdash; if you weren't careful about backups.  This is especially true when coding for devices without any permanent storage.  I remember the time in college when, bored between classes, I decided to test out a new input routine I was working on.  One JMP into video memory later, I found myself having to assemble the instructions into machine code by hand (as it lacked an assembler in the ROM) and reenter the entire program manually (as I'd neglected to bring my serial cable).&lt;/p&gt;

&lt;p&gt;Heh, good times.  Good stories.&lt;/p&gt;

&lt;p&gt;I've left that all behind me now.  I live in a world of interpreted languages and exception handling, of versioning code repositories and package managers&amp;hellip;.  But I still wax nostalgic sometimes.  I sometimes look at these languages throwing around "compiles to bytecode" and wonder if there's something there for an Assembler Refugee like myself.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-5798250706430907302?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/5798250706430907302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=5798250706430907302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/5798250706430907302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/5798250706430907302'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/12/ye-olde-assemblie-shoppe.html' title='Ye Olde Assemblie Shoppe'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-915818338579029873</id><published>2007-12-02T19:08:00.000-08:00</published><updated>2007-12-02T19:32:00.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Python data: URL script</title><content type='html'>&lt;p&gt;Okay, I'll admit it's a bit of a cop out, but I didn't want to skip today entirely.  This is a boringly simple little Python script I wrote to create data: URLs directly within my text editor.  Select the text, run the script, presto.  It has command line options for encoding style, mime type, input file, and output file, but defaults to guessing at the first two and using stdin/-out for the latter.&lt;/p&gt;

&lt;p style="font-size:smaller;font-weight:bold;margin-bottom:0"&gt;Related Links&lt;/p&gt;
&lt;ul style="margin-top:0"&gt;
&lt;li&gt;&lt;a href="http://535design.googlepages.com/data-url.py"&gt;data-url.py&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-915818338579029873?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/915818338579029873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=915818338579029873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/915818338579029873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/915818338579029873'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/12/python-data-url-script.html' title='Python data: URL script'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-3463472680035912557</id><published>2007-12-01T18:39:00.000-08:00</published><updated>2007-12-01T18:40:32.481-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='soapbox'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>Conditional Comments Considered Helpful</title><content type='html'>&lt;p&gt;Wandering around the &lt;a href="http://xkcd.com/181/"&gt;interblag&lt;/a&gt; lately, I've come across a number of "conditional comments considered harmful"-type posts.  I'll not name names, as some of them are from developers I quite respect&amp;hellip; and I'd rather respond to the general arguments than take aim at an individual.&lt;/p&gt;

&lt;p&gt;There are four major arguments I've seen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;conditional comments impede separation of content and presentation&lt;/li&gt;
&lt;li&gt;conditional comments are not standards-compliant&lt;/li&gt;
&lt;li&gt;&lt;abbr title="Extensible Stylesheet Language Transformations"&gt;XSLT&lt;/abbr&gt; doesn't "play well" with conditional comments&lt;/li&gt;
&lt;li&gt;&lt;abbr title="Cascading Style Sheets"&gt;CSS&lt;/abbr&gt; hacks are superior to conditional comments because they do not suffer from the above problems&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I find the first argument to be by far the most compelling &amp;mdash; there's no denying the fact that the use of conditional comments adds non-content markup to a document, even when only used to reference external stylesheets.  However, this seems to me more of an anthill-scale problem than a mountain-scale one.  Outside of lab conditions, non-content markup is simply a fact of life.  Onion skins, container &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;s, zebra striped tables, and other techniques ensure that few web sites achieve perfect separation between content and presentation.  The reason for this is simple &amp;mdash; &lt;i&gt;&lt;abbr title="Hypertext Markup Language"&gt;HTML&lt;/abbr&gt; is not a pure content language&lt;/i&gt;.  Trying to treat it like one is sure to painful and unfulfilling; better to use XSLT to transform pure content markup into HTML, adding conditional comments and other presentation markup as it goes.&lt;/p&gt;

&lt;p&gt;Moving on to the second point, standards compliance.  I feel it's a little disingenuous to call conditional comments a violation of standards.  It's the &lt;i&gt;browsers which recognize them&lt;/i&gt; which are non-standard (violating the instructions that comments "have no special meaning" and should be "ignored by the parser").  The contents of comments, however, are intentionally unspecified in standards&amp;hellip; and considerable value has been found in placing data outside the scope of standards in comments.  &lt;a href="http://java.sun.com/j2se/javadoc/"&gt;Javadoc&lt;/a&gt; and &lt;a href="http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.keywords.html"&gt;Subversion keywords&lt;/a&gt;, to name some popular examples.  Plus, the nonconforming browsers in question are used by fifty to eighty percent of users (depending on who you ask).  Steadfastly refusing to make concessions to their irregularities, while perhaps laudable in principle, risks alienating a large chunk of your potential visitors.&lt;/p&gt;

&lt;p&gt;Now, XSLT.  This one is surprising, as I've never had problems with it, myself.  Here's the applicable snippet from a site I recently created for a friend:&lt;/p&gt;

&lt;code class="block"&gt;&amp;lt;xsl:comment&amp;gt;&amp;lt;![CDATA[[if IE 6]&amp;gt;
    &amp;lt;link rel="stylesheet" type="text/css" media="screen,print"
    href="style/default/style-ie6.css"/&amp;gt;
&amp;lt;![endif]]]&amp;gt;&amp;lt;/xsl:comment&amp;gt;
&amp;lt;xsl:comment&amp;gt;&amp;lt;![CDATA[[if IE 7]&amp;gt;
    &amp;lt;link rel="stylesheet" type="text/css" media="screen,print"
    href="style/default/style-ie7.css"/&amp;gt;
&amp;lt;![endif]]]&amp;gt;&amp;lt;/xsl:comment&amp;gt;&lt;/code&gt;

&lt;p&gt;Which finally brings us to conditional comments &lt;abbr title="versus"&gt;vs.&lt;/abbr&gt; CSS hacks.  Again, I feel this is fairly clear: CSS hacks exploit unintended behavior.  Conditional comments, on the other hand, are intentional.  I'd much rather hitch the usability of my site to a misfeature than a bug &amp;mdash; the misfeature is likely to be more predicable and have better longevity.&lt;/p&gt;

&lt;p&gt;In the end, sure&amp;hellip; we'd all like to write beautiful, standards-compliant code and have it Just Work in all browsers, but that simply isn't the world in which we live right now.  In the future, perhaps, we'll be able to do without but for the time being, I'd call conditional comments by far the lesser evil.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-3463472680035912557?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/3463472680035912557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=3463472680035912557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/3463472680035912557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/3463472680035912557'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/12/conditional-comments-considered-helpful.html' title='Conditional Comments Considered Helpful'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-1111495586433936119</id><published>2007-11-30T17:09:00.000-08:00</published><updated>2008-12-08T20:56:43.335-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Blogger Enhanced Post Editor</title><content type='html'>&lt;p&gt;Bet you guys thought I forgot to post today, didn't you?  C'mon, admit it.  Tsk, tsk, no faith in me at all.&lt;/p&gt;

&lt;p&gt;In fact, I'm posting this so late because I've spent all day putting together a &lt;a href="http://www.greasespot.net/"&gt;Greasemonkey&lt;/a&gt; script to fiddle with the &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt; post editor.  You can see the result on &lt;a href="http://userscripts.org/scripts/show/15187"&gt;Userscripts.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And to give you an idea what it looks like&amp;hellip;&lt;/p&gt;

&lt;img style="display:block; margin:0px auto 10px; text-align:center" src="http://4.bp.blogspot.com/_SE8R4BbU4vM/R1TH6yTSCNI/AAAAAAAAAFA/4nr0D-JZfiQ/s400/blogger-epe.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5138805204973257202" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-1111495586433936119?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='related' href='http://userscripts.org/scripts/show/15187' title='Blogger Enhanced Post Editor'/><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/1111495586433936119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=1111495586433936119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/1111495586433936119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/1111495586433936119'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/11/blogger-enhanced-post-editor.html' title='Blogger Enhanced Post Editor'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_SE8R4BbU4vM/R1TH6yTSCNI/AAAAAAAAAFA/4nr0D-JZfiQ/s72-c/blogger-epe.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-6732415727033454068</id><published>2007-11-29T09:40:00.000-08:00</published><updated>2007-12-01T17:16:54.738-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Encoding "data" URLs</title><content type='html'>&lt;p&gt;&lt;a href="http://tools.ietf.org/html/rfc2397"&gt;"data" URLs&lt;/a&gt; can sometimes be useful for embedding small pieces of data when hosting a file is impossible or undesirable.&lt;/p&gt;

&lt;p&gt;Two types of encoding are supported by data URLs &amp;mdash; standard URL-escaped encoding and base64 encoding.  (The result of the latter is technically URL-escaped as well, but none of the 65 symbols used actually require escaping.)  Which encoding produces a shorter URL depends on what percentage of the characters it contains must be escaped in URLs.  URL escaping triples the size of escaped characters (a percent sign followed by two hexadecimal digits) but leaves non-escaped characters intact, whereas base64 increases the size of all characters by ~33%.&lt;/p&gt;

&lt;p&gt;This means that base64 is more efficient whenever the number of escape-requiring characters exceeds ~17% of the document's size:&lt;/p&gt;

&lt;code class="block"&gt;3x + (1 - x) &amp;gt; 4/3
      2x + 1 &amp;gt; 4/3
      6x + 3 &amp;gt; 4
          6x &amp;gt; 1
           x &amp;gt; 1/6 = 16.&lt;span style="text-decoration:overline"&gt;6&lt;/span&gt;%&lt;/code&gt;

&lt;p style="font-size:smaller;font-weight:bold;margin-bottom:0"&gt;Related Links&lt;/p&gt;
&lt;ul style="margin-top:0"&gt;
&lt;li&gt;&lt;a href="http://software.hixie.ch/utilities/cgi/data/data"&gt;The data: URI kitchen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tools.ietf.org/html/rfc2397"&gt;RFC 2397 - The "data" URL scheme&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-6732415727033454068?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/6732415727033454068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=6732415727033454068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/6732415727033454068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/6732415727033454068'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/11/encoding-data-urls.html' title='Encoding &quot;data&quot; URLs'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-1848794447560352867</id><published>2007-11-28T15:43:00.000-08:00</published><updated>2008-12-08T20:56:43.552-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stupid tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Stupid Firefox tricks: Safari-style stop/reload button</title><content type='html'>&lt;p&gt;Yup, still on my userChrome.css kick.  This time, it's a way to make Firefox &lt;i&gt;look&lt;/i&gt; like it has a Safari-style stop/reload button.  First, arrange your toolbar so that your Reload button immediately follows the Stop button:&lt;/p&gt;

&lt;img style="display:block; margin:0px auto; text-align:center;" src="http://4.bp.blogspot.com/_SE8R4BbU4vM/R0s5ehYoJvI/AAAAAAAAAB0/HiuFHMb4TD4/s400/stop-then-reload.png" alt="Stop button before the Reload button"/&gt;

&lt;p&gt;Then, add the following code to your userChrome.css&amp;hellip; when you restart your browser, the Stop button will only be visible when it is enabled and the Reload button will only be visible when Stop isn't.&lt;/p&gt;

&lt;code class="block"&gt;/* safari-style stop/reload button */
#stop-button[disabled="true"] {
 display: none;
}

#stop-button:not([disabled="true"]) + #reload-button {
 display: none;
}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-1848794447560352867?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/1848794447560352867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=1848794447560352867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/1848794447560352867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/1848794447560352867'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/11/stupid-firefox-tricks-safari-style.html' title='Stupid Firefox tricks: Safari-style stop/reload button'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_SE8R4BbU4vM/R0s5ehYoJvI/AAAAAAAAAB0/HiuFHMb4TD4/s72-c/stop-then-reload.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-3560064224380616010</id><published>2007-11-27T11:46:00.000-08:00</published><updated>2007-11-27T11:56:02.342-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quotes'/><title type='text'>Quote: Irrelevance is no excuse for ambiguity</title><content type='html'>&lt;p&gt;Imagine you're giving someone driving directions to a house which is on a street which makes a loop.  When the driver approaches the street, it doesn't matter which way they turn &amp;mdash; either direction will get them to their destination, so you &lt;i&gt;could&lt;/i&gt; simply omit it and skip straight to the street number.  However, the poor driver is still going to be confused&amp;hellip; unless you provide a direction or explicitly tell them that it doesn't matter, they won't know whether it's (A) irrelevant, (B) unintentionally omitted, (C) the result of incorrect instructions, &amp;hellip;&lt;/p&gt;

&lt;p&gt;Instead, the person providing the instructions should either provide a direction or make it clear that both are acceptable.  &lt;i&gt;Irrelevance is no excuse for ambiguity.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-3560064224380616010?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/3560064224380616010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=3560064224380616010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/3560064224380616010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/3560064224380616010'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/11/quote-irrelevance-is-no-excuse-for.html' title='Quote: Irrelevance is no excuse for ambiguity'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-4881519160758682073</id><published>2007-11-26T10:31:00.002-08:00</published><updated>2007-12-01T17:15:34.164-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stupid tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Stupid Firefox tricks: colored tabs</title><content type='html'>&lt;p&gt;When I switched from using &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2558"&gt;PermaTabs&lt;/a&gt; to &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1122"&gt;Tab Mix Plus&lt;/a&gt; for protected tabs, I missed PermaTabs' coloring them.  Fortunately, this can be easily accomplished for Tab Mix Plus via &lt;a href="http://www.mozilla.org/unix/customizing.html#usercss"&gt;userChrome.css&lt;/a&gt; &amp;mdash; just add the following rules (and, of course, change the colors to taste).&lt;/p&gt;

&lt;code class="block"&gt;/* yellow for locked tabs */
tab[locked=true] &gt; * {
    background-color: #F2F2A9 !important;
}

/* green for protected tabs */
tab[protected=true] &gt; * {
    background-color: #A9F2A9 !important;
}

/* blue for frozen tabs */
tab[locked=true][protected=true] &gt; * {
    background-color: #A9F2F2 !important;
}&lt;/code&gt;

&lt;p&gt;Tab colors can also be triggered off a web site's &amp;lt;title&amp;gt; by using the tab's label= attribute.  The following uses the &lt;a href="http://www.w3.org/TR/css3-selectors/#attribute-substrings"&gt;CSS3 [attr^=startswith] selector&lt;/a&gt; to provide a simple Gmail notifier &amp;mdash; if I leave Gmail on my Inbox, the tab turns red when new mail arrives.&lt;/p&gt;

&lt;code class="block"&gt;/* Gmail new message flagging */
tab[label^="Gmail - Inbox"]:not([label^="Gmail - Inbox -"]) &gt; * {
    background-color: #F2A9A9 !important;
}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-4881519160758682073?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/4881519160758682073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=4881519160758682073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/4881519160758682073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/4881519160758682073'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/11/stupid-firefox-tricks-colored-tabs.html' title='Stupid Firefox tricks: colored tabs'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5009853746322785312.post-1699035196640936961</id><published>2007-11-25T11:47:00.000-08:00</published><updated>2007-11-28T13:28:51.746-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>Intro</title><content type='html'>&lt;p&gt;This blog is an introspective record of odd things I think about and tangents I venture upon while working, mostly while writing code.  I'll be trying to make at least one post a day (just to keep in habit).&lt;/p&gt;

&lt;dl&gt;

&lt;dt&gt;&lt;a href="/search/label/stupid%20tricks"&gt;stupid tricks&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;When a tool doesn't do exactly what I want it to, I'm prone to spending unreasonable amounts of time trying to "fix" it.  If I'm successful, I call the result a "stupid trick".  I don't necessarily research the problem exhaustively before beginning, so I don't guarantee these tricks to be unique or even the best approach.  All I can really say is that I came up with them myself.&lt;/dd&gt;

&lt;dt&gt;&lt;a href="/search/label/quotes"&gt;quotes&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;These are the unfortunate results of my attempts to phrase things cleverly.  Some may have value, but most are simply the product of my ability to be easily amused.&lt;/dd&gt;

&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5009853746322785312-1699035196640936961?l=535design.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://535design.blogspot.com/feeds/1699035196640936961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5009853746322785312&amp;postID=1699035196640936961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/1699035196640936961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5009853746322785312/posts/default/1699035196640936961'/><link rel='alternate' type='text/html' href='http://535design.blogspot.com/2007/11/intro.html' title='Intro'/><author><name>Dark</name><uri>http://www.blogger.com/profile/06471884697372842613</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13285887969893541058'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>