<?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>Faux's Blog</title>
	<atom:link href="http://blog.prelode.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.prelode.com</link>
	<description>On Prelode's development.. once it begins, anyway..</description>
	<lastBuildDate>Sat, 13 Feb 2010 11:07:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Catchlogger</title>
		<link>http://blog.prelode.com/2010/02/catchlogger/</link>
		<comments>http://blog.prelode.com/2010/02/catchlogger/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 11:06:36 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=84</guid>
		<description><![CDATA[Post seriousness: 70%.
Catchlogger [jar] [git src] checks that exceptions are being logged properly.
It&#8217;s entirely fallible, but, if your codebase is prone to catching and ignoring exception, and you use log4j, it&#8217;s Very Helpful.
For example:

try {
  foo();
} catch (IOException e) {
  logger.error("bar: failed to foo", e);
}

This is fine; an error has occurred and it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Post seriousness: 70%.</p>
<p><a href="http://b.goeswhere.com/catchlogger-ea10174865343dc2b75eee69cc40b319f5981555.jar">Catchlogger [jar]</a> [<a href="http://git.goeswhere.com/?p=catchlogger.git;a=summary">git src</a>] checks that exceptions are being logged properly.</p>
<p>It&#8217;s entirely fallible, but, if your codebase is prone to catching and ignoring exception, and you use log4j, it&#8217;s Very Helpful.</p>
<p>For example:</p>
<p><code><br />
try {<br />
  foo();<br />
} catch (IOException e) {<br />
  logger.error("bar: failed to foo", e);<br />
}<br />
</code></p>
<p>This is fine; an error has occurred and it&#8217;s full stacktrace will be placed in the log4j configured log.</p>
<p><code><br />
try {<br />
  foo();<br />
} catch (IOException e) {<br />
  logger.error(e);<br />
  logger.info("oh noes", e);<br />
  e.printStackTrace();<br />
}<br />
</code></p>
<p>None of these, however, will do anything useful.  The first logs just the toString() to the error log, info is too low-level to log exceptions at, and printStackTrace() doesn&#8217;t necessarily go anywhere at all.</p>
<p>For this block, catchlogger will issue:<br />
<code>IOException e unused at (Test.java:15) in public main(String[] args) in path.</code></p>
<p>The JAR is huge as it pulls in the entire Eclipse compiler to parse the source.  BSD/MIT licensed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2010/02/catchlogger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Free Software Definition</title>
		<link>http://blog.prelode.com/2009/04/the-free-software-definition/</link>
		<comments>http://blog.prelode.com/2009/04/the-free-software-definition/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 15:58:33 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=83</guid>
		<description><![CDATA[The GNU project publishes a list of four Freedoms and recommend a single license*, the GPL.
They claim the word &#8220;Free&#8221; for software available under the GPL.
Let us consider some developer freedoms, and some alternative licenses for blocks of code:

  td { text-align: center }
  th { padding: .5em }
  td { padding: [...]]]></description>
			<content:encoded><![CDATA[<p>The GNU project publishes a <a href="http://www.gnu.org/philosophy/free-sw.html">list of four Freedoms</a> and recommend a single license*, the <a href="http://www.gnu.org/licenses/licenses.html#GPL">GPL</a>.</p>
<p>They claim the word &#8220;Free&#8221; for software available under the GPL.</p>
<p>Let us consider some developer freedoms, and some alternative licenses for blocks of code:</p>
<style type="text/css">
  td { text-align: center }
  th { padding: .5em }
  td { padding: .2em }
  td,th { border: 1px solid black }
  .tick { background-color: #dfd }
</style>
<table>
<tr>
<th />
<th>Link / Use</th>
<th>Four boring freedoms</th>
<th>Reuse the code</th>
<th>Sue author</th>
</tr>
<tr>
<td>Proprietary</td>
<td></td>
<td></td>
<td></td>
<td class="tick">✓</td>
</tr>
<tr>
<td>GPL</td>
<td></td>
<td class="tick">✓</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Freeware**</td>
<td class="tick">✓</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>LGPL</td>
<td class="tick">✓</td>
<td class="tick">✓</td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="http://en.wikipedia.org/wiki/BSD_license">BSD</a>/<a href="http://en.wikipedia.org/wiki/MIT_license">MIT</a>/<a href="http://en.wikipedia.org/wiki/ISC_license">ISC</a>/etc.</td>
<td class="tick">✓</td>
<td class="tick">✓</td>
<td class="tick">✓</td>
<td></td>
</tr>
<tr>
<td><a href="http://en.wikipedia.org/wiki/Public_domain">PD</a>/<a href="http://sam.zoy.org/wtfpl/">WTFPL</a>***/etc.</td>
<td class="tick">✓</td>
<td class="tick">✓</td>
<td class="tick">✓</td>
<td class="tick">✓</td>
</tr>
</table>
<p>
Looking at this, it&#8217;s reasonably obvious to me which licenses offer the most Freedom to the developer; that being the BSD/MIT/ISC family.</p>
<p>These are the licenses I use personally, and the licenses I use to define Free Software; I don&#8217;t see how it can be taken any other way.</p>
<p><span id="more-83"></span></p>
<p>&#8211;</p>
<ul>
<li><strong>Link / use</strong>: The license allows you to use the software as a whole, <strong>for any purpose</strong> (i.e. it&#8217;s free for use in assisting proprietary software and terrorism) (like freedom 0, but applicable to libraries).</li>
<li><strong>Four boring freedoms</strong>: Follows the four freedoms outlined by the GNU project.</li>
<li><strong>Reuse the code</strong>: The freedom to study and reuse the code, <strong>for any purpose****</strong> (especially for terroism).</li>
<li><strong>Sue the author</strong>: Generally, with proprietary software and with non-software licenses, you have the right to hold the author responsible for their work, at least, up to a certain value. The author may want to disown this responsibility.</li>
</ul>
<p>&#8211;</p>
<p>* The <a href="http://www.gnu.org/licenses/why-not-lgpl.html">LGPL is discouraged</a>, the GDFL is not for software (<a href="http://wiki.debian.org/DFSGLicenses#LicensesthatareDFSG-incompatible" title="List of licenses which are not DFSG compliant">and generally considered non-free anyway</a>), the <a title="GNU Affero General Public License" href="http://www.gnu.org/licenses/licenses.html#AGPL">AGPL</a> is an extension of the GPL.</p>
<p>** I can&#8217;t think of nearly any prominent Freeware libraries, either.  <a href="http://www.foobar2000.org/">Foobar2000</a>&#8217;s SDK?</p>
<p>*** The WTFPL&#8217;s FAQ covers &#8220;Why is there no “no warranty” clause?&#8221;, and also why Public Domain isn&#8217;t really a license.</p>
<p>**** Apparently there&#8217;s some confusion as to what I mean by &#8220;for any purpose&#8221;. I include using the code inside other applications, regardless of their license, as a purpose.  That is, the GPL does not allow code reuse <strong>for any purpose</strong>, because it does not allow code reuse in proprietary applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2009/04/the-free-software-definition/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Finalizers considered harmful</title>
		<link>http://blog.prelode.com/2009/04/finalizers-considered-harmful/</link>
		<comments>http://blog.prelode.com/2009/04/finalizers-considered-harmful/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 14:24:23 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=82</guid>
		<description><![CDATA[I diagnosed an interesting problem at work recently; our application, when running on some enterprise platforms was eventually (over a number of days) running out of memory, grinding to a halt then fatally OutOfMemoryErroring, regardless of how much heap it was given.
Eclipse Memory Analysis Tool (via. DTFJ for the IBM heapdumps) is rather resource hungry, [...]]]></description>
			<content:encoded><![CDATA[<p>I diagnosed an interesting problem at work recently; our application, when running on some enterprise platforms was eventually (over a number of days) running out of memory, grinding to a halt then fatally OutOfMemoryErroring, regardless of how much heap it was given.</p>
<p><a href="http://www.eclipse.org/mat/">Eclipse Memory Analysis Tool</a> (via. <a href="http://www.ibm.com/developerworks/java/jdk/tools/mat.html">DTFJ</a> for the IBM heapdumps) is rather resource hungry, needing massively increased the heap (~7gb, i.e. can&#8217;t be run on an 32-bit machine) and stack size (~8mb).  However, once the heap dump had been loaded (1h+), it was reasonably obvious (after <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=266231" title="Eclipse bug #266231 (resolved: fixed)">#266231</a>) what was happening:</p>
<p>The finalizers wern&#8217;t being processed fast enough.</p>
<p>The finalization thread is run at a lower priority, and, seemingly, on the configurations on these machines/OS/JVM combinations, it was getting no time at all.</p>
<p>For historical reasons, quite a few large classes in our codebase have:</p>
<p><code>void finalize() {}</code></p>
<p>..in, that is, finalizers that do nothing at all.  These empty finalizers still have to be run before the object can be collected, however, so they simply wern&#8217;t, quickly leaking memory. The more that was leaked, the slower the JVM was running, so the less time the finalization thread had, a vicious cycle.</p>
<p>I couldn&#8217;t find many other people experiencing this on the internet, I can only assume that people simply don&#8217;t use finalizers, which can only be a good thing.</p>
<p>One guy had a rather more interesting solution:<br />
<code><br />
public static void main(String[] args)<br />
{<br />
&nbsp;&nbsp;new Object()<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override protected void finalize() throws Throwable<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.finalize();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.currentThread().setPriority(Thread.MAX_PRIORITY);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;};<br />
&nbsp;&nbsp;// ...<br />
}<br />
</code></p>
<p>The worst thing is, I can&#8217;t really see any disadvantages to this&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2009/04/finalizers-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Earth &#8220;offline installer&#8221;</title>
		<link>http://blog.prelode.com/2009/04/google-earth-offline-installer/</link>
		<comments>http://blog.prelode.com/2009/04/google-earth-offline-installer/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 13:28:17 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=81</guid>
		<description><![CDATA[Google seem to be of the incorrect opion that you want your machine infected with Google Update.
The Google Earth download is actually just a cunningly disguised Google Update installer, and it seems to think it needs elevation.
It extracts %TEMP%\GUXXXXX.tmp\GoogleUpdate.exe, then tries to run:
GoogleUpdate.exe /install "appguid={74AF07D8-FB8F-4d51-8AC7-927721D56EBB}&#038;appname=Google%20Earth&#038;needsadmin=true" /installelevated
Instead of this,
GoogleUpdate.exe /install "appguid={74AF07D8-FB8F-4d51-8AC7-927721D56EBB}&#038;appname=Google%20Earth"
..will happily download and extract Google [...]]]></description>
			<content:encoded><![CDATA[<p>Google seem to be of the incorrect opion that you want your machine infected with Google Update.</p>
<p>The <a href="http://earth.google.com/download-earth.html">Google Earth download</a> is actually just a cunningly disguised Google Update installer, and it seems to think it needs elevation.</p>
<p>It extracts %TEMP%\GUXXXXX.tmp\GoogleUpdate.exe, then tries to run:</p>
<p><code>GoogleUpdate.exe /install "appguid={74AF07D8-FB8F-4d51-8AC7-927721D56EBB}&#038;appname=Google%20Earth&#038;needsadmin=true" /installelevated</code></p>
<p>Instead of this,</p>
<p><code>GoogleUpdate.exe /install "<strong>appguid={74AF07D8-FB8F-4d51-8AC7-927721D56EBB}&#038;appname=Google%20Earth</strong>"</code></p>
<p>..will happily download and extract Google Earth to %TEMP%\7ZipSfx.XXX.  This is the unpacked offline installer, but the installer itself still attempts to elevate.  Luckily, it&#8217;s already unpacked, in:</p>
<p><code>%TEMP%\7ZipSfx.XXX\program files\Google\Google Earth</code></p>
<p>Just copy this folder to somewhere convenient and run googleearth.exe.</p>
<p>&#8211;</p>
<p>For reference for other apps, the quoted argument to GoogleUpdate.exe is the last &#8220;line&#8221; in the downloaded GoogleEarthSetup.exe.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2009/04/google-earth-offline-installer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Noelevate</title>
		<link>http://blog.prelode.com/2008/12/noelevate/</link>
		<comments>http://blog.prelode.com/2008/12/noelevate/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 00:17:37 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=79</guid>
		<description><![CDATA[In Windows Vista, Microsoft added manifests, a way for developers to require that their applications run as administrator, or not at all. This takes control away from the user, me, who I trust, and gives it to some developer (who I might not). While it&#8217;s possible to edit the file to remove these manifests, this [...]]]></description>
			<content:encoded><![CDATA[<p>In Windows Vista, Microsoft added manifests, a way for developers to <strong>require</strong> that their applications run as administrator, or not at all. This takes control away from the user, me, who I trust, and gives it to some developer (who I might not). While it&#8217;s possible to edit the file to remove these manifests, this is hard to do safely and automatically.</p>
<p>I thought it&#8217;d be fun to directly fix the problem.</p>
<p>It seems that, like <a href="http://blog.prelode.com/?p=69"><em>some other things</em></a>, as far as I can see, there&#8217;s no support for this.</p>
<p>Luckily, it&#8217;s an even smaller patch than last time. I won&#8217;t show it, it&#8217;s simply erasure of a <code>jmp</code>. It&#8217;s a terrible solution to the problem, and the binary only contains fixes for <code>kernel32.dll</code> as seen on x64 SP1 and x32 SP1 as of now, it could break at any point. I implore nobody to use this utility seriously.</p>
<p><a href="http://b.goeswhere.com/noelev.exe">noelev</a> (<a href="http://b.goeswhere.com/noelev.exe.asc">asc</a>) (<a href="http://b.goeswhere.com/noelev.cpp">cpp</a>) (<a href="http://b.goeswhere.com/noelev.pdb.7z">pdb</a>) works much like the reverse of the unix &#8220;sudo&#8221; command, running a command via. it makes it run <strong>without</strong> elevation.</p>
<p>It&#8217;s not infectious, so it won&#8217;t work for all applications (like some setup applications that unpack other installers), and, of course, some applications actually don&#8217;t work without elevation.</p>
<p>A lot of Windows components actually appear to cope relatively gracefully with the unexpected lack of permissions, unlike, say, the nVidia components. I was hoping to find an entertaining failure to screenshot, but they&#8217;re all boring. <img src='http://blog.prelode.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2008/12/noelevate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ergonomics</title>
		<link>http://blog.prelode.com/2008/12/ergonomics/</link>
		<comments>http://blog.prelode.com/2008/12/ergonomics/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 02:03:00 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=78</guid>
		<description><![CDATA[I decided on Thursday that I don&#8217;t actually use my right-thumb for any keys whilst typing, my left exclusively operates the space-bar, and there are no useful modifier keys on the right-hand side of a Microsoft Ergonomic 4000 Keyboard.
I decided to add something useful:

If you can&#8217;t tell by the head, it&#8217;s the remains of an [...]]]></description>
			<content:encoded><![CDATA[<p>I decided on Thursday that I don&#8217;t actually use my right-thumb for any keys whilst typing, my left exclusively operates the space-bar, and there are no useful modifier keys on the right-hand side of a <a href="http://www.microsoft.com/hardware/mouseandkeyboard/productdetails.aspx?pid=043">Microsoft Ergonomic 4000 Keyboard</a>.</p>
<p>I decided to add something useful:<br />
<img src="http://b.goeswhere.com/msne4knipple.jpg" alt="MS Ergonomic Keyboard 4000 with nipple" /></p>
<p>If you can&#8217;t tell by the head, it&#8217;s the remains of an xbox 360 controller:<br />
<img src="http://b.goeswhere.com/msne4kunder.jpg" alt="..and what it looks like underneath" /></p>
<p>This, combined with a modified version of <a href="http://b.goeswhere.com/mousex.cpp">mousex</a> gives you an almost usable mouse.</p>
<p>Now I just need to train myself to use it.</p>
<p>As an aside, I used to be worried about damaging the wrist wrests and the other pieces of the body (both of which you can see mutilated above). I am no longer, they&#8217;re almost indestructable. I had to switch from a craft knife to a stanley knife to get through the faux-leather on the wrist wrest.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2008/12/ergonomics/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Eclipse and database deadlocks</title>
		<link>http://blog.prelode.com/2008/10/eclipse-and-database-deadlocks/</link>
		<comments>http://blog.prelode.com/2008/10/eclipse-and-database-deadlocks/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 22:30:46 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=77</guid>
		<description><![CDATA[I encountered an interesting issue today.
I work with some code that relies heavily on the database it backs on to. Today, it was backed onto Microsoft SQL Server. Right after starting, it would deadlock.
Looking at the stack of randomly picked threads I found that one was waiting indefinitly for the server to return.
A quick glance [...]]]></description>
			<content:encoded><![CDATA[<p>I encountered an interesting issue today.</p>
<p>I work with some code that relies heavily on the database it backs on to. Today, it was backed onto Microsoft SQL Server. Right after starting, it would deadlock.</p>
<p>Looking at the stack of randomly picked threads I found that one was waiting indefinitly for the server to return.</p>
<p>A quick glance at the SQL Server&#8217;s Activity Monitor revealed that &#8220;process id&#8221; 3, was waiting for &#8220;process id&#8221; 1. &#8220;Process id&#8221; 1 was sleeping, but in a transaction.</p>
<p>That&#8217;s helpful, I thought, I now know the problem, &#8220;process id&#8221; 1. So, where&#8217;s it happening in code? Uh oh.</p>
<p>I poked around, and noticed that <code>com.microsoft.sqlserver.jdbc.SQLServerConnection</code> (no, not <code>com.microsoft.<strong>jdbc.sqlserver</strong>.SQLServerConnection</code>) has a piece of private implementation called <code>transactionDescriptor</code>, an 8-<code>byte</code> array including the process id on the SQL Server. I set a <a href="http://help.eclipse.org/ganymede/topic/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-detail_formatters.htm">detail formatter</a> to show just this value.</p>
<p>Following this, Eclipse&#8217;s find <a href="http://help.eclipse.org/ganymede/topic/org.eclipse.jdt.doc.user/reference/views/shared/ref-allinstances.htm">all instances</a> command comes into play, allowing you to search for all instances of <code>SQLServerConnection</code>,  then <a href="http://help.eclipse.org/ganymede/topic/org.eclipse.jdt.doc.user/reference/views/shared/ref-allinstances.htm">all references</a> to the specified connection. Both of these are only available in Java 6 and above, otherwise the command will be greyed out.</p>
<p>From here, you can (manually, as far as I know) search through the stack trace and hopefully find that one of your threads has the above class (or a class that refers to the class, or a class that refers to a class that&#8230;) in it&#8217;s trace; the culprit.</p>
<p>A mere hour of my day, gone. <img src='http://blog.prelode.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2008/10/eclipse-and-database-deadlocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taglib Property Handler</title>
		<link>http://blog.prelode.com/2008/10/taglib-property-handler-2/</link>
		<comments>http://blog.prelode.com/2008/10/taglib-property-handler-2/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 21:04:51 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=76</guid>
		<description><![CDATA[Tonight marks the first public release of Taglib Property Handler, an Explorer extension for Vista that allows it to read metadata from many audio file types:

Currently, it&#8217;s fully read-only, so there&#8217;s minimal risk to your data, and the default install doesn&#8217;t cause you to lose any existing functionality.
The list of supported properties shows what the [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight marks the first public release of <a href="http://taglibhandler.sourceforge.net/">Taglib Property Handler</a>, an Explorer extension for Vista that allows it to read metadata from many audio file types:</p>
<p><img src="http://b.goeswhere.com/tlph-casc640.png" alt="Explorer advanced search results for Cascada with TLPH installed" /></p>
<p>Currently, it&#8217;s fully read-only, so there&#8217;s minimal risk to your data, and the default install doesn&#8217;t cause you to lose any existing functionality.</p>
<p>The <a href="http://taglibhandler.sourceforge.net/#atbl">list of supported properties</a> shows what the default handler supports for MP3 and WMA, and what TLPH supports so far.</p>
<p>This release comes after four months of swearing at Microsoft for the entire <a href="http://msdn.microsoft.com/en-us/library/bb266532.aspx">property handler</a> system being impossible to debug. Four months ago I had the handler working in Windows Explorer, but Windows Search would refuse to show any properties it provided. There&#8217;re plenty of articles on <a href="http://blogs.msdn.com/benkaras/archive/2007/07/24/troubleshooting-why-isn-t-my-property-handler-getting-indexed.aspx">debugging this situation</a>, which I ran through hundreds of times, in the end this turned out to be caused by:</p>
<ol>
<li>Explorer accepting VT_BSTR and Windows Search not; solved by switching to <a href="http://msdn.microsoft.com/en-us/library/bb762305.aspx">InitPropVariantFromString</a>.</li>
<li>Stupid mistakes with pointers. Oh, how I hate you.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2008/10/taglib-property-handler-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Yay, productivity</title>
		<link>http://blog.prelode.com/2008/09/yay-productivity/</link>
		<comments>http://blog.prelode.com/2008/09/yay-productivity/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 19:33:38 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=75</guid>
		<description><![CDATA[I (finally) have a job, and, suddenly, (I&#8217;m sure it&#8217;s unrelated) start feeling relatively productive outside of work.
I&#8217;m trying to learn the Colemak keyboard layout again, I&#8217;ve produced a version of Colemak with more UK symbol keys (self extractor) (.asc) on (for example, &#8220;, @, ¬ in the right places). MSKLC 1.4 source included, should [...]]]></description>
			<content:encoded><![CDATA[<p>I (finally) have a job, and, suddenly, (I&#8217;m sure it&#8217;s unrelated) start feeling relatively productive outside of work.</p>
<p>I&#8217;m trying to learn the <a href="http://colemak.com/">Colemak keyboard layout</a> again, I&#8217;ve produced a version of <a href="http://b.goeswhere.com/colemauk.exe">Colemak with more UK symbol keys</a> (self extractor) (<a href="http://b.goeswhere.com/colemauk.exe.asc">.asc</a>) on (for example, &#8220;, @, ¬ in the right places). <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8be579aa-780d-4253-9e0a-e17e51db2223">MSKLC 1.4</a> source included, should work on XP and Vista.</p>
<p>I wrote a tool a while ago for a friend show whether drives were spun up or not. I just changed it to a little tray applet:<br />
<img src="http://b.goeswhere.com/powerstatustray.png" alt="Powerstatus tray example" /><br />
It also notifies you when drives spin down and up. Currently it operates by polling, at a hardcoded 15s interval. Feel free to change the source.</p>
<p><a href="http://b.goeswhere.com/powerstatustray.exe">powerstatustray.exe</a> (<a href="http://b.goeswhere.com/powerstatustray.exe.asc">.asc</a>) (<a href="http://b.goeswhere.com/powerstatustray.cpp">.cpp</a>) (<a href="http://b.goeswhere.com/powerstatustray.pdb">.pdb</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2008/09/yay-productivity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Live OneCare</title>
		<link>http://blog.prelode.com/2008/05/windows-live-onecare/</link>
		<comments>http://blog.prelode.com/2008/05/windows-live-onecare/#comments</comments>
		<pubDate>Tue, 06 May 2008 23:54:24 +0000</pubDate>
		<dc:creator>Faux</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.prelode.com/?p=74</guid>
		<description><![CDATA[As I had no particular use of my CPU time over the weekend (I was busy force-feeding dogs ice-cream), I installed Windows Live OneCare (which has recently gained support for x64 flavours of Vista), following a promise to myself that I would install a virus scanner of some kind.
It happily scanned away, deleting three copies [...]]]></description>
			<content:encoded><![CDATA[<p>As I had no particular use of my CPU time over the weekend (I was busy force-feeding dogs ice-cream), I installed <a href="http://onecare.live.com/">Windows Live OneCare</a> (which has recently gained support for x64 flavours of Vista), following a promise to myself that I would install a virus scanner of some kind.</p>
<p>It happily scanned away, deleting three copies of the <a href="http://en.wikipedia.org/wiki/EICAR_test_file">deadly EICAR virus</a> (phew), this was (mostly) fine.</p>
<p>Following this, and OneCare assuring me that my system was free of viruses, spyware and other malware, awarded me the security status Fair:<br />
<img src='http://faux.uwcs.co.uk/onecarefair.png' alt='OneCare - Fair, Fix, Backup' class='alignnone' /></p>
<p>The &#8220;problem&#8221; found was, apparently, that I have chosen to disable elevation upon &#8220;setup detection&#8221;, a feature built into Vista (disableable via. Local Security Policy -> UAC: Detect Application Installs..) by Microsoft in a cunning plan to ensure that lazy software developers didn&#8217;t need to bother learning how manifests work, and instead could just rename their application to &#8220;setup.exe&#8221; and pray. There is no way to ignore this &#8220;problem&#8221;.</p>
<p>The second &#8220;problem&#8221; was that I do not use OneCare (nor optical media, as it happens) for my backups. This renders the overall &#8220;security&#8221; status useless.</p>
<p>Next irritation comes from the attempt to use the internet. OneCare blocks outgoing connections from unisnged (it costs £40 and an e-mail address to get a code-signing certificate via. <a href="https://author.tucows.com/">Tucows</a>, making this a terribly poor way to decide what to trust) apps by default (well, I hope, I couldn&#8217;t work out how to turn it off), and shows the following dialog:</p>
<p><img src='http://faux.uwcs.co.uk/onecarefirewall1.png' alt='Opera and Putty OneCare firewall elevation dialogs' class='alignnone' /></p>
<p>That&#8217;s conforting, a shielded <a href="http://msdn.microsoft.com/en-us/library/bb760441.aspx">task dialog</a>. I&#8217;ll click Allow on Opera&#8217;s prompt and&#8230; wait, what&#8217;s this?!</p>
<p><img src='http://faux.uwcs.co.uk/onecarefirewall2.png' alt='Opera and Putty OneCare firewall dialogs, elevated' class='alignnone' /></p>
<p>I&#8217;m confused. Didn&#8217;t I just say Opera was allowed through?</p>
<p>Also, a warning: Don&#8217;t try the bottom button. It blocks the application for an indeterminate, unresettable period. Really inconvenient when you&#8217;re attempting to use said application to write a blog report.</p>
<p>If you hadn&#8217;t guessed by now, I don&#8217;t like OneCare&#8217;s UI. To sum it up:</p>
<p><img src='http://faux.uwcs.co.uk/onecareloading.png' alt='OneCare\&#039;s loading dialog' class='alignnone' /></p>
<p>This is the dialog that you see when you <em>restore</em> OneCare from the system tray. No, not load from scratch. Restore. And, just in case you were worried, that&#8217;s not a progress bar, it&#8217;s just an &#8220;I&#8217;m doing stuff, honest!&#8221; bar.</p>
<p>Ignoring all those (and a few <a href="http://faux.uwcs.co.uk/onecaretrayicon.png">other bugs</a>), it seems to be a very capable bit of software. Maybe you&#8217;re less irritable than me, go try the 90 day free trial! <img src='http://blog.prelode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.prelode.com/2008/05/windows-live-onecare/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
