<?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>Blog Without An Important Name</title>
	<atom:link href="http://www.kallisti.net.nz/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kallisti.net.nz/blog</link>
	<description>I am not an IP address! I am a free 'blog!</description>
	<lastBuildDate>Thu, 08 Mar 2012 09:26:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Per-user traffic monitoring on OpenWRT</title>
		<link>http://www.kallisti.net.nz/blog/2010/12/per-user-traffic-monitoring-on-openwrt/</link>
		<comments>http://www.kallisti.net.nz/blog/2010/12/per-user-traffic-monitoring-on-openwrt/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 10:44:13 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/?p=96</guid>
		<description><![CDATA[Today I had cause to want to track the per-user (per-MAC address, really) traffic counts on an OpenWRT-based router. There&#8217;s nothing I could see that was built in, so I dug around and found wrtbwmon, which is a pretty good script for this sort of thing. However, it doesn&#8217;t work with the OpenWRT version I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>Today I had cause to want to track the per-user (per-MAC address, really) traffic counts on an OpenWRT-based router. There&#8217;s nothing I could see that was built in, so I dug around and found <a href="http://code.google.com/p/wrtbwmon/">wrtbwmon</a>, which is a pretty good script for this sort of thing. However, it doesn&#8217;t work with the OpenWRT version I&#8217;m running (Backfire (10.03, r20728).)</p>
<p>So here I document what I had to do to make it work.</p>
<p>To start with, grab my version of the script itself <a href="http://www.kallisti.net.nz/~robin/wrtbwmon">from here</a>. I put this into /usr/local/bin on the router, and made it executable (<tt>chmod +x /usr/local/bin/wrtbwmon</tt>.)</p>
<p>Using <tt>crontab -e</tt>, add the following (modified as you like) to the crontab:<br />
<code><br />
* * * * * /usr/local/bin/wrtbwmon setup br-lan<br />
*/5 * * * * /usr/local/bin/wrtbwmon update /tmp/usage.db<br />
1,6,11,16,21,26,31,36,41,46,51,56 * * * * /usr/local/bin/wrtbwmon publish /tmp/usage.db /tmp/www/usage.htm /usr/local/lib/macusers.txt<br />
3 0 12 * * rm -f /tmp/usage.db<br />
7 */6 * * * cp /tmp/usage.db /usr/local/lib/usage.db.bak<br />
</code><br />
(the one with all the numbers is actually one long line, it may wrap on this page)</p>
<p>Line 1 sets up iptables to track everything it sees on the network, 2 and 3 save and write out the data every 5 minutes, and 4 resets the database when the monthly transfer quota resets. The last line backs up the database to flash every 6 hours, so that in case of power failure at most 6 hours of data are lost. The script expects the backup to be found in <tt>/usr/local/lib/usage.db.bak</tt>, so if you alter this, you&#8217;ll have to alter the script.</p>
<p>Running <tt>/etc/init.d/cron restart</tt> may be needed here to make the cron daemon reload the new commands.</p>
<p>Set up <tt>/usr/local/lib/macusers.txt</tt> to map MAC addresses to users to give a nicer output. For example:<br />
<code><br />
00:aa:bb:cc:dd:ee,Person 1<br />
11:22:33:44:55:66,Person 2<br />
</code><br />
The MAC addresses should be lower case.</p>
<p>In <tt>/www/cgi-bin/usage</tt> I put:<br />
<code><br />
#!/bin/sh<br />
echo 'Content-Type: text/html'<br />
echo 'X-Dummy: dummy'<br />
echo<br />
cat /tmp/www/usage.htm<br />
</code><br />
The dummy header line is needed to work around a bug in the uhttp version on the router. <tt>chmod +x</tt> this also.</p>
<p>Now, you can go to http://IP_OF_ROUTER/cgi-bin/usage and it&#8217;ll give you an HTML table showing who&#8217;s been uploading and downloading what. Good for finding out who hasn&#8217;t capped their torrent client&#8217;s upload speed.</p>
<p><strong>Update:</strong> added the backup cron job, updated the script to restore the backup if needed, also now adds totals to the display.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2010/12/per-user-traffic-monitoring-on-openwrt/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Thesis Submitted!</title>
		<link>http://www.kallisti.net.nz/blog/2009/05/thesis-submitted/</link>
		<comments>http://www.kallisti.net.nz/blog/2009/05/thesis-submitted/#comments</comments>
		<pubDate>Tue, 26 May 2009 13:15:00 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[eMusic/J]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/?p=88</guid>
		<description><![CDATA[I meant to post this here a while back, but kinda forgot to. Anyway, on Monday last week I finally submitted my thesis. The title is &#8220;The Impact of Representation on the Evolution of Genetic Algorithms.&#8221; Now I just need to sit back and wait until the examiners get it, mark it, and probably send [...]]]></description>
			<content:encoded><![CDATA[<p>I meant to post this here a while back, but kinda forgot to. Anyway, on Monday last week I finally submitted my thesis. The title is &#8220;The Impact of Representation on the Evolution of Genetic Algorithms.&#8221; Now I just need to sit back and wait until the examiners get it, mark it, and probably send me corrections to make prior to it being accepted. I&#8217;m going to try for the August graduation, but that is perhaps a bit too hopeful unless the marking happens faster than I expect it will.</p>
<p>Unfortunately, the plans for work I had lined up in the Netherlands didn&#8217;t pan out due to the immigration system there making it very difficult for a relatively small company to get a work permit for a foreign employee. As such, I&#8217;m still looking for work, although I have enough here to tide me over for as long as I need it. That said, I&#8217;m definitely looking to get out of Dunedin, and ideally New Zealand, in the relatively short term. So if you have any ideas, let me know!</p>
<p>For now, I have my regular work, which I&#8217;m doing fairly short hours on right now, and a contract job for Naxos (again) upgrading their version of eMusic/J to match their new requirements. It&#8217;s good work, and the improvements will flow back into the normal version. It&#8217;ll be nice to finally get another release of that out the door, it&#8217;s been on something of a hiatus while I finished the thesis.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2009/05/thesis-submitted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitoring Puppet with Nagios</title>
		<link>http://www.kallisti.net.nz/blog/2009/02/monitoring-puppet-with-nagios/</link>
		<comments>http://www.kallisti.net.nz/blog/2009/02/monitoring-puppet-with-nagios/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 09:52:52 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/?p=82</guid>
		<description><![CDATA[I&#8217;ve been setting up a Puppet system at work so we can easily set up virtual servers, and also so that all the configuration is in one place. Yesterday, someone suggested to me how I can have our existing Nagios system monitor the state of the puppet configuration. This allows me to be notified if [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been setting up a <a href="http://reductivelabs.com/trac/puppet">Puppet</a> system at work so we can easily set up virtual servers, and also so that all the configuration is in one place. </p>
<p>Yesterday, someone suggested to me how I can have our existing <a href="http://www.nagios.org/">Nagios</a> system monitor the state of the puppet configuration. This allows me to be notified if there is something causing puppet to fail on any of the monitored nodes.</p>
<p>There is a Ruby script out there that is a Nagios plugin, however it requires extra Ruby libraries, and I don&#8217;t know how to handle them nicely on a Debian system. I do, however, know how to handle Perl libs. So I wrote a Perl plugin that does the same task. It&#8217;s got a lot of hard-coded paths and times and such, you&#8217;ll want to make completely sure that they work in your configuration. It&#8217;s also not well documented, but it is quite basic: <a href='http://www.kallisti.net.nz/~robin/check_puppet.pl'>check_puppet.pl</a></p>
<p>The main tricky dependency it has is on <tt>Nagios::Plugin</tt>, but it&#8217;s in CPAN, so some <tt>dh-make-perl</tt> should get you a Debian package for it easily.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2009/02/monitoring-puppet-with-nagios/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Returning to Europe (hopefully)</title>
		<link>http://www.kallisti.net.nz/blog/2008/12/returning-to-europe-hopefully/</link>
		<comments>http://www.kallisti.net.nz/blog/2008/12/returning-to-europe-hopefully/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 11:20:21 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Travel]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/?p=79</guid>
		<description><![CDATA[The opportunity has come up for me to escape Dunedin, and go a long way away for an indefinite time. So, I&#8217;m jumping on the idea, and planning on moving to the Netherlands, Deventer specifically, to work for Topicus. I&#8217;ll have a 6-month contract with them to start with, that is evaluated after 3 months [...]]]></description>
			<content:encoded><![CDATA[<p>The opportunity has come up for me to escape Dunedin, and go a long way away for an indefinite time. So, I&#8217;m jumping on the idea, and planning on moving to the Netherlands, Deventer specifically, to work for <a href="http://www.topicus.nl/">Topicus</a>.</p>
<p>I&#8217;ll have a 6-month contract with them to start with, that is evaluated after 3 months to determine if it will be continued. This is because they&#8217;re a little uncertain about how a non-Dutch-speaker will work out. So, to help that along, I&#8217;ve started learning to read it so I have at least some foundation when I&#8217;m there.</p>
<p>As of now, I&#8217;m waiting on a work permit (tewerkstellingsvergunning). Well, really, I&#8217;m waiting on the university to open again so I can get a transcript that will then form part of the application for the permit that Topicus will be sending in for me. Once this has been done, then it&#8217;s pretty much just a matter of buying some plane tickets and getting myself over there.</p>
<p>If everything goes as well as we hope, I&#8217;ll be winging my way back there in the European spring-time, so April or May.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2008/12/returning-to-europe-hopefully/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Going to Europe</title>
		<link>http://www.kallisti.net.nz/blog/2008/06/going-to-europe/</link>
		<comments>http://www.kallisti.net.nz/blog/2008/06/going-to-europe/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 14:44:45 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/2008/06/going-to-europe/</guid>
		<description><![CDATA[I realised that I&#8217;d forgotten to mention this here, so now I&#8217;ll amend that.In July/August, I&#8217;ll be spending five weeks in Europe. I leave NZ on the 13th of July, and get back on the 22nd of August.It&#8217;s just for a holiday, so should be a fairly cruisy time. And I miss out on some [...]]]></description>
			<content:encoded><![CDATA[<p>I realised that I&#8217;d forgotten to mention this here, so now I&#8217;ll amend that.In July/August, I&#8217;ll be spending five weeks in Europe. I leave NZ on the 13th of July, and get back on the 22nd of August.It&#8217;s just for a holiday, so should be a fairly cruisy time. And I miss out on some winter, too.I&#8217;ll be going to the UK, Belgium, Germany and the Netherlands (in that order). I have a few events to go to along the way, which is good for working out where to go when. In between times I&#8217;ll be visiting friends.The things I&#8217;m going to are:
<ul>
<li><a href="http://www.lugradio.org/live/UK2008/">LugRadio Live</a> in Wolverhampton (UK) (computery stuff conference)</li>
<li><a href="http://www.gothicfestival.be/">Gothic Festival</a> in Waregem (Belgium) (music)</li>
<li><a href="http://www.summerdarkness.nl/">Summer Darkness</a> in Utrecht (Netherlands) (more music)</li>
<li><a href="http://www.lowlands.nl/">Lowlands</a> in Biddinghuizen (Netherlands) (still more music, and a rollercoaster park!)</li>
</ul>
<p>If you&#8217;re really keen, you can view <a href="http://www.kallisti.net.nz/~robin/europeitinerary.ods">my itinerary</a> (OpenOffice.org spreadsheet) which goes into more detail, although is still in a state of flux to a small extent.If anyone is going to be near where I&#8217;m going, give me a yell. Time permitting, I might be able to come visit. I&#8217;ll be taking my <a href="http://www.kallisti.net.nz/~robin/IMGP0671.JPG">new toy</a> (the small one) with me, so will be reachable by the usual methods.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2008/06/going-to-europe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>eMusic/J 0.25 released</title>
		<link>http://www.kallisti.net.nz/blog/2008/05/emusicj-025-released/</link>
		<comments>http://www.kallisti.net.nz/blog/2008/05/emusicj-025-released/#comments</comments>
		<pubDate>Sat, 10 May 2008 04:22:37 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[eMusic/J]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/2008/05/emusicj-025-released/</guid>
		<description><![CDATA[First update in a while, just fixes to various things. Overhauled the filename cleaning stuff, hopefully finally fixing issues on windows. &#8212; found more filenames that windows dies on, so this deals with them. Hopefully that&#8217;s the last of them. If the option &#8216;spacesToUnderscore&#8217; is &#8216;true&#8217; then spaces will be converted to underscores in filenames. [...]]]></description>
			<content:encoded><![CDATA[<p>First update in a while, just fixes to various things.</p>
<ul>
<li><i>Overhauled the filename cleaning stuff, hopefully finally fixing issues on windows.</i> &#8212; found more filenames that windows dies on, so this deals with them. Hopefully that&#8217;s the last of them.</li>
<li><i>If the option &#8216;spacesToUnderscore&#8217; is &#8216;true&#8217; then spaces will be converted to underscores in filenames.</i> &#8212; someone asked for this, and it was easy enough to do when working on the other stuff</li>
<li><i>Handle the case where the emusicj script is a symlink to the real location, and use that to find the program directory</i> &#8212; makes it nicer for people who lay their applications out in complex ways.</li>
</ul>
<p><a href="http://www.kallisti.net.nz/EMusicJ/HomePage">Find it at the usual place</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2008/05/emusicj-025-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extension to the &#8216;Shunting Yard&#8217; algorithm to allow variable numbers of arguments to functions</title>
		<link>http://www.kallisti.net.nz/blog/2008/02/extension-to-the-shunting-yard-algorithm-to-allow-variable-numbers-of-arguments-to-functions/</link>
		<comments>http://www.kallisti.net.nz/blog/2008/02/extension-to-the-shunting-yard-algorithm-to-allow-variable-numbers-of-arguments-to-functions/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 23:53:18 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Comp Sci]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/2008/02/extension-to-the-shunting-yard-algorithm-to-allow-variable-numbers-of-arguments-to-functions/</guid>
		<description><![CDATA[Here&#8217;s something a bit more computer-sciencey than usual. For something at work, I have had to implement a function parser, so you can type &#8216;1+2*b&#8216; and it&#8217;ll work it all out, with correct operator precedence and so forth. To do this, I use a three-step process: Tokenise the input, and at the same time convert [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s something a bit more computer-sciencey than usual. For something at work, I have had to implement a function parser, so you can type &#8216;<tt>1+2*b</tt>&#8216; and it&#8217;ll work it all out, with correct operator precedence and so forth. To do this, I use a three-step process:</p>
<ol>
<li>Tokenise the input, and at the same time convert any variables found to their numeric values</li>
<li>Convert the input tokens to RPN using the <a href="http://en.wikipedia.org/wiki/Shunting_yard_algorithm">Shunting Yard algorithm</a></li>
<li>Evaluate the RPN form of the equation using an RPN parser, which is really easy to write</li>
</ol>
<p>This did the job nicely, however the time came when it had to be extended, and able to accept functions, such as &#8216;<tt>max(1,2,3)</tt>&#8216;. The standard shunting yard algorithm can handle functions, but with the restriction that the number of arguments to them is known (really, this is a limitation of the RPN algorithm, but it&#8217;s at this point in the process that we need to deal with the problem). In this case, I wanted to handle functions with a variable number of arguments, so &#8216;<tt>max(1,2)</tt>&#8216; would work, and so would &#8216;<tt>max(1,2,3,4,5)</tt>&#8216;. To do this, I extended the standard algorithm. Below is the algorithm from Wikipedia. My additions are in <b>bold</b>. This requires two more stacks, a &#8216;<tt>were values</tt>&#8216; stack, and an &#8216;<tt>arg count</tt>&#8216; stack. It also requires that you can attach the number of arguments to an instance of a function. In my case, I did it with a small class that took the function and an argument count, with one of these created during tokenisation for each function encountered.</p>
<ul>
<li>While there are tokens to be read:</li>
</ul>
<dl>
<dd>
<ul>
<li>Read a token.</li>
<li>If the token is a number, then add it to the output queue. <b>If the <tt>were values</tt> stack has a value on it, pop it and push <tt>true</tt>.</b></li>
<li>If the token is a function token, then push it onto the stack. <b>Push 0 onto the <tt>arg count</tt> stack. If the <tt>were values</tt> stack has a value on it, pop it and push <tt>true</tt>. Push <tt>false</tt> onto <tt>were values</tt>.</b></li>
<li>If the token is a function argument separator (e.g., a comma):</li>
</ul>
<dl>
<dd>
<ul>
<li>Until the topmost element of the stack is a left parenthesis, pop the element onto the output queue. If no left parentheses are encountered, either the separator was misplaced or parentheses were mismatched. <b>Pop <tt>were values</tt> into <i>w</i>. If <i>w</i> is true, pop <tt>arg count</tt> into <i>a</i>, increment <i>a</i> and push back into <tt>arg count</tt>. Push <tt>false</tt> into <tt>were values</tt>.</b></li>
</ul>
</dd>
</dl>
<ul>
<li>If the token is an operator, o<sub>1</sub>, then:</li>
</ul>
<dl>
<dd>
<ul>
<li>while there is an operator, o<sub>2</sub>, at the top of the stack, and either</li>
</ul>
<dl>
<dd>
<dl>
<dd>
<dl>
<dd>o<sub>1</sub> is associative or left-associative and its precedence is less than (lower precedence) or equal to that of o<sub>2</sub>, or</dd>
<dd>o<sub>1</sub> is right-associative and its precedence is less than (lower precedence) that of o<sub>2</sub>,</dd>
</dl>
</dd>
<dd>pop o<sub>2</sub> off the stack, onto the output queue;</dd>
</dl>
</dd>
</dl>
<ul>
<li>push o<sub>1</sub> onto the operator stack.</li>
</ul>
</dd>
</dl>
<ul>
<li>If the token is a left parenthesis, then push it onto the stack.</li>
<li>If the token is a right parenthesis:</li>
</ul>
<dl>
<dd>
<ul>
<li>Until the token at the top of the stack is a left parenthesis, pop operators off the stack onto the output queue.</li>
<li>Pop the left parenthesis from the stack, but not onto the output queue.</li>
<li>If the token at the top of the stack is a function token
<ul>
<li><b>Pop stack into <i>f</i></b></li>
<li><b>Pop <tt>arg count</tt> into <i>a</i></b></li>
<li><b>Pop <tt>were values</tt> into <i>w</i></b></li>
<li><b>If <i>w</i> is true, increment <i>a</i></b></li>
<li><b>Set the argument count of <i>f</i> to <i>a</i></b></li>
<li><b>Push <i>f</i> onto output queue</b></li>
</ul>
</li>
<li>If the stack runs out without finding a left parenthesis, then there are mismatched parentheses.</li>
</ul>
</dd>
</dl>
</dd>
</dl>
<ul>
<li>When there are no more tokens to read:</li>
</ul>
<dl>
<dd>
<ul>
<li>While there are still operator tokens in the stack:</li>
</ul>
<dl>
<dd>
<ul>
<li>If the operator token on the top of the stack is a parenthesis, then there are mismatched parenthesis.</li>
<li>Pop the operator onto the output queue.</li>
</ul>
</dd>
</dl>
</dd>
</dl>
<ul>
<li>Exit.</li>
</ul>
<p>Note that because I didn&#8217;t feel like correctly listifying most of it, consider an <b>if</b> to apply to the end of that sentence only. Operation order is usually important.</p>
<p>With this done, the part of the <a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation#The_postfix_algorithm">RPN algorithm</a> that says:<br />
<blockquote>It is known that the function takes <b>n</b> arguments.</p></blockquote>
<p> can now be satisfied.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2008/02/extension-to-the-shunting-yard-algorithm-to-allow-variable-numbers-of-arguments-to-functions/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>eMusic/J 0.24 released</title>
		<link>http://www.kallisti.net.nz/blog/2008/02/emusicj-024-released/</link>
		<comments>http://www.kallisti.net.nz/blog/2008/02/emusicj-024-released/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 11:44:52 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[eMusic/J]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/2008/02/emusicj-024-released/</guid>
		<description><![CDATA[This is a pretty small one, mostly just to fix a problem some people were having. Changelog: Truncate the pathname to save files to if it gets too long on windows (which has stupidly low limits) Some classical albums have really long names, and there were some that couldn&#8217;t be downloaded as a result. This [...]]]></description>
			<content:encoded><![CDATA[<p>This is a pretty small one, mostly just to fix a problem some people were having.</p>
<p>Changelog:</p>
<ul>
<li>Truncate the pathname to save files to if it gets too long on windows (which has stupidly low limits) <i>Some classical albums have really long names, and there were some that couldn&#8217;t be downloaded as a result. This hopefully fixes the problem, although I haven&#8217;t tested it yet.</i></li>
<li>Added option to allow the user to specify that they don&#8217;t want cover art to be downloaded. This is done by adding the line &#8216;downloadCoverArt=false&#8217; to ~/.emusicj/emusicj.prop. <i>Someone wanted this, I can&#8217;t remember why, but it was easy enough to do.</i></li>
<li>Updated build.xml to allow more flexible compiles, such as not always creating a dist build <i>Apparently some people are making distro packages of eMusic/J, and this makes life easier for them. Related to this, I&#8217;ve started posting the source code of each release on the site, too.</i></li>
</ul>
<p>It can be downloaded <a href="http://www.kallisti.net.nz/EMusicJ/HomePage">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2008/02/emusicj-024-released/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Kiwi Foo Camp 08</title>
		<link>http://www.kallisti.net.nz/blog/2008/02/kiwi-foo-camp-08/</link>
		<comments>http://www.kallisti.net.nz/blog/2008/02/kiwi-foo-camp-08/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 10:16:42 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/2008/02/kiwi-foo-camp-08/</guid>
		<description><![CDATA[Yesterday I got back from a bit of a holiday in Auckland. The purpose of the trip was to go to Kiwi Foo Camp (a.k.a. Baa Camp). It is a gathering of 150 people with creative interests in various, generally technology related, things. It&#8217;s aim is to be a way for all these people to [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I got back from a bit of a holiday in Auckland. The purpose of the trip was to go to <a href="http://en.wikipedia.org/wiki/Kiwi_foo_camp">Kiwi Foo Camp</a> (a.k.a. <a href="http://baacamp.org/">Baa Camp</a>). It is a gathering of 150 people with creative interests in various, generally technology related, things. It&#8217;s aim is to be a way for all these people to get together in a way the breaks down normal barriers of hierarchy so that they can share ideas, plots, and schemes without these getting in the way.</p>
<p>I met a bunch of people that I&#8217;ve heard about or only ever talked to via email, such as <a href="http://www.stuff.co.nz/blogs/passthesource/2008/02/04/more-foo-and-government-ip/">Don Christie</a> and <a href="http://www.cs.auckland.ac.nz/~pgut001/">Peter Gutmann</a>, along with a host of people I probably would have never heard of if they weren&#8217;t there but who are also doing interesting work in a variety of fields. A nice effect, which is by design, of the 150 people cap is that you have the ability to meet nearly everyone there. It also means they can put on free beer and wine for the entire event.</p>
<p>Almost everyone was sleeping on the school grounds where it was hosted, or nearby, which meant that things like game playing (<a href="http://en.wikipedia.org/wiki/Mafia_%28game%29">Werewolf</a> is a favourite) carried on to 4am, and people were happily getting up at 8am for breakfast in the morning. I was supposed to be sleeping in the Wharenui at the school, however due to getting to bed a little late and an apparent overbooking of it meant that I ended up sleeping outside on the deck of it the first evening. From what I could tell, I got the better deal. It wasn&#8217;t hot and stuffy, and the one person out there with me didn&#8217;t snore too much. The following night was inside one of the school rooms, which was helpful because it kept the mosquitoes somewhere where I wasn&#8217;t, although I think by then they&#8217;d decided I was bled dry anyway.</p>
<p>As is common with conferences, and even moreso with this one being an &#8216;unconference&#8217;, much of the value isn&#8217;t so much from the sessions, but from chatting to people you happen to sit beside because there&#8217;s a spare seat, whether they do programming, community projects, are politicians (I talked with Judith Tizard extremely briefly), or whatever. They all seem to be doing good stuff. I did, however, do a session of my own. I was planning on doing one on neural networks and genetic algorithms, and another on Amazon web services but due to time constraints (some uncharitable folk may call it laziness) beforehand, I only had time to prepare the GA stuff. That worked out OK, as it managed to take up the whole hour anyway. I didn&#8217;t get a big turnout, but I didn&#8217;t expect one &#8211; this was a fair bit more on the computer science side than most of the things there.</p>
<p>The photos I took are <a href="http://www.kallisti.net.nz/gallery/v/Robins-Photos/Kiwi+Foo+Camp+08/">here</a>, many more can be found on <a href="http://flickr.com/photos/tags/kiwifoo08">flickr</a>.</p>
<p>The rest of the time in Auckland was catching up with friends there, and spending way too much money at JB Hi-Fi on music and a little bit of anime.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2008/02/kiwi-foo-camp-08/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>eMusic/J 0.23 released</title>
		<link>http://www.kallisti.net.nz/blog/2008/01/emusicj-023-released/</link>
		<comments>http://www.kallisti.net.nz/blog/2008/01/emusicj-023-released/#comments</comments>
		<pubDate>Mon, 14 Jan 2008 11:41:29 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[eMusic/J]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.kallisti.net.nz/blog/2008/01/emusicj-023-released/</guid>
		<description><![CDATA[I&#8217;ve just put out eMusic/J 0.23. The main reason for getting this out there is that there is a bugfix for a problem that occurs in a certain (rare) circumstance. Here&#8217;s a list of the changes: Allow multiple tracks to be selected This means you can shift-click or control-click to perform operations on multiple tracks. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just put out eMusic/J 0.23. The main reason for getting this out there is that there is a bugfix for a problem that occurs in a certain (rare) circumstance.</p>
<p>Here&#8217;s a list of the changes:</p>
<ul>
<li>Allow multiple tracks to be selected <i>This means you can shift-click or control-click to perform operations on multiple tracks. This is a prelude to drag-and-drop support, which I hope to get to some time soon.</i></li>
<li>Adds auto-remove timer to tracks that were finished when the program started <i>Previously, and tracks there when the program started were never cleared automatically. Now they are.</i></li>
<li>Trim spaces from ends of album/track/artist names as vfat doesn&#8217;t like them</li>
<li>Changed default save location of files to ~/Music or ~/My Music (whichever exists), defaulting to the first one if neither do <i>This should make its default save location a bit nicer on various platforms.</i></li>
<li>Fixed an infinite loop if the album/artist/track names contain a path wildcard (e.g. %t). Thanks to Hugh Brackett for spotting this one. <i>This caused the program to peg the CPU on <a href="http://www.emusic.com/album/-A-Jacknife-to-a-Swan-MP3-Download/10673524.html">this album</a> due to the track &#8220;S#%t Outta Luck&#8221;</i></li>
</ul>
<p>It can be downloaded from the <a href="http://www.kallisti.net.nz/EMusicJ/HomePage">eMusic/J homepage</a>.</p>
<p>An extra note, a customised version of this program was developed for <a href="http://www.reggaecountry.com/">Reggae Country</a> to use with their download service. Thanks for their support!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kallisti.net.nz/blog/2008/01/emusicj-023-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
