<?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-34598128</id><updated>2012-02-16T04:25:24.223-08:00</updated><category term='apache'/><category term='IE7'/><category term='user experience'/><category term='iis'/><category term='javascript'/><category term='ajax'/><category term='localization'/><category term='perl'/><category term='strategy'/><category term='bidirectional'/><category term='browser support'/><category term='YUI'/><category term='regular expression'/><category term='browsers'/><category term='accessibility'/><category term='web 2.0'/><category term='resources'/><category term='html'/><category term='closure'/><category term='mac'/><category term='line break'/><category term='windows'/><category term='network'/><category term='mozilla'/><category term='port'/><category term='IT2.0'/><category term='whale'/><category term='doh'/><category term='vista'/><category term='system administration'/><title type='text'>Cheap, fast, or good? Choose two.</title><subtitle type='html'>Web sites and corporate diplomacy, presentations and meetings, and the joys of living near -- but not too near -- the bleeding edge. And of course the never-ending conversation about the tradeoffs between scope, schedule, and resources.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-34598128.post-6592233296430646250</id><published>2009-11-15T10:53:00.001-08:00</published><updated>2009-11-15T11:04:38.711-08:00</updated><title type='text'>Getting my head around Cocoa</title><content type='html'>I needed cvs on my new macbook, so I installed xcode, so I didn't have to figure out how to use macports.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had xcode, so I cracked it open. And for the first time, I'm noodling a bit with a compiled version (I've compiled java from time to time, but was never sucked into actually playing with it the way I have with perl &amp;amp; javascript).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As always with a new toolkit, the radical differences are jumping out at me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Messages! what a trip! [Receiver message]. So yes, I get that foo.bar() is basically, in many ways the same thing as [foo bar] (tell foo that it should "bar()". Somehow more elegant.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other thing is passing named values is the default. Yes, you can make the default value an array, but now that I'm constantly context switching, I really can't remember what goes where in an array, so I really appreciate:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[foo bar:baz silly:YES]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And of course it's odd to be so illiterate that I can't even type two lines without generating warnings and errors. I'm such a noob!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-6592233296430646250?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/6592233296430646250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=6592233296430646250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6592233296430646250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6592233296430646250'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2009/11/getting-my-head-around-cocoa.html' title='Getting my head around Cocoa'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-9178649088422001535</id><published>2009-06-13T18:27:00.001-07:00</published><updated>2009-06-13T18:27:10.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='iis'/><title type='text'>Adventures in Vista Land</title><content type='html'>&lt;p&gt;So I finally bit the bullet a few months back and bought a computer w/ Vista when the old home server running XP pro died.&lt;/p&gt; &lt;p&gt;First priority was to install itunes and get everything moved over. That took a bit of fiddling as I tried over and over to convince Vista that I wanted to be able to have access to all the CDs we worked so had to rip. Eventually i got the library moved over, and then I had to figure out how to keep the playlists, and evenutally I had that done as well. Some xml files I had to copy over or something like that. &lt;/p&gt; &lt;p&gt;At which point we just used it as DVD player and itunes server for a while. Everyone knows you can’t use vista for anything, so trying to use it as a computer seemed unrealistic.&lt;/p&gt; &lt;p&gt;Finally I really bit the bullet this week and dove in. Since Vista Premium isn’t premium enough to let me use remote desktop, I had to figure out how get VNC setup. TightVNC seemed to have trouble refreshing (wouldn’t show me the start menu when I opened it, for example), so I ended up with ultraVNC, which does everything you’d expect. And I don’t have to give M$ more money, that’s a nice thing.&lt;/p&gt; &lt;p&gt;Next was setting up all the shares I used to have set up on the XP box. That actually turned out to be super easy.&amp;nbsp; I’d actually had the easiest printer setup ever a couple months back, when I’d just plugged it in and been able to use it. So maybe Vista isn’t evil?&lt;/p&gt; &lt;p&gt;Then today it was time to edit an old ASP site. Did IIS still exist? Did it still support ASP? As it turns out, IIS is still part of Windowsland, and it appears that my old ASP pages will eventually work. I’m not sure I’ve actually used active server pages this century, but interesting to see that its all still there. Key things I had to figure out:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;I don’t like using inetpub, so had to set up permissions for IIS to use one of my document directories as root. Both IIS_IUSRS and IUSR needed to have read access to my site&lt;/li&gt; &lt;li&gt;Once a local browser could access the site, I had to open a hole in the Vista firewall on port 80. Didn’t seem to be pre-defined, so I had to create a custom firewall rule that I decided to call “Port 80”&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Makes me wonder if there’s some button somewhere I could have pushed to enable anonymous web access to this directory? But mostly it makes me wonder if I really want to mess with old crufty ASP pages. I already know how to edit Apache conf files. I don’t want to learn how to use a whole new interface. &lt;/p&gt; &lt;p&gt;Thinking about it, the thing that really gets me is that I don’t much care for learning new operating systems. I’m comfortable with XP (I use an XP laptop at work). I can get Linux to run all the web servers I need. And none of that seems to be much help with Vista, where whenever I need to do something new I find myself using google to find answers to newbie questions. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-9178649088422001535?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/9178649088422001535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=9178649088422001535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/9178649088422001535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/9178649088422001535'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2009/06/adventures-in-vista-land.html' title='Adventures in Vista Land'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-2877600710278600963</id><published>2009-03-20T07:17:00.001-07:00</published><updated>2009-03-20T07:17:32.280-07:00</updated><title type='text'>Another Blue Screen</title><content type='html'>&lt;p&gt;When I opened my laptop this morning, the blue screen was counting down as it stored some kind of information on my hard drive. Evidence, should I need it, that the operating system had lost its bearing and collapsed suddenly.&lt;/p&gt;  &lt;p&gt;I am struck suddenly by the realization that the computers I've been living with these last fifteen years are far less reliable than the VW bus I owned in the early '90s, an antique that stripped a spline on its drive wheel in the middle of death valley once, and another time stopped running on the freeway because the fuel hose had slipped off the carburetor and was merrily spraying gasoline across the entire engine compartment.&lt;/p&gt;  &lt;p&gt;This thing, this machine, on which my livelihood depends, these contraptions that so many of us spend our days fiddling with, constantly grappling with mechanical and software failures of one kind or another. Somehow to realize that these ubiquitous computational devices are far, far less reliable than thirty-year-old VW buses fills me with wonder. The incredible patience of millions of computer users. The unfounded optimism that today's task will somehow be completed even as thousands of us are stranded on the side of the road, wondering how to bring the contraption back to life.&lt;/p&gt;  &lt;p&gt;Quick! To the emails! To the presentations! To the spreadsheets! Before the next blue screen stops us in our tracks!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-2877600710278600963?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/2877600710278600963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=2877600710278600963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/2877600710278600963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/2877600710278600963'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2009/03/another-blue-screen.html' title='Another Blue Screen'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-2101108211230378109</id><published>2009-01-08T07:34:00.001-08:00</published><updated>2009-01-08T07:34:11.952-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Javascript Cheat Sheet</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Cause I don't write js often enough to remember its syntax&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;Add js file to a page&lt;/h4&gt;  &lt;p&gt;var s=document.createElement('script');   &lt;br /&gt;s.setAttribute('src','&lt;a href="http://foo.com/bar.js');"&gt;http://foo.com/bar.js');&lt;/a&gt;    &lt;br /&gt;document.getElementsByTagName('head')[0].appendChild(s);&lt;/p&gt;  &lt;h4&gt;Add jQuery to a page&lt;/h4&gt;  &lt;p&gt;&lt;a title="http://www.learningjquery.com/2008/06/updated-jquery-bookmarklet" href="http://www.learningjquery.com/2008/06/updated-jquery-bookmarklet"&gt;http://www.learningjquery.com/2008/06/updated-jquery-bookmarklet&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Append js to a node in DOM w/ jQuery&lt;/h4&gt;  &lt;p&gt;$(&amp;quot;#tab4&amp;quot;).append(&amp;quot;&amp;lt;script&amp;gt; alert(&amp;quot;hello!&amp;quot;) &amp;lt;/script&amp;gt; &amp;quot;);&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-2101108211230378109?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/2101108211230378109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=2101108211230378109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/2101108211230378109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/2101108211230378109'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2009/01/javascript-cheat-sheet.html' title='Javascript Cheat Sheet'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-3357316881020065965</id><published>2008-09-10T10:59:00.001-07:00</published><updated>2008-09-10T10:59:31.175-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT2.0'/><title type='text'>IT 2.0</title><content type='html'>&lt;p&gt;After working in technology since 1994, my biggest impression is this: IT costs too much. &lt;/p&gt;  &lt;p&gt;This won't change overnight, but 50 years from now, companies will be budgeting, per user, much less for IT. And they'll get a whole lot more value.&lt;/p&gt;  &lt;p&gt;I've very little idea of how this will happen. But for the time being, I've got a ringside seat, working for the IT department of a fairly large company.&lt;/p&gt;  &lt;p&gt;This week, economist wrote about how AdventNet is trying to play a role in the next IT revolution:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.economist.com/people/displaystory.cfm?story_id=12052307&amp;amp;fsrc=rss" href="http://www.economist.com/people/displaystory.cfm?story_id=12052307&amp;amp;fsrc=rss"&gt;http://www.economist.com/people/displaystory.cfm?story_id=12052307&amp;amp;fsrc=rss&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/34598128-3357316881020065965?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/3357316881020065965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=3357316881020065965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/3357316881020065965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/3357316881020065965'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2008/09/it-20.html' title='IT 2.0'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-7380054066081657427</id><published>2008-09-09T06:40:00.001-07:00</published><updated>2008-09-09T06:40:52.844-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='browser support'/><title type='text'>It Depends</title><content type='html'>&lt;p&gt;I live in a land of partial questions, where folks are constantly asking me how long it will take to build a web site or a page weeks or months before we've figured out what that site or page should consist of.&lt;/p&gt;  &lt;p&gt;So my answer to most questions is some variation of it depends, usually dressed up a little, as in &amp;quot;we typically like to schedule this sort of change 2-6 months ahead of time, depending on the number of integration points, reliability requirements, and impacted processes.&amp;quot; Big words like that convey the impression that I'm paying close attention (which in fact is something I try to do), and I've found with experience that if I just say &amp;quot;It depends&amp;quot; folks will think I'm one of those annoying tech types who refuses to give a straight answer.&lt;/p&gt;  &lt;p&gt;Or maybe I'm just a windbag with a rationalization? Some of both I suppose.&lt;/p&gt;  &lt;p&gt;Of course some of the reasons that things depend have little to do with the difficulties folks have in understanding that for me to build something, they need to know what they want to build.&amp;#160; For example:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.webaim.org/blog/user-agent-string-history/" href="http://www.webaim.org/blog/user-agent-string-history/"&gt;http://www.webaim.org/blog/user-agent-string-history/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Because web browsers are wacky. Not in a way that I've figured out how to easily explain to folks who fall asleep the minute the gory details come up, and who never had to learn how hideous Netscape 4.7 was, or of the torture of working with&amp;#160; browsers from Redmond. Browsers are strange and twisted little things because they were coded by humans who had to make the best of of a bad set of options while on a ridiculous timeline.&lt;/p&gt;  &lt;p&gt;So it goes.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-7380054066081657427?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/7380054066081657427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=7380054066081657427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7380054066081657427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7380054066081657427'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2008/09/it-depends.html' title='It Depends'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-8548284483155804429</id><published>2008-08-25T16:21:00.001-07:00</published><updated>2008-08-25T16:21:59.643-07:00</updated><title type='text'>Time</title><content type='html'>&lt;p&gt;Somehow, this afternoon at least, there seems to be a connection between turning 40 and realizing how little time there are to attend to the myriad opportunities each day brings.&lt;/p&gt;  &lt;p&gt;I stumbled over some nice writing on this topic today:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Accept that your workload exceeds your resources &amp;#8212; that you are the first and last filter for what deserves your time &amp;#8212; and you&amp;#8217;ll already be better off than you were even two minutes ago.&lt;/p&gt;    &lt;p align="right"&gt;Merlin Mann, &lt;a title="http://www.43folders.com/2006/03/13/philosophy" href="http://www.43folders.com/2006/03/13/philosophy"&gt;http://www.43folders.com/2006/03/13/philosophy&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-8548284483155804429?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/8548284483155804429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=8548284483155804429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8548284483155804429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8548284483155804429'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2008/08/time.html' title='Time'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-4874291751448302032</id><published>2008-04-14T21:59:00.001-07:00</published><updated>2008-04-14T21:59:16.774-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Where am I?</title><content type='html'>&lt;p&gt;Ok, windows knows where perl is now. But my htdocs is in a completely different place.&amp;#160; And the hostname changes too.&lt;/p&gt;  &lt;p&gt;No idea if this will stand the test of time, but here's my figure out where I function right now, which appears to work on both my windows XP laptop and the linux host I use most often:&lt;/p&gt;  &lt;p&gt;(my $script, my $path, my $script_url, my $script_url_path, my $host) = figure_out_script_and_path(); &lt;/p&gt;  &lt;p&gt;sub figure_out_script_and_path{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; my $script, my $path, my $script_url, my $script_url_path, my $host; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if ($0 =~ m#^\w:#){ # should be true on a windows host    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $script = $0;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $script =~ s#^\w:.*\/##; #remove path     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $path = $0;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $path =~ s#(^\w:.*)\/[^\/]*$#$1#; # remove name of script     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; else { # assume path starts with a slash:     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $script = $0;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $script =~ s#^\/.*\/##; #remove path     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $path = $0;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $path =~ s#(^\/.*)\/[^\/]*$#$1#; # remove name of script     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; $script_url = $ENV{&amp;quot;SCRIPT_NAME&amp;quot;};    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $script_url_path = $script_url;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $script_url_path =~s#(^\/.*)\/[^\/]*$#$1#;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $host = $ENV{&amp;quot;SERVER_NAME&amp;quot;}; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; return ($script, $path, $script_url, $script_url_path, $host); &lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;Would you believe that windows live writer doesn't have a &amp;quot;code&amp;quot; option in the format menu? And I'm afraid I'm too lazy to edit the source. :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-4874291751448302032?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/4874291751448302032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=4874291751448302032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/4874291751448302032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/4874291751448302032'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2008/04/where-am-i.html' title='Where am I?'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-2129456270878785027</id><published>2008-04-14T21:42:00.001-07:00</published><updated>2008-04-14T21:48:06.402-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>#!/usr/bin/perl on windows</title><content type='html'>&lt;p&gt;Thankyou perl monks for your wisdom:&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://www.perlmonks.org/?node_id=167481"&gt;http://www.perlmonks.org/?node_id=167481&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;I installed activestate in c:\usr, and now I can use the same shebang line on my windows laptop as on my linux box.   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Life can be so extremely good!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-2129456270878785027?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/2129456270878785027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=2129456270878785027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/2129456270878785027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/2129456270878785027'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2008/04/usrbinperl-on-windows.html' title='#!/usr/bin/perl on windows'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-531863125085054815</id><published>2008-03-31T09:54:00.000-07:00</published><updated>2008-03-31T09:57:38.784-07:00</updated><title type='text'>8% slower</title><content type='html'>&lt;p&gt;Breaking news, as I approach my 40th birthday. I'm slow, and getting slower:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;"a 40-year-old user will take 8% longer than a 30-year-old user to accomplish the same task. And a 50-year-old user will require an additional 8% more time."&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This, it turns out, is perfectly natural:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;"The human aging process starts around age 25 and causes erosion of cognitive resources, loss of visual acuity, degraded reaction times, and reduced dexterity. People need more time for the same mental operations; they have less memory capacity and take longer to process the same perceptual input."&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.useit.com/alertbox/middle-aged-users.html"&gt;http://www.useit.com/alertbox/middle-aged-users.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-531863125085054815?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/531863125085054815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=531863125085054815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/531863125085054815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/531863125085054815'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2008/03/8-slower.html' title='8% slower'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-7584592467692459476</id><published>2007-11-15T10:26:00.001-08:00</published><updated>2007-11-15T10:26:51.516-08:00</updated><title type='text'>Javascript is Taking Over the World!</title><content type='html'>&lt;p&gt;&lt;a href="http://ejohn.org/"&gt;John Resig&lt;/a&gt; just created a map of the campaign so far:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ejohn.org/blog/the-world-of-ecmascript/"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="290" alt="image" src="http://lh3.google.com/elovejoy5/RzyPZx5TLII/AAAAAAAAACU/fyePGSHviK8/image%5B5%5D.png" width="409" border="0" /&gt;&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/34598128-7584592467692459476?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/7584592467692459476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=7584592467692459476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7584592467692459476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7584592467692459476'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/11/javascript-is-taking-over-world.html' title='Javascript is Taking Over the World!'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-6040090973982032280</id><published>2007-11-12T11:22:00.001-08:00</published><updated>2007-11-12T11:22:48.019-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Wireshark</title><content type='html'>&lt;p&gt;I just spent a few minutes playing with wireshark, and definitely want to spend more time noodling with it next time I need to understand what's happening on the wire:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.wireshark.org/" href="http://www.wireshark.org/"&gt;http://www.wireshark.org/&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/34598128-6040090973982032280?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/6040090973982032280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=6040090973982032280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6040090973982032280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6040090973982032280'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/11/wireshark.html' title='Wireshark'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-1786298806174729796</id><published>2007-11-01T08:52:00.001-07:00</published><updated>2007-11-01T08:52:36.803-07:00</updated><title type='text'>Money isn't everything</title><content type='html'>&lt;p&gt;A recent economist article reviews some research McKinsey did on education, where, unsurprisingly, how schools are managed has a great deal to do with how they perform (How to be top, October 20, 2007):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;quot;the best performing countries do much better than the worst and ... the same countries head such league tables again and again: Canada, Finland, Japan, Singapore, South Korea.&amp;quot;&lt;/li&gt;    &lt;li&gt;Schools &amp;quot;need to do three things: get the best teachers; get the best out of teachers; and step in when pupils start to lag behind.&amp;quot;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;My favorite part of the article was a discussion of being selective when hiring teachers (which matters a lot, as opposed to class size, which doesn't after primary school). Being selective isn't about paying people more. It's about being selective.&lt;/p&gt;  &lt;p&gt;This is one of the critical issues in management: blinded by a simplistic view of the efficiency of markets (and so thinking that when it comes to hiring you get what you pay for), organizations fail to devote sufficient attention to being selective, which is crazy stupid. The best people are attentive with regards to money, but compensation is one factor among many. Many, for example, will reject a 50% raise in compensation that would require them to work with ineffective bores.&lt;/p&gt;  &lt;p&gt;Singapore and Finland are extremely selective, so that in both countries &amp;quot;teaching is a high-status profession&amp;quot;. Effective and high-status does not correlate with highly paid!&lt;/p&gt;  &lt;p&gt;Anecdotally, I can confirm this with regards to the team I work on. We can't pay people extravagantly, but we can be very selective, and we are. The results are a team that is effective and has earned the respect of the various teams we collaborate with. &lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-1786298806174729796?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/1786298806174729796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=1786298806174729796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/1786298806174729796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/1786298806174729796'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/11/money-isn-everything.html' title='Money isn&amp;#39;t everything'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-8073161030469661802</id><published>2007-10-25T15:09:00.001-07:00</published><updated>2007-10-25T15:09:03.383-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Windows Live Writer</title><content type='html'>&lt;p&gt;Is it ridiculously web 1.0 of me to wonder if a desktop blogging client would be worth using?&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.google.com/elovejoy5/RyET_dnec3I/AAAAAAAAACA/Wu4ZYlJoUUk/image%5B2%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="214" alt="image" src="http://lh6.google.com/elovejoy5/RyET_tnec4I/AAAAAAAAACM/MJbYeUlRJ4Y/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Check it out. I took a screen shot of the post I'm writing, and pasted it into the post! I love recursion.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-8073161030469661802?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/8073161030469661802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=8073161030469661802' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8073161030469661802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8073161030469661802'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/10/windows-live-writer.html' title='Windows Live Writer'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-6152365923598606929</id><published>2007-10-18T14:29:00.000-07:00</published><updated>2007-10-18T14:37:01.500-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><title type='text'>Mini Blogging is the new black</title><content type='html'>The cool thing about mini-blogging is that I was actually doing it on facebook before &lt;a href="http://mashable.com/2007/07/03/pownce-rivals/"&gt;I read an article comparing different mini-blogging sites&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But mostly it just makes me feel old. Where did all of these sites come from? When? Why so many of them?&lt;br /&gt;&lt;br /&gt;The web has clearly morphed from a place where I sort of had a sense of how technology worked and had a small sense about how it worked into yet another unfathomably large intractable human mess of activity.&lt;br /&gt;&lt;br /&gt;The web isn't a black swan any more. It's freaking flock of swans, all flying in different directions. My head can't take it any more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-6152365923598606929?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/6152365923598606929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=6152365923598606929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6152365923598606929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6152365923598606929'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/10/mini-blogging-is-new-black.html' title='Mini Blogging is the new black'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-971717913981464978</id><published>2007-10-05T06:53:00.000-07:00</published><updated>2007-10-05T07:01:45.853-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>not such a nice view</title><content type='html'>I had my first close encounter with Vista this weekend on a laptop that my father-in-law purchased recently. He hates it with a passion, and it's pretty easy to see why. So far as either of us could tell, it's a lot like XP, except a zillion times slower. It's like back to the 1980s, where you have to go get a cup of coffee after you start an application and before it actually comes up.&lt;br /&gt;&lt;br /&gt;He's an avid musician, and starting to look at using different music software and hardware. And he keeps tripping over the fact that he's got Vista instead of an older version of windows.&lt;br /&gt;&lt;br /&gt;Since I work in technology, I of course don't know anybody else who'se using Vista.  I guess we all know to stay away from new Microsoft operating systems for a couple of years.&lt;br /&gt;&lt;br /&gt;Joel Spolsky, a tech writer who doesn't hate microsoft, agrees: "I've been using Vista on my home laptop since it shipped, and can say with some conviction that nobody should be using it as their primary operating system -- it simply has no redeeming merits to overcome the compatibility headaches it causes. Whenever anyone asks, my advice is to stay with Windows XP (and to purchase new systems with XP preinstalled)."&lt;br /&gt;&lt;br /&gt;I avoided XP for a while, and now am completely happy with it. And I expect Vista to be a fine operating system when I start using it around 2009 or 2010, when all the software and peripherals I need will have worked out the rough edges.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-971717913981464978?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/971717913981464978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=971717913981464978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/971717913981464978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/971717913981464978'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/10/not-such-nice-view.html' title='not such a nice view'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-4639203752776496138</id><published>2007-09-18T13:00:00.000-07:00</published><updated>2007-09-18T13:06:37.427-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='closure'/><title type='text'>closures</title><content type='html'>I'm still a little annoyed that we haven't figured out how to download knowledge the way Neo learned kungfu while reclining in a dentist chair in the Matrix.&lt;br /&gt;&lt;br /&gt;In the meantime, the next best thing for understanding javascript closures may be this post:&lt;br /&gt;&lt;br /&gt;http://jibbering.com/faq/faq_notes/closures.html&lt;br /&gt;&lt;br /&gt;I'm not ready to claim that I totally understand closures, or scope, or exactly what js objects are. But I will assert that I've read most of this page slowly and carefully, and suspect that I will be less likely to get create closures by accident or stub my toes on scope.&lt;br /&gt;&lt;br /&gt;Baby steps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-4639203752776496138?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/4639203752776496138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=4639203752776496138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/4639203752776496138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/4639203752776496138'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/09/closures.html' title='closures'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-7977500355817296343</id><published>2007-09-10T16:49:00.000-07:00</published><updated>2007-09-10T16:57:25.410-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='doh'/><title type='text'>thinking inside the box</title><content type='html'>Something called an active directory migration (AD is a tool for managing windows login accounts) has made it impossible for me to boot my computer unless I am connected to the corporate network. So much for telecomuting.&lt;br /&gt;&lt;br /&gt;But XP is pretty stable, so I just need to not reboot while away from the office. The kicker was that somehow my laptop has decided recently that it can't recognize my home wireless network unless I reboot when I get home. So after I came back from the office Friday, I wasn't able to get back online until I went in again this morning. Ridiculous!&lt;br /&gt;&lt;br /&gt;Until I realized that I still have a stack of ethernet cables that would be perfectly happy to connect me to my wireless router, and then to the Internet. So here I am, 1990's style, with a 25' cable running across the living room. And it took me less than a week to remember that I had this obsolete technology available as a failover.&lt;br /&gt;&lt;br /&gt;I don't even want to think about what I would do in a blackout. mindlessly sit at the door, flipping the light switch on and off, over and over again?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-7977500355817296343?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/7977500355817296343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=7977500355817296343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7977500355817296343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7977500355817296343'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/09/thinking-inside-box.html' title='thinking inside the box'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-4165675303272010173</id><published>2007-04-24T13:47:00.000-07:00</published><updated>2007-04-24T13:51:54.382-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><title type='text'>ny to paris</title><content type='html'>Technology really does make the world better. &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;amp;q=ny+to+paris&amp;layer=&amp;amp;sll=45.39845,-35.859375&amp;sspn=55.07859,110.390625&amp;amp;ie=UTF8&amp;z=4&amp;amp;om=1"&gt;See for yourself&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-4165675303272010173?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/4165675303272010173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=4165675303272010173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/4165675303272010173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/4165675303272010173'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/04/ny-to-paris.html' title='ny to paris'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-1922893682327429164</id><published>2007-04-12T16:34:00.000-07:00</published><updated>2007-04-12T16:37:44.193-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>addons</title><content type='html'>Setting up my new laptop with:&lt;br /&gt;&lt;br /&gt;The new delicious toolbar from mozilla wants to take over my bookmarks. Hopefully I won't regret handing over the keys to some yahoo subsidiary:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3615"&gt;https://addons.mozilla.org/en-US/firefox/addon/3615&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Web Developer, of course, although I wonder how long until it is completely subsumed by firebug:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;https://addons.mozilla.org/en-US/firefox/addon/60&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Firebug. Gosh I like firebug. When I grow up, I want to be smart like Joe Hewitt.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;https://addons.mozilla.org/en-US/firefox/addon/1843&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have to use greasemonkey if I want to see what Nathan's been up to:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748"&gt;https://addons.mozilla.org/en-US/firefox/addon/748&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you have to use FTP, doing it from firefox is nice:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/684"&gt;https://addons.mozilla.org/en-US/firefox/addon/684&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;IEtab. Still trying to figure out whether or not this one is must-have. Still on the list for now:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1419"&gt;https://addons.mozilla.org/en-US/firefox/addon/1419&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-1922893682327429164?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/1922893682327429164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=1922893682327429164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/1922893682327429164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/1922893682327429164'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/04/addons.html' title='addons'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-929428772293173078</id><published>2007-02-08T10:48:00.000-08:00</published><updated>2007-02-08T10:53:49.303-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><title type='text'>Beyond rounded corners</title><content type='html'>&lt;a href="http://www.youtube.com/watch?v=6gmP4nk0EOE"&gt;http://www.youtube.com/watch?v=6gmP4nk0EOE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A nice video overview of web 2.0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-929428772293173078?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/929428772293173078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=929428772293173078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/929428772293173078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/929428772293173078'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/02/beyond-rounded-corners.html' title='Beyond rounded corners'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-8799140360241556792</id><published>2007-01-06T22:05:00.000-08:00</published><updated>2007-01-06T22:21:26.949-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user experience'/><category scheme='http://www.blogger.com/atom/ns#' term='resources'/><title type='text'>Envy</title><content type='html'>I was in a meeting yesterday with a couple of the guys on the intranet team, and asked them about the process they have for user experience (UE) changes: collecting requirements, creating designs, getting signoff, etc...&lt;br /&gt;&lt;br /&gt;Their answer is that basically they've done a sufficiently good job on this that asside from a couple of sign-offs from the brass they're pretty much free to do things that seem to make sense. For the latest round, it took two people 7 months to come up with requirements for a new set of designs, and that this felt like a long time.&lt;br /&gt;&lt;br /&gt;wow.&lt;br /&gt;&lt;br /&gt;We just updated the UE of our external site. I'd estimate it took at least an order of magnitude more human months to figure out and document what it was that we were going to do do. Not implementing a single line of code, mind you. Just deciding what it was that we were going to do: what would the new home page look like? what should our other page templates look like?&lt;br /&gt;&lt;br /&gt;A lot of this makes sense. The brand of the company is involved. There is a lot of mission critical business on the website, with potential customers, existing customers, investors, etc... The intranet by its nature is internal, so the marketing, support, and product teams don't really want to be part of the conversation every step of the way.&lt;br /&gt;&lt;br /&gt;How much effort should we be putting into tracking the effort we put our UE requirements and design? Are there any industry benchmarks for this kind of thing that would be relevant?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-8799140360241556792?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/8799140360241556792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=8799140360241556792' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8799140360241556792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8799140360241556792'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2007/01/envy.html' title='Envy'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-6780359699537675240</id><published>2006-11-19T22:12:00.000-08:00</published><updated>2006-11-19T22:22:14.191-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regular expression'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>finding includes in html</title><content type='html'>For the second time in the a few months I've wanted to be able to fish through the includes in an shtml file in perl.&lt;br /&gt;&lt;br /&gt;This while statement will itterate once for each time it matches a pattern for a virtual include, letting me check to see if the include is there, slurp it up, whatever:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    while ($file_contents =~ m{&amp;lt;!--#?include\s+virtual="([^"]*)"\s*--&amp;gt;}gis){&lt;br /&gt;        # do something with $1 (a path)        &lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-6780359699537675240?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/6780359699537675240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=6780359699537675240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6780359699537675240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6780359699537675240'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/11/finding-includes-in-html.html' title='finding includes in html'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-7283296123339791558</id><published>2006-11-19T08:24:00.000-08:00</published><updated>2006-11-19T09:17:00.005-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='localization'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='bidirectional'/><title type='text'>bidi fun</title><content type='html'>&amp;amp;#8238; and &amp;amp;#8237; entities can be use to give browsers instructions on what order to display characters:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&amp;amp;#8238;Left-to-right&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div&amp;gt;&amp;amp;#8237;Right-to-left&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&amp;#8238;Left-to-right&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;#8237;Right-to-left&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;"dir" attribute can be used to provide block or page level direction on direction of the page:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;div dir="ltr"&amp;gt;Left-to-right&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div dir="rtl"&amp;gt;Right-to-left&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr"&gt;Left-to-right&lt;/div&gt;&lt;br /&gt;&lt;div dir="rtl" style="text-align:right"&gt;Right-to-left&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A good overview:&lt;br /&gt;&lt;br /&gt;w3c tutorial: &lt;a href="http://www.w3.org/International/tutorials/bidi-xhtml/"&gt;http://www.w3.org/International/tutorials/bidi-xhtml/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-7283296123339791558?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/7283296123339791558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=7283296123339791558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7283296123339791558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7283296123339791558'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/11/bidi-fun.html' title='bidi fun'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-8877516373710953260</id><published>2006-11-10T15:21:00.000-08:00</published><updated>2006-11-10T15:28:10.171-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='port'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>when you need more ports</title><content type='html'>So I'm guessing there's more than one way to tell apache to listen beyond port 80. Here's what I figured out:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Listen 81&lt;br /&gt;Listen 82&lt;br /&gt;Listen 83&lt;br /&gt;Listen 84&lt;br /&gt;Listen 85&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;VirtualHost _default_:81&amp;gt;&lt;br /&gt;DocumentRoot /srv/www/port_81&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&amp;lt;VirtualHost _default_:82&amp;gt;&lt;br /&gt;DocumentRoot /srv/www/port_82&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&amp;lt;VirtualHost _default_:83&amp;gt;&lt;br /&gt;DocumentRoot /srv/www/port_83&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&amp;lt;VirtualHost _default_:84&amp;gt;&lt;br /&gt;DocumentRoot /srv/www/port_84&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&amp;lt;VirtualHost _default_:85&amp;gt;&lt;br /&gt;DocumentRoot /srv/www/port_85&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-8877516373710953260?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/8877516373710953260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=8877516373710953260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8877516373710953260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8877516373710953260'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/11/when-you-need-more-ports.html' title='when you need more ports'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-3141706388559533064</id><published>2006-11-02T09:21:00.000-08:00</published><updated>2006-11-02T09:34:45.666-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='line break'/><title type='text'>line breaks</title><content type='html'>I've been meaning to try to put together a full set of notes on line break wierdness for years. This isn't it. But it might be a start.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Script works on PC but not UNIX&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;It took me way longer than it should of for me to figure out what's wrong with this interpreter path today:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    #! /perl/bin/perl&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I'd look at the line in vi. It looked fine. Then I'd go to the command line and type:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;   %/perl/bin/perl&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;which would give me the interpreter (wierd path to match where perl is on my windows box, ln'd over to /usr/bin/perl)&lt;br /&gt;&lt;br /&gt;And eventually it dawned on me that since I'd never run this script on a unix box, it probably had PC line breaks. In the old days, I would have seen this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;   #! /perl/bin/perl^M&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;But I guess vi or vim or whatever is on the box is smarter than it used to be. Not me though. How many times have I stubbed my toes on this?&lt;br /&gt;&lt;br /&gt;At least I'm smart enough to use Textpad. Save As, select Unix as the file type, and I'm up and running again. In utopia, there will only be one kind of line break. That's all I'm saying.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-3141706388559533064?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/3141706388559533064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=3141706388559533064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/3141706388559533064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/3141706388559533064'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/11/line-breaks.html' title='line breaks'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-3243114305589868519</id><published>2006-11-01T20:52:00.000-08:00</published><updated>2006-11-01T20:57:12.524-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>perl array cheat sheet</title><content type='html'>&lt;h2&gt;How long is my array?&lt;/h2&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;my @hw_array = ("hello","world","wassup?");&lt;br /&gt;&lt;br /&gt;print "&amp;lt;br&amp;gt;size: ", scalar @hw_array;     # 3&lt;br /&gt;print "&amp;lt;br&amp;gt;size: " . @hw_array;           # 3, scalar is implicit&lt;br /&gt;print "&amp;lt;br&amp;gt;index of last: ", $#hw_array;  # 2 &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-3243114305589868519?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/3243114305589868519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=3243114305589868519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/3243114305589868519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/3243114305589868519'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/11/perl-array-cheat-sheet.html' title='perl array cheat sheet'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-6398791640521058106</id><published>2006-11-01T15:32:00.000-08:00</published><updated>2006-11-01T15:36:27.951-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='whale'/><title type='text'>At least it's not raining rotten blubber</title><content type='html'>Nathan reminded us in a meeting today that no matter how grim things may seem, &lt;a href="http://www.perp.com/whale/index.html"&gt;at least it's not raining rotten blubber&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A great way to take a meeting off on a tangent&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-6398791640521058106?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/6398791640521058106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=6398791640521058106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6398791640521058106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/6398791640521058106'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/11/at-least-its-not-raining-rotten-blubber.html' title='At least it&apos;s not raining rotten blubber'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-9132803226462786683</id><published>2006-10-30T16:35:00.000-08:00</published><updated>2006-10-30T16:36:06.143-08:00</updated><title type='text'>It's the request, stupid!</title><content type='html'>Just tripped over a nifty article &lt;a href="http://www.die.net/musings/page_load_time/"&gt;'Optimizing Page Load Time'&lt;/a&gt; that suggests that thinking about HTTP makes a great deal of sense when thinking about performance. &lt;br /&gt;&lt;br /&gt;As an example, here's one of the cookies on the site that I work on:&lt;br /&gt;&lt;br /&gt;SMIDENTITY=0gzinsuUJJp+/tRSC5ZaV0WudjvPIRSZc06S2wfBFp39qMk3IbwLjlr1yo&lt;br /&gt;C1MhhFxqBPclz6XDo4tClYYnoQR7ZUh5s5z8doG63QTqetXr/pFIRyEKY7wWHtZhcKj4S&lt;br /&gt;Ck43mU7JuRvPhiSuVaEZC2Cfk4N01qZE47y+nfAFD/ZAwXRBraUfKzUYHl9d+uADHFcz8&lt;br /&gt;pGEHPCch1+6g0LtuRuGxO+IdELXiduWUJfs6kozvBvPGqUltBYTHv2XiLwj6AN9xDdY1K&lt;br /&gt;UHQ5/DX5g0OQuud8NuBGLvF7BQyfNtHqGduOGGXgkLs3+GsD2D5ro83w/WuHt/B6DMbK8&lt;br /&gt;M6FEE8t7q419KMPWxngxFA5d6rP7qxAxUXQDf4blC3POGWTGMMkV/YJvd4mqayiSEPZpH&lt;br /&gt;PceeZs1WZ0GAibVtm2q4f/aYyFbv4iHvYabePsU7GP4FFpUAKoavF2GqJOTa2bUc17rtO&lt;br /&gt;bQcxUrdMAV3YaHA+FodiEpVWXymdj94r95deNKjYgrC64AkGyQTTcUJpsZ3cG+9x1/j2g&lt;br /&gt;mK+0Dx2XI507Azr6aFcz31X2aQ+TdtMvoCnvw664BGgs4lVT7HT9ATMKkJNTNaruM8hqF&lt;br /&gt;zu0Jz0lASUlguCp9NfJQDt6ar/BUMDS/516dHZgQyXh9HTBDKzi5q8LP975mPU;&lt;br /&gt;&lt;br /&gt;Now multiply that times the 44 http requests it takes to load one our most popular pages! That's 30K worth of cookies! sweet!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-9132803226462786683?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/9132803226462786683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=9132803226462786683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/9132803226462786683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/9132803226462786683'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/10/its-request-stupid.html' title='It&apos;s the request, stupid!'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-8581258142721335633</id><published>2006-10-24T12:06:00.000-07:00</published><updated>2006-10-24T12:40:21.837-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='accessibility'/><category scheme='http://www.blogger.com/atom/ns#' term='strategy'/><category scheme='http://www.blogger.com/atom/ns#' term='YUI'/><category scheme='http://www.blogger.com/atom/ns#' term='localization'/><category scheme='http://www.blogger.com/atom/ns#' term='browser support'/><title type='text'>YUI Graded Browser Support</title><content type='html'>The YUI article on &lt;a href="http://developer.yahoo.com/yui/articles/gbs/gbs.html"&gt;graded browser support&lt;/a&gt; is a nice overview of the nuts and bolts of browser support in a world where different browsers provide different levels of support for web content. It links to a &lt;a href="http://developer.yahoo.com/yui/articles/gbs/gbs_browser-chart.html"&gt;chart&lt;/a&gt; that shows how different browsers are currently supported.&lt;br /&gt;&lt;br /&gt;Browser support is a nice example of a class of strategic issues that are surprisingly prevalent on web projects. This is small 's' strategy: web developers don't need to understand your business model or care about financial engineering, we just need to know which users we _must_ support, a business/technical question that will determine which browsers we need to support well, which browsers we should support on at least a rudimentary level, and which browsers we shouldn't worry about.&lt;br /&gt;&lt;br /&gt;The standard scenario is the business owner (aka stakeholder) of a project asks for tricky functionality (and this could be something as simple as fly-down menus or precise layout of text and images on a page) and, when asked about browser support, asserts that 'all browsers' or 'all major browsers' should be supported. This is usually about ten minutes before the business owner expects to head out of the office on vacation for two weeks, and before she goes she wants a firm commitment that the project will be completed or at least well underway when she gets back. &lt;br /&gt;&lt;br /&gt;My job is often to try to figure out how to share the unwelcome news that there are some basic business questions that need to be thought about fairly carefully in order to make sure expectations are met when the site is completed. They involve thinking about people who turn of javascript (no fly-downs), accessibility (how should keyboard navigation work? Where do we need alternate content), maybe even localization (You can bet that somewhere on the carefully laid out page, localized text just won't fit without blowing something out or wrapping in a surprising way). &lt;br /&gt;&lt;br /&gt;And of course there's the unwelcome news that we don't plan to test on IE 5 and a number of other browsers, and that people using these are likely to have difficulty with the page in proportion to the complexity of the page.&lt;br /&gt;&lt;br /&gt;This problem is about to get worse, not better: with IE 7, Firefox 2, Ajax, and Web 2.0 we've got a new generation of browsers, some wonderfully tricky client-side technology, and rising expectations from stakeholders as to the kind of experience we can deliver. &lt;br /&gt;&lt;br /&gt;This means a lot more conversations ahead about which browsers we need to support and which browsers we will disregard to some extent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-8581258142721335633?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/8581258142721335633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=8581258142721335633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8581258142721335633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8581258142721335633'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/10/yui-graded-browser-support.html' title='YUI Graded Browser Support'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-7826151135895759014</id><published>2006-10-19T13:47:00.000-07:00</published><updated>2006-10-24T12:41:10.783-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE7'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><title type='text'>Quick Tabs are nifty</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger2/3312/4223/1600/2006-10-19-IE-quick-tabs.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/3312/4223/400/2006-10-19-IE-quick-tabs.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hey look, IE7 has something called quick tabs that lets me see thumbnails of all my open windows.&lt;br /&gt;&lt;br /&gt;OK, so I'll probably only use as often as the powerpoint slide sorter (which I did use once), but it's nifty. How many years has it been since anyone has been able to looke at IE and notice anything nifty? Hint: you were still building web sites to support Netscape 4.7.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-7826151135895759014?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/7826151135895759014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=7826151135895759014' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7826151135895759014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/7826151135895759014'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/10/quick-tabs-are-nifty.html' title='Quick Tabs are nifty'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-5400332908711959989</id><published>2006-10-19T13:32:00.000-07:00</published><updated>2006-10-24T12:42:00.371-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system administration'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Moving files from ibook to macbook is sooo easy!</title><content type='html'>I can't believe how easy it was.&lt;br /&gt;&lt;br /&gt;OK, so the part where the ibook stopped booting sucked. And getting the hard drive out was bizarely hard (50 screws? 10 pieces to remove first? something like that).&lt;br /&gt;&lt;br /&gt;But once that was done, I booted up the new macbook, connected the drive using a USB enclosure I picked up at fries a while back, and an hour later all of my wife's files and applications were migrated over. iTunes. Email. Word &amp; Mozilla. Palm desktop. user accounts and passwords. The ssid &amp; key for our wep network. Probably other stuff I can't think of right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-5400332908711959989?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/5400332908711959989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=5400332908711959989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/5400332908711959989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/5400332908711959989'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/10/moving-files-from-ibook-to-macbook-is.html' title='Moving files from ibook to macbook is sooo easy!'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-8158117379977471862</id><published>2006-10-16T09:03:00.000-07:00</published><updated>2006-10-16T09:11:22.536-07:00</updated><title type='text'>Collaboration is tricky</title><content type='html'>&lt;a href="http://www.wired.com/news/columns/0,71815-0.html"&gt;Bruce Schneier's article about opposition to Facebook news feeds&lt;/a&gt; tells the story of how  Face book introduced a new feature to automatically log changes in feeds -- and the masses were not happy.&lt;br /&gt;&lt;br /&gt;It's one thing to know intellectually that the kind of privacy folks could enjoy in the twentieth century is pretty much gone if you want to participate in 21st century society. It's another to realize that what a wrenching transition it will be as various technological forces inexorably chip away at the masks we present to the world. Increasingly, strangers and co-workers will be able to google our secrets.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-8158117379977471862?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/8158117379977471862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=8158117379977471862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8158117379977471862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/8158117379977471862'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/10/collaboration-is-tricky.html' title='Collaboration is tricky'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-116052416122226156</id><published>2006-10-10T16:39:00.000-07:00</published><updated>2006-10-11T13:44:37.978-07:00</updated><title type='text'>Head Shot</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3099/3814/1600/elijah_lovejoy.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I've decided to put my picture in my profile. So have uploaded one as part of this post. The process is marvelously user-unfriendly:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Load a photo using the upload widget, which is cryptic, but not so bad&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Find the url of your photo in the code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" &lt;br /&gt;href="http://photos1.blogger.com/blogger/3099/3814/1600/elijah_lovejoy.jpg"&lt;br /&gt;&amp;gt;&amp;lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" &lt;br /&gt;src="http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg" &lt;br /&gt;border="0" alt="" /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Then take the photo url (http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg) and paste it into the proper field on the profile page.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Why can't there just be an upload button on the profile? Why are computers so gosh-darned hard to use?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-116052416122226156?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/116052416122226156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=116052416122226156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/116052416122226156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/116052416122226156'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/10/head-shot.html' title='Head Shot'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-115971535840173137</id><published>2006-10-01T07:52:00.000-07:00</published><updated>2006-10-11T13:44:37.846-07:00</updated><title type='text'>6 months without perl</title><content type='html'>My memory is that I reimaged somtime around march, and I haven't installed activeperl until now. Scary thought.&lt;br /&gt;&lt;br /&gt;Anyhow, as usual, I'd completely forgotten how to setup perl cgi on Apache (which for whatever reason did not take 6 months to install, so maybe I can still call myself a web developer...), but a quick google diggs up &lt;a href="http://www.thesitewizard.com/archive/addcgitoapache.shtml"&gt;a page on a site called the site wizard&lt;/a&gt; that provides much of the information that I need, with apache error logs providing the rest.&lt;br /&gt;&lt;br /&gt;Folks who wrote the error handling code for apache deserve major good karma, and probably more credit than they get for the success of this application. Amazing how often you can find the information you need in the error log.&lt;br /&gt;&lt;br /&gt;So the steps I took, so I can look here next time I do it:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;create super simple CGI.pm script&lt;br /&gt;&lt;code&gt;&lt;br /&gt;use CGI qw/:standard/;&lt;br /&gt;&lt;br /&gt;print header,&lt;br /&gt;start_html('A Simple Example'),&lt;br /&gt;h1('A Simple Example');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add Handler directive so apache knows that .pl means cgi script&lt;br /&gt;&lt;code&gt;&lt;br /&gt;AddHandler cgi-script .pl&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;set +ExecCGI permission on the relevant directory (I turn off apache when I'm out in the wild).&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;Directory "C:/htdocs"&amp;gt;&lt;br /&gt;Options Indexes FollowSymLinks +ExecCGI&lt;br /&gt;AllowOverride None&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow from all&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tell apache where to find perl, so my script now looks like this&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#! /Perl/bin/perl&lt;br /&gt;&lt;br /&gt;use CGI qw/:standard/;&lt;br /&gt;&lt;br /&gt;print header,&lt;br /&gt;start_html('A Simple Example'),&lt;br /&gt;h1('A Simple Example');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Voila. apache is up and running. Now to see if I can remember why I installed perl in the first place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-115971535840173137?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/115971535840173137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=115971535840173137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/115971535840173137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/115971535840173137'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/10/6-months-without-perl.html' title='6 months without perl'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34598128.post-115855283260626484</id><published>2006-09-17T21:01:00.000-07:00</published><updated>2006-10-11T13:44:37.769-07:00</updated><title type='text'>Someday</title><content type='html'>It was probably in 2004 that my friend Nathan briefly set up his signature so that it said something along the lines of the title of this blog.&lt;br /&gt;&lt;br /&gt;Up until I heard this, I'd spent years explaining to people that the tradeoff between quality, budget, and schedule as a sort of triangle  where unfortunately, in the real world, in my experience, to the best of my knowledge, etc. ... building web sites / applications / yada yada required people to make decisions they'd rather not make about what it was that they wanted versus what they wanted to pay for it and how long they were willing to wait for it.&lt;br /&gt;&lt;br /&gt;I've never had the guts to actually tell a client or stakeholder that they could have fast, cheap, or good if they could only bring themselves to accept that they could only get two. My theory is that one of the reasons that I have a job doing web stuff has something to do with my intermittent efforts to be diplomatic, even helpful.&lt;br /&gt;&lt;br /&gt;But someday I'm going to crack, and I'll probably snarl something to someone that they just need to decide which two they want. Which will no doubt be the end of that particular opportunity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34598128-115855283260626484?l=elijahlovejoy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elijahlovejoy.blogspot.com/feeds/115855283260626484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34598128&amp;postID=115855283260626484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/115855283260626484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34598128/posts/default/115855283260626484'/><link rel='alternate' type='text/html' href='http://elijahlovejoy.blogspot.com/2006/09/someday.html' title='Someday'/><author><name>Elijah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/3099/3814/400/elijah_lovejoy.jpg'/></author><thr:total>0</thr:total></entry></feed>
