<?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>HiddenTao &#187; Code</title>
	<atom:link href="http://www.hiddentao.com/archives/tag/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hiddentao.com</link>
	<description>software, websites, mobile, technology</description>
	<lastBuildDate>Mon, 30 Aug 2010 21:08:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>CodeIgniter utilities</title>
		<link>http://www.hiddentao.com/code/codeigniter-utilities/</link>
		<comments>http://www.hiddentao.com/code/codeigniter-utilities/#comments</comments>
		<pubDate>Mon, 17 May 2010 10:14:36 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?page_id=889</guid>
		<description><![CDATA[This page contains some useful plugins, libraries and helpers I&#8217;ve written for the CodeIgniter MVC framework. All code is licensed under GPL 3. MY_Session &#8211; A custom version of the CodeIgniter session library. This incorporates some fixes and improvements contributed by users on the CodeIgniter forum as well as some of my own ideas. Specifically [...]]]></description>
			<content:encoded><![CDATA[<p>This page contains some useful plugins, libraries and helpers I&#8217;ve written for the <a href="http://codeigniter.com/" class="link-external">CodeIgniter</a> MVC framework. All code is licensed under GPL 3.</p>

<ul>
<li><a href="http://www.hiddentao.com/wp-content/uploads/2010/05/MY_Session.zip" class="lizip"><code>MY_Session</code></a> &#8211; A custom version of the CodeIgniter session library. This incorporates some fixes and improvements contributed by users on the CodeIgniter forum as well as some of my own ideas. Specifically the following:

<ul>
<li>A new configuration value &#8211; <code>sess_persistent_cookie</code> &#8211; is used to set whether cookies should persist across browser instances. This value can overridden on a per-session basis.</li>
<li>The session id can be updated at any point (even if the normal update interval hasn&#8217;t elapsed). This is recommended just after a user has logged in to avoid session-hijacking attacks.</li>
<li>Session expiration handling is improved. Setting expiry time to 0 will result in a non-expiring cookie (unless of course <code>sess_persistent_cookie</code> is set to FALSE).</li>
</ul></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/code/codeigniter-utilities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bulk Stock Updater</title>
		<link>http://www.hiddentao.com/code/drupal-bulk-stock-updater/</link>
		<comments>http://www.hiddentao.com/code/drupal-bulk-stock-updater/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 14:29:53 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Bulk Stock Updater]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?page_id=852</guid>
		<description><![CDATA[Bulk Stock Updater is a Ubercart extension module which lets you easily bulk-edit stock levels for all your products. It displays a page similar to the uc_stock module&#8217;s Stock reports page. This module depends on uc_stock 6.x-2.0+. Drupal.org project page: link. Github: link License: GPL 2. Current version: 6.x-1.0 Skip to: Installation Usage e Installation [...]]]></description>
			<content:encoded><![CDATA[<p>Bulk Stock Updater is a <a href="http://www.ubercart.org/" class="link-external">Ubercart</a> extension module which lets you easily bulk-edit stock levels for all your products. It displays a page similar to the <em>uc_stock</em> module&#8217;s <em>Stock reports</em> page.</p>

<p>This module depends on <strong>uc_stock 6.x-2.0+</strong>.</p>

<p>Drupal.org project page: <a href="http://www.drupal.org/project/uc_bulk_stock_updater" title="Goto the drupal.org project page for this module" class="link-external">link</a>.</p>

<p>Github: <a href="http://github.com/hiddentao/uc_bulk_stock_updater" class="link-external">link</a></p>

<p>License: <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt" title="GNU General Public License" class="link-external">GPL 2</a>.</p>

<p>Current version: 6.x-1.0</p>

<p>Skip to:
<span class="spaced_out"><a href="#installation" class="liinternal">Installation</a></span>
<span class="spaced_out"><a href="#usage" class="liinternal">Usage</a></span>
e</p>

<h2 id="installation">Installation</h2>

<ol>
<li><a href="http://www.drupal.org/project/uc_bulk_stock_updater" class="link-external">Download the latest version from the Drupal.org project page</a>.</li>
<li>Unzip it into your <code>sites/all/modules</code> folder such that the module is at <code>sites/all/modules/uc_bulk_stock_updater/...</code>.</li>
<li>Goto <em>Site building > Modules > List</em> and enable the <em>Bulk Stock Updater</em> module.</li>
<li>All done!</li>
</ol>

<h2 id="usage">Usage</h2>

<p>Once the module is enabled ensure you assign the <em>bulk update stock</em> permission to the appropriate user roles.</p>

<p>Goto <em>Store administration > Stock > Bulk update</em> and you will see a paged list of your products ordered by SKU. At the bottom is a link to view all the products on one page if you wish.</p>

<p>You will notice that the stock value for each product is displayed as an input field. Once you change the value in an input field it will be automatically submitted to the server via AJAX (you will see a progress indicator while this happens). If any errors occur the field value will be reset to what it was originally and an error message will be shown.</p>

<p>You can refer to the CSS file in the module&#8217;s folder to find out which styles need to be overridden in order to customize the look and feel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/code/drupal-bulk-stock-updater/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Three Words</title>
		<link>http://www.hiddentao.com/archives/2010/03/31/my-three-words/</link>
		<comments>http://www.hiddentao.com/archives/2010/03/31/my-three-words/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 09:53:34 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[Miura]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MyThreeWords]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?p=782</guid>
		<description><![CDATA[I&#8217;m currently doing some work for Miura, a digital design agency based in London. A month ago the creative director came up with a silly but fun idea: &#8220;how about a page where different people can come in and type in 3 words a time, building up a short story?&#8221;. I told him I could [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently doing some work for <a href="http://miura.gi/" class="link-external">Miura</a>, a digital design agency based in London. A month ago the creative director came up with a silly but fun idea: &#8220;how about a page where different people can come in and type in 3 words a time, building up a short story?&#8221;. I told him I could probably knock up a prototype within an hour though I didn&#8217;t think he&#8217;d want me to actually do it!
<span id="more-782"></span></p>

<p>So I wrote a cheap and nasty PHP script which stored the input in a local CSV file. Once the page loaded it would fetch the existing story data via AJAX (using <a href="http://jquery.org/" class="link-external">jQuery</a>) and the user would submit new data using a simple form at the bottom. We had a quick play around with this in the office and it was quite amusing. Because the AJAX fetch would run only once every 5 seconds you&#8217;d often finish inputting your 3 words to continue the story only to find that someone else had already beaten you to the punch. So the story ended up not making much sense but I think this actually made it funnier, especially given how quickly everything disintegrated into a discussion about pooh and other lowbrow stuff (tells you a lot about us, doesn&#8217;t it?).</p>

<p>After this successful &#8220;pre-alpha&#8221; in the office we decided to build it properly and make it public &#8211; <a href="http://mythreewords.com/" class="link-external">mythreewords.com</a>. Here&#8217;s how it works. The active story is always at the top. You can enter 3 words at a time, no more no less. And you can&#8217;t have URLs or HTML tags in your words. If you end your last word with a <code>?</code>, <code>.</code> or <code>!</code> then you complete the active story and it gets shifted below. A new story is begun with the first 3 words auto-generated by the system.</p>

<div class="img">
<img src="http://farm5.static.flickr.com/4004/4478710598_e72751dd5f_o.jpg" alt="Overview of MyThreeWords" />
</div>

<p>Completed stories have a button next to them which allows you to tweet them through your Twitter account (if you have one). Since tweets have a 140-character limit we truncate the story if necessary and insert a link back to the full version of the story using a short alias domain (<a href="http://m3w.in/" class="link-external">m3w.in</a>):</p>

<div class="img">
<img src="http://farm3.static.flickr.com/2746/4478084063_be8c1d8c2a_o.jpg" alt="Tweeting a MyThreeWords story" />
</div>

<p>For the public release I rewrote the original codebase using <a href="http://www.kohanaphp.com/" class="link-external">Kohana 3</a> for the 
framework and MySQL for storing the data. I investigated <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29" rel="nofollow" class="liwikipedia">AJAX Comet</a> techniques and settled on using long-polling to simulate data push from the server to the client. This means is that as soon as someone else adds their three words all the other clients are almost immediately updated.</p>

<p>To further increase performance the system does not write anything to the database until the active story has been completed. Until that point everything is stored in a <a href="http://memcached.org/" class="link-external">memcached</a> instance running on the same machine. Once the active story is completed by a user it gets marked as such and a new active story gets created and cached. A cron script running every 60 seconds then processes all completed stories by inserting them into the database (and subsequently removing them from memcached).</p>

<p>I also had a go at providing notification when other users are typing. How it works: when the page loads it generates a unique id. When the user starts entering words into the input field an AJAX call is made to the server which this unique id. The server then stores all such submitted unique ids together in a an array in memcached. Changes to this array are pushed to all clients (using the Comet technique mentioned above) who then indicate how many users are currently typing:</p>

<div class="img">
<img src="http://farm5.static.flickr.com/4043/4478118047_f2be451f7e_o.png" alt="See when others are typing" />
</div>

<p>Only upto 5 unique ids are stored on the server so that the array search complexity never exceeds <a href="en.wikipedia.org/wiki/Big_O_notation" rel="nofollow" class="liinternal">O(5)</a> (clients show this as <em>4+ typing</em>). The array data is automatically cleared after 5 seconds of no change to avoid stale data. And clients don&#8217;t inform the server that they&#8217;re typing more frequently than once every 5 seconds.</p>

<p>If you want to understand the internal workings of the site better use <a href="https://addons.mozilla.org/en-US/firefox/addon/1843" class="link-external">Firebug</a> (or your preferred tool) to eavesdrop on the AJAX calls.</p>

<p>So that&#8217;s the sum total of the site for now. Implementing it was a lot of fun. I hope you enjoy it too <img src='http://www.hiddentao.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p><a href="http://mythreewords.com/" class="link-external">MyThreeWords.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/archives/2010/03/31/my-three-words/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3D demo</title>
		<link>http://www.hiddentao.com/archives/2010/01/20/3d-demo/</link>
		<comments>http://www.hiddentao.com/archives/2010/01/20/3d-demo/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 12:23:24 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?p=726</guid>
		<description><![CDATA[A while back I decided to write a simple 3D graphics engine in Java after being inspired by Daniel Tebbutt&#8217;s Bedlam solver. Essentially I wanted to show a cube like his but with the added ability to split it apart so that you could see how the pieces fit together. As I got going with [...]]]></description>
			<content:encoded><![CDATA[<p>A while back I decided to write a simple 3D graphics engine in Java after being inspired by <a href="http://danieltebbutt.com/bedlam.html" class="link-external">Daniel Tebbutt&#8217;s Bedlam solver</a>. Essentially I wanted to show a cube like his but with the added ability to split it apart so that you could see how the pieces fit together. As I got going with this I was enjoying it so much I put aside the puzzle algorithm and just started adding more 3D rendering features.</p>

<p>Fast forward many hours of coding and here is a simple demo (click the image to launch it):
<span id="more-726"></span></p>

<p><a href="#" class="imglink" title="Launch demo (requires Java 1.5+)" onclick="window.open('http://www.hiddentao.com/downloads/kai/applet.html','_blank','status=0,toolbar=0,location=0,menubar=0,scrollbars=0,directories=0,resizable=0,width=670,height=500')">
<img src="http://farm3.static.flickr.com/2770/4289736971_b0f35bc880.jpg" />
</a></p>

<p><em>The demo consists of 3 separate scenes. You can switch between by simply clicking in the window. Further mouse and keyboard controls are listed in the demo window itself. Debug output from the demo is viewable in the Java applet console</em></p>

<p><strong>Architecture</strong></p>

<p>I&#8217;ve tried to use good object-oriented programming as much as possible throughout. For example, each scene is represented as a hierarchical scenegraph and a <a href="http://en.wikipedia.org/wiki/Visitor_pattern" rel="nofollow" class="liwikipedia">Visitor</a> model to perform rendering. The renderer itself is obtained from a <a href="http://en.wikipedia.org/wiki/Factory_pattern" rel="nofollow" class="liwikipedia">Factory</a> which allows for different types of renderers (OpenGL, DirectX, Software, etc.). As is standard practice with scenegraphs, a matrix stack is used to allow for model-level transformations independent to world-level transformations.</p>

<p>At the moment the only available renderer is software-based. But the architecture allows for OpenGL or DirectX-based rendering to be added in future. I use the <code>Graphics2D.drawLine()</code> API call in Java to render the pixels. Everything else (e.g. z-buffer) is manually implemented. The engine supports wireframe-mode rendering and backface culling. There is a single source light in the scene whose direction can be modified (in the demo it&#8217;s always pointing forwards from the camera). The rasterizer currently uses flat shading &#8211; next would be to add <a href="http://en.wikipedia.org/wiki/Gouraud_shading" rel="nofollow" class="liwikipedia">Gouraud and Phong</a>, not to mention texturing.</p>

<p>3D rotation on world objects are performed using matrix multiplication. The camera is rotated using Quaternions since this made it simpler to use the <a href="http://www.devmaster.net/articles/viewing-systems/" class="link-external">UVN</a> camera model. The third scene in the demo above is animated; this is accomplished using a simple timer thread using which any number of events can be scheduled for execution at given time intervals.</p>

<p><strong>Performance</strong></p>

<p>When programming in Java it&#8217;s easy to not worry about memory usage and allocations since the garbage collector handles the freeing up of memory. But for graphics engines every allocation or garbage collection run will impact performance. So from the outset I&#8217;ve tried to pre-allocate memory where possible, by constructing temporary vectors and matrices for use during calculations later on. Thus, the vast majority of the matrix and vector multiplication which take place in the render loop don&#8217;t allocate any new memory when doing so.</p>

<p>However, when I finally started rendering things I found that the performance bottleneck was actually the rasterizer. The more polygons (triangles) that needed to be drawn and the larger they appeared on screen, the longer each frame took to render. Perhaps I can improve this by optimising the polygon order (e.g. render from farthest to nearest) and improving the raster algorithms. Eventually I want to switch to using OpenGL as the rendering system but since I&#8217;ve come so far with the software renderer it would be nice to see if I can improve it a bit more first.</p>

<p><strong>Download</strong></p>

<p>The engine code is licensed under the LGPL and is available <a href="http://www.hiddentao.com/code/3d-graphics/" class="liinternal">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/archives/2010/01/20/3d-demo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simple 3D graphics engine</title>
		<link>http://www.hiddentao.com/code/3d-graphics/</link>
		<comments>http://www.hiddentao.com/code/3d-graphics/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 09:22:48 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?page_id=717</guid>
		<description><![CDATA[This is a simple 3D graphics engine I&#8217;ve written in Java 1.5 using the Swing windowing toolkit and parts of the Java2D API. It supports the following features: Hierarchical scenegraph including Mesh, Rotation, Translation and Light nodes. Triangle primitives with helpers for building cubes UVN camera with orthographic or perspective projection Timer scheduler for animating [...]]]></description>
			<content:encoded><![CDATA[<p>This is a simple 3D graphics engine I&#8217;ve written in Java 1.5 using the Swing windowing toolkit and parts of the Java2D API. It supports the following features:</p>

<ul>
<li>Hierarchical scenegraph including <code>Mesh</code>, <code>Rotation</code>, <code>Translation</code> and <code>Light</code> nodes.</li>
<li>Triangle primitives with helpers for building cubes</li>
<li>UVN camera with orthographic or perspective projection</li>
<li>Timer scheduler for animating the scene.</li>
<li>Rendering system abstraction

<ul>
<li>Renderers follow <code>Visitor</code> design pattern</li>
</ul></li>
<li>Software-based renderer

<ul>
<li>Wireframe/flat shading</li>
<li>Simple directional light</li>
<li>Backface culling</li>
<li>Pixel-level z-buffer</li>
</ul></li>
<li>Customizable interaction (i.e. user input) handlers</li>
</ul>

<p>More information can be found in the <a href="http://www.hiddentao.com/archives/2010/01/20/3d-demo/" class="liinternal">original blog posting</a>.</p>

<h2 id="demo">Demo</h2>

<p><button onclick="window.open('http://www.hiddentao.com/downloads/kai/applet.html','_blank','status=0,toolbar=0,location=0,menubar=0,scrollbars=0,directories=0,resizable=0,width=670,height=500')">Launch demo (requires Java 1.5+)</button></p>

<h2 id="download">Download</h2>

<p>The source code for this engine is licensed under the <a href="http://www.gnu.org/copyleft/lesser.html" title="GNU Lesser General Public License" class="link-external">LGPL 3</a>.</p>

<p><a href="http://www.hiddentao.com/downloads/kai-engine.zip" class="lizip">Download source code</a>.</p>

<p>Build instructions can be found in <code>README.txt</code> in the download package.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/code/3d-graphics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Page Tagger 0.3.5 and Common-Utils</title>
		<link>http://www.hiddentao.com/archives/2010/01/16/page-tagger-0-3-5-and-common-utils/</link>
		<comments>http://www.hiddentao.com/archives/2010/01/16/page-tagger-0-3-5-and-common-utils/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 14:46:27 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Common-Utils]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Page Tagger]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?p=702</guid>
		<description><![CDATA[A new version of Page Tagger is now available. Grab it now from here or the WordPress plugin repository. Also, I&#8217;ve put up a few Java classes I wrote a while back as a small library called Common-Utils. Included within are the following: ArrayUtils &#8211; Utility methods to fill an array with a given value [...]]]></description>
			<content:encoded><![CDATA[<p>A new version of <a href="http://www.hiddentao.com/code/wordpress-page-tagger-plugin/" class="liinternal">Page Tagger</a> is now available. Grab it now from <a href="http://www.hiddentao.com/code/wordpress-page-tagger-plugin/" class="liinternal">here</a> or the <a href="http://wordpress.org/extend/plugins/page-tagger/" class="liwp">WordPress plugin repository</a>.</p>

<p>Also, I&#8217;ve put up a few Java classes I wrote a while back as a small library called <a href="http://www.hiddentao.com/code/common-utils/" title="Common-Utils" class="liinternal">Common-Utils</a>. Included within are the following:</p>

<ul>
<li><code>ArrayUtils</code> &#8211; Utility methods to fill an array with a given value or check if it contains a given value.</li>
<li><code>DynamicArray</code> &#8211; A resizable &#8220;static&#8221; array for when you don&#8217;t quite need the full flexibility of <code>ArrayList</code>.</li>
<li><code>NonMutableIterator</code> &#8211; Wraps around a normal <code>Iterator</code> and disables use of the <code>remove</code> method.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/archives/2010/01/16/page-tagger-0-3-5-and-common-utils/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Common-Utils</title>
		<link>http://www.hiddentao.com/code/common-utils/</link>
		<comments>http://www.hiddentao.com/code/common-utils/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 21:30:10 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Common-Utils]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?page_id=689</guid>
		<description><![CDATA[Common-Utils is a small of collection of Java utility classes I ended up writing for use in various projects. The code runs on Java 5 or above. ArrayUtils &#8211; Utility methods to fill an array with a given value or check if it contains a given value. NonMutableIterator &#8211; Wraps around a normal Iterator and [...]]]></description>
			<content:encoded><![CDATA[<p>Common-Utils is a small of collection of Java utility classes I ended up writing for use in various projects. The code runs on Java 5 or above.</p>

<ul>
<li><code>ArrayUtils</code> &#8211; Utility methods to fill an array with a given value or check if it contains a given value.</li>
<li><code>NonMutableIterator</code> &#8211; Wraps around a normal <code>Iterator</code> and disables use of the <code>remove</code> method.</li>
<li><code>JAbstractApplet</code> and <code>JAppletSimulator</code> &#8211; Classes for running applets as standalone applications.</li>
</ul>

<p>License: <a href="http://www.gnu.org/copyleft/lesser.html" title="GNU Lesser General Public License" class="link-external">LGPL 3</a>.</p>

<p>Current version: 0.1</p>

<h2 id="download">Download</h2>

<p><a href="http://www.hiddentao.com/downloads/common-utils-0.1.zip" class="lizip">Download source code and documentation</a>.</p>

<h2 id="changelog">Changelog</h2>

<ul>
<li>0.1 (Jan 15, 2010)

<ul>
<li>Initial release.</li>
</ul></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/code/common-utils/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Page Tagger 0.3.4</title>
		<link>http://www.hiddentao.com/archives/2009/12/20/page-tagger-0-3-4/</link>
		<comments>http://www.hiddentao.com/archives/2009/12/20/page-tagger-0-3-4/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 12:44:48 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Page Tagger]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?p=665</guid>
		<description><![CDATA[This is a new version of Page Tagger that has been tested to work with WordPress 2.9. Grab it now from here or the WordPress plugin repository.]]></description>
			<content:encoded><![CDATA[<p>This is a new version of <a href="http://www.hiddentao.com/code/wordpress-page-tagger-plugin/" class="liinternal">Page Tagger</a> that has been tested to work with WordPress 2.9.</p>

<p>Grab it now from <a href="http://www.hiddentao.com/code/wordpress-page-tagger-plugin/" class="liinternal">here</a> or the <a href="http://wordpress.org/extend/plugins/page-tagger/" class="liwp">WordPress plugin repository</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/archives/2009/12/20/page-tagger-0-3-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Copenhagen target converter</title>
		<link>http://www.hiddentao.com/archives/2009/11/27/copenhagen-target-converter/</link>
		<comments>http://www.hiddentao.com/archives/2009/11/27/copenhagen-target-converter/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 13:38:46 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Climate change]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Sandbag]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?p=646</guid>
		<description><![CDATA[As we near the 15th Annual UNFCCC conference in Copenhagen more and more countries are pledging emissions cuts. But the devil is always in the details, as a recent article in the Guardian pointed out. For instance, Russia recently announced that it would cut its greenhouse gas emissions by 25% on 1990 levels. In other [...]]]></description>
			<content:encoded><![CDATA[<p>As we near the <a href="http://en.cop15.dk/" title="COP15" class="link-external">15th Annual UNFCCC conference</a> in Copenhagen more and more countries are pledging emissions cuts. But the devil is always in the details, as a <a href="http://www.guardian.co.uk/environment/cif-green/2009/nov/26/us-china-targets-mean" class="link-external">recent article in the Guardian</a> pointed out.</p>

<p>For instance, <a href="http://www.bloomberg.com/apps/news?pid=20601130&amp;sid=a0vyS5jDWR0M" class="link-external">Russia recently announced</a> that it would cut its greenhouse gas emissions by 25% on 1990 levels. <span id="more-646"></span>In other words in by the year 2020 Russia&#8217;s yearly emissions (measured in tonnes of CO<subscript>2</subscript>) will be at 75% of what they were in 1990. This sounds good on paper since we generally assume that yearly emissions have increased since 1990 for all countries. But the collapse of the Soviet economy in 1991 led to massive fall in emissions, meaning that a 25% cut on Russia&#8217;s 1990 emissions levels actually equates to a 25.6% increase on Russia&#8217;s 2007 emissions levels. In other words, they&#8217;re allowing themselves to increase their pollution levels!</p>

<p>In order to help other people make sense of the emission targets being pledged by the various countries, over the last couple of days I&#8217;ve helped to develop a &#8220;target converter&#8221; for <a href="http://sandbag.org.uk/" class="link-external">Sandbag</a>, a non-profit climate change campaign.</p>

<p>It takes an emissions target and a baseline year for a given country and then calculates what the equivalent percentages are for all the other years for which emissions data is available for that country (data source is <a href="http://unfccc.int/" class="link-external">UNFCCC</a>). So for instance, for Russia&#8217;s target of a 25% reduction on 1990 levels we get:</p>

<p><a class="imglink" rel="lightbox" href="http://farm3.static.flickr.com/2550/4137704821_b20b41d425_o.png" title="Russia's target in context (note that the 2020 emission level is a prediction)">
<img src="http://farm3.static.flickr.com/2550/4137704821_5e1bac4dfd.jpg" alt="Russia's target in context" />
</a></p>

<p>You can find the target converter at <a href="http://sandbag.org.uk/targetconverter" title="Sandbag target converter" class="link-external">http://sandbag.org.uk/targetconverter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/archives/2009/11/27/copenhagen-target-converter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Page Tagger 0.3.2</title>
		<link>http://www.hiddentao.com/archives/2009/11/18/page-tagger-0-3-2/</link>
		<comments>http://www.hiddentao.com/archives/2009/11/18/page-tagger-0-3-2/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 21:18:07 +0000</pubDate>
		<dc:creator>ram</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Page Tagger]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.hiddentao.com/?p=633</guid>
		<description><![CDATA[This is a new version of Page Tagger that has been tested to work with WordPress 2.8.6. Some users were reporting that the tag editing interface was unusable when used in conjunction with certain other plugins (e.g. the multi-level navigation plugin). Other users were having trouble getting the plugin to work in the latest version [...]]]></description>
			<content:encoded><![CDATA[<p>This is a new version of <a href="http://www.hiddentao.com/code/wordpress-page-tagger-plugin/" class="liinternal">Page Tagger</a> that has been tested to work with WordPress 2.8.6.</p>

<p>Some users were reporting that the tag editing interface was unusable when used in conjunction with certain other plugins (e.g. the multi-level navigation plugin). Other users were having trouble getting the plugin to work in the latest version of WordPress (2.8.6). This release (hopefully) fixes these issues.</p>

<p>Grab it now from <a href="http://www.hiddentao.com/code/wordpress-page-tagger-plugin/" class="liinternal">here</a> or the <a href="http://wordpress.org/extend/plugins/page-tagger/" class="liwp">WordPress plugin repository</a>.</p>

<p><strong>Update (Nov20):</strong> The plugin has been updated to 0.3.3 now. This fixes a callback bug which was preventing the plugin from initialising on certain installations.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hiddentao.com/archives/2009/11/18/page-tagger-0-3-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
