<?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>Codethink &#187; configuration</title>
	<atom:link href="https://codethink.no-ip.org/posts/configuration/feed" rel="self" type="application/rss+xml" />
	<link>https://codethink.no-ip.org</link>
	<description>A blog about coding, life, and other arbitrary topics</description>
	<lastBuildDate>Sun, 15 Mar 2026 21:30:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.29</generator>
	<item>
		<title>And we&#8217;re back&#8230;</title>
		<link>https://codethink.no-ip.org/archives/1690</link>
		<comments>https://codethink.no-ip.org/archives/1690#comments</comments>
		<pubDate>Sat, 03 Jul 2021 05:10:24 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[banter]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[operating systems]]></category>

		<guid isPermaLink="false">http://codethink.no-ip.org/wordpress/?p=1690</guid>
		<description><![CDATA[Some things I&#8217;ve learned recently-ish, over the past couple years or so: Don&#8217;t assume that SSD&#8217;s won&#8217;t/can&#8217;t fail. When buying an SSD, check what controller it uses and then get on Google to see how many data recovery providers claim &#8230; <a href="https://codethink.no-ip.org/archives/1690">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Some things I&#8217;ve learned recently-ish, over the past couple years or so:</p>
<ol>
<li>Don&#8217;t assume that SSD&#8217;s won&#8217;t/can&#8217;t fail.</li>
<li>When buying an SSD, check what controller it uses and then get on Google to see how many data recovery providers claim to support that controller; if you find one or less, buy something else.</li>
<li>Or even better, RAID and/or back up SSD&#8217;s just like you would HDD&#8217;s.</li>
<li>In the event of failure, an idle, unpowered SSD can retain its contents for a year or so at least with no degradation (YMMV/don&#8217;t test this on any data you care about!).</li>
<li>People will eventually figure out how to recover your data, if you give them enough money.</li>
<li>Making a filesystem dump of an old Windows install bootable again is probably easier now than it&#8217;s ever been.</li>
<li>Making an old Windows install (or installer) work with USB3.x and NVMe is nigh impossible.</li>
<li>With enough old hardware, several rounds of &#8220;musical SSD&#8221;, Windows 10 installation media, and sufficient masochism, it can be done.</li>
<li>Manually bootstrapping a GPT partition is also possible.</li>
<li>Not everyone is courteous enough to warn you when they suggest running commands that will immediately and irreversibly remove all partitions from a disk.</li>
<li>Windows no longer seems to care how many times you swap your install between completely different computers.</li>
<li>When USPS says &#8220;7-10 business days&#8221; what they really mean is &#8220;3-4 weeks, if you&#8217;re lucky&#8221;.</li>
</ol>
<p>Anyhow, major props to ACE Data Recovery for figuring out how to restore data from dead Sandforce drives.  And also to Recovery Force, for pointing me in their direction.</p>
<p>Normally scheduled programming of &#8220;mostly nothing much&#8221; should be resuming shortly.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/1690/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Android] Installing Adobe AIR on the Android Emulator</title>
		<link>https://codethink.no-ip.org/archives/699</link>
		<comments>https://codethink.no-ip.org/archives/699#comments</comments>
		<pubDate>Sun, 03 Jul 2011 13:30:57 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://codethink.no-ip.org/wordpress/?p=699</guid>
		<description><![CDATA[I&#8217;ve got no idea why this process is so poorly documented, nor why many of the existing resources describing how to install the AIR runtime on the Android emulator are so needlessly circuitous, pointing you to links on the official &#8230; <a href="https://codethink.no-ip.org/archives/699">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve got no idea why this process is so poorly documented, nor why many of the existing resources describing how to install the AIR runtime on the Android emulator are so needlessly circuitous, pointing you to links on the official Adobe site that have moved or no longer exist.  </p>
<p>But suffice to say, if you want to install the Adobe AIR runtime on an emulated Android device for testing or development purposes without having to wade through a ton of fuss and nonsense, you have two basic options.  The first is described briefly <a href="http://renaun.com/blog/2010/12/finding-the-air-for-android-emulator-runtime/" target="_blank">here</a>, and basically involves installing the latest Flash/Flex/AIR SDK from the <a href="http://www.adobe.com/products/air/sdk/" target="_blank">official website</a> and then grabbing the AIR runtime package from &#8216;<em>&lt;AIR_SDK_ROOT&gt;/runtimes/air/android/emulator/Runtime.apk</em>&#8216;.  This file is the AIR runtime that must be installed on the emulator for any apps built with Adobe AIR to function.  And this method works fine if you don&#8217;t mind downloading and installing the entire AIR SDK (90 MB) just to grab this one file.</p>
<p>You other option is to use this <a href="http://aroth.no-ip.org/com.adobe.air.emulator.2.7.apk">direct link</a> to download just the AIR runtime package (6.1 MB).  Note that this is version 2.7 of the AIR runtime, and has been tested with an emulator running Android 3.1 only.  I cannot vouch for it working with any other configurations.  </p>
<p>In either case, once you have gotten a hold of the the runtime .apk file, installing it on your emulator is a relatively simple process.  All you need is the &#8216;<em>adb</em>&#8216; utility that is included in the &#8220;Android SDK Platform Tools&#8221; package (note that this package is not the same as the similarly named &#8220;Android SDK Tools&#8221; package).  If you don&#8217;t have this package installed yet, then use your Android configuration manager to install it.  Then simply navigate to &#8216;<em>&lt;ANDROID_SDK_ROOT&gt;/platform-tools</em>&#8216; and run the following command (while your Android emulator is running):</p>
<pre class="brush: plain; title: ; notranslate">
adb install /path/to/your/AIR/runtime.apk
</pre>
<p>This will install the AIR runtime on your emulated device, and you can now install and run AIR-based Android apps on your emulator.  Quite simple, really.  Which only doubles my confusion with respect to why this simple process seems to be so poorly documented online.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/699/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Java] URL Rewriting on Tomcat (or any other servlet container)</title>
		<link>https://codethink.no-ip.org/archives/654</link>
		<comments>https://codethink.no-ip.org/archives/654#comments</comments>
		<pubDate>Tue, 07 Jun 2011 11:51:31 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[url-rewrite]]></category>

		<guid isPermaLink="false">http://codethink.no-ip.org/wordpress/?p=654</guid>
		<description><![CDATA[Here is a very nice little utility I found recently on an unfortunately very difficult to navigate website. In case it&#8217;s not immediately apparent from that site what I am referring to, I&#8217;m talking about the &#8216;UrlRewriteFilter&#8216; utility featured near &#8230; <a href="https://codethink.no-ip.org/archives/654">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Here is a very nice little utility I found recently on an unfortunately very <a href="http://www.tuckey.org/" target="_blank">difficult to navigate website</a>.  In case it&#8217;s not immediately apparent from that site what I am referring to, I&#8217;m talking about the &#8216;<em>UrlRewriteFilter</em>&#8216; utility featured near the top of the page.  This handy Filter implementation allows you to configure <a href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html" target="_blank">mod_rewrite</a> style URL rewriting rules for your J2EE webapp.  If you are having trouble navigating the official site, you can use this <a href="http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.2.0.zip">direct link</a> to download &#8216;<em>UrlRewriteFilter</em>&#8216; version 3.2.</p>
<p>Sadly, apart from being difficult to navigate, some of the information on the official &#8216;<em>UrlRewriteFilter</em>&#8216; website pertaining to setup and usage of the filter is also incorrect/out of date.  This is really quite a shame, because &#8216;<em>UrlRewriteFilter</em>&#8216; is an excellent little utility and I&#8217;m quite tired of seeing people needlessly running multi-server configurations (typically <a href="http://httpd.apache.org/" target="_blank">Apache httpd</a> for static content, and something like Tomcat, Resin, Jetty, etc. for dynamic content) out of a desire to use this-or-that particular module that only works with httpd or (even worse) out of the outdated and no-longer-relevant notion that servlet containers cannot efficiently serve static content.  So in an effort to save &#8216;<em>UrlRewriteFilter</em>&#8216; from obscurity and an undeserved death at the hands of poor documentation and a shoddy distribution site, here is a complete set of instructions for getting the filter to work in your webapp.</p>
<p>First, you will need to ensure that the &#8216;<em>UrlRewriteFilter</em>&#8216; JAR file is on your web-application&#8217;s classpath.  How you do this will depend upon your build process/how you are constructing your webapp(s), but long story short placing the JAR file in your webapp under &#8216;/WEB-INF/lib&#8217; will do the trick, and if you&#8217;ve spent any time at all working with webapps you probably already have a preferred way of doing this.  Alternately, you may want to install the JAR file in your servlet container&#8217;s &#8216;/lib&#8217; folder, particularly if you are deploying multiple webapps on your server and you want to have &#8216;<em>UrlRewriteFilter</em>&#8216; available to any/all of them automatically.</p>
<p>In any case, once you have the &#8216;<em>UrlRewriteFilter</em>&#8216; JAR on your webapp&#8217;s classpath, the real setup can begin.  Open your application&#8217;s &#8216;<em>web.xml</em>&#8216; file, and add the following filter configuration to your webapp:</p>
<pre class="brush: xml; title: ; notranslate">&lt;!-- URL rewriting --&gt;
&lt;filter&gt;
    	&lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;
      	&lt;filter-class&gt;org.tuckey.web.filters.urlrewrite.UrlRewriteFilter&lt;/filter-class&gt;
      	&lt;init-param&gt;
        	&lt;param-name&gt;logLevel&lt;/param-name&gt;
        	&lt;param-value&gt;WARN&lt;/param-value&gt;
        &lt;/init-param&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
    	&lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;
    	&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;</pre>
<p>This instructs the servlet container to route every request that the server receives through the &#8216;<em>UrlRewriteFilter</em>&#8216;.  Note that although it is not discussed on the official site, that &#8216;<em>logLevel</em>&#8216; parameter is absolutely essential.  If you omit it, the filter will fail to initialize properly and yield some very bizarre behavior.  </p>
<p>Anyways, once your &#8216;<em>web.xml</em>&#8216; has been updated, the final step is to add a &#8216;<em>urlrewrite.xml</em>&#8216; file in the same directory as your &#8216;<em>web.xml</em>&#8216; file, and configure it to your liking.  Here is an example &#8216;<em>urlrewrite.xml</em>&#8216; file with a couple basic rewrite rules:</p>
<pre class="brush: xml; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;!DOCTYPE urlrewrite PUBLIC &quot;-//tuckey.org//DTD UrlRewrite 3.2//EN&quot;
        &quot;http://tuckey.org/res/dtds/urlrewrite3.2.dtd&quot;&gt;
&lt;urlrewrite&gt;
    &lt;!-- user-account activation link --&gt;
    &lt;rule&gt;
    	&lt;from&gt;/activate/([a-f0-9]+)?(.*)&lt;/from&gt;
     	&lt;to&gt;/userController?action=activateUser&amp;amp;token=$1&amp;amp;$2&lt;/to&gt;
    &lt;/rule&gt;

    &lt;!-- default rules included with urlrewrite --&gt;
    &lt;rule&gt;
        &lt;note&gt;
            The rule means that requests to /test/status/ will be redirected to /rewrite-status
            the url will be rewritten.
        &lt;/note&gt;
        &lt;from&gt;/test/status/&lt;/from&gt;
        &lt;to type=&quot;redirect&quot;&gt;%{context-path}/rewrite-status&lt;/to&gt;
    &lt;/rule&gt;
    &lt;outbound-rule&gt;
        &lt;note&gt;
            The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
            the url /rewrite-status will be rewritten to /test/status/.

            The above rule and this outbound-rule means that end users should never see the
            url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
            in your pages.
        &lt;/note&gt;
        &lt;from&gt;/rewrite-status&lt;/from&gt;
        &lt;to&gt;/test/status/&lt;/to&gt;
    &lt;/outbound-rule&gt; 
&lt;/urlrewrite&gt;</pre>
<p>This defines two rules.  The first simply rewrites URL&#8217;s of the form &#8216;<em>/activate/######?[params]</em>&#8216; to something like &#8216;<em>/userController?action=activateUser&#038;token=######&#038;[params]</em>&#8216;, and the second is the default example rule that comes with &#8216;<em>UrlRewriteFilter</em>&#8216; and allows you to see a basic diagnostic page by pointing your browser at &#8216;<em>[your server]/test/status</em>&#8216;.  </p>
<p>And there you have it.  Quite simple, really, and now there&#8217;s one less reason to continue running two distinct server instances where one would do just as well.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/654/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[Hardware] Intel Atom D510 Server Build</title>
		<link>https://codethink.no-ip.org/archives/496</link>
		<comments>https://codethink.no-ip.org/archives/496#comments</comments>
		<pubDate>Sun, 13 Mar 2011 12:46:30 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[configuration]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://codethink.no-ip.org/wordpress/?p=496</guid>
		<description><![CDATA[As mentioned awhile back, the aging server box that was being used to host this blog started to develop some stability issues and I decided to replace it with an Intel Atom based machine. After nearly a month spent waiting &#8230; <a href="https://codethink.no-ip.org/archives/496">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>As mentioned <a href="http://codethink.no-ip.org/wordpress/archives/316">awhile back</a>, the aging server box that was being used to host this blog started to develop some stability issues and I decided to replace it with an Intel Atom based machine.  After nearly a month spent waiting for some back-ordered parts to arrive the build is finally complete.  So how does it compare to the system it replaced?  Well first off, let&#8217;s talk specs.  The Atom D510 build used the following components:</p>
<ul>
<li><a href="http://www.intel.com/products/desktop/motherboards/D510MO/D510MO-overview.htm" target="_blank">Intel BOXD510MO</a> Motherboard with Integrated Atom D510 CPU</li>
<li>4 GB Kingston DDR2-800 Memory</li>
<li><a href="http://blog.corsair.com/?p=3402" target="_blank">Corsair 60GB SSD</a></li>
<li><a href="http://www.aywun.com/ProductDetails.asp?ID=98" target="_blank">Aywun MW-101</a> Case</li>
</ul>
<p>Here&#8217;s a shot of everything unboxed and ready to be assembled:</p>
<p><a href="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/03/DSCN1265-rescale.jpg" rel="lightbox[496]"><img src="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/03/DSCN1265-rescale-1200x900.jpg" alt="Atom D510 Build Components" title="Atom D510 Build Components" width="640" height="480" class="aligncenter size-large wp-image-498" /></a></p>
<p>And here&#8217;s one of the build with everything installed and ready to be shut away inside of the case:</p>
<p><a href="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/03/DSCN1274-scaled.jpg" rel="lightbox[496]"><img src="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/03/DSCN1274-scaled-1200x900.jpg" alt="Completed Build" title="Completed Build" width="640" height="480" class="aligncenter size-large wp-image-501" /></a></p>
<p>All told the total cost of this build was just slightly under AU$400, including GST and shipping fees.  Nearly half of this was allocated to the Corsair SSD, so a comparable build may be attainable for closer to $300 if you&#8217;re willing to settle for a traditional HDD.  As this system was intended to do duty as a server box, however, I felt that the performance benefit provided by the SSD was more than worth the extra cost.  </p>
<p>Anyways, the system being replaced by the Atom build is a retail Hewlett-Packard box that was purchased way back in 2001.  It has the following specs:</p>
<ul>
<li>1.3 GHz Intel Pentium 4 (no HyperThreading)</li>
<li>256 MB PC-800 (400MHz) RDRAM</li>
<li>40 GB Western Digital HDD (IDE)</li>
<li>Stock motherboard, case, audio, etc.</li>
</ul>
<p>This system is all but worthless today, but back in 2001 it retailed for close to $1100 (with bundled monitor and printer).  In its defense this old P4 box delivered a solid decade&#8217;s worth of performance and proved itself to be entirely capable of running a number of different servers, albeit under very light workloads.  But all things must come to an end, and it&#8217;s time for this dinosaur to be replaced.</p>
<p>So how does the Atom processor stack up against this 10-year-old beast?  Here&#8217;s a screenshot from <a href="http://www.techpowerup.com/downloads/366/" target="_blank">Super PI</a> comparing the two (the Atom is on the left, and the P4 is on the right):</p>
<p><a href="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/03/superpi-1m-comparison.png" rel="lightbox[496]"><img src="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/03/superpi-1m-comparison.png" alt="SuperPI:  Atom D510 (left) vs. 1.3 GHz P4 (right)" title="SuperPI:  Atom D510 (left) vs. 1.3 GHz P4 (right)" width="1022" height="598" class="aligncenter size-full wp-image-500" /></a></p>
<p>Now it&#8217;s worth noting that this is not and cannot be an apples-to-apples comparison between the two CPU&#8217;s, as all the other variables (RAM capacity and speed, disk architecture, etc.) have been changed as well.  But I think Super PI probably does a fairly good job of isolating the CPU, and at the 1M setting the task should be small enough that the difference in RAM capacity between the two systems doesn&#8217;t come into play.  </p>
<p>Assuming that to be the case, the Atom D510 makes a fairly strong showing for itself.  It comes in at roughly 3 times faster than the 1.3 GHz P4, and since the Atom D510 is a dual-core CPU one should expect it to be up to 6 times faster under a well-threaded (i.e. server) workload.  That&#8217;s quite an improvement over the old system, although it&#8217;s worth noting that my desktop system (an Intel Core 2 Quad based machine clocked at 3.5 GHz) can breeze through the same benchmark in just under 15 seconds.  So by modern standards the Atom CPU is quite slow.  </p>
<p>But sheer performance is only part of the story.  The other reason why I opted for the Atom based server is the Atom platform&#8217;s low power consumption.  If I wanted the fastest server possible I could simply use my desktop for the task, and leave it running 24/7.  And then I would cringe every time my utility bill was due.  With the Atom my goal was to attain reasonable performance using as little power as possible, and after looking at the numbers I can only conclude that it delivers as advertised.  </p>
<p>Using a <a href="http://www.thinkgeek.com/gadgets/travelpower/7657/" target="_blank">Kill-A-Watt</a> device I measured the power consumption of each system at the wall, and worked out that the 10-year-old P4 system draws 90 watts of power while sitting idle, and around 110 watts under full CPU load.  The Atom system, on the other hand, weighs in at 17 watts while idle, and a massive 21 watts under full CPU load.  </p>
<p>So 6 times the performance, for less than 1/5th the power consumption (and before I forget, the Atom system is virtually silent as well).  With those numbers the Atom system starts to look like 100% win.  I can run one box and get much better performance than the old system could deliver at a fraction of the energy consumption, or I could use the same amount of power to run a cluster of 5 Atom servers for 30 times the performance.</p>
<p>But in any case, that&#8217;s my Atom server build, and overall I&#8217;m quite pleased with the results.  The Atom D510 provides a nice bump in speed over the (admittedly decrepit) server box that it replaced, while also using much less power.  If you need a cheap, basic, quiet server box for low-volume workloads then an Atom-based solution is an option worth considering.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/496/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Code Formatting Plugin Updated</title>
		<link>https://codethink.no-ip.org/archives/144</link>
		<comments>https://codethink.no-ip.org/archives/144#comments</comments>
		<pubDate>Sat, 29 Jan 2011 05:32:46 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[banter]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://codethink.no-ip.org/wordpress/?p=144</guid>
		<description><![CDATA[I&#8217;ve just updated the code formatting/syntax highlighting plugin used by this site to the very cool Syntax Highlighter Evolved. This plugin is a marked improvement over the previous plugin, providing such niceties as automatic non-copyable line numbers, horizontal scrolling, built-in &#8230; <a href="https://codethink.no-ip.org/archives/144">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve just updated the code formatting/syntax highlighting plugin used by this site to the very cool <a href="http://www.viper007bond.com/wordpress-plugins/syntaxhighlighter/" target="_blank">Syntax Highlighter Evolved</a>.  This plugin is a marked improvement over the previous plugin, providing such niceties as automatic non-copyable line numbers, horizontal scrolling, built-in highlighting rules for just about any common language, and so on.   </p>
<p>No other news to report at the moment, I just wanted to publicly show my support for this excellent WordPress plugin.</p>
<p>Update:  Much as I still love this plugin, it did introduce a pretty severe layout bug in Internet Explorer (any post with a code block in it would be stretched beyond the width specified in the theme layout, causing the posts to overlap with the right-nav section).  I fixed this by adding the following to my IE stylesheet:</p>
<pre class="brush: css; title: ; notranslate">.entry-content {
	width: 100%;
}</pre>
<p>And while we&#8217;re on the subject, the <a href="http://wordpress.org/extend/plugins/lightbox-2/" target="_blank">image lightbox plugin</a> also did not work correctly in Internet Explorer by default (the background overlay was solid black instead of translucent).  I had to add the following CSS to get it working (again in the IE-only stylesheet):</p>
<pre class="brush: css; title: ; notranslate">#stimuli_overlay {
    display: none;
}</pre>
<p>Note that this completely removes the background overlay.  I could probably get the alpha set correctly without too much more fuss, but I think this works well enough for now.</p>
<p>To my fellow web-developers, I can only say the following:  I know it&#8217;s fun to dump on IE for its lack of standards compliance, poor performance, and other failings, but at the end of the day IE is still the most used browser in the world, so it behooves us to always test our work in Internet Explorer when authoring online content or when authoring any code that will be used to generate online content.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/144/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working FLAC and Vorbis Support in Windows Media Player</title>
		<link>https://codethink.no-ip.org/archives/94</link>
		<comments>https://codethink.no-ip.org/archives/94#comments</comments>
		<pubDate>Fri, 28 Jan 2011 13:28:15 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[configuration]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[media]]></category>

		<guid isPermaLink="false">http://codethink.no-ip.org/wordpress/?p=94</guid>
		<description><![CDATA[Hot off the heels of the &#8220;SMOOTH Processor&#8221; debacle, I&#8217;m faced with the task of reapplying one of my favorite Windows 7 configuration tweaks. Namely, the addition of FLAC (and also Vorbis, Speex, and so on) support to Windows Media &#8230; <a href="https://codethink.no-ip.org/archives/94">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hot off the heels of the &#8220;SMOOTH Processor&#8221; debacle, I&#8217;m faced with the task of reapplying one of my favorite Windows 7 configuration tweaks.  Namely, the addition of FLAC (and also Vorbis, Speex, and so on) support to Windows Media Player.  Now I know there are a variety of free media players that have this built-in, and for the longest time I would actually use Winamp3 (along with the quite awesome queue-sidecar plugin) to handle all of my media playback needs.  But as time wore on and operating-systems evolved I didn&#8217;t have the patience to continue coaxing my Winamp3 install into working with the next latest and greatest OS version, nor the tolerance for its sporadic but annoying random crashes, and when Windows 7 rolled out I was presented with a compelling reason to ditch Winamp3 (and every other alternative) in favor of Windows Media Player:  Homegroups.  </p>
<p>Homegroups allow for much simplified sharing of multimedia and other content between computers on a network.  There is very little explicit configuration needed, and when an application integrates with the Homegroup properly there is really no noticeable difference between a local resource and one that&#8217;s being streamed from some other computer on the Homegroup.  This makes for a very cool experience when it all works, and in Windows Media Player it works seemlessly.  My media library can be distributed across several systems, and yet from each one I can access the entire volume as if it is all local to that particular machine.  And it just works, flawlessly, with no onerous setup or manual cajoling needed on my part.  This is what good software is supposed to do; merge invisibly into the background so that the user can accomplish a complex task as if by magic, and currently only Windows Media Player does it.  </p>
<p>I&#8217;m sure that situation will change in the near future, but at the moment its seamless Homegroup integration makes Windows Media Player the only media player that I am interested in using.  And that means that some of its other shortcomings, such as a complete lack of support for a variety of free and open codecs and file formats, need to be dealt with.  Now there are a number of tutorials on this subject already, but many of them give inaccurate or incomplete information.  In the interest of having a complete set of instructions that actually work, if you want to enable FLAC/Vorbis/etc. support in Windows Media Player, do the following:</p>
<ol>
<li>Install the <a href="http://www.xiph.org/dshow/" target="_blank">DirectShow filters/codecs</a>.</li>
<li>Install the <a href="http://bmproductions.fixnum.org/wmptagplus/" target="_blank">Tag Support</a> plugin.</li>
<li>OPTIONAL:  If, like me, you included your FLAC folders/files in your library <em>before</em> installing the above packages, then you also need to <a href="http://www.dalepreston.com/Blog/2007/03/windows-media-player-metadata-backup.html#rebuilding" target="_blank">rebuild your Windows Media Player library</a>.  Make sure you close Windows Media Player and shut down its network sharing service either by stopping it under &#8216;<em>Control Panel -> Administrative Tools -> Services</em>&#8216; or by killing the &#8216;<em>wmpnetwk.exe</em>&#8216; process in the Task Manager before attempting to delete or rename its configuration folder.</li>
</ol>
<p>And that&#8217;s really all there is to it.  You may or may not end up with the ability to seek within and/or see the duration of FLAC files.  I&#8217;ve seen it happen both ways on occasion, it seems like it either works or not depending upon the mood that Windows Media Player happens to be in when these plugins are installed.  But the important bit is that all the previously unsupported files will now show up correctly in your library, and also (of course) that they are now playable.</p>
<p>And in other news, the rebuilding continues, slowly.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/94/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache + PHP = Headache</title>
		<link>https://codethink.no-ip.org/archives/13</link>
		<comments>https://codethink.no-ip.org/archives/13#comments</comments>
		<pubDate>Mon, 24 Jan 2011 12:36:56 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[configure]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=13</guid>
		<description><![CDATA[Fresh out of installing and configuring Apache and PHP so that I could get this WordPress blog up and running, I feel there&#8217;s a topic worthy of some brief mention here.  Namely, the proper (which I mean not in the &#8230; <a href="https://codethink.no-ip.org/archives/13">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Fresh out of installing and configuring Apache and PHP so that I could get this WordPress blog up and running, I feel there&#8217;s a topic worthy of some brief mention here.  Namely, the proper (which I mean not in the &#8220;pedantically correct&#8221; sense but more in the &#8220;do this and it will actually work&#8221; sense) way to get Apache and PHP talking to each other after installing them both for the first time.  And to be as clear as possible here, this information pertains specifically to Apache version 2.2.17 and PHP version 5.3.5 (thread-safe).  Mileage may vary with different software versions.</p>
<p>Now back in the day, I would use a nifty little SourceForge project called <a title="phptriad" href="http://sourceforge.net/projects/phptriad/" target="_blank">phptriad</a> to handle all of the little installation and configuration nonsensicalities for me.  Phptriad was quick, easy, and generally worked straight away.  There&#8217;s just one major problem with it; the project hasn&#8217;t seen any updates since September 9th of the year 2000.  Using it nowadays consigns one to hopelessly outdated versions of Apache and PHP (and also MySQL).  Versions that are so hopelessly outdated that they do not meet the minimum requirements for running WordPress.</p>
<p>So I decided that this time around I would do things the correct way, and install the latest version of Apache, the latest version of PHP, and then configure them to talk with each other.  &#8220;How hard can it be&#8221;, I recall myself saying.  The PHP installer even had an Apache configuration step that seemed like it would handle the entire process automatically.  But sadly that was not the case; the automatic configurator did nothing useful, and while the configuration process was not hard it was exceedingly poorly documented and circuitous, turning what should have been a 2-minute task into a nearly 2-hour endeavor.</p>
<p>Now, do a quick Google search for Apache and PHP configuration issues and you will find countless posts suggesting adding minor variations of the following directives to Apache&#8217;s <em>httpd.conf</em> file:</p>
<pre class="brush: plain; title: ; notranslate">AddHandler application/x-httpd-php .php .phtml
AddType application/x-httpd-php .php</pre>
<p>Seems like a simple enough fix, but none of the myriad variations of these two directives did the trick.  It makes sense when you think about it, considering that all these directives do is associate <em>.php</em> files with a MIME type.  Left wide open is the question of how Apache is supposed to know what that MIME type actually means, how it should be handled, and where to find the handler.  Yes, the <em>php5_apache22</em> module is being loaded as well, but the module isn&#8217;t magic; Apache still needs to know when and how it should use it.  So essentially what&#8217;s missing is a mapping to tell Apache &#8220;for MIME type &#8216;x&#8217;, use program &#8216;y'&#8221;.  After far too much searching, I found a page that also mentioned adding the following directive:</p>
<pre class="brush: plain; title: ; notranslate">Action application/x-httpd-php &quot;/path/to/your/php.exe&quot;</pre>
<p>And finally there was the missing piece.  The AddType (or if you prefer, AddHandler) directive associates <em>.php</em> files with a particular MIME type, and the Action directive maps that MIME type to a concrete resource that Apache can use to process items of that type.  Apache now knows both what a <em>.php</em> file is, and how to process it, and like magic the server behaves as it should.  All told far too much digging was needed to uncover that one critical line.  </p>
<p>For reference, the complete PHP configuration section in my <em>httpd.conf</em> file looks like so:</p>
<pre class="brush: plain; title: ; notranslate">PHPIniDir &quot;~/apache/php&quot;
LoadModule php5_module &quot;~/apache/php/php5apache2_2.dll&quot;
AddType application/x-httpd-php .php
Action application/x-httpd-php &quot;~/apache/php/php.exe&quot;</pre>
<p>I suspect that the actual MIME type assigned to <em>.php</em> files matters very little here, so long as the type is consistent between the &#8216;AddType&#8217; directive and the &#8216;Action&#8217; directive.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/13/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
