<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
  xml:lang="en-gb">
<channel>



<title>xiven.com weblog</title>
<link>http://www.xiven.com/weblog</link>
<description>Tom Pike's Web log.  The incoherent ramblings of a web developer.</description>
<dc:language>en-gb</dc:language>
<dc:creator>Tom Pike (tom.pike@xiven.com)</dc:creator>
<dc:rights>Copyright 2003 Thomas Pike</dc:rights>
<dc:date>2010-03-10T15:01:34Z</dc:date>
<admin:generatorAgent rdf:resource="http://www.xiven.com/omoicore/about" />
<admin:errorReportsTo rdf:resource="mailto:tom.pike@xiven.com" />

<item>
<title>In the morning dew</title>
<link>http://www.xiven.com/weblog/2010/01/11/InTheMorningDew</link>
<comments>http://www.xiven.com/weblog/2010/01/11/InTheMorningDew</comments>
<description>Having so far failed to find much of interest to talk about, I shall instead subject you all to another sampling of music from FictionJunction and Yuki Kajiura Live:      &amp;quot;Here We Stand in the Morning Dew&amp;quot; performed live by Yuriko Kaida, Wakana, Keiko and Kaori of FictionJunction.   Originally sung by Chiba Saeko (and as always, composed by Kajiura), this performance by Yuriko Kaida et al. is an excellent cover of the original.</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2010/01/11/InTheMorningDew</guid>
<content:encoded>
<![CDATA[
<p>Having so far failed to find much of interest to <a href="http://www.xiven.com/weblog/2010/01/02/WelcomeTo2010">talk about</a>, I shall instead subject you all to <a href="http://www.xiven.com/weblog/2009/12/31/Synchronicity">another</a> sampling of music from FictionJunction and Yuki Kajiura Live:</p>
<p>
<object width="425" height="344" type="application/x-shockwave-flash" data="http://www.youtube-nocookie.com/v/EMC4bAdaLM4&amp;hl=en_GB&amp;fs=1">
<param name="movie" value="http://www.youtube-nocookie.com/v/EMC4bAdaLM4&amp;hl=en_GB&amp;fs=1" />
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" />
<a href="http://www.youtube.com/watch?v=EMC4bAdaLM4">&quot;Here We Stand in the Morning Dew&quot; performed live by Yuriko Kaida, Wakana, Keiko and Kaori of FictionJunction</a>.
</object>
</p>
<p>Originally sung by Chiba Saeko (and as always, composed by Kajiura), this performance by Yuriko Kaida et al. is an excellent cover of the original.</p>
]]>
</content:encoded>
<dc:date>2010-01-11T01:54:50Z</dc:date>
</item>

<item>
<title>Welcome to 2010</title>
<link>http://www.xiven.com/weblog/2010/01/02/WelcomeTo2010</link>
<comments>http://www.xiven.com/weblog/2010/01/02/WelcomeTo2010</comments>
<description>Happy New Year everyone!  Let's hope 2010 brings better things than 2009 did. One of my New Year's resolutions is to post on here a bit more frequently.  I guess we'll see how that one turns out.</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2010/01/02/WelcomeTo2010</guid>
<content:encoded>
<![CDATA[
<p>Happy New Year everyone!  Let's hope 2010 brings better things than 2009 did.</p>
<p>One of my New Year's resolutions is to post on here a bit more frequently.  I guess we'll see how that one turns out.</p>
]]>
</content:encoded>
<dc:date>2010-01-02T00:27:27Z</dc:date>
</item>

<item>
<title>Synchronicity</title>
<link>http://www.xiven.com/weblog/2009/12/31/Synchronicity</link>
<comments>http://www.xiven.com/weblog/2009/12/31/Synchronicity</comments>
<description> I finally received the latest FictionJunction/Yuki Kajiura Live DVDs yesterday (imported directly from Japan).  I've become quite the fan of Kajiura Yuki's work, so it was well worth walking 2km in snow and -15°C weather to collect it from the post office. Here's a sample featuring two of my favourite vocalists, Kubota Keiko and Oda Kaori:       &quot;Synchronicity&quot; performed live by Keiko and Kaori of FictionJunction.   (Original &amp;amp; translated lyrics) I was a bit hesitant to embed a Flash video on this website; my dislike of Flash and plugins in general nearly stopped me, but the sheer awesomeness of the content forced me to do it.  Waiting (im)patiently for HTML5 video to take off…</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2009/12/31/Synchronicity</guid>
<content:encoded>
<![CDATA[
<p>
I finally received the latest FictionJunction/Yuki Kajiura Live DVDs yesterday (imported directly <a href="http://www.cdjapan.co.jp/search3.html?r=any&amp;exact=&amp;q=%22Yuki+Kajiura+LIVE%22&amp;order=score&amp;media=dvd&amp;step=10">from Japan</a>).  I've become quite the fan of <a href="http://en.wikipedia.org/wiki/Yuki_Kajiura">Kajiura Yuki</a>'s work, so it was well worth walking 2km in snow and -15°C weather to collect it from the post office.</p>
<p>Here's a sample featuring two of my favourite vocalists, Kubota Keiko and Oda Kaori:
</p>
<p>
<object width="425" height="344" type="application/x-shockwave-flash" data="http://www.youtube-nocookie.com/v/LBkW8HOQv9k&amp;hl=en_GB&amp;fs=1">
<param name="movie" value="http://www.youtube-nocookie.com/v/LBkW8HOQv9k&amp;hl=en_GB&amp;fs=1"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<a href="http://www.youtube.com/watch?v=LBkW8HOQv9k">"Synchronicity" performed live by Keiko and Kaori of FictionJunction</a>.
</object>
</p>
<p>(<a href="http://www.animenfo.com/radio/songinfo.php?id=13276">Original &amp; translated lyrics</a>)</p>
<p>I was a bit hesitant to embed a Flash video on this website; my dislike of Flash and plugins in general nearly stopped me, but the sheer awesomeness of the content forced me to do it.  Waiting (im)patiently for HTML5 video to take off…</p>
]]>
</content:encoded>
<dc:date>2009-12-31T12:11:26Z</dc:date>
</item>

<item>
<title>Down Under</title>
<link>http://www.xiven.com/weblog/2009/12/30/DownUnder</link>
<comments>http://www.xiven.com/weblog/2009/12/30/DownUnder</comments>
<description>I was reading through the book &quot;The Salmon of Doubt&quot; (a collection of writings by Douglas Adams compiled after his death, and a Christmas present from my brother) and came upon this little gem about Australia that I had to share:  …Did I know, she asked, that Brisbane was originally founded as a penal colony for convicts who committed new offences after they had arrived in Australia? I spent a good half hour enjoying this single piece of information.  It was wonderful.  There we British sat, poor grey sodden creatures, huddling under our grey northern sky that seeped like a rancid dish cloth, busy sending those we wished to punish most severely to sit in bright sunlight on the coast of the Tasman Sea at the southern tip of the Great Barrier Reef and maybe do some surfing too. No wonder the Australians have a particular kind of smile that they reserve exclusively for use on the British.  - Douglas Adams, 1992</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2009/12/30/DownUnder</guid>
<content:encoded>
<![CDATA[
<p>I was reading through the book "The Salmon of Doubt" (a collection of writings by Douglas Adams compiled after his death, and a Christmas present from my brother) and came upon this little gem about Australia that I had to share:</p>
<blockquote>
<p>…Did I know, she asked, that Brisbane was originally founded as a penal colony for convicts who committed new offences <em>after they had arrived in Australia?</em></p>
<p>I spent a good half hour enjoying this single piece of information.  It was wonderful.  There we British sat, poor grey sodden creatures, huddling under our grey northern sky that seeped like a rancid dish cloth, busy sending those we wished to punish most severely to sit in bright sunlight on the coast of the Tasman Sea at the southern tip of the Great Barrier Reef and maybe do some surfing too. No wonder the Australians have a particular kind of smile that they reserve exclusively for use on the British.</p>
</blockquote>
<cite><p>- Douglas Adams, 1992</p></cite>
]]>
</content:encoded>
<dc:date>2009-12-30T21:16:44Z</dc:date>
</item>

<item>
<title>May all your Christmases be white</title>
<link>http://www.xiven.com/weblog/2009/12/25/MayAllYourChristmasesBeWhite</link>
<comments>http://www.xiven.com/weblog/2009/12/25/MayAllYourChristmasesBeWhite</comments>
<description>To all those who celebrate it: a very Merry Christmas.  To all those who don't: well, y'all have a good time anyway.</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2009/12/25/MayAllYourChristmasesBeWhite</guid>
<content:encoded>
<![CDATA[
<p>To all those who celebrate it: a very Merry Christmas.  To all those who don't: well, y'all have a good time anyway.</p>
]]>
</content:encoded>
<dc:date>2009-12-25T01:04:16Z</dc:date>
</item>

<item>
<title>Opera Unite</title>
<link>http://www.xiven.com/weblog/2009/06/16/OperaUnite</link>
<comments>http://www.xiven.com/weblog/2009/06/16/OperaUnite</comments>
<description>Well, we've been keeping that little secret for a while now…  (Posting on this blog for the first time in 11 months, alert the media!)</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2009/06/16/OperaUnite</guid>
<content:encoded>
<![CDATA[
<p>Well, we've been keeping <a href="http://unite.opera.com/">that little secret</a> for a while now…</p>

<p><small>(Posting on this blog for the first time in 11 months, alert the media!)</small></p>
]]>
</content:encoded>
<dc:date>2009-06-16T07:41:27Z</dc:date>
</item>

<item>
<title>The Void Wars Continue</title>
<link>http://www.xiven.com/weblog/2008/07/27/TheVoidWarsContinue</link>
<comments>http://www.xiven.com/weblog/2008/07/27/TheVoidWarsContinue</comments>
<description>Kamakaze has been hard at work fixing bugs and making improvements to Voidwars.  Voidwars is a free-to-play space combat strategy game that can be played with only your web browser.  A game of Voidwars takes place in real time and generally lasts a month or so.  You just need to log in a few times per day, check on your empire issue your orders etc. It's a far cry from the basic featured game that it once was.  It's been slowly evolving to a really rather cool game.  Changes to the way research works mean you no longer have to wake up at some silly hour to set the next research going; the tech tree UI lets you define precisely what your scientists should do to advance your technology. Another nice new feature is the ability to speed up construction of buildings and ships by spending money.  This can help you to develop newly acquired planets into useful outposts much faster. Endless tweaking, balancing and revamps of the combat system have made for some very strategic space battles.  A collection of different weapon and armour types, along with different classes of ship hulls means that there is no one winning strategy for building your fleet.  But of course focussing on building just one type of ship will leave you vulnerable to someone who notices this.  A balanced fleet is often best. I'm no expert though, as I've yet to actually win a game… If you've played Voidwars before, now might be the time to give it another go.  And if you haven't, well… what are you waiting for? There's a trial game available (it resets once every week) to get a feel for what the game is like before you commit to a full game.</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2008/07/27/TheVoidWarsContinue</guid>
<content:encoded>
<![CDATA[
<p><a href="http://www.exploding-planet.com/">Kamakaze</a> has been <a href="http://www.exploding-planet.com/weblog/2008/07/26/Voidwars">hard at work fixing bugs and making improvements</a> to <a href="http://www.voidwars.com/">Voidwars</a>.</p>
<p><a href="http://www.voidwars.com/"><object type="image/jpeg" data="/images/vwbanner.jpg" width="468" height="60"></object></a></p>
<p>Voidwars is a free-to-play space combat strategy game that can be played with only your web browser.  A game of Voidwars takes place in real time and generally lasts a month or so.  You just need to log in a few times per day, check on your empire issue your orders etc.</p>
<p>It's a far cry from the basic featured game that it once was.  It's been slowly evolving to a really rather cool game.  Changes to the way research works mean you no longer have to wake up at some silly hour to set the next research going; the tech tree UI lets you define precisely what your scientists should do to advance your technology.</p>
<p>Another nice new feature is the ability to speed up construction of buildings and ships by spending money.  This can help you to develop newly acquired planets into useful outposts much faster.</p>
<p>Endless tweaking, balancing and revamps of the combat system have made for some very strategic space battles.  A collection of different weapon and armour types, along with different classes of ship hulls means that there is no one winning strategy for building your fleet.  But of course focussing on building just one type of ship will leave you vulnerable to someone who notices this.  A balanced fleet is often best.</p>
<p>I'm no expert though, as I've yet to actually win a game…</p>
<p>If you've played Voidwars before, now might be the time to <a href="http://www.voidwars.com/">give it another go</a>.  And if you haven't, well… what are you waiting for?</p>
<p>There's a trial game available (it resets once every week) to get a feel for what the game is like before you commit to a full game.</p>
]]>
</content:encoded>
<dc:date>2008-07-27T13:58:25Z</dc:date>
</item>

<item>
<title>Acidic</title>
<link>http://www.xiven.com/weblog/2008/03/28/Acidic</link>
<comments>http://www.xiven.com/weblog/2008/03/28/Acidic</comments>
<description>Opera Software has now released a public build of Opera that has a pixel-perfect rendering and a 100/100 score in the Acid3 test. As stated in the linked post, it is not an Opera desktop build, but Wingogi/Lingogi, the Windows and Linux versions of the reference builds that we use internally for testing Opera's platform-independent core.  It will be at least some time before you see a normal Opera desktop build that achieves this pass level. Note also that this is still not a complete pass, as &quot;the animation must be smooth&quot;.  Top men are working on this.  Top men. Along with Safari's recent similar announcement, this impressive progress by both parties is great news for web browser interoperability.</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2008/03/28/Acidic</guid>
<content:encoded>
<![CDATA[
<p><a href="http://www.opera.com/">Opera Software</a> has now <a href="http://labs.opera.com/news/2008/03/28/">released a public build</a> of Opera that has a pixel-perfect rendering and a 100/100 score in the <a href="http://acid3.acidtests.org/">Acid3 test</a>.</p>
<p>As stated in the linked post, it is not an Opera desktop build, but Wingogi/Lingogi, the Windows and Linux versions of the reference builds that we use internally for testing Opera's platform-independent core.  It will be at least some time before you see a normal Opera desktop build that achieves this pass level.</p>
<p>Note also that this is still not a complete pass, as "the animation must be smooth".  Top men are working on this.  Top men.</p>
<p>Along with Safari's <a href="http://webkit.org/blog/173/webkit-achieves-acid3-100100-in-public-build/">recent similar announcement</a>, this impressive progress by both parties is great news for web browser interoperability.</p>
]]>
</content:encoded>
<dc:date>2008-03-28T13:37:29Z</dc:date>
</item>

<item>
<title>Opera on Acid</title>
<link>http://www.xiven.com/weblog/2008/03/27/OperaOnAcid</link>
<comments>http://www.xiven.com/weblog/2008/03/27/OperaOnAcid</comments>
<description>Opera internal builds have now reached a 100/100 rating on the Acid3 test! Congratulations to the core developers, QA, and everyone else who's been working hard on this. No publicly available build passes yet (so for now you'll just have to take our word for it), and there are still some layout issues to correct*, but Opera plans to a release technical preview version of a working build on labs.opera.com within the next week or so. Webkit is close behind on 99/100 currently; they may well succeed in releasing a passing public build very shortly too. * Remember that 100/100 does not mean that the browser passes the test fully, the other two requirements are that the animation has to be smooth and the final page has to look exactly, pixel for pixel, like the reference rendering.</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2008/03/27/OperaOnAcid</guid>
<content:encoded>
<![CDATA[
<p><a href="http://www.opera.com/">Opera</a> internal builds have now <a href="http://my.opera.com/desktopteam/blog/2008/03/26/opera-and-the-acid3-test">reached a 100/100 rating on the Acid3 test</a>!</p>
<p>Congratulations to the core developers, QA, and everyone else who's been working hard on this.</p>
<p>No publicly available build passes yet (so for now you'll just have to take our word for it), and there are still some layout issues to correct*, but Opera plans to a release technical preview version of a working build on <a href="http://labs.opera.com/">labs.opera.com</a> within the next week or so.</p>
<p>Webkit is close behind on 99/100 currently; they may well succeed in releasing a passing public build very shortly too.</p>
<p>* Remember that 100/100 does not mean that the browser passes the test fully, the other two requirements are that the animation has to be smooth and the final page has to look exactly, pixel for pixel, like the reference rendering.</p>
]]>
</content:encoded>
<dc:date>2008-03-27T02:18:06Z</dc:date>
</item>

<item>
<title>Learning Curve</title>
<link>http://www.xiven.com/weblog/2008/03/15/LearningCurve</link>
<comments>http://www.xiven.com/weblog/2008/03/15/LearningCurve</comments>
<description>Some lessons have to be learned the hard way.  Today my lesson was in treating input unicode data carefully. Last night I received an automated e-mail from my web server's control panel warning me that memory usage had been at 80% for the past 30 minutes.  Somewhat worrying, so I looked at where the memory was going.  The vast majority seemed to be going to Apache threads, and there seemed to be many more threads there than usual.  Not really having time to look into it in-depth, and knowing that the server had been running for a long time, I restarted Apache and left it till tomorrow. Next day, things are still working fine, and I go in to work.  Checking IRC when I get in, I find not one but two messages quoting me the following message from #whatwg on Freenode: [22:02] &amp;lt;Philip`&amp;gt; The error message on http://www.xiven.com/weblog/search/results?q=%00 seems quite peculiar The error message in question was an out-of-memory error from PHP in my XML parsing script.  The connection with the odd memory events of last night was made... At first I thought it was just a case of a problem with null characters (%00 is the URL-encoded hex code for null, and nulls can often be problematic).  But %00 (or U+0000) was not the only thing that would cause this crash: other characters included %ef%bf%bf (U+FFFF) and %ef%bf%be (U+FFFE), and invalid UTF-8 byte sequences were also causing problems.  Additionally, ASCII control characters such as %01 (U+0001) to %08 (U+0008) etc, although not causing the out-of-memory error, would make the XML generated by the website be not well-formed, giving the infamous &quot;Yellow Screen of Death&quot; on Gecko browsers. The following PHP code was somewhat hastily added to the main script for the website: [code][/code] Hopefully that covers everything (checked various docs online as to what characters in XML should be excluded).  I haven't had the chance yet to look more in-depth as to why PHP was consuming all memory and apparently crashing Apache threads on certain characters; whether the exact cause is in my code or in PHP's XML parser itself, I'm not sure yet.  But for now at least, sanitizing the UTF-8 characters of all input variables should keep things relatively safe.  I have little doubt though that there must be a better way…</description>
<guid isPermaLink="true">http://www.xiven.com/weblog/2008/03/15/LearningCurve</guid>
<content:encoded>
<![CDATA[
<p>Some lessons have to be learned the hard way.  Today my lesson was in treating input unicode data carefully.</p>
<p>Last night I received an automated e-mail from my web server's control panel warning me that memory usage had been at 80% for the past 30 minutes.  Somewhat worrying, so I looked at where the memory was going.  The vast majority seemed to be going to Apache threads, and there seemed to be many more threads there than usual.  Not really having time to look into it in-depth, and knowing that the server had been running for a long time, I restarted Apache and left it till tomorrow.</p>
<p>Next day, things are still working fine, and I go in to work.  Checking <acronym title="Internet Relay Chat">IRC</acronym> when I get in, I find not one but two messages quoting me the following message from #whatwg on <a href="http://freenode.net/">Freenode:</a></p>
<blockquote cite="http://krijnhoetmer.nl/irc-logs/whatwg/20080313#l-271"><pre>[22:02] &lt;Philip`&gt; The error message on http://www.xiven.com/weblog/search/results?q=%00 seems quite peculiar</pre></blockquote>
<p>The error message in question was an out-of-memory error from <acronym title="PHP Hypertext Preprocessor">PHP</acronym> in my <acronym title="eXtensible Markup Language">XML</acronym> parsing script.  The connection with the odd memory events of last night was made...</p>
<p>At first I thought it was just a case of a problem with null characters (%00 is the <acronym title="Uniform Resource Locator">URL</acronym>-encoded hex code for null, and nulls can often be problematic).  But %00 (or U+0000) was not the only thing that would cause this crash: other characters included %ef%bf%bf (U+FFFF) and %ef%bf%be (U+FFFE), and invalid <acronym title="Unicode Transformation Format">UTF</acronym>-8 byte sequences were also causing problems.  Additionally, <acronym title="American Standard Code for International Interchange">ASCII</acronym> control characters such as %01 (U+0001) to %08 (U+0008) etc, although not causing the out-of-memory error, would make the XML generated by the website be not well-formed, giving the infamous "Yellow Screen of Death" on Gecko browsers.</p>
<p>The following PHP code was somewhat hastily added to the main script for the website:</p>
[code]<?php
array_walk_recursive($_GET, 'stripInvalid');
array_walk_recursive($_POST, 'stripInvalid');

function stripInvalid(&$v, $k) {
        // Strip invalid UTF-8 byte sequences
        $v = mb_convert_encoding(mb_convert_encoding($v, 'UTF-16', 'UTF-8'), 'UTF-8', 'UTF-16');
        
        // Remove various characters not allowed in XML
        $v = preg_replace('/[\x{0000}-\x{0008}]/u', '', $v); // ASCII control characters
        $v = preg_replace('/[\x{000B}\x{000C}]/u', '', $v); // Vertical tab & Form feed
        $v = preg_replace('/[\x{000E}-\x{001F}]/u', '', $v); // ASCII control characters
        $v = preg_replace('/[\x{007F}-\x{009F}]/u', '', $v); // ASCII control characters
        $v = preg_replace('/[\x{2190}-\x{2BFF}]/u', '?', $v);
        $v = preg_replace('/[\x{D800}-\x{DFFF}]/u', '?', $v);
        $v = preg_replace('/[\x{FDD0}-\x{FDEF}]/u', '?', $v);
        $v = preg_replace('/[\x{FFFE}\x{FFFF}]/u', '?', $v);
        $v = preg_replace('/[\x{1FFFE}\x{1FFFF}\x{2FFFE}\x{2FFFF}\x{3FFFE}\x{3FFFF}]/u', '?', $v);
        $v = preg_replace('/[\x{4FFFE}\x{4FFFF}\x{5FFFE}\x{5FFFF}\x{6FFFE}\x{6FFFF}]/u', '?', $v);
        $v = preg_replace('/[\x{7FFFE}\x{7FFFF}\x{8FFFE}\x{8FFFF}\x{9FFFE}\x{9FFFF}]/u', '?', $v);
        $v = preg_replace('/[\x{AFFFE}\x{AFFFF}\x{BFFFE}\x{BFFFF}\x{CFFFE}\x{CFFFF}]/u', '?', $v);
        $v = preg_replace('/[\x{DFFFE}\x{DFFFF}\x{EFFFE}\x{EFFFF}\x{FFFFE}\x{FFFFF}]/u', '?', $v);
        $v = preg_replace('/[\x{10FFFE}\x{10FFFF}]/u', '?', $v);
}
?>[/code]
<p>Hopefully that covers everything (checked various docs online as to what characters in XML should be excluded).  I haven't had the chance yet to look more in-depth as to why PHP was consuming all memory and apparently crashing Apache threads on certain characters; whether the exact cause is in my code or in PHP's XML parser itself, I'm not sure yet.  But for now at least, sanitizing the UTF-8 characters of all input variables should keep things relatively safe.  I have little doubt though that there must be a better way…</p>
]]>
</content:encoded>
<dc:date>2008-03-15T02:20:24Z</dc:date>
</item>


</channel>
</rss>


