<?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>braindump</title>
	<atom:link href="http://braindump.3void.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://braindump.3void.com</link>
	<description></description>
	<lastBuildDate>Wed, 24 Aug 2011 11:00:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Small Java Note</title>
		<link>http://braindump.3void.com/?p=87</link>
		<comments>http://braindump.3void.com/?p=87#comments</comments>
		<pubDate>Wed, 24 Aug 2011 11:00:49 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[index counter]]></category>

		<guid isPermaLink="false">http://braindump.3void.com/?p=87</guid>
		<description><![CDATA[When running a program with a long loop it can be incredibly useful to have some sort of index counter or process indicator. Even if just as an assurance that the program hasn&#8217;t got stuck in an unending loop. Using something like: new Thread(new Runnable() {&#8195;&#8195;public void run() {&#8195;&#8195;&#8195;&#8195;int requiredWidth = Integer.toString([EndIndex]).length();&#8195;&#8195;&#8195;&#8195;while(runningDescriptors){&#8195;&#8195;&#8195;&#8195;&#8195;&#8195;String current = String.format("%0"+requiredWidth+"d", [...]]]></description>
			<content:encoded><![CDATA[<p>When running a program with a long loop it can be incredibly useful to have some sort of index counter or process indicator. Even if just as an assurance that the program hasn&#8217;t got stuck in an unending loop. Using something like:<br />
<code>new Thread(new Runnable() {<br/>&emsp;&emsp;public void run() {<br/>&emsp;&emsp;&emsp;&emsp;int requiredWidth = Integer.toString([EndIndex]).length();<br/>&emsp;&emsp;&emsp;&emsp;while(runningDescriptors){<br/>&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;String current = String.format("%0"+requiredWidth+"d", [Index]);<br/>&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;System.out.print(current+"/"+[EndIndex]+"\r");<br/>&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;try{Thread.sleep(1000);}catch(InterruptedException ex){}<br/>&emsp;&emsp;&emsp;&emsp;}<br/>&emsp;&emsp;}<br/>}).start();</code></p>
<p>The <code class="inline">\r</code> in the print command moves the caret back to the start of the line so it overwrites the previous count. The format pads the current index with the required number of zeroes so the overwrite is always of the same number of total characters.</p>
<p>It&#8217;s a pretty simple piece of code but it can make life just that little bit easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://braindump.3void.com/?feed=rss2&#038;p=87</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Philadelphia state penitentiary</title>
		<link>http://braindump.3void.com/?p=84</link>
		<comments>http://braindump.3void.com/?p=84#comments</comments>
		<pubDate>Sun, 12 Jun 2011 14:56:06 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[photos]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[gothic]]></category>
		<category><![CDATA[penitentiary]]></category>
		<category><![CDATA[philidelphia]]></category>

		<guid isPermaLink="false">http://braindump.3void.com/?p=84</guid>
		<description><![CDATA[&#160; &#160; Is awesome&#8230;]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><img style="display: block; margin-right: auto; margin-left: auto;" src="http://braindump.3void.com/wp-content/uploads/2011/06/wpid-DSC00377.jpg" alt="image" /></p>
<p><img style="display: block; margin-right: auto; margin-left: auto;" src="http://braindump.3void.com/wp-content/uploads/2011/06/wpid-DSC00375.jpg" alt="image" /></p>
<p>&nbsp;</p>
<p><img style="display: block; margin-right: auto; margin-left: auto;" src="http://braindump.3void.com/wp-content/uploads/2011/06/wpid-DSC00370.jpg" alt="image" /></p>
<p>Is awesome&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://braindump.3void.com/?feed=rss2&#038;p=84</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Java Argument Reader</title>
		<link>http://braindump.3void.com/?p=60</link>
		<comments>http://braindump.3void.com/?p=60#comments</comments>
		<pubDate>Fri, 01 Apr 2011 14:50:21 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[arguments]]></category>
		<category><![CDATA[parsing]]></category>

		<guid isPermaLink="false">http://braindump.3void.com/?p=60</guid>
		<description><![CDATA[For a lot of simple java applications using the ability to pass arguments in at the program start just makes a lot more sense than having a complicated input setup. However the argument still needs to be passed and if there are multiple options this can be a pain, code like an ArgsReader class help [...]]]></description>
			<content:encoded><![CDATA[<p>For a lot of simple java applications using the ability to pass arguments in at the program start just makes a lot more sense than having a complicated input setup.</p>
<p>However the argument still needs to be passed and if there are multiple options this can be a pain, code like an ArgsReader class help alleviate the stress.
<p>It&#8217;s used in the fashion displayed below, where the statics are just a set of public strings used as keys to identify the argument type.</p>
<p><code><span class="java_modifier">public</span> <span class="java_modifier">static</span> <span class="java_modifier">void</span> <span class="java_functionname">main</span>(String[] args){<br/>&nbsp;&nbsp;&nbsp;&nbsp;ArgsReader reader = <span class="java_new">new</span> <span class="java_functionname">ArgsReader</span>();<br/>&nbsp;&nbsp;&nbsp;&nbsp;reader.<span class="java_functionname">addFlag</span>(<span class="java_doublequotes">"-h"</span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statics.HELP, <span class="java_doublequotes">"Prints argument descriptions"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;reader.<span class="java_functionname">addFlag</span>(<span class="java_doublequotes">"--help"</span>,&nbsp;&nbsp;&nbsp;&nbsp;Statics.HELP);<br/>&nbsp;&nbsp;&nbsp;&nbsp;reader.<span class="java_functionname">addProperty</span>(<span class="java_doublequotes">"-i"</span>,&nbsp;&nbsp;&nbsp;&nbsp;Statics.INPUT, <span class="java_doublequotes">"An input value"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;reader.<span class="java_functionname">addFlag</span>(<span class="java_doublequotes">"-l"</span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statics.FLAG, <span class="java_doublequotes">"A flag to change some response"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;reader.<span class="java_functionname">loadArgs</span>(args);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if"><span class="java_functionname">if</span></span>(reader.<span class="java_functionname">hasFlag</span>(Statics.HELP)){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.<span class="java_functionname">println</span>(reader.<span class="java_functionname">helpText</span>());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.<span class="java_functionname">exit</span>(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if"><span class="java_functionname">if</span></span>(!reader.<span class="java_functionname">hasProperty</span>(Statics.INPUT)){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.<span class="java_functionname">println</span>(<span class="java_doublequotes">"No input"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.<span class="java_functionname">exit</span>(1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;String input = reader.<span class="java_functionname">getString</span>(Statics.INPUT);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if"><span class="java_functionname">if</span></span>(reader.<span class="java_functionname">hasFlag</span>(Statics.FLAG)){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_linecomment">//do something with input</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<span class="java_if">else</span>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_linecomment">//do something different with input</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/></code></p>
<p>Running this with the line</p>
<p><code>java [java class with main] -i "Some input" -l</code></p>
<p>Will use the input value of <code class="inline">"Some Input"</code> with the flag set as true</p>
<p>The full code listing of the ArgsReader class is:</p>
<p><span id="more-60"></span><br />
<code><span class="java_import">import</span> java.util.ArrayList;<br/><span class="java_import">import</span> java.util.Hashtable;<br/><br/><span class="java_bigcomment">/**<br/> * Class used to read arguments from the command line, for example:&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;ArgsReader reader = <span class="java_new">new</span> <span class="java_functionname">ArgsReader</span>();&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;reader.<span class="java_functionname">addFlag</span>(<span class="java_doublequotes">"-h"</span>, <span class="java_doublequotes">"HELP"</span>, <span class="java_doublequotes">"Prints argument descriptions"</span>);&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;reader.<span class="java_functionname">addFlag</span>(<span class="java_doublequotes">"--help"</span>, <span class="java_doublequotes">"HELP"</span>);&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;reader.<span class="java_functionname">addProperty</span>(<span class="java_doublequotes">"-i"</span>, <span class="java_doublequotes">"INPUT"</span>, <span class="java_doublequotes">"Some input file"</span>);&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;reader.<span class="java_functionname">loadArgs</span>(args);&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;<span class="java_if"><span class="java_functionname">if</span></span>(reader.<span class="java_functionname">hasFlag</span>(<span class="java_doublequotes">"HELP"</span>)){&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;&amp;emsp;System.out.<span class="java_functionname">println</span>(reader.<span class="java_functionname">helpText</span>());&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;&amp;emsp;System.<span class="java_functionname">exit</span>(0);&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;}&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;<span class="java_if"><span class="java_functionname">if</span></span>(reader.<span class="java_functionname">hasProperty</span>(<span class="java_doublequotes">"INPUT"</span>)){&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;&amp;emsp;System.out.<span class="java_functionname">println</span>(reader.<span class="java_functionname">getString</span>(<span class="java_doublequotes">"INPUT"</span>));&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;&amp;emsp;System.<span class="java_functionname">exit</span>(0);&lt;br/&gt;<br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;emsp;}&lt;br/&gt;<br/> * @author Max Dupenois<br/> */</span><br/><span class="java_modifier">public</span> <span class="java_class">class</span> ArgsReader {<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">private</span> <span class="java_class">class</span> Argument {<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">private</span> <span class="java_primitive">boolean</span> hasValue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">private</span> String propertyName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">private</span> String description;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">private</span> String value;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_functionname">Argument</span>(String propertyName, <span class="java_primitive">boolean</span> hasValue) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_this"><span class="java_functionname">this</span></span>(propertyName, hasValue, <span class="java_doublequotes">""</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_functionname">Argument</span>(String propertyName, <span class="java_primitive">boolean</span> hasValue, String description) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_this">this</span>.propertyName = propertyName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_this">this</span>.hasValue = hasValue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (!<span class="java_this">this</span>.hasValue) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_this">this</span>.value = <span class="java_doublequotes">"false"</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_this">this</span>.description = description;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">private</span> <span class="java_modifier">void</span> <span class="java_functionname">setValue</span>(String value) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_this">this</span>.value = value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">private</span> Hashtable&lt;String, Argument&gt; propertyNameToArgument;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">private</span> Hashtable&lt;String, String&gt; keyToPropertyName;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_functionname">ArgsReader</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyToPropertyName = <span class="java_new">new</span> Hashtable&lt;String, String&gt;();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyNameToArgument = <span class="java_new">new</span> Hashtable&lt;String, Argument&gt;();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_modifier">void</span> <span class="java_functionname">addProperty</span>(String key, String propertyName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_this">this</span>.<span class="java_functionname">addProperty</span>(key, propertyName, <span class="java_doublequotes">""</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_modifier">void</span> <span class="java_functionname">addProperty</span>(String key, String propertyName, String description) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (keyToPropertyName.<span class="java_functionname">containsKey</span>(key)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_throw">throw</span> <span class="java_new">new</span> <span class="java_functionname">IllegalArgumentException</span>(<span class="java_doublequotes">"Already have property with key: '"</span> + key + <span class="java_doublequotes">"'"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (!propertyNameToArgument.<span class="java_functionname">containsKey</span>(propertyName)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Argument argument = <span class="java_new">new</span> <span class="java_functionname">Argument</span>(propertyName, true, description);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyNameToArgument.<span class="java_functionname">put</span>(propertyName, argument);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyToPropertyName.<span class="java_functionname">put</span>(key, propertyName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_modifier">void</span> <span class="java_functionname">addFlag</span>(String key, String propertyName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_this">this</span>.<span class="java_functionname">addFlag</span>(key, propertyName, <span class="java_doublequotes">""</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_modifier">void</span> <span class="java_functionname">addFlag</span>(String key, String flagName, String description) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (keyToPropertyName.<span class="java_functionname">containsKey</span>(key)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_throw">throw</span> <span class="java_new">new</span> <span class="java_functionname">IllegalArgumentException</span>(<span class="java_doublequotes">"Already have property with key: '"</span> + key + <span class="java_doublequotes">"'"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (!propertyNameToArgument.<span class="java_functionname">containsKey</span>(flagName)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Argument argument = <span class="java_new">new</span> <span class="java_functionname">Argument</span>(flagName, false, description);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyNameToArgument.<span class="java_functionname">put</span>(flagName, argument);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyToPropertyName.<span class="java_functionname">put</span>(key, flagName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_modifier">void</span> <span class="java_functionname">loadArgs</span>(String[] args) <span class="java_throw">throws</span> IllegalArgumentException {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String propertyName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Argument argument;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (<span class="java_primitive">int</span> i = 0; i &lt; args.length; i++) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key = args[i];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (keyToPropertyName.<span class="java_functionname">containsKey</span>(key)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName = keyToPropertyName.<span class="java_functionname">get</span>(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argument = propertyNameToArgument.<span class="java_functionname">get</span>(propertyName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (argument.hasValue) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (args.length &lt;= i + 1) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_throw">throw</span> <span class="java_new">new</span> <span class="java_functionname">IllegalArgumentException</span>(<span class="java_doublequotes">"Key '"</span> + key + <span class="java_doublequotes">"' for property '"</span> + propertyName + <span class="java_doublequotes">"' requires a value"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = args[i + 1];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argument.<span class="java_functionname">setValue</span>(value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++; <span class="java_linecomment">// skip next as it is not an argument</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <span class="java_if">else</span> {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argument.<span class="java_functionname">setValue</span>(<span class="java_doublequotes">"true"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <span class="java_if">else</span> {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_throw">throw</span> <span class="java_new">new</span> <span class="java_functionname">IllegalArgumentException</span>(<span class="java_doublequotes">"'"</span> + key + <span class="java_doublequotes">"' not a recognised key"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> String <span class="java_functionname">getString</span>(String propertyName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (!propertyNameToArgument.<span class="java_functionname">containsKey</span>(propertyName)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> propertyNameToArgument.<span class="java_functionname">get</span>(propertyName).value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_primitive">boolean</span> <span class="java_functionname">hasProperty</span>(String popertyName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (!propertyNameToArgument.<span class="java_functionname">containsKey</span>(popertyName)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> (propertyNameToArgument.<span class="java_functionname">get</span>(popertyName).value != null);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_primitive">boolean</span> <span class="java_functionname">hasFlag</span>(String flagName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (!propertyNameToArgument.<span class="java_functionname">containsKey</span>(flagName)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> <span class="java_functionname">getBoolean</span>(flagName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_primitive">int</span> <span class="java_functionname">getInt</span>(String propertyName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> Integer.<span class="java_functionname">parseInt</span>(<span class="java_functionname">getString</span>(propertyName));<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_primitive">double</span> <span class="java_functionname">getDouble</span>(String propertyName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> Double.<span class="java_functionname">parseDouble</span>(<span class="java_functionname">getString</span>(propertyName));<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_primitive">float</span> <span class="java_functionname">getFloat</span>(String propertyName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> Float.<span class="java_functionname">parseFloat</span>(<span class="java_functionname">getString</span>(propertyName));<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> <span class="java_primitive">boolean</span> <span class="java_functionname">getBoolean</span>(String propertyName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> Boolean.<span class="java_functionname">parseBoolean</span>(<span class="java_functionname">getString</span>(propertyName));<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">private</span> String[] <span class="java_functionname">getKeys</span>(String propertyName) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&lt;String&gt; keys = <span class="java_new">new</span> ArrayList&lt;String&gt;();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (String key : keyToPropertyName.<span class="java_functionname">keySet</span>()) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (keyToPropertyName.<span class="java_functionname">get</span>(key).<span class="java_functionname">equals</span>(propertyName)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keys.<span class="java_functionname">add</span>(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> keys.<span class="java_functionname">toArray</span>(<span class="java_new">new</span> String[keys.<span class="java_functionname">size</span>()]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_modifier">public</span> String <span class="java_functionname">helpText</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer helpText = <span class="java_new">new</span> <span class="java_functionname">StringBuffer</span>();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[] keys;<br/><span class="java_linecomment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String key;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_primitive">boolean</span> firstKey;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_primitive">boolean</span> firstProperty = true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String description;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (String propertyName : propertyNameToArgument.<span class="java_functionname">keySet</span>()) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (!firstProperty) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpText.<span class="java_functionname">append</span>(<span class="java_doublequotes">"\n"</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keys = <span class="java_functionname">getKeys</span>(propertyName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstKey = true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (String key : keys) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpText.<span class="java_functionname">append</span>((!firstKey ? <span class="java_doublequotes">", "</span> : <span class="java_doublequotes">""</span>) + key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstKey = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpText.<span class="java_functionname">append</span>(<span class="java_doublequotes">"\t\t"</span> + propertyName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;description = propertyNameToArgument.<span class="java_functionname">get</span>(propertyName).description;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_if">if</span> (description != null &amp;&amp; description.<span class="java_functionname">length</span>() &gt; 0) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpText.<span class="java_functionname">append</span>(<span class="java_doublequotes">"\t\t"</span> + description);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstProperty = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="java_return">return</span> helpText.<span class="java_functionname">toString</span>();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/></code></p>
]]></content:encoded>
			<wfw:commentRss>http://braindump.3void.com/?feed=rss2&#038;p=60</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clean Query</title>
		<link>http://braindump.3void.com/?p=37</link>
		<comments>http://braindump.3void.com/?p=37#comments</comments>
		<pubDate>Mon, 14 Mar 2011 16:19:33 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[query]]></category>

		<guid isPermaLink="false">http://braindump.3void.com/?p=37</guid>
		<description><![CDATA[In PhP the process for performing a mysql query can be torturous, making sure things are the correct type (numbers are actually numbers) and everything&#8217;s escaped properly etc. I got very very bored of repeating this sort of work so made a simple class with a very handy query function that I will now share [...]]]></description>
			<content:encoded><![CDATA[<p>In PhP the process for performing a mysql query can be torturous, making sure things are the correct type (numbers are actually numbers) and everything&#8217;s escaped properly etc. I got very very bored of repeating this sort of work so made a simple class with a very handy query function that I will now share with you<sup class="footnote"><a name="fntloc:37:1" href="#fnt:37:1">1</a></sup>.</p>
<p><code>&lt;?php<br/><span class="php_class">class</span> Database {<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_protected">protected</span> <span class="php_variable">$password</span>, <span class="php_variable">$username</span>, <span class="php_variable">$server</span>, <span class="php_variable">$db_name</span>, <span class="php_variable">$connection</span>, <span class="php_variable">$debug</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">__construct</span>(<span class="php_variable">$server</span>, <span class="php_variable">$db_name</span>, <span class="php_variable">$username</span>, <span class="php_variable">$password</span>) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$this</span>-&gt;server = <span class="php_variable">$server</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$this</span>-&gt;db_name = <span class="php_variable">$db_name</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$this</span>-&gt;username = <span class="php_variable">$username</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$this</span>-&gt;password= <span class="php_variable">$password</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$this</span>-&gt;debug = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">setDebug</span>(<span class="php_variable">$debug</span>) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$this</span>-&gt;debug = <span class="php_variable">$debug</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">getServer</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_return">return</span> <span class="php_variable">$this</span>-&gt;server;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">getUsername</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_return">return</span> <span class="php_variable">$this</span>-&gt;username;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">getDBName</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_return">return</span> <span class="php_variable">$this</span>-&gt;db_name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">getConnection</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_return">return</span> <span class="php_variable">$this</span>-&gt;connection;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">connect</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$this</span>-&gt;connection= <span class="php_functionname">mysql_connect</span>(<span class="php_variable">$this</span>-&gt;server, <span class="php_variable">$this</span>-&gt;username,<span class="php_variable">$this</span>-&gt;password)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or <span class="php_functionname">die</span>(<span class="php_singlequotes">'Could not connect: '</span> . <span class="php_functionname">mysql_error</span>());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_functionname">mysql_select_db</span>(<span class="php_variable">$this</span>-&gt;db_name, <span class="php_variable">$this</span>-&gt;connection);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">close</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_functionname">if</span>(<span class="php_variable">$this</span>-&gt;connection) <span class="php_functionname">mysql_close</span>(<span class="php_variable">$this</span>-&gt;connection);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">lastId</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_return">return</span> <span class="php_functionname">mysql_insert_id</span>(<span class="php_variable">$this</span>-&gt;connection);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">__destruct</span>() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$this</span>-&gt;<span class="php_functionname">close</span>();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">free</span>(<span class="php_variable">$result</span>) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_functionname">mysql_free_result</span>(<span class="php_variable">$result</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_bigcomment">/**<br/>&nbsp;&nbsp;&nbsp;&nbsp; * Used like sprintf to run mysql queries,<br/>&nbsp;&nbsp;&nbsp;&nbsp; * if the result is a single row it returns that,<br/>&nbsp;&nbsp;&nbsp;&nbsp; * otherwise it returns an array<br/>&nbsp;&nbsp;&nbsp;&nbsp; * %s for strings, %% for a percentage, %d for digits (integer)<br/>&nbsp;&nbsp;&nbsp;&nbsp; * %f for a float and %i to make no change to argument (ignore)<br/>&nbsp;&nbsp;&nbsp;&nbsp; * @param String sql query to run<br/>&nbsp;&nbsp;&nbsp;&nbsp; * @param [] arguments to pass to query<br/>&nbsp;&nbsp;&nbsp;&nbsp; */</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_static">static</span> <span class="php_variable">$queryargs</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_public">public</span> <span class="php_function">function</span> <span class="php_functionname">query</span>(<span class="php_variable">$sql</span>) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$sql</span> = <span class="php_functionname">trim</span>(<span class="php_variable">$sql</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database::<span class="php_variable">$queryargs</span> = <span class="php_functionname">func_get_args</span>();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_linecomment">//Remove the first argument<br/></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_functionname">array_shift</span>(Database::<span class="php_variable">$queryargs</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$query</span> = <span class="php_functionname">preg_replace_callback</span>(<span class="php_doublequotes">"/%./"</span>, <span class="php_functionname">create_function</span>(<span class="php_singlequotes">'$matches'</span>, <span class="php_singlequotes">'<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$type = $matches[0];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch($type){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "%s":<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return mysql_real_escape_string(array_shift(Database::$queryargs));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "%i":<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return array_shift(Database::$queryargs);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "%d":<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return intval(array_shift(Database::$queryargs),10);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "%f":<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return floatval(array_shift(Database::$queryargs));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "%%":<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "%";<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "";<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}'</span>), <span class="php_variable">$sql</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database::<span class="php_variable">$queryargs</span> = null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$result</span> = <span class="php_functionname">mysql_query</span>(<span class="php_variable">$query</span>, <span class="php_variable">$this</span>-&gt;connection)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or <span class="php_functionname">die</span>((<span class="php_variable">$this</span>-&gt;debug?<span class="php_variable">$query</span>:<span class="php_doublequotes">"Query Failed"</span>).<span class="php_doublequotes">"&lt;hr/&gt;"</span>.<span class="php_functionname">mysql_error</span>());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_functionname">preg_match</span>(<span class="php_doublequotes">"/^\W*(\w*)\W/"</span>, <span class="php_variable">$sql</span>, <span class="php_variable">$matches</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$type</span> = <span class="php_variable">$matches</span>[1];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_switch">switch</span>(<span class="php_variable">$type</span>) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_case">case</span> <span class="php_doublequotes">"SELECT"</span>:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_case">case</span> <span class="php_doublequotes">"SHOW"</span>:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_case">case</span> <span class="php_doublequotes">"DESCRIBE"</span>:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_case">case</span> <span class="php_doublequotes">"EXPLAIN"</span>:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$objects</span> = <span class="php_functionname">array</span>();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_functionname">while</span>(<span class="php_variable">$obj</span> = <span class="php_functionname">mysql_fetch_object</span>(<span class="php_variable">$result</span>)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$objects</span>[] = <span class="php_variable">$obj</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_return">return</span> <span class="php_variable">$objects</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_break">break</span>;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_default">default</span>:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_return">return</span> (<span class="php_variable">$result</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="php_variable">$this</span>-&gt;<span class="php_functionname">free</span>(<span class="php_variable">$result</span>);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>}<br/>?&gt;<br/></code></p>
<p><sup class="footnote">[<a name="fnt:37:1" href="#fntloc:37:1">1</a>]</sup> You lucky lucky people.</p>
]]></content:encoded>
			<wfw:commentRss>http://braindump.3void.com/?feed=rss2&#038;p=37</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abusing .htaccess</title>
		<link>http://braindump.3void.com/?p=18</link>
		<comments>http://braindump.3void.com/?p=18#comments</comments>
		<pubDate>Mon, 07 Mar 2011 16:48:38 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[3void]]></category>
		<category><![CDATA[backup]]></category>

		<guid isPermaLink="false">http://braindump.3void.com/?p=18</guid>
		<description><![CDATA[My name is Max, and I abuse .htaccess. The site to which this blog is attached uses .htaccess as part of its process and it serves 2 major purposes: I use it to mask the fact that it runs on PhP 1 Passes all requests to a single script which, based on the url, feeds [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,&quot;Bitstream Charter&quot;,Times,serif;">My name is Max, and I abuse .htaccess.</span></span></p>
<p>The site to which this blog is attached uses .htaccess as part of its process and it serves 2 major purposes:</p>
<ol>
<li> I use it to mask the fact that it runs on PhP <sup class="footnote"><a name="fntloc:1" href="#fnt:1">1</a></sup></li>
<li>Passes all requests to a single script which, based on the url, feeds the correct page</li>
</ol>
<p>Why bother you ask? Well so I can use my own templating system and frankly because I&#8217;m a computer scientist and am really bad at not re-inventing the wheel.</p>
<p>So that I have a backup and some explanation of what I&#8217;ve done next time I look at it and swear at my incomprehensible code the following is a transcript of the major sections:</p>
<p><code>ErrorDocument 401 /err/401.html<br />
ErrorDocument 403 /err/403.html<br />
ErrorDocument 404 /err/404.html<br />
ErrorDocument 500 /err/500.html</code></p>
<p>Basically where to route the user on a given error, not actually used as it should be entirely handled by the site-engine.</p>
<p><code>Options +FollowSymlinks<br />
RewriteEngine on</code></p>
<p>Turns on the ability to forward the user to another location</p>
<p><code>RewriteCond %{http_host} ^www\.(.*) [NC]<br />
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]</code></p>
<p>Makes www. unaccessible, this is just for some basic consistency across the site. The <code class="inline">R=301</code> makes it an actual http redirect, the <code class="inline">NC</code> tells it to ignore case and the <code class="inline">L</code> tells it that this is the last command and the rest of the file should be ignored.</p>
<p><code>&lt;FilesMatch "\.htaccess$"&gt;<br />
Order deny,allow<br />
Deny from all<br />
Satisfy all<br />
&lt;/FilesMatch&gt;</code></p>
<p>This stops the .htaccess file itself from being accessible.</p>
<p><code>RewriteCond %{http_host} !^3void.com$ [NC]<br />
RewriteRule ^(.*)$ $1 [NC,L]</code></p>
<p>This is to allow subdomains to be used normally without passing through the site-engine.</p>
<p><code>RewriteCond %{request_uri} ^\/js\/.*$ [NC]<br />
RewriteRule ^(.*)$ $1 [NC,L]</code></p>
<p>This speeds up the javascript access by not sending it to the script, actually required for tiny mce and possibly other external libraries to work properly.</p>
<p><code>RewriteCond %{HTTP:RedirectedToGenPage} !^true$ [NC]<br />
RewriteRule ^[PAGE-GENERATOR-SCRIPT].php(.*)$ / [F,NC,L]</code></p>
<p>Checks to see if we&#8217;ve already been sent to the [PAGE-GENERATOR-SCRIPT] and if we have we can stop processing and let it run as normal.</p>
<p><code>RequestHeader set RedirectedToGenPage "true"</code></p>
<p>Sets a header on the request saying we&#8217;ve now been sent to the [PAGE-GENERATOR-SCRIPT]. This is important because I don&#8217;t want the script to be accessible directly so people have to use the site as a normal site and can&#8217;t directly got to [PAGE-GENERATOR-SCRIPT].php?uri=[WHEREVER].</p>
<p><code>RewriteCond %{request_uri} !^.*[PAGE-GENERATOR-SCRIPT]\.php.*$ [NC,OR]<br />
RewriteCond %{request_uri} ^\$ [NC]<br />
RewriteCond %{QUERY_STRING} ^(.*)$ [NC]<br />
RewriteRule ^(.*)$ /[PAGE-GENERATOR-SCRIPT].php?uri=$1&amp;%1 [NC,L]</code></p>
<p>Performs the actual redirect, this time it&#8217;s not a proper http redirect, we just send the current request to [PAGE-GENERATOR-SCRIPT].php.</p>
<p><sup class="footnote">[<a name="fnt:1" href="#fntloc:1">1</a>]</sup> Not sure why I do this.</p>
]]></content:encoded>
			<wfw:commentRss>http://braindump.3void.com/?feed=rss2&#038;p=18</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mountains</title>
		<link>http://braindump.3void.com/?p=13</link>
		<comments>http://braindump.3void.com/?p=13#comments</comments>
		<pubDate>Sat, 05 Mar 2011 13:51:03 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[photos]]></category>
		<category><![CDATA[mountains]]></category>

		<guid isPermaLink="false">http://braindump.3void.com/?p=13</guid>
		<description><![CDATA[Some pictures taken on my phone, posted without comment: Posted from WordPress for Android]]></description>
			<content:encoded><![CDATA[<p>Some pictures taken on my phone, posted without comment:</p>
<p><img style="display: block; margin-right: auto; margin-left: auto;" src="http://braindump.3void.com/wp-content/uploads/2011/03/wpid-DSC00294.jpg" alt="image" /></p>
<p><img style="display: block; margin-right: auto; margin-left: auto;" src="http://braindump.3void.com/wp-content/uploads/2011/03/wpid-DSC00293.jpg" alt="image" /></p>
<p><img style="display: block; margin-right: auto; margin-left: auto;" src="http://braindump.3void.com/wp-content/uploads/2011/03/wpid-DSC00272.jpg" alt="image" /></p>
<p><img style="display: block; margin-right: auto; margin-left: auto;" src="http://braindump.3void.com/wp-content/uploads/2011/03/wpid-DSC00262.jpg" alt="image" /></p>
<p><span class="post_sig">Posted from WordPress for Android</span></p>
]]></content:encoded>
			<wfw:commentRss>http://braindump.3void.com/?feed=rss2&#038;p=13</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trains</title>
		<link>http://braindump.3void.com/?p=6</link>
		<comments>http://braindump.3void.com/?p=6#comments</comments>
		<pubDate>Thu, 24 Feb 2011 19:52:43 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bored]]></category>
		<category><![CDATA[ramblings]]></category>

		<guid isPermaLink="false">http://braindump.3void.com/?p=6</guid>
		<description><![CDATA[Strangely some of my best thinking is done on trains. Today, for example, I re-wrote sections of a thesis chapter; worked out a new classification nomenclature; solved some maths puzzles; completed a game of solitaire; and I also realised just how dull a journey can be. Seriously I&#8217;m relatively sure my brain made a break [...]]]></description>
			<content:encoded><![CDATA[<p>Strangely some of my best thinking is done on trains. Today, for example, I re-wrote sections of a thesis chapter; worked out a new classification nomenclature; solved some maths puzzles; completed a game of solitaire; and I also realised just how dull a journey can be. Seriously I&#8217;m relatively sure my brain made a break for the sweet release of the reaper, that or I have an inordinate amount of wax attempting to leave my ear. It&#8217;s okay though, I used my little finger to ram it back into my hearing hole, disaster averted&#8230; This time.</p>
]]></content:encoded>
			<wfw:commentRss>http://braindump.3void.com/?feed=rss2&#038;p=6</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

