<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Michael Conigliaro</title>
	<atom:link href="http://conigliaro.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://conigliaro.org</link>
	<description>cat /dev/brain &#62;&#62; blog</description>
	<lastBuildDate>Thu, 02 Jul 2009 19:34:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>FeedWordPress and HTTP Error 400</title>
		<link>http://conigliaro.org/2009/07/02/feedwordpress-and-http-error-400/</link>
		<comments>http://conigliaro.org/2009/07/02/feedwordpress-and-http-error-400/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 19:34:26 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[/etc]]></category>

		<guid isPermaLink="false">http://conigliaro.org/?p=426</guid>
		<description><![CDATA[So I&#8217;ve been toying with the idea of setting up WordPress to syndicate content from other sites I contribute to. Unfortunately, there seems to be a bug in the FeedWordPress plugin that prevents you from using feed URLs containing ampersands. Doing so results in an error like this:

Diagnostic information
&#160;
HTTP request failure
&#160;
400: Bad Request
&#160;
HTTP Transports available:
&#160;
 [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been toying with the idea of setting up WordPress to syndicate content from other sites I contribute to. Unfortunately, there seems to be a bug in the <a href="http://projects.radgeek.com/feedwordpress/">FeedWordPress</a> plugin that prevents you from using feed URLs containing ampersands. Doing so results in an error like this:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Diagnostic information
&nbsp;
HTTP request failure
&nbsp;
400: Bad Request
&nbsp;
HTTP Transports available:
&nbsp;
    1. WP_Http_Fsockopen</pre></div></div>

<p>Apparently, <a href="http://wordpress.org/support/topic/282061">I&#8217;m not the only one who has encountered this issue</a>, but I did discover a workaround. Just change all the ampersands in your feed URL to the HTML entity equivalent. Example:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://gdata.youtube.com/feeds/base/users/whatever/uploads?orderby=published&amp;safeSearch=none</pre></div></div>

<p>Becomes&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://gdata.youtube.com/feeds/base/users/whatever/uploads?orderby=published&amp;amp;safeSearch=none</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/07/02/feedwordpress-and-http-error-400/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xen-vm-autosnapshot.py 1.1</title>
		<link>http://conigliaro.org/2009/06/25/xen-vm-autosnapshotpy-11/</link>
		<comments>http://conigliaro.org/2009/06/25/xen-vm-autosnapshotpy-11/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 19:51:05 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://conigliaro.org/?p=411</guid>
		<description><![CDATA[The xen-vm-autosnapshot.py script has been updated. It can now accept strings for &#8211;log-level (e.g. &#8211;log-level=debug), and the &#8211;test option has been renamed to &#8211;dry-run (since that&#8217;s the convention everyone else in the world seems to be used to).
Some of you have been asking about the problem where snapshots get locked and can&#8217;t be deleted from [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="/projects/wiki/Xen">xen-vm-autosnapshot.py</a> script has been updated. It can now accept strings for &#8211;log-level (e.g. &#8211;log-level=debug), and the &#8211;test option has been renamed to &#8211;dry-run (since that&#8217;s the convention everyone else in the world seems to be used to).</p>
<p>Some of you have been asking about the problem where <a href="http://forums.citrix.com/thread.jspa?threadID=242299">snapshots get locked and can&#8217;t be deleted from NetApp volumes</a>. Unfortunately, this appears to be related to the way the XenServer API interacts with NetApp&#8217;s DATA OnTap API. Unless someone out there can enlighten me, I don&#8217;t think there&#8217;s much we can do, other than wait for Citrix to fix their API. =(</p>
]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/06/25/xen-vm-autosnapshotpy-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CD Ripping on Kubuntu with K3b and LAME</title>
		<link>http://conigliaro.org/2009/06/24/cd-ripping-on-kubuntu-with-k3b-and-lame/</link>
		<comments>http://conigliaro.org/2009/06/24/cd-ripping-on-kubuntu-with-k3b-and-lame/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 23:55:19 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[/etc]]></category>

		<guid isPermaLink="false">http://conigliaro.org/?p=392</guid>
		<description><![CDATA[For various reasons (mostly to correct past mistakes), I decided I needed to start re-ripping my CD collection. Unfortunately, the default settings in K3b are not to my liking, and I&#8217;m sick of having to look things up to re-configure this, so I&#8217;m going to document my preferred settings here once and for all:
K3b Ripped [...]]]></description>
			<content:encoded><![CDATA[<p>For various reasons (mostly to correct past mistakes), I decided I needed to start re-ripping my CD collection. Unfortunately, the default settings in K3b are not to my liking, and I&#8217;m sick of having to look things up to re-configure this, so I&#8217;m going to document my preferred settings here once and for all:</p>
<p><strong>K3b Ripped files pattern</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">%</span>A<span style="color: #000000; font-weight: bold;">/%</span>T<span style="color: #000000; font-weight: bold;">/%</span>a - <span style="color: #000000; font-weight: bold;">%</span>n - <span style="color: #000000; font-weight: bold;">%</span>t</pre></div></div>

<p><strong>LAME command</strong><br />
Advice taken from <a href="http://wiki.hydrogenaudio.org/index.php?title=Recommended_LAME#Recommended_encoder_settings">Hydrogenaudio&#8217;s recommended encoder settings</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">lame</span> <span style="color: #660033;">-V0</span> <span style="color: #660033;">--tt</span> <span style="color: #000000; font-weight: bold;">%</span>t <span style="color: #660033;">--ta</span> <span style="color: #000000; font-weight: bold;">%</span>a <span style="color: #660033;">--tl</span> <span style="color: #000000; font-weight: bold;">%</span>m <span style="color: #660033;">--ty</span> <span style="color: #000000; font-weight: bold;">%</span>y <span style="color: #660033;">--tc</span> <span style="color: #000000; font-weight: bold;">%</span>c <span style="color: #660033;">--tn</span> <span style="color: #000000; font-weight: bold;">%</span>n - <span style="color: #000000; font-weight: bold;">%</span>f</pre></div></div>

<p><strong>K3b external audio encoder settings for LAME</strong><br />
On my machine, LAME will not encode properly without these options:</p>
<ul>
<li>Swap Byte Order</li>
<li>Write Wave Header</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/06/24/cd-ripping-on-kubuntu-with-k3b-and-lame/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SMTP Tester 1.1</title>
		<link>http://conigliaro.org/2009/06/12/smtp-tester-11/</link>
		<comments>http://conigliaro.org/2009/06/12/smtp-tester-11/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 15:28:30 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://conigliaro.org/?p=386</guid>
		<description><![CDATA[A new version of SMTP Tester has been released with some minor bug fixes and miscellaneous code refactoring.
]]></description>
			<content:encoded><![CDATA[<p>A new version of <a href="http://conigliaro.org/projects/wiki/SmtpTester">SMTP Tester</a> has been released with some minor bug fixes and miscellaneous code refactoring.</p>
]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/06/12/smtp-tester-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SMTP Tester 1.0</title>
		<link>http://conigliaro.org/2009/05/22/smtp-tester-10/</link>
		<comments>http://conigliaro.org/2009/05/22/smtp-tester-10/#comments</comments>
		<pubDate>Fri, 22 May 2009 21:05:30 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://conigliaro.org/?p=365</guid>
		<description><![CDATA[Since I keep finding SMTP Tester so useful, I figured I should finish it up, create the obligatory Win32 installer, and release it to the world. The only issue I&#8217;m having right now is that the Win32 executable created by py2exe is HUGE (~17MB). Luckily, the resulting NSIS package is only ~4MB, but even that [...]]]></description>
			<content:encoded><![CDATA[<p>Since I keep finding <a href="http://conigliaro.org/projects/wiki/SmtpTester">SMTP Tester</a> so useful, I figured I should finish it up, create the obligatory Win32 installer, and release it to the world. The only issue I&#8217;m having right now is that the Win32 executable created by py2exe is HUGE (~17MB). Luckily, the resulting NSIS package is only ~4MB, but even that seems pretty ridiculous for what the tool is/does. Needless to say, I&#8217;m very interested in suggestions for compressing this down further.</p>
]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/05/22/smtp-tester-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to Get the Absolute Location of the Currently Running Program or Script</title>
		<link>http://conigliaro.org/2009/05/20/how-to-get-the-absolute-location-of-the-currently-running-program-or-script/</link>
		<comments>http://conigliaro.org/2009/05/20/how-to-get-the-absolute-location-of-the-currently-running-program-or-script/#comments</comments>
		<pubDate>Wed, 20 May 2009 15:37:40 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://conigliaro.org/?p=356</guid>
		<description><![CDATA[Okay, It&#8217;s about time I document this trick since I use it so often and have to keep looking it up!
I like to make life easy for my successors, so whenever I write a program that needs to access files in or below its current directory, I avoid absolute paths like the plague. I find [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, It&#8217;s about time I document this trick since I use it so often and have to keep looking it up!</p>
<p>I like to make life easy for my successors, so whenever I write a program that needs to access files in or below its current directory, I avoid absolute paths like the plague. I find that it&#8217;s almost always better to use a relative path, so that if the program needs to be moved someday, it will continue to run with the expected behavior, regardless of where it lives on the filesystem.</p>
<p>The problem is that when a program is executed, all relative paths are relative to the current working directory of the user who executed it instead of the directory that the program actually lives in. To work around this, you just need to prefix your relative paths with a variable containing the absolute location of the program itself:</p>
<p><strong>PHP:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$cwd</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p><strong>Python:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">cwd = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">abspath</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Note that the above won&#8217;t work when your program is &#8220;frozen&#8221; (e.g. <a href="http://www.py2exe.org/index.cgi/WhereAmI">compiled with py2exe</a>).</p>
<p><strong>Windows Shell:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="winbatch" style="font-family:monospace;">set CWD=<span style="color: #66cc66;">%~</span>dp0</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/05/20/how-to-get-the-absolute-location-of-the-currently-running-program-or-script/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Automatic, Rotating VM Snapshots on Xen with xen-vm-autosnapshot.py</title>
		<link>http://conigliaro.org/2009/05/19/automatic-rotating-vm-snapshots-on-xen-with-xen-vm-autosnapshotpy/</link>
		<comments>http://conigliaro.org/2009/05/19/automatic-rotating-vm-snapshots-on-xen-with-xen-vm-autosnapshotpy/#comments</comments>
		<pubDate>Tue, 19 May 2009 14:47:40 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://conigliaro.org/?p=352</guid>
		<description><![CDATA[My new Xen Tools project page is up, and my first tool is ready for wide-spread use.  xen-vm-autosnapshot.py is a command line program (written in Python, of course) that will take automatic, rotating snapshots of virtual machines running on a Xen host. Enjoy!
]]></description>
			<content:encoded><![CDATA[<p>My new <a href="/projects/wiki/Xen">Xen Tools</a> project page is up, and my first tool is ready for wide-spread use.  <a href="/projects/browser/xen/trunk/xen-vm-autosnapshot.py">xen-vm-autosnapshot.py</a> is a command line program (written in Python, of course) that will take automatic, rotating snapshots of virtual machines running on a Xen host. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/05/19/automatic-rotating-vm-snapshots-on-xen-with-xen-vm-autosnapshotpy/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Getting Started in Information Technology is Easy</title>
		<link>http://conigliaro.org/2009/05/13/getting-started-in-information-technology-is-easy/</link>
		<comments>http://conigliaro.org/2009/05/13/getting-started-in-information-technology-is-easy/#comments</comments>
		<pubDate>Wed, 13 May 2009 13:57:23 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Information Technology]]></category>

		<guid isPermaLink="false">http://www.gyrate.org/?p=85</guid>
		<description><![CDATA[I have always insisted that getting started in IT is relatively easy compared to most other professions. I just can&#8217;t think of any other industry in which it&#8217;s possible to acquire so much practical working knowledge on your own with so little money, and it makes me wonder why more people (especially those who complain [...]]]></description>
			<content:encoded><![CDATA[<p>I have always insisted that getting started in IT is relatively easy compared to most other professions. I just can&#8217;t think of any other industry in which it&#8217;s possible to acquire so much practical working knowledge on your own with so little money, and it makes me wonder why more people (especially those who complain about being &#8220;stuck&#8221; in low-level tech support jobs) don&#8217;t take advantage of it. It&#8217;s my belief (and personal experience) that with a bit of time and motivation, anyone can become competent in their spare time, and have a lot of fun while they&#8217;re at it. This article is not really a step-by-step guide for getting a job in IT, but more of a list of simple things you can do in your spare time that will help you teach yourself the kinds of things you should know.</p>
<p>First, a few tips:</p>
<ul>
<li>Clearly, it&#8217;s in your best interest to learn as much as you can about as many different technologies as you can get your hands on. However, don&#8217;t ever expect to know <em>everything</em> about <strong>anything</strong>. Definitely don&#8217;t waste your time memorizing things like command line options and function call parameters. That&#8217;s what reference manuals and Google are for. It&#8217;s infinitely more valuable to have a good understanding of concepts.</li>
<li>This is a bit of a continuation of the previous point, but you need to realize that what you know off the top of your head is a lot less important than knowing where to find the answers. Read the manual, learn how to use  Google and IRC, and as frustrating as it may be, only ask for help as a last resort after you&#8217;ve done your own research and tried everything else. This will teach you how to teach yourself.</li>
<li>Get in the habit of asking yourself &#8220;how would I do this if I had to do it 10000 times?&#8221; Computers are very good at performing repetitive tasks very quickly, but human beings are slow and error-prone. The sooner you learn how to leverage the computer to do your work for you, the better off you&#8217;ll be. Be lazy by eliminating as much manual work as possible. Your mantra should be &#8220;how can I automate this?&#8221;</li>
<li>Never settle for &#8220;good enough.&#8221; Be a perfectionist, and strive to do everything the correct way according to best practices and/or accepted conventions. If you find that you&#8217;re doing something wildly different than everyone else, you&#8217;re probably doing it wrong, and in the real world, it will almost certainly come back to bite you or your successor(s) in the ass later. You might also end up reading about yourself on a site like <a href="http://thedailywtf.com/">The Daily WTF</a>.</li>
<li>Remember that the best solution is <strong>always</strong> the simplest and most elegant one. Avoid creating Rube Goldberg machines. Remember this quote by Antoine de Saint-Exupery: &#8220;A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.&#8221;</li>
</ul>
<p>And now the fun stuff:</p>
<ol>
<li>We&#8217;re going to start by building a network. In the unlikely event that you haven&#8217;t done so already, get yourself a broadband Internet connection and a cheap Linksys firewall/router. Make sure your ISP allows you to host a server (I strongly recommend DSL over cable for this reason alone). Contrary to popular belief, a static IP is not necessary, nor is lots of bandwidth.</li>
<li>Build your own server from scratch. It doesn&#8217;t have to be anything really expensive or powerful, but it should be dedicated (i.e. a different physical machine from your primary desktop) and capable of running 24/7 for the foreseeable future. Don&#8217;t waste your money on an expensive video card. Use that money to buy a cheap interruptible power supply and/or a tape drive instead.</li>
<li>Install Linux on your server. I don&#8217;t care what distribution you use, but you&#8217;ll find a lot more documentation for the more popular ones (I use Ubuntu server). Do the most minimal install for your distribution of choice (i.e. no optional packages). <strong>Do not install a GUI (or control panel) on your server under any circumstances.</strong></li>
<li>Once your server is up and running, you are not allowed to reboot it unless it&#8217;s to swap out hardware or to install a new kernel. Your goal should be to have the longest uptime possible (for reference, my home server&#8217;s record is somewhere around 450 days). When something breaks, <a href="/2009/05/12/a-scientific-method-for-troubleshooting/">figure out what went wrong and fix it</a>. Don&#8217;t just reboot and hope the problem will go away, because that will be a waste of an opportunity to learn something.</li>
<li>Without a GUI, you&#8217;ll need to do <strong>everything</strong> on the command line. Get familiar with Linux&#8217;s filesystem hierarchy.  Learn about what files go where and why.</li>
<li>Register a domain name, but do not purchase off-site email/web hosting. From now on, you&#8217;re not going to pay anyone else for anything you&#8217;re capable of hosting yourself.</li>
<li>Make your domain resolve to your home Internet connection. If you don&#8217;t have a static IP address, get an account with a dynamic DNS provider and learn how to make this work.</li>
<li>Install Apache and start a blog. You&#8217;ll use it to document things as you learn them. Learn how to open the necessary ports in your firewall to make your website available to the whole world. Does this scare you a bit? It should. Your server is now wide open to attack. Start learning how to secure your server. Be paranoid.</li>
<li>Install SMTP, POP3 and IMAP servers, then tell everyone about your new email address. If you have other outside email accounts, forward them all to your new address and use it exclusively. Set up server-side spam filtering and learn how to defend yourself from spammers.</li>
<li>If you haven&#8217;t already, get a cheap tape drive and learn how to back up and restore your files. Then learn how to take automated nightly backups of your critical data.</li>
<li>Now that you&#8217;re your own webhost, give your friends accounts on your server and host their websites/email too (the more the better). Learn how to set quotas and secure your server on the inside so that your users can&#8217;t break it on you. Then test yourself by challenging them to break it on you.</li>
<li>Turn off the crappy DHCP server on your router and install something more powerful (e.g. ISC-DHCP).</li>
<li>Install BIND and use it in place of your ISP&#8217;s DNS servers. Learn how to edit zone files by <a href="/2008/03/12/how-to-properly-choose-your-internal-dns-domain/">configuring an internal DNS namespace</a> and putting every device on your network into DNS. Don&#8217;t forget to create a reverse lookup zone. Learn how to use the dig command.</li>
<li>Combine your knowledge of DHCP and DNS to set up dynamic DNS updates.</li>
<li>Now that you know your way around a Linux box, back up your home directories and set everything back up again on a fresh install of <a href="http://gentoo.org">Gentoo</a> Linux.</li>
<li>Learn a popular web-programing language (e.g. PHP, Python, Ruby) and build your own website/blog from scratch. For bonus points, start by creating your own MVC framework.</li>
</ol>
<p>That aught to keep you busy for a few years! And once you&#8217;re done, you&#8217;ll have more working knowledge than 99% of the people out there applying for entry-level IT jobs.</p>
]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/05/13/getting-started-in-information-technology-is-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Scientific Method for Troubleshooting</title>
		<link>http://conigliaro.org/2009/05/12/a-scientific-method-for-troubleshooting/</link>
		<comments>http://conigliaro.org/2009/05/12/a-scientific-method-for-troubleshooting/#comments</comments>
		<pubDate>Tue, 12 May 2009 14:42:01 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://conigliaro.org/?p=286</guid>
		<description><![CDATA[I think there&#8217;s a new heavyweight champion in the world of Mike&#8217;s IT-related pet peeves. It&#8217;s called &#8220;just trying a bunch of random things until my problem goes away.&#8221; This is in no way related to troubleshooting, which I will define as &#8220;uncovering the root cause of an issue and then resolving it deliberately.&#8221; While [...]]]></description>
			<content:encoded><![CDATA[<p>I think there&#8217;s a new heavyweight champion in the world of Mike&#8217;s IT-related pet peeves. It&#8217;s called &#8220;just trying a bunch of random things until my problem goes away.&#8221; This is in no way related to troubleshooting, which I will define as &#8220;uncovering the root cause of an issue and then resolving it deliberately.&#8221; While there are many different techniques for troubleshooting specific problems, I&#8217;m going to attempt to show how the scientific method can provide a common framework for more effective troubleshooting.</p>
<p><strong>Step 1: Describe the problem</strong></p>
<p>This is the easy part. Find out what the problem is and <strong>reproduce it</strong>. That 2nd part is important, because the typical user can&#8217;t always be trusted to know what they&#8217;re doing. By reproducing the problem, you can rule out user error and verify that there actually is a problem.</p>
<p><strong>Step 2: Gather and analyze data</strong></p>
<p>This is the part everyone likes to skip, and is the real subject of this rant. Step two requires <strong>direct observations</strong> in order to find out exactly what is happening. How you do this is very much dependent on the problem at hand, but it involves things like log and packet analysis (which may very well require a 3rd party tool not included within the base OS). In any case, do <strong>not </strong>just take a wild guess about what&#8217;s causing the problem and then proceed down the path of random experimentation. I don&#8217;t know for sure how people acquire this bad habit, but I have a strong suspicion that it comes from working in Microsoft Land, where the computers have personalities, rebooting is the inexplicable fix for everything, and a sea of GUIs gives the novice system administrator ample opportunity to click around through options he/she doesn&#8217;t understand.</p>
<p>Part of problem in Microsoft Land is that they love to make troubleshooting harder than it needs to be. For example, there is a severe lack of useful troubleshooting tools included within the Windows OS itself. Why are the Windows support tools, resource kit tools, and IIS diagnostic tools still separate downloads? The same question can be asked about the Sysinternals Suite (which Microsoft has owned for several years now). Why are they still shipping obsolete utilities instead of their newer replacements (e.g. nslookup, which was obsoleted by dig many, many years ago)? And lastly, why does Microsoft constantly try to hide any information that could be useful for troubleshooting? Anyone who has ever had to view the message headers on an email in Outlook knows exactly what I&#8217;m talking about here, but I digress.</p>
<p><strong>Step 3: Form a hypothesis</strong></p>
<p>It isn&#8217;t until you figure out <strong>what</strong>&#8217;s happening that you can address the question of <strong>why</strong> it&#8217;s happening. Step three is where you use the information you gathered in step two to determine a logical course of action. Remember that a hypothesis beginning with &#8220;maybe&#8221; or &#8220;I think&#8221; (with little or no direct evidence to back it up) is often a dead giveaway for someone who doesn&#8217;t know what the hell they&#8217;re talking about.</p>
<p><strong>Step 4: Test your hypothesis</strong></p>
<p>Perform your planned course of action<strong>.</strong></p>
<p><strong>Step 5: Analyze results and </strong><strong>draw conclusions</strong></p>
<p>Check to see if the issue is resolved. If not, revert your changes and go back to step three. When drawing conclusions, ask yourself how this problem occurred in the first place. Was your most recent fix permanent or just a temporary bandaid? If the fix was temporary, make sure you schedule a time to implement a permenant fix.</p>
]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/05/12/a-scientific-method-for-troubleshooting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dreamweaver is Dying?</title>
		<link>http://conigliaro.org/2009/03/07/dreamweaver-is-dying/</link>
		<comments>http://conigliaro.org/2009/03/07/dreamweaver-is-dying/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 16:23:43 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://conigliaro.org/?p=252</guid>
		<description><![CDATA[So apparently, Dreamweaver is dying. This article is interesting to me for a couple reasons. First of all, I&#8217;m happy that other people are finally saying what I&#8217;ve been thinking since I started making dynamic websites with Perl and PHP in the late nineties! I&#8217;ve played around with HTML editors a bit, but I&#8217;ve never [...]]]></description>
			<content:encoded><![CDATA[<p>So apparently, <a href="http://www.pcpro.co.uk/blogs/2009/03/05/dreamweaver-is-dying/">Dreamweaver is dying</a>. This article is interesting to me for a couple reasons. First of all, I&#8217;m happy that other people are finally saying what I&#8217;ve been thinking since I started making dynamic websites with Perl and PHP in the <strong>late nineties</strong>! I&#8217;ve played around with HTML editors a bit, but I&#8217;ve never found them to be of much use on a dynamic Internet. I guess I just assumed that some people were using HTML editors for rapid prototyping, and I figured that maybe they could be helpful when editing the HTML template files used to dynamically create pages. But this article makes it sound like HTML editors are <strong>still</strong> mostly used to create <strong>static</strong> websites (static as in &#8220;just a bunch of .html files&#8221;). Seriously? It&#8217;s 2009, and web &#8220;developers&#8221; are still doing that? Holy shit, I am shocked, saddened and completely baffeled at the same time!</p>
]]></content:encoded>
			<wfw:commentRss>http://conigliaro.org/2009/03/07/dreamweaver-is-dying/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
