<?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>bitplane.net</title>
	<atom:link href="http://bitplane.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://bitplane.net</link>
	<description>Rants, ramblings, free software</description>
	<lastBuildDate>Fri, 27 Aug 2010 22:26:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Float.parseFloat is slow</title>
		<link>http://bitplane.net/2010/08/java-float-fast-parser/</link>
		<comments>http://bitplane.net/2010/08/java-float-fast-parser/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 22:17:54 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[performance testing]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=710</guid>
		<description><![CDATA[While profiling some loader code and expecting to see performance issues with my regular expressions, I found that ~60% of my time was actually spent converting String variables to floats. It turns out that the slow bit lives inside Float.parseFloat, where it calls String.toLowerCase every single time just in case this string is a hex [...]]]></description>
			<content:encoded><![CDATA[<p><span>While profiling some loader code and expecting to see performance issues with my regular expressions, I found that ~60% of my time was actually spent converting <em>String</em> variables to <em>float</em>s. It turns out that the slow bit lives inside <a href="http://www.java2s.com/Open-Source/Java-Document/Apache-Harmony-Java-SE/org-package/org/apache/harmony/luni/util/FloatingPointParser.java.htm">Float.parseFloat</a>, where it calls String.toLowerCase every single time just in case this string is a <em>hex float</em>, a very rare type of float which I had never seen before. I <a href="https://issues.apache.org/jira/browse/HARMONY-6635">logged this with Apache</a>, but as I can&#8217;t ship a custom ROM with my SVG parser I decided to replace it.</span><br />
<span>Here&#8217;s the results from some tests of 3896 calls to parseFloat on my Nexus One:</span></p>
<ul>
<li>a) Using Float.parseFloat(String): 1516.449ms</li>
<li>b) My own parseFloat(String): 654.882ms</li>
<li>c) &#8230;and my own isDigit(char): 449.622</li>
<li>d) &#8230;and isDigit written inline: 295.865ms</li>
<li>e) &#8230;copying the string into a char buffer and avoiding all string access and method calls: 254.527ms (112ms spent copying the characters!)</li>
</ul>
<p><span>So in theory, if the method took a character buffer and length it could be as short as 135ms, over ten times faster than Float.parseFloat. I&#8217;m currently using option d as gives a nice performance gain without breaking my design, but when performance tuning the entire API later this may see some huge changes. Here&#8217;s the function I cooked up:</span></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">float</span> parseFloat<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> f<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> len   <span style="color: #339933;">=</span> f.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">float</span>     ret   <span style="color: #339933;">=</span> 0f<span style="color: #339933;">;</span>         <span style="color: #666666; font-style: italic;">// return value</span>
	<span style="color: #000066; font-weight: bold;">int</span>       pos   <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>          <span style="color: #666666; font-style: italic;">// read pointer position</span>
	<span style="color: #000066; font-weight: bold;">int</span>       part  <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>          <span style="color: #666666; font-style: italic;">// the current part (int, float and sci parts of the number)</span>
	<span style="color: #000066; font-weight: bold;">boolean</span>   neg   <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>      <span style="color: #666666; font-style: italic;">// true if part is a negative number</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// find start</span>
	<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&lt;</span> len <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000ff;">'0'</span> <span style="color: #339933;">||</span> f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000ff;">'9'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'-'</span> <span style="color: #339933;">&amp;&amp;</span> f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span>
		pos<span style="color: #339933;">++;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// sign</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'-'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
		neg <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span> 
		pos<span style="color: #339933;">++;</span> 
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// integer part</span>
	<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&lt;</span> len <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000ff;">'9'</span> <span style="color: #339933;">||</span> f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000ff;">'0'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		part <span style="color: #339933;">=</span> part<span style="color: #339933;">*</span><span style="color: #cc66cc;">10</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #0000ff;">'0'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	ret <span style="color: #339933;">=</span> neg <span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>part<span style="color: #339933;">*-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>part<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// float part</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&lt;</span> len <span style="color: #339933;">&amp;&amp;</span> f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		pos<span style="color: #339933;">++;</span>
		<span style="color: #000066; font-weight: bold;">int</span> mul <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
		part <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&lt;</span> len <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000ff;">'9'</span> <span style="color: #339933;">||</span> f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000ff;">'0'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			part <span style="color: #339933;">=</span> part<span style="color: #339933;">*</span><span style="color: #cc66cc;">10</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #0000ff;">'0'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
			mul<span style="color: #339933;">*=</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> pos<span style="color: #339933;">++;</span>
		<span style="color: #009900;">&#125;</span>
		ret <span style="color: #339933;">=</span> neg <span style="color: #339933;">?</span> ret <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>part <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>mul <span style="color: #339933;">:</span> ret <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>part <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>mul<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// scientific part</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&lt;</span> len <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'e'</span> <span style="color: #339933;">||</span> f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'E'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		pos<span style="color: #339933;">++;</span>
		neg <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'-'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> pos<span style="color: #339933;">++;</span>
		part <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&lt;</span> len <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000ff;">'9'</span> <span style="color: #339933;">||</span> f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000ff;">'0'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			part <span style="color: #339933;">=</span> part<span style="color: #339933;">*</span><span style="color: #cc66cc;">10</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #0000ff;">'0'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>neg<span style="color: #009900;">&#41;</span>
			ret <span style="color: #339933;">=</span> ret <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span><span style="color: #003399;">Math</span>.<span style="color: #006633;">pow</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span>, part<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">else</span>
			ret <span style="color: #339933;">=</span> ret <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span><span style="color: #003399;">Math</span>.<span style="color: #006633;">pow</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span>, part<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>	
	<span style="color: #000000; font-weight: bold;">return</span> ret<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><span>This is of course a very crude method, it requires a well-formed number and will return 0 or partial numbers instead of raising exceptions, it doesn&#8217;t work with hex floats or parse NaNs or Infinity and it doesn&#8217;t use doubles internally so the accuracy is not perfect. It does however work for my purposes, so I thought I&#8217;d share it with the Internet.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2010/08/java-float-fast-parser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microphone for Android</title>
		<link>http://bitplane.net/2010/08/android-mic/</link>
		<comments>http://bitplane.net/2010/08/android-mic/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 16:48:46 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=688</guid>
		<description><![CDATA[So, my 4th Android app is out, a simple mic which you can plug into your computer. It&#8217;s got quite a slating on the Android Market because of its latency, the problem is that there&#8217;s quite large minimum values on the buffer size for accessing input and output buffers, there&#8217;s no way to reduce this [...]]]></description>
			<content:encoded><![CDATA[<p>So, <a href="http://bitplane.net/projects/android/microphone">my 4th Android app</a> is out, a simple mic which you can plug into your computer. It&#8217;s got quite a slating on the Android Market because of its latency, the problem is that there&#8217;s quite large minimum values on the buffer size for accessing input and output buffers, there&#8217;s no way to reduce this latency below the ~300ms which it currently has. Hopefully AOSP will address <a href="http://code.google.com/p/android/issues/detail?id=3434">this</a> eventually, paving way for realtime audio applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2010/08/android-mic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adventures in Android</title>
		<link>http://bitplane.net/2010/08/android-adventures/</link>
		<comments>http://bitplane.net/2010/08/android-adventures/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 05:55:24 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=680</guid>
		<description><![CDATA[Since getting myself a Google Nexus One I&#8217;ve decided to do a bit of Android development. My first impressions with the platform weren&#8217;t really that good, but I&#8217;m beginning to get the hang of it now. My main problem is that Java is a horribly verbose and restrictive language. To do the simplest things you [...]]]></description>
			<content:encoded><![CDATA[<p>Since getting myself a Google Nexus One I&#8217;ve decided to do a bit of Android development. My first impressions with the platform weren&#8217;t really that good, but I&#8217;m beginning to get the hang of it now.</p>
<p>My main problem is that Java is a horribly verbose and restrictive language. To do the simplest things you need to implement at least three interfaces and extend a couple of abstract classes (after reading the documentation for each of them and their alternatives of course). Something which could be written in Python in three lines of code and two minutes takes fifty lines and twenty minutes in Java. Perhaps that&#8217;s just me, maybe I&#8217;ve been spoiled by dynamic languages and expect to be able to do things a hundred different ways by just typing whatever comes to mind, rather than carefully considering the available options and planning every step of my app. In my short journey through Java development I&#8217;ve suffered a lot of pain because I make assumptions and choose a design pattern which is incompatible some point later down the line, so I end up refactoring everything ten times before I even get a working prototype. I&#8217;m slowly learning not to fly by the seat of my pants (even if it is the most fun way to fly) and perhaps that&#8217;s a good thing.</p>
<p>My other gripe is the UI editor and XML format, their steep learning curve makes the design stage a huge time sink. I&#8217;ve now spent a fair bit of time banging my head off my keyboard while attempting to make the simplest of interface, which still don&#8217;t look like they do on paper, but I think I&#8217;m getting the hang of it.</p>
<p>Anyhow, so far I&#8217;ve managed to knock out 3 applications which are available in the Android marketplace:</p>
<h2><a title="Anonypic" href="http://bitplane.net/projects/android/anonypic">Anonypic</a></h2>
<p>This little app just adds an extra option to your share menu, and will upload an image to <a href="http://bayimg.com">bayimg.com</a>, the anonymous image sharing service by the creators of The Pirate Bay. Images have their EXIF data removed, so you can share images without leaving a trail of metadata leading back to your phone.</p>
<h2><a href="http://bitplane.net/projects/android/rainwatch">Rainwatch</a></h2>
<p>Rainwatch is an alternative viewer for the BBC&#8217;s Maps Presenter, the Flash application available on their <a href="http://news.bbc.co.uk/weather">weather site</a>. It&#8217;s far from complete but is good enough to predict the weather, so I&#8217;m quite happy with it (as are my 1500 active users)</p>
<h2><a href="http://bitplane.net/projects/android/mc-mail">MC Mail</a></h2>
<p>MC Mail, or Missed Call Mailer is a little app which sends you an email when you get a missed call. The back-end is written in PHP and MySQL, the front-end is mostly just a service which monitors your call log. Useful if you&#8217;re a hospital or call centre worker who has access to email but can&#8217;t use a phone in work, or if you always forget your phone. It usually only works while the phone is in silent mode.</p>
<h2>Next steps?</h2>
<p>I&#8217;ll make a couple more apps and maybe a game, then learn the Native Development Kit and port Irrlicht using Christian&#8217;s OpenGL ES driver. I haven&#8217;t done any Irrlicht code in ages, so that&#8217;s certainly on the agenda.</p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2010/08/android-adventures/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flattr</title>
		<link>http://bitplane.net/2010/08/flattr/</link>
		<comments>http://bitplane.net/2010/08/flattr/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 01:08:15 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=613</guid>
		<description><![CDATA[Now that Flattr is finally in public beta, I&#8217;ve decided to sign up and pledge the minimum possible payment, a measly €2 a month. Now all I need to do is actually find some sites to donate to! I&#8217;m kind of torn about adding Flattr links to my projects, on one hand I want to [...]]]></description>
			<content:encoded><![CDATA[<p>Now that Flattr is finally in <a href="http://blog.flattr.com/2010/08/open-beta/">public beta</a>, I&#8217;ve decided to sign up and pledge the minimum possible payment, a measly €2 a month. Now all I need to do is actually find some sites to donate to!</p>
<p>I&#8217;m kind of torn about adding Flattr links to my projects, on one hand I want to encourage the uptake by being another site which supports Flattr, on the other hand I don&#8217;t want to whore myself out for a few pence.</p>
<p>So at some point I&#8217;ll add Flattr links to the free Android apps which I&#8217;ve made, which will feature in the menu at the top shortly.</p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2010/08/flattr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JPerfmeter crashes while starting</title>
		<link>http://bitplane.net/2010/05/jperfmeter-crashes-while-starting/</link>
		<comments>http://bitplane.net/2010/05/jperfmeter-crashes-while-starting/#comments</comments>
		<pubDate>Mon, 17 May 2010 19:25:44 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=597</guid>
		<description><![CDATA[I&#8217;ve been us JPerfmeter in work to keep an eye on Linux system counters served up over rstatd. However, it has one very annoying bug: If one of your servers goes offline, or it somehow lets you add a server which doesn&#8217;t exist JPerfmeter will crash and refuse to start again. The setting is saved [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been us <a href="http://jperfmeter.sourceforge.net/">JPerfmeter</a> in work to keep an eye on Linux system counters served up over rstatd.</p>
<p>However, it has one very annoying bug: </p>
<p>If one of your servers goes offline, or it somehow lets you add a server which doesn&#8217;t exist JPerfmeter will crash and refuse to start again. The setting is saved somewhere on disk. Where? Google didn&#8217;t know (hence this blog post).</p>
<p>Half an hour of messing around in <a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx">Procmon</a> going through reams of logs and I find the settings in <em>%userprofile%\JPerfmeter</em>, just where you&#8217;d expect them to be. facepalm.jpg</p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2010/05/jperfmeter-crashes-while-starting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatic favicon to PNG script</title>
		<link>http://bitplane.net/2010/05/favicon-cache/</link>
		<comments>http://bitplane.net/2010/05/favicon-cache/#comments</comments>
		<pubDate>Sun, 16 May 2010 05:56:51 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PIL]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=583</guid>
		<description><![CDATA[Ever want to add a link to a site with the favourites icon in the page along with the link? I did, so I made this cool little toy:

<a href="http://favicon.bitplane.net/">http://favicon.bitplane.net/</a>
]]></description>
			<content:encoded><![CDATA[<p>Ever want to add a link to a site with the favourites icon in the page along with the link? I did, so I made this cool little toy:</p>
<p><img src="http://favicon.bitplane.net/bitplane.net" alt="" /> <a href="http://favicon.bitplane.net/">http://favicon.bitplane.net/</a></p>
<p><a href="http://bitplane.net/projects/scripts/favicon-to-png">read more&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2010/05/favicon-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>code_swarm</title>
		<link>http://bitplane.net/2010/02/code_swarm/</link>
		<comments>http://bitplane.net/2010/02/code_swarm/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 21:33:24 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Irrlicht]]></category>
		<category><![CDATA[irrlicht]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=572</guid>
		<description><![CDATA[I&#8217;ve been playing with code_swarm and made this video of the Irrlicht Engine&#8217;s development history: Since the video is generated from the SVN version history it starts at the point where Niko gave hybrid and I SVN access (June 2006), so misses out years of development leading up to the 1.0 release. code_swarm is a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">I&#8217;ve been playing with <a href="http://code.google.com/p/codeswarm">code_swarm</a> and made this video of the Irrlicht Engine&#8217;s development history:</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/v6j5U-pC8YE" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/v6j5U-pC8YE"></embed></object></p>
<p style="text-align: left;">Since the video is generated from the SVN version history it starts at the point where Niko gave hybrid and I SVN access (June 2006), so misses out years of development leading up to the 1.0 release.</p>
<p style="text-align: left;">code_swarm is a really cool tool, one thing which is exciting is the fact it supports MediaWiki. It would be really nice to show a small wiki coming together.. or maybe one day Wikipedia&#8217;s entire changelog (we can dream!)</p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2010/02/code_swarm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My first ascension!</title>
		<link>http://bitplane.net/2010/01/my-first-ascension/</link>
		<comments>http://bitplane.net/2010/01/my-first-ascension/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 00:45:29 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[nethack]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=569</guid>
		<description><![CDATA[After playing nethack for about three years, bitplane the wizard finally ascended to the status of Demigod. Nethack is by far the most difficult yet addictive game I have ever played and although I rate it highly, I don&#8217;t recommend it unless you&#8217;re a glutton for punishment. My three year addiction isn&#8217;t over yet, I [...]]]></description>
			<content:encoded><![CDATA[<p>After playing <a href="http://nethack.org/">nethack</a> for about three years, bitplane the wizard finally <a href="http://alt.org/nethack/userdata/bitplane/dumplog/1262912879.nh343.txt">ascended to the status of Demigod</a>.<br />
Nethack is by far the most difficult yet addictive game I have ever played and although I rate it highly, I don&#8217;t recommend it unless you&#8217;re a glutton for punishment.<br />
My three year addiction isn&#8217;t over yet, I think I&#8217;ll play another role next time I have a spare few.. uh.. days.</p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2010/01/my-first-ascension/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Website update</title>
		<link>http://bitplane.net/2009/12/website-update/</link>
		<comments>http://bitplane.net/2009/12/website-update/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 00:10:53 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[bitplane.net]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=550</guid>
		<description><![CDATA[I&#8217;ve finally got around to editing the Simplish template and adding pages for some of my old software projects. There&#8217;s some links at the top up there, hover over them and you get a nice drop-down menu with a list of projects. The meat of this is JavaScript stolen from another theme and some PHP [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve finally got around to editing the Simplish template and adding pages for some of my old software projects. There&#8217;s some links at the top up there, hover over them and you get a nice drop-down menu with a list of projects.</p>
<p>The meat of this is JavaScript stolen from another theme and some PHP code gratuitously pasted into my header, this isn&#8217;t IP theft, and not just because it&#8217;s the season of sharing! This is what&#8217;s great about free software licenses.</p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2009/12/website-update/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>More Sidewiki Leaks</title>
		<link>http://bitplane.net/2009/12/more-sidewiki-leaks/</link>
		<comments>http://bitplane.net/2009/12/more-sidewiki-leaks/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 01:26:38 +0000</pubDate>
		<dc:creator>Gaz Davidson</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[censorship]]></category>
		<category><![CDATA[freedom of speech]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[sidewiki leaks]]></category>

		<guid isPermaLink="false">http://bitplane.net/?p=377</guid>
		<description><![CDATA[Apparently the British press have been barred from publishing any of Tiger Woods&#8217; sex pictures, and the block somehow extends to Internet news sites. They aren&#8217;t even allowed to mention what the block is about, so I&#8217;ve taken the liberty of filling in the blanks on Google SidewikiLeaks and will update it to include links [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Apparently the British press have been barred from publishing any of Tiger Woods&#8217; sex pictures, and the block somehow extends to <a title="No Tiger Woods -------------, ----------------- for Brits" href="http://www.theregister.co.uk/2009/12/12/tiger_woods_accenture_ads/">Internet news sites</a>. They aren&#8217;t even allowed to mention what the block is about, so I&#8217;ve taken the liberty of filling in the blanks on Google SidewikiLeaks and will update it to include links to pictures when they are inevitably released:</p>
<p style="text-align: left;"><a href="http://bitplane.net/wp-content/uploads/2009/12/SideWikiLeaks.png"><img class="aligncenter size-full wp-image-378" title="Google SideWiki Leaks" src="http://bitplane.net/wp-content/uploads/2009/12/SideWikiLeaks.png" alt="Google SideWiki Leaks" width="517" height="246" /></a></p>
<p style="text-align: left;">It makes you glad that America has freedom of the press, even if Britain doesn&#8217;t.</p>
]]></content:encoded>
			<wfw:commentRss>http://bitplane.net/2009/12/more-sidewiki-leaks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
