<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<channel>
<title>Aquarionics - Category - programming</title>
<link>http://www.aquarionics.com/category/programming</link>
<description></description>
<dc:language>en-gb</dc:language>
<dc:creator>Aquarion (nicholas@aquarionics.com)</dc:creator>
<dc:rights>Copyright 2008 Aquarion</dc:rights>
<dc:date>2008-08-28T11:19:27+00:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.aquarionics.com/epistula/?v=2.0.3" />
<admin:errorReportsTo rdf:resource="mailto:nicholas@aquarionics.com"/>
<sy:updatePeriod>daily</sy:updatePeriod>
<sy:updateFrequency>8</sy:updateFrequency>
<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
<item>
	<title>Vizzinibugs, Heisenbugs and the vanishing birthday</title>
	<link>http://www.aquarionics.com/journal/2007/09/01/Vizzinibugs%2C_Heisenbugs_and_the_vanishing_birthday</link>
	<comments>http://www.aquarionics.com/journal/2007/09/01/Vizzinibugs%2C_Heisenbugs_and_the_vanishing_birthday</comments>
	<description>Heisenbugs are bugs that vanish when you turn debugging on.

	Schrodinbugs are bugs that don&amp;#8217;t manifest until you read the code and realize they could never possibly have worked, whereupon they don&amp;#8217;t. These are impossible, yet happen despite this.

	Vizzinibugs are the single most common type of user interface bug. They are when the user follows an action path inconceivable to the...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2007/09/01/Vizzinibugs%2C_Heisenbugs_and_the_vanishing_birthday</guid>
	<content:encoded><![CDATA[<p>Heisenbugs are bugs that vanish when you turn debugging on.</p>

	<p>Schrodinbugs are bugs that don&#8217;t manifest until you read the code and realize they could never possibly have worked, whereupon they don&#8217;t. These are impossible, yet happen despite this.</p>

	<p>Vizzinibugs are the single most common type of user interface bug. They are when the user follows an action path inconceivable to the original programmer. These include things like &#8220;What do you mean &#8216;Esc&#8217; isn&#8217;t part of &#8216;Press Any Key To Continue&#8217;&#8221;, &#8220;I always fill out the password field first&#8221;, &#8220;I put in October in the &#8216;From&#8217;, and March in the &#8216;To&#8217; so they&#8217;d come back in the opposite order&#8221; and the all-time classic, &#8220;But what if I want to put commas in my titles?&#8221;.</p>

	<p>Okay, not an all-time classic, but one bug that Epistula doesn&#8217;t have anymore. I&#8217;m not sure why anyone would <em>want</em> commas in titles, but there you go. Vizzinibugs are such not because they are inherantly stupid requests, but more that the programmer just didn&#8217;t even conceive someone might do that.</p>

	<p>But my favourite Vizzinibug of all time was actually my fault. It was in a piece of software for a company I worked for ages ago which, as part of the signup form, requested the date of birth for the customer. It was part of a batch of changes, so I duped another column, built some Crazy drop-downs to input it &#38; change it, take the result, format it and dump it into the date column in the database. So far, so hoopy.</p>

	<p>I tested it. Over the next couple of months my coworker tested it, the line manager of our traditional-webdev no-person-over-35 team tested it, the young, hoopy client tested it and ran though the whole thing, and it went into internal beta, all were happy.</p>

	<p>A little while later, we started getting back some reports. Apparently some people couldn&#8217;t get the thing to save their birthday. The young, hoopy client tested it, and couldn&#8217;t reproduce it. My line manager couldn&#8217;t reproduce it. Neither could me or my coworker.</p>

	<p>Humm.</p>

	<p>Okay, could you send us the user id of an affected user please? Meantime marked as <span class="caps">WTF</span>.</p>

	<p>From us to manager to client contact to users to contact to manager to us, and we had an example. Time to go database diving&#8230;</p>

	<p>... This user has a birthday set. Oh, that&#8217;s a coincidence, it&#8217;s January 1st 19&#8230; oh. Nineteen seventy.</p>

	<p>January the first 1970 is an important date in the Unix world. It&#8217;s zero. The Unix Epoch time format is defined, in fact, as seconds since then, and quite a few things work in it. My dropdowns didn&#8217;t. The database didn&#8217;t. But the functions to format the dropdown results and make sure they were a valid date, and not allow the 31st Feb?</p>

	<p>Yeah.</p>

	<p>Clicky, Clicky, Fix.</p>

	<p>The thing is every person who tested it, from us right to the client, used their own birthday. And since not a single person had a birthday before 1970 &#8211; one person was _in_ 1970, but didn&#8217;t trigger it &#8211; we entirely missed the problem. One of those things that makes you look twice at data validation things, really.</p>

	<p>And testing, of course.</p>]]></content:encoded>
	<dc:date>2007-09-01T18:24:14+00:00</dc:date>
	<dc:subject>epistula</dc:subject>
	<dc:subject>web development</dc:subject>
	<dc:subject>programming</dc:subject>
	<slash:comments>1</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/2053</trackback:ping>
</item>
<item>
	<title>Softly softly</title>
	<link>http://www.aquarionics.com/journal/2007/07/03/Softly_softly</link>
	<comments>http://www.aquarionics.com/journal/2007/07/03/Softly_softly</comments>
	<description>Yesterday, one of my pet bugs in the Mozilla codebase was finally fixed. Almost exactly one year ago today I mentioned the birthday of Mozilla/Fx&amp;#8217;s inability to support Soft Hyphens.

	After eight years, that&amp;#8217;s no longer true

	Sometimes Open Source does work.</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2007/07/03/Softly_softly</guid>
	<content:encoded><![CDATA[<p>Yesterday, one of my pet bugs in the Mozilla codebase was finally fixed. Almost exactly <a href="/journal/2006/07/04/Happy_Birthday_To_You">one year ago today</a> I mentioned the birthday of Mozilla/Fx&#8217;s inability to support Soft Hyphens.</p>

	<p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=9101">After eight years, that&#8217;s no longer true</a></p>

	<p>Sometimes Open Source <em>does</em> work.</p>]]></content:encoded>
	<dc:date>2007-07-03T10:14:52+00:00</dc:date>
	<dc:subject>programming</dc:subject>
	<dc:subject>web development</dc:subject>
	<slash:comments>0</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/2024</trackback:ping>
</item>
<item>
	<title>Free as in Mortgage Repayment</title>
	<link>http://www.aquarionics.com/journal/2006/08/15/Free_as_in_Mortgage_Repayment</link>
	<comments>http://www.aquarionics.com/journal/2006/08/15/Free_as_in_Mortgage_Repayment</comments>
	<description>Okay, so in the first (zeroth?) hashlugradio broadcast, I put forth the view that the OS business model treated the programmers time as worthless. I wasn&amp;#8217;t called upon it in the broadcast, but have been since. This is what I mean:

	I am an individual programmer &amp;#8211; not part of a massive company &amp;#8211; I believe whole-heartedly in the Free/Open Source Movement. I scratch itches. I...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2006/08/15/Free_as_in_Mortgage_Repayment</guid>
	<content:encoded><![CDATA[<p>Okay, so in the <a href="http://planet.lugradio.org/hashlugradio/">first (zeroth?) hashlugradio broadcast</a>, I put forth the view that the OS business model treated the programmers time as worthless. I wasn&#8217;t called upon it in the broadcast, but have been since. This is what I mean:</p>

	<p>I am an individual programmer &#8211; not part of a massive company &#8211; I believe whole-heartedly in the Free/Open Source Movement. I scratch itches. I spend my time programming. I give away the results. I do not get paid for this. </p>

	<p>How do I pay my rent?</p>]]></content:encoded>
	<dc:date>2006-08-15T12:38:01+00:00</dc:date>
	<dc:subject>LUGRadio</dc:subject>
	<dc:subject>programming</dc:subject>
	<slash:comments>4</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1918</trackback:ping>
</item>
<item>
	<title>Happy Birthday To You</title>
	<link>http://www.aquarionics.com/journal/2006/07/04/Happy_Birthday_To_You</link>
	<comments>http://www.aquarionics.com/journal/2006/07/04/Happy_Birthday_To_You</comments>
	<description>Since I have so far missed both parents and both siblings birthdays because I am incapable of remembering anything, it seems fitting that this is a couple of days late.

	Friday, June 30th was the 7th birthday of Mozilla bug 9101, that Firefox should support the soft hyphen properly, on the basis that not having it makes supporting languages with long words more difficult.

	Reading seven years...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2006/07/04/Happy_Birthday_To_You</guid>
	<content:encoded><![CDATA[<p>Since I have so far missed both parents and both siblings birthdays because I am incapable of remembering anything, it seems fitting that this is a couple of days late.</p>

	<p>Friday, June 30<sup>th</sup> was the 7th birthday of Mozilla bug <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=9101">9101</a>, that Firefox should support the soft hyphen properly, on the basis that not having it makes supporting languages with long words more difficult.</p>

	<p>Reading seven years of comments, you&#8217;ll notice that various people have come up with fixes for the actual problem, but they have either been rejected because they didn&#8217;t fix another, related but completely seperate, problem. Or they&#8217;ve been ignored entirely.</p>

	<p>Seven years, it&#8217;s still marked as new, and I fully suspect I shall be posting another entry like this in three years time. One day, I&#8217;ll have enough spare money to put a bounty on it.</p>

	<p>Sometimes Open Source fails.</p>]]></content:encoded>
	<dc:date>2006-07-04T20:08:20+00:00</dc:date>
	<dc:subject>programming</dc:subject>
	<dc:subject>web development</dc:subject>
	<slash:comments>1</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1902</trackback:ping>
</item>
<item>
	<title>Tickybox</title>
	<link>http://www.aquarionics.com/journal/2006/05/10/Tickybox</link>
	<comments>http://www.aquarionics.com/journal/2006/05/10/Tickybox</comments>
	<description>Tickybox</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2006/05/10/Tickybox</guid>
	<content:encoded><![CDATA[<a href="http://cenote.gkhs.net/~aquarion/tickybox/">Tickybox</a>]]></content:encoded>
	<dc:date>2006-05-10T13:11:42+00:00</dc:date>
	<dc:subject>programming</dc:subject>
	<dc:subject>web development</dc:subject>
	<slash:comments>1</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1878</trackback:ping>
</item>
<item>
	<title>Tickybox</title>
	<link>http://www.aquarionics.com/journal/2006/05/10/Tickybox</link>
	<comments>http://www.aquarionics.com/journal/2006/05/10/Tickybox</comments>
	<description>
function doTickybox(tickybox){

var xmlHttp=false;
/*@cc_on @*/
/*@if (@_jscript_version &gt;= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
 try {
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlHttp =...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2006/05/10/Tickybox</guid>
	<content:encoded><![CDATA[<script type="text/javascript">
function doTickybox(tickybox){

var xmlHttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
 try {
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlHttp = false;
  }
 }
@end @*/
if (!xmlHttp && typeof XMLHttpRequest!='undefined') {
	try {
		xmlHttp = new XMLHttpRequest();
	} catch (e) {
		xmlHttp=false;
	}
}

		if (!xmlHttp)
		{
			alert("No XML for you!");
			return;
		}
		//alert(tickybox.checked); 
		
		//var xmlHttp = new XMLHttpRequest();
		// specify HTTP method, file URL and 
		// whether to use asynchronous loadingobj
		xmlHttp.open("GET", "http://cenote.gkhs.net/~aquarion/tickybox/tickybox.php?value="+tickybox.checked, true);
		//xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

		
		xmlHttp.onreadystatechange=function() {
                if (xmlHttp.readyState==4) {
                      if (xmlHttp.responseText != "" && xmlHttp.responseText != null){
	                     document.getElementById("tickyboxLabel").innerHTML = xmlHttp.responseText+" people have checked the tickybox";
                      }
                } else {
					//alert("hi"+ xmlHttp.readyState);
				}
        }
		// perform the actual request
		xmlHttp.send(null);
		// show result
		//alert(Sarissa.serialize(xmlHttp.responseXML));
}
	</script>

	<input type="checkbox" onClick="doTickybox(this)" id="tickybox"/><label id="tickyboxLabel" for="tickybox">Check Me!</label>

(This may not work in aggregators, or possibly at all)]]></content:encoded>
	<dc:date>2006-05-10T13:10:37+00:00</dc:date>
	<dc:subject>programming</dc:subject>
	<dc:subject>web development</dc:subject>
	<slash:comments>0</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1877</trackback:ping>
</item>
<item>
	<title>Simplicity</title>
	<link>http://www.aquarionics.com/journal/2006/01/06/Simplicity</link>
	<comments>http://www.aquarionics.com/journal/2006/01/06/Simplicity</comments>
	<description>So yeah, new year, newish design. It isn&amp;#8217;t perfect, but it&amp;#8217;s a start. And the new new design is trapped in PSP until I get a new 30 day trial :-D

	Simplicity

	I like simplicity. It appeals to my sense of design, and the light grey with some of the most delicate shading I could make visible is nothing if not simple. The boxes and curves design is lifted from previous designs, but...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2006/01/06/Simplicity</guid>
	<content:encoded><![CDATA[<p>So yeah, new year, newish design. It isn&#8217;t perfect, but it&#8217;s a start. And the new new design is trapped in <span class="caps">PSP</span> until I get a new 30 day trial :-D</p>

	<h3>Simplicity</h3>

	<p>I like simplicity. It appeals to my sense of design, and the light grey with some of the most delicate shading I could make visible is nothing if not simple. The boxes and curves design is lifted from previous designs, but where there they were gradiented and filled here they are lightly hinted at rather than rigidly defined. The construction marks on the logo I like too :-)</p>

	<h3>Complexity</h3>

	<p>It&#8217;s a long way from the new design, which is slightly more heavy on the photographic backgrounds than I usually do, and is therefore something of a departure. Changes are good.</p>

	<h3>Smart</h3>

	<p>Today I spent a long time in a car, and a slightly shorter time in an actual meeting with actual clients. For this I am wearing a suit, and am reminded &#8211; as I am always reminded &#8211; that I need a new suit at some point.  I don&#8217;t wear suits very often, and part of the reason for that is my enjoyment of the reaction of people who haven&#8217;t seen it before. I hate with a passion, however, the shiny clompy shoes, because the shiny clompy shoes are clompy &#8211; and I don&#8217;t like being clompy &#8211; and the shiny clompy shoes go clomp-clomp-clomp all the way home until they wear though my socks and make the backs of my ankles bleed. Which, you know, hurts. </p>

	<h3>Tech</h3>

	<p>I suspect that, with all the lack-of-updatingness and the <a href="http://zengun.org/weblog/archives/2005/12/cheese-sandwiching-now-with-added-insight">cheese-sandwichingness</a> (though currently it&#8217;s a bacon sandwich. Mmm, bacon) I&#8217;ve lost most of the geeky percentage of my audience. Though the geeky percentage probably didn&#8217;t notice the not-updatingness because they all use <span class="caps">RSS</span> readers, and the rest all use friends lists. Why do I bother with the designing of actual web pages again?</p>

	<p>Anyway.</p>

	<p>Current things that I have been mucking around with include &#8220;DOM Scripting&#8221; (as <a href="http://domscripting.webstandards.org/?page_id=4">well I might</a>), which I will get around to mentioning in a bit, Scripting in computer games (Both Civilization 4 and Vampire The Masquerade use Python as their primary game scripting language, which I find interesting, and have on my list of Things To Write An Article About) and Visual Studio Express.</p>

	<p>Open Sorcery types, you can switch off now, because I don&#8217;t need your next reaction.</p>

	<p>So, I have downloaded <a href="http://msdn.microsoft.com/vstudio/express">Visual Studio Express</a> which is what happens when Microsoft miss the point. Amateur coders are mostly nowadays developing in things like Python, Perl, <span class="caps">PHP</span> and if they have had their brains fiddled with, <span class="caps">GCC</span> and Java. Lots on Linux. This is, indeed, partly because Visual Studio costs <b><span class="caps">TEN MILLION DOLLARS</span></b> per license.</p>

	<p>Actually, it doesn&#8217;t, but as a non-professional developer it might as well do, as the high licensing puts something of a boot-strapping problem in front of learning to dev for Win32, or even Win64. So, Visual Studio Express you can download for Free (as in Beer). Well, you can download a demo for free (as in beer), but you do have to register for free (as in, be spammed for eternity) and have a Passport account (as in &#8220;submit to the almighty Gates empire&#8221;. Much like you have to do for OpenSolaris) (Except different empire, obviously) (Yeash, you guys are pedantic). So yeah, I&#8217;m downloading VC++ (Because I want to design a <a href="http://www.halflife2.net">Half life 2</a> mod about <a href="http://hol.istic.net/lawnChairsOfDoom">killing lawnchairs</a>) (Incidentally, <a href="http://developer.valvesoftware.com/">Valve&#8217;s Developer docs</a> are all in a Wiki, isn&#8217;t that interesting?) (Yes, too many brackets, Sosumi) and it&#8217;s taking an eternity, though not as long as XCode did. I mean, what do you have to put into an <span class="caps">IDE</span> to make it 800mb?</p>

	<p>Oh, right. <span class="caps">OS X</span>. Chrome, naturally.</p>

	<p>So yeah, updates as and when. Also about the Mysterious Project Breakfast, assuming I get around to that too.</p>

	<h3>Sushi</h3>

	<p>Bedford has a sushi restaurant. I swear the things follow me around. I am, of course, doomed, but I am doomed with expensive raw fish, and that somehow makes it all worth while.</p>

	<h3>Dead Ken(nedy)</h3>

	<p>Charles Kennedy, leader of the <span class="caps">UK </span>Liberal Democrats Governmental party, has, shortly after some people accused him of not being a good leader, admitted to having a drinking problem. His chances are not looking terribly rosy.</p>

	<blockquote>
		<p>(From <a href="http://www.thefridayproject.co.uk/tft/deadkennedy/">The Friday Thing Dead Kennedy Pool</a>): <br>
When Charles finally goes, the nearest prediction will win its predictor a bottle of Talisker 18 Year Old Single Malt Whisky. And the country will win a second opposition party with an actual leader. Everyone&#8217;s a winner. </p>
	</blockquote>

	<p>(Thats three times I&#8217;ve attempted to spell &#8220;Kennedy&#8221; as &#8220;Khennedy&#8221;, which is your fault, Jason)</p>

	<p>Tuesday, Ten AM.</p>

	<p>Shortly afterwards all the people who said they wouldn&#8217;t run against him in a leadership election will, in fact, run against him in a leadership election &#8220;In the interests of the party&#8221;.</p>

	<p>Wednesday, Thirteen Fifteen, Sir Malcolm Rifkind will announce that he&#8217;s actually really been a spy for the Liberal Democrats all along, will enter &#8211; and win &#8211; the leadership election, and then all three major parties will be basically Tory. This will set off a chain of Heath Robinson events which will naturally lead to the collapse of the entire political system across the world, leading to the rise and rule of a little known previously almost silent group called the &#8220;Bloggers&#8221; who will alternate between demanding that everyone be nice to everyone else and being so emo their hair cuts itself, their first action will demand that every person in the entire universe gets a weblog or other online journal and the resulting influx of new accounts at LiveJournal will mean that Six Apart become the single source of money in the entire world, except for Sun, who they buy servers from. Sun will open source world government, leading to rule by whoever argues most consistently on the mailing list, which will eventually lead to the population of the world being run by the commentators on Slashdot, leading to great leaps forward in technological research, the population of Space, a new version of Doom, and a world famine as no money is spent on any food that doesn&#8217;t go into either kool aid or cookies. We all die, and it&#8217;s all Charlie&#8217;s fault for telling us about his drinking problem.</p>

	<p>Selfish bastard.</p>]]></content:encoded>
	<dc:date>2006-01-06T20:14:13+00:00</dc:date>
	<dc:subject>aqcom</dc:subject>
	<dc:subject>Computer Games</dc:subject>
	<dc:subject>Current Affairs</dc:subject>
	<dc:subject>Design</dc:subject>
	<dc:subject>Humour</dc:subject>
	<dc:subject>Moving to Beford</dc:subject>
	<dc:subject>Personal</dc:subject>
	<dc:subject>programming</dc:subject>
	<dc:subject>web development</dc:subject>
	<slash:comments>7</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1809</trackback:ping>
</item>
<item>
	<title>Project Scout</title>
	<link>http://www.aquarionics.com/journal/2005/04/02/Project_Scout</link>
	<comments>http://www.aquarionics.com/journal/2005/04/02/Project_Scout</comments>
	<description>Somewhat to my suprise, I have recieved not one, but two patches to open source projects that I run. That is that gilmae submitted a better install document for AqWiki, and  John Meadows has submitted a new version of the viewer file for MusicDB 

	Flush with this success, I&amp;#8217;ve started a new project. Well, two. Threeish, really. First, I&amp;#8217;ve gone back to the base system that Cantrip...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2005/04/02/Project_Scout</guid>
	<content:encoded><![CDATA[<p>Somewhat to my suprise, I have recieved not one, but two patches to open source projects that I run. That is that <a href="http://avocadia.net/">gilmae</a> submitted a better install document for <a href="http://aqwiki.sf.net">AqWiki</a>, and  <a href="http://www.meadowsonline.com/">John Meadows</a> has submitted a new version of the viewer file for <a href="http://freshmeat.net/projects/musicdb/">MusicDB</a> </p>

	<p>Flush with this success, I&#8217;ve started a new project. Well, two. Threeish, really. First, I&#8217;ve gone back to the base system that Cantrip and Escape will be built on, which is actually the Epistula execution model rebuilt in python and mod_python. This is almost finished (yay) and is far neater than the <span class="caps">PHP</span> version (double yay) but I&#8217;m having trouble with one thing. So, pythonites who are still reading this crap: How do I initalise a class where the name of the class is contained in a variable?</p>

	<p>Two, and more importantly, how should I have known this?</p>

	<p>The third thing is a collision of a few technologies I&#8217;ve been wanting to use for a while: <a href="http://www.xmltv.org"><span class="caps">XMLTV</span></a>, SQLite and <span class="caps">AJAX</span>, or <span class="caps">DHTML</span>, or whatever we&#8217;re calling it today, with a dash of new-media <span class="caps">SMS</span> stuff thrown in. Basic premise for project Scout is that it sends you an <span class="caps">SMS</span> ten minutes before a TV program that you wanted is due to start. It&#8217;s a little more complicated than that, but not much (Until you get to the <span class="caps">AJAX</span> bits, really). Enough for me to be able to use it to drink even more of the Python kool-aid, while having something more useful at the end than a random philosophy generator.</p>]]></content:encoded>
	<dc:date>2005-04-02T18:54:04+00:00</dc:date>
	<dc:subject>programming</dc:subject>
	<dc:subject>projects</dc:subject>
	<dc:subject>Python</dc:subject>
	<dc:subject>web development</dc:subject>
	<slash:comments>0</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1617</trackback:ping>
</item>
<item>
	<title>Magic</title>
	<link>http://www.aquarionics.com/journal/2005/03/08/Magic</link>
	<comments>http://www.aquarionics.com/journal/2005/03/08/Magic</comments>
	<description>One of the things I like most about Python is the lack of Magic things.

	The way that solutions don&amp;#8217;t take the form of &amp;#8220;Prefix the argument with a round blue diamond to make the nasal demons put sugar in the coffee&amp;#8221; type thing.

	Therefore, getting the answer &amp;#8220;Prefix the connection string with a minus symbol&amp;#8221; is something that is reasonably likely to make me want to kill things.</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2005/03/08/Magic</guid>
	<content:encoded><![CDATA[<p>One of the things I like most about Python is the lack of Magic things.</p>

	<p>The way that solutions don&#8217;t take the form of &#8220;Prefix the argument with a round blue diamond to make the nasal demons put sugar in the coffee&#8221; type thing.</p>

	<p>Therefore, getting the answer &#8220;Prefix the connection string with a minus symbol&#8221; is something that is reasonably likely to make me want to kill things.</p>]]></content:encoded>
	<dc:date>2005-03-08T14:13:56+00:00</dc:date>
	<dc:subject>programming</dc:subject>
	<slash:comments>2</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1606</trackback:ping>
</item>
<item>
	<title>Code in C</title>
	<link>http://www.aquarionics.com/journal/2004/12/30/Code_in_C</link>
	<comments>http://www.aquarionics.com/journal/2004/12/30/Code_in_C</comments>
	<description>(sung to The Beatles "Let it Be")

(I've never found out who wrote this one, or this varient. I've modified it slightly from the text I found)

When I find my code in tons of trouble,
Friends and colleagues come to me,
Speaking words of wisdom:
"Code in C."

As the deadline fast approaches,
And bugs are all that I can see,
Somewhere, someone whispers
"Code in C."

Code in C, Code...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2004/12/30/Code_in_C</guid>
	<content:encoded><![CDATA[<p>(sung to The Beatles "Let it Be")</p>

<p>(I've never found out who wrote this one, or this varient. I've modified it slightly from the text I found)</p>

<p>When I find my code in tons of trouble,<br>
Friends and colleagues come to me,<br>
Speaking words of wisdom:<br>
"Code in C."</p>

<p>As the deadline fast approaches,<br>
And bugs are all that I can see,<br>
Somewhere, someone whispers<br>
"Code in C."</p>

<p>Code in C, Code in C,<br>
Code in C, Code in C.<br>
LISP is dead and buried,<br>
Code in C.</p>

<p>I used to write a lot of FORTRAN,<br>
for science it worked flawlessly.<br>
Try using it for graphics!<br>
Code in C.</p>

<p>If you've just spent 30 hours<br>
Debugging some assembly,<br>
Soon you will be glad to<br>
Code in C.</p>

<p>Code in C, Code in C,<br>
Code in C, yeah, Code in C.<br>
Only wimps use Python.<br>
Code in C.</p>

<p>Code in C, Code in C,<br>
Code in C, oh, Code in C.<br>
Pascal won't quite cut it.<br>
Code in C.</p>

<p>{  Guitar Solo }</p>

<p>Code in C, Code in C,<br>
Code in C, yeah, Code in C.<br>
Don't even mention COBOL.<br>
Code in C.</p>

<p>And when the screen is fuzzy,<br>
And the edior is bugging me.<br>
I'm sick of ones and zeroes.<br>
Code in C.</p>

<p>A thousand people people swear that T.P.<br>
Seven is the one for me.<br>
I hate the word PROCEDURE,<br>
Code in C.</p>

<p>Code in C, Code in C,<br>
Code in C, yeah, Code in C.<br>
PL1 is 80's,<br>
Code in C.</p>

<p>Code in C, Code in C,<br>
Code in C, yeah, Code in C.<br>
The government loves ADA,<br>
Code in C.</p>]]></content:encoded>
	<dc:date>2004-12-30T10:26:03+00:00</dc:date>
	<dc:subject>music</dc:subject>
	<dc:subject>programming</dc:subject>
	<slash:comments>1</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1570</trackback:ping>
</item>
<item>
	<title>Projectiles</title>
	<link>http://www.aquarionics.com/journal/2004/12/11/Projectiles</link>
	<comments>http://www.aquarionics.com/journal/2004/12/11/Projectiles</comments>
	<description>The Projects Page is back, semi-updated, and using the Epistula design library at last (Only took me two years), also Random acts of Senseless Scripting has also been updated with the new design (It&amp;#8217;s been broken since Julyish) and a couple of new early warning scripts.</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2004/12/11/Projectiles</guid>
	<content:encoded><![CDATA[<p>The <a href="http://www.aquarionics.com/projects">Projects Page</a> is back, semi-updated, and using the Epistula design library at last (Only took me two years), also <a href="http://www.aquarionics.com/projects/raoss/">Random acts of Senseless Scripting</a> has also been updated with the new design (It&#8217;s been broken since Julyish) and a couple of new early warning scripts.</p>]]></content:encoded>
	<dc:date>2004-12-11T12:04:32+00:00</dc:date>
	<dc:subject>programming</dc:subject>
	<dc:subject>projects</dc:subject>
	<slash:comments>0</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1559</trackback:ping>
</item>
<item>
	<title>Coding, Not going postal, and Going Postal</title>
	<link>http://www.aquarionics.com/journal/2004/09/27/Coding%2C_Not_going_postal%2C_and_Going_Postal</link>
	<comments>http://www.aquarionics.com/journal/2004/09/27/Coding%2C_Not_going_postal%2C_and_Going_Postal</comments>
	<description>So, today I took time out of my busy schedule to go buy tea.

	Actually, I wasn&amp;#8217;t getting any work done, really. I&amp;#8217;m having a small concentration problem since we entered testing, in that the stuff I&amp;#8217;m currently working on is Deep System stuff that is interdependant on almost everything else. This means it takes about fifteen to twenty minutes to swap all the various memory...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2004/09/27/Coding%2C_Not_going_postal%2C_and_Going_Postal</guid>
	<content:encoded><![CDATA[<p>So, today I took time out of my busy schedule to go buy tea.</p>

	<p>Actually, I wasn&#8217;t getting any work done, really. I&#8217;m having a small concentration problem since we entered testing, in that the stuff I&#8217;m currently working on is Deep System stuff that is interdependant on almost everything else. This means it takes about fifteen to twenty minutes to swap all the various memory pages into place before I&#8217;m producing much new code of any real worth. Each time someone in our open plan office asks me a question, it shatters this delicate balance as I have to swap in other processes like the <span class="caps">HTML</span>/CSS structure. The first couple of times this happens I could possibly be refered to as &#8220;ratty&#8221; at the shattering. After five, I feel the urge to hit things. Not that the office have any real way of telling that I&#8217;m currently juggling &#8211; to switch metaphors &#8211; a couple of  dozen balls at the moment, and would like to be left alone. </p>

	<p>Net result is that I had a minor argument with someone else that is, in fact, solvable by inserting quote marks, something I realised when I had time to actually think about the problem, rather than desperatly trying not to lose my place in what I was doing to answer the question.</p>

	<p>So I went to buy tea.</p>

	<p>Since I&#8217;m abandoning London for the forseeable, and had run out of English Breakfast (Leaving me with only four types of black tea, five of green (which I don&#8217;t drink, but LC does), one of white and three types of Infusions) I decided to go visit <a href="http://www.drury.uk.com">Drury</a> in Covent Garden. Naturally I got lost, so I navigated to Covent Garden Market (Specifically, the big square where the bloke who walks on his hands does his show. I&#8217;ve never been to Covent Garden without him performing there) and navigated from there. I replaced my Breakfast Tea, got some Ceylon Orange Pekoe and two packets of &#8220;Fruit Flavoured&#8221; tea &#8211; One Apricot, One Mango &#8211; and considered that I&#8217;d got off lightly.</p>

	<p>Then I passed Waterstones.</p>

	<p>Or rather, I didn&#8217;t. Actually, I went in. I resisted buying a number of books before I found Going Postal. Going Postal is the new Discworld book, It&#8217;s good, and it doesn&#8217;t come out until the 7<sup>th</sup> October. You could tell it wasn&#8217;t out yet, because there was a noticable lack of large displays with it on or any of the other paraphernalia I usually expect with a new DW release. Specifically, the store only had five copies.</p>

	<p>Obviously, it now has four.</p>

	<p>It&#8217;s good. It&#8217;s a &#8216;standalone&#8217; book in the same way &#8216;The Truth&#8217; was. Being that it takes place in Ankh Morpork there&#8217;s going to be background people you&#8217;ve seen before, but the only central person who is a major character is Vetinari, who starts of in a scene that is incredibly similar to one from the Colour of Magic and goes on from there.</p>

	<p>It&#8217;s good. It also leads neatly on to the next book in the series, which is about Thud. <a href="http://www.amazon.co.uk/exec/obidos/ASIN/0385603428/aquarion">You should go buy Going Postal</a></p>]]></content:encoded>
	<dc:date>2004-09-27T20:57:50+00:00</dc:date>
	<dc:subject>Fiction</dc:subject>
	<dc:subject>Personal</dc:subject>
	<dc:subject>programming</dc:subject>
	<dc:subject>Work</dc:subject>
	<slash:comments>9</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1519</trackback:ping>
</item>
<item>
	<title>Logging</title>
	<link>http://www.aquarionics.com/journal/2004/09/25/Logging</link>
	<comments>http://www.aquarionics.com/journal/2004/09/25/Logging</comments>
	<description>In which Aquarion fixes the logging system. Beware, contains lines of a dangerous width.</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2004/09/25/Logging</guid>
	<content:encoded><![CDATA[<p>Aquarionics' logging system was designed to work against <a href="http://www.outoforder.cc/projects/apache/mod_log_sql/">mod_log_sql</a>, a module that, er, logs to an SQL database. This worked until we upgraded to Apache 2, which log_sql didn't support until recently. Since part of the logging system is the bit of AqCom that shows who linked here recently, I'd rather not convert it to run off plain text files (though I may be converting it to use <A HREF="http://www.sqlite.org/">Sqlite</A> at some point), so I created a perl script that feeds the log into the database in log_sql's format. It looks like this:</p>

<pre><code lang="perl">#!/usr/bin/perl

use DBD::mysql;

#Database options:
$dbUser = "user";
$dbPass = "password";
$dbName = "epistula";

$database = DBI->connect("dbi:mysql:$dbName:localhost:1114", $dbUser, $dbPass);

#204.95.98.252 - - [24/Dec/2003:15:23:38 +0000] "GET /archive/writing/2003/08/ 
	19 HTTP/1.0" 200 11873 "-" "msnbot/0.11 (+http://search.msn.com/msnbot.htm)"

while (&lt;&gt;) {
  my ($client, $identuser, $authuser, $date, $method,
      $url, $protocol, $status, $bytes, $referer,$agent) =

/^(S+) (S+) (S+) [(.*?)] "(S+) (.*?) (S+)" (S+) (S+) "(.*?)" "(.*?)"$/;
  # ...
        #$database->quote($thisdir);
        $q = "insert into apachelogs (remote_host, remote_user, request_time, 
			request_method, request_uri, request_protocol, status, bytes_sent, referer, agent)
        values
        (".$database->quote($client).", ".$database->quote($authuser).", '".$date."', "
			.$database->quote($method).", ".$database->quote($url).", "
			.$database->quote($protocol).", ".$database->quote($status).", "
			.$database->quote($bytes).", ".$database->quote($referer).", "
			.$database->quote($agent).")";

        #print $database->quote($url)."n";
        my $sth = $database->prepare($q);
        $sth->execute();

}</code></pre>

<p>...and is run using this crontab line:</p>

<pre><code lang="shell">@reboot tail -f /var/log/apache2/www.aquarionics.com | $EPBIN/apache2db.pl &amp;</code></pre>

<p>Now, the important thing to remember is that this gets pretty big pretty quickly, since it logs every line. It's vitally important that you don't under any circumstances, forget that you commented out <em>this</em> crontab line:</p>

<pre><code lang="shell">@daily echo "delete from apachelogs where time_stamp &lt; `date +%Y%m%d --date '1 month ago'`" | mysql epistula</code></pre>

<p>Because otherwise you'll discover that your daily database dumps start to hit 16Mb each... BZ compressed... 380Mb uncompressed... oh, lets say four months and twelve days later.</p>

<p>For example.</p>

<p>(I ran the above query, or one like it, just before I started this entry. It's just stopped:

<pre>mysql&gt; delete from apachelogs where time_stamp &lt; 20040825;
Query OK, 913830 rows affected (21 min 44.87 sec)</pre>

<p><ins datetime="2004-09-25T16:49:00+0000">Reformatting for the girlymen who don't have 2000px wide displays and are reading the RSS feed. See? This is why I want to only do partial content, because that way when I do something like this it only fucks up in IE</ins></p>]]></content:encoded>
	<dc:date>2004-09-25T12:32:13+00:00</dc:date>
	<dc:subject>aqcom</dc:subject>
	<dc:subject>Perl</dc:subject>
	<dc:subject>programming</dc:subject>
	<slash:comments>0</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1515</trackback:ping>
</item>
<item>
	<title>Cantrip Diary - ZopeTastic</title>
	<link>http://www.aquarionics.com/journal/2004/09/22/Cantrip_Diary_-_ZopeTastic</link>
	<comments>http://www.aquarionics.com/journal/2004/09/22/Cantrip_Diary_-_ZopeTastic</comments>
	<description>Okay, so my new workplace use Zope, so it&amp;#8217;s probably a good idea for me to use that as a framework. I mean, enough people use it for it not to be too bad, right?

	Dear god does it suck. I mean, Whales though really thin gauze, it sucks that badly. I got it working on my local network after swearing at it quite loudly. It&amp;#8217;s own personal religion of &amp;#8220;Not Invented Here&amp;#8221; is...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2004/09/22/Cantrip_Diary_-_ZopeTastic</guid>
	<content:encoded><![CDATA[<p>Okay, so my <a href="http://www.evolvingmedia.co.uk">new workplace</a> use Zope, so it&#8217;s probably a good idea for me to use that as a framework. I mean, enough people use it for it not to be too bad, right?</p>

	<p>Dear god does it suck. I mean, Whales though really thin gauze, it sucks that badly. I got it working on my local network after swearing at it quite loudly. It&#8217;s own personal religion of &#8220;Not Invented Here&#8221; is going to really annoy me, I can tell.</p>

	<p>Lets start with the web server. It doesn&#8217;t run though Apache without a tremendous amount of futzing around. I like Apache, and run everything else off Apache, so the fact that all my Zope applications will run off a non-standard port (There are fixes for this, yes, but they also require a tremendous amount of futzing around). This is annoying.</p>

	<p>Then there is the user system. I have a user account on this machine, you could even talk to it though <span class="caps">LDAP</span>. Requiring your own little world to run in &#8211; let alone where you don&#8217;t tell me the initial username &#38; password, or where the access file is, or anything &#8211; is really annoying. Also, it should be noted that in every <b><span class="caps">SINGLE</span></b> guide I found on how to reset the password manually it missed the fairly basic piece of information that once you have reset the password, you must <em>restart the Zope server</em> otherwise you will spend half an hour working out why it doesn&#8217;t take the data. This, admittedly, is partly a Debian Package problem, but since delving has lead me to believe that it <em>used</em> to ask you for a default username and password on configure, and now doesn&#8217;t, I&#8217;m leaping to the conclusion that whining isn&#8217;t going to fix this any.</p>

	<p>It should be a <em>default</em> requirement that <em>every</em> Debian package contains a file in /usr/share/docs explaining a) Which configure options were used, b) What you&#8217;re going to have to do next to make the package work, and c) Common pitfalls of the above. </p>

	<p>Three, the interface. In the last six months or so, the bar for a web-based interface has gone from a minor hurdle to a max-height pole-vault, mostly due to GMail. However, I can state with no fear of derision that &lt;textarea /&gt; is the <em>single most fucking <b>awful</b> method of inputting code since I used a <span class="caps">C64</span> with a broken delete key</em>, and the fact that the physical location of the source files is shielded from me (and will, I suspect, be chowned something silly anyway) means the best way I can see to develop with this pile of shit is to copy/paste from my <a href="http://www.editplus.com">default text editor</a>, which is just <em>retarded</em> (And yes, that is exactly how I compose blog entries, but I don&#8217;t normally need to keep blog entries in <span class="caps">CVS</span>). I suspect there is a better way to do this. In fact, I&#8217;m sure there must be, or else Zope would be deader than a very dead thing, which brings me to my next point.</p>

	<p><a href="http://zope.org/Documentation/Books/ZopeBook/2_6Edition/">The Docs</a></p>

	<p>My first problem with the docs is the inline commenting system. When I&#8217;m trying to digest a reasonably complex idea it is of no use whatsoever for the flow of the text to be interrupted constantly by inane slashdotesque comment. On the other hand, without the inline commenting I&#8217;d not have known that the <a href="http://zope.org/Members/jwhitener/zopeZoo_2_6">introduction to Zope</a> tutorial &#8211; which is far better than the one included in the distro &#8211; existed, also, I&#8217;d have read the chapter on <span class="caps">DTML </span><em>before</em> the chapter on the more advanced, easier to use, designer friendly and new paradigm of Zope Page Templates, which starts off by pointing out how crap everything you read in the previous chapter was. <b><span class="caps">ARGH</span></b></p>

	<p>Nevertheless, I shall persevere with this Evil, because I&#8217;ve got no choice but to know it, in the hope that I will learn my way around it.</p>

	<p>Okay, so &#8220;find / -iname ZopeZoo&#8221; has failed to find any of the files that are part of the tutorial. Where the hell is Zope putting the bloody files? *<strong><span class="caps">ARGH</span></strong>*</p>]]></content:encoded>
	<dc:date>2004-09-22T17:20:12+00:00</dc:date>
	<dc:subject>Cantrip</dc:subject>
	<dc:subject>programming</dc:subject>
	<dc:subject>Python</dc:subject>
	<slash:comments>4</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1514</trackback:ping>
</item>
<item>
	<title>Instant Cat Pictures</title>
	<link>http://www.aquarionics.com/journal/2004/09/05/Instant_Cat_Pictures</link>
	<comments>http://www.aquarionics.com/journal/2004/09/05/Instant_Cat_Pictures</comments>
	<description>Since I&amp;#8217;ve had my new camera-phone, I&amp;#8217;ve been taking random shots occasionally. After a fairly brief stint using Gallery and moblog.co.uk I&amp;#8217;ve done my usual thing of writing an Epistula Module to do it a) the way I want it, and b) within my own site. (I started off adapting the webcam module, but that&amp;#8217;s bitrotted slightly and was never very good, so I rewrote a whole new...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2004/09/05/Instant_Cat_Pictures</guid>
	<content:encoded><![CDATA[<p>Since I&#8217;ve had my new camera-phone, I&#8217;ve been taking random shots occasionally. After a fairly brief stint using <a href="http://www.gkhs.net/gallery/moblog">Gallery</a> and <a href="http://moblog.co.uk/blogs.php?show=1175">moblog.co.uk</a> I&#8217;ve done my usual thing of writing an Epistula Module to do it a) the way I want it, and b) within my own site. (I started off adapting the <a href="/webcam">webcam</a> module, but that&#8217;s bitrotted slightly and was never very good, so I rewrote a whole new thing that uses <a href="http://www.exif.org/"><span class="caps">EXIF</span></a> data &#8211; which my mobile doesn&#8217;t do, but my full camera does &#8211; and pretty <span class="caps">CSS</span> effects.</p>

	<p>Anyway, the upshots of this are that to the left on the front page is &#8220;That Which Is Seen&#8221;, the latest moblog picture, and clicking on it will take you to <a href="/moblog">/moblog</a>, an archive of everything. I need to make the archiving better and make it generate thumbnails properly, but for now this end is working. Next end is the python script to take a piped email and send the graphic and caption to the right places, then I&#8217;ll fix the front end properly. Meanwhile, it&#8217;s half one and I have work in the morning&#8230;</p>]]></content:encoded>
	<dc:date>2004-09-05T23:32:52+00:00</dc:date>
	<dc:subject>aqcom</dc:subject>
	<dc:subject>epistula</dc:subject>
	<dc:subject>PHP</dc:subject>
	<dc:subject>programming</dc:subject>
	<slash:comments>0</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1500</trackback:ping>
</item>
<item>
	<title>Quick Bookmarklet</title>
	<link>http://www.aquarionics.com/journal/2004/06/24/Quick_Bookmarklet</link>
	<comments>http://www.aquarionics.com/journal/2004/06/24/Quick_Bookmarklet</comments>
	<description>What is a bookmarklet? Basically it's a javascripted bookmark that, when you click on it, performs an action. Some might validate the page, some might highlight all the passive verbs in the document, there are loads of them.

This one searches the current site using Google. Install it by bookmarking the following link:

Search this site</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2004/06/24/Quick_Bookmarklet</guid>
	<content:encoded><![CDATA[<p>What is a bookmarklet? Basically it's a javascripted bookmark that, when you click on it, performs an action. Some might validate the page, some might <a href="http://www.ftrain.com/ThePassivator.html">highlight all the passive verbs in the document</a>, there are <a href="http://www.google.com/search?q=bookmarklet">loads of them</a>.</p>

<p>This one searches the current site using Google. Install it by bookmarking the following link:</p>

<p><a href="javascript:document.location='http://www.google.com/search?q='+escape('site:'+document.location.hostname+' '+window.prompt('Search '+document.location.hostname+' for',window.getSelection()))" onClick="window.alert('Don't click it, you fool')">Search this site</a></p>]]></content:encoded>
	<dc:date>2004-06-24T20:43:40+00:00</dc:date>
	<dc:subject>programming</dc:subject>
	<dc:subject>web development</dc:subject>
	<slash:comments>2</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1459</trackback:ping>
</item>
<item>
	<title>Errands and the End Of PHP</title>
	<link>http://www.aquarionics.com/journal/2004/03/29/Errands_and_the_End_Of_PHP</link>
	<comments>http://www.aquarionics.com/journal/2004/03/29/Errands_and_the_End_Of_PHP</comments>
	<description>Got stuff done.

	In this case, the stuff was of a many and varied nature and involved:

	
	Sorting out bank accounts
		Joining Blockbuster
		Joining Library
		Posting Stuff
	

	But also:

	
	Resolving that I will never again begin a personal project written in PHP.
	

	Yesterday, you see, I managed to get PHP5 working on Atoll, my local server. It works fine, from a technical standpoint, it...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2004/03/29/Errands_and_the_End_Of_PHP</guid>
	<content:encoded><![CDATA[<p>Got stuff done.</p>

	<p>In this case, the stuff was of a many and varied nature and involved:</p>

	<ul>
	<li>Sorting out bank accounts</li>
		<li>Joining Blockbuster</li>
		<li>Joining Library</li>
		<li>Posting Stuff</li>
	</ul>

	<p>But also:</p>

	<ul>
	<li>Resolving that I will never again begin a personal project written in <span class="caps">PHP</span>.</li>
	</ul>

	<p>Yesterday, you see, I managed to get <span class="caps">PHP5</span> working on Atoll, my local server. It works fine, from a technical standpoint, it installed straight into the right place, it works, it access the databases and everything.</p>

	<p>Epistula, however, doesn&#8217;t. Neither did AqWiki, Aquaintances, Klind or Pareidol. Why?</p>

	<p>Because somewhere in the <span class="caps">PHP5</span> development process, somebody wrote a function to return the contents of a directory back as an array, and called it <code>scandir()</code> which, co-incidentally, is the name of my stock function for returning the contents of a directory as an array. It means that, as of <span class="caps">PHP5</span>&#8217;s full release, my code is broken. This is, in fact, wrong.</p>

	<p>One of the great benefits of <span class="caps">PHP</span> is it&#8217;s integration. Everything available  was in <a href="http://www.php.net/manual">the manual</a>, which was searchable and contained the wit and wisdom of several years of <span class="caps">PHP</span> developers who had been where you are before you were there.</p>

	<p>The greatest flaw <span class="caps">PHP</span> has is it&#8217;s integration. Functions have been added haphazardly over the five major revisions to the point where, given a two word function, it&#8217;s equal odds to be <code>firstSecond()</code> as <code>first_second()</code> depending on who coded it when. Also, the willingness of the development team to break every previous <span class="caps">PHP</span> tutorial in a minor revision (Witness the whole <span class="caps">REGISTER GLOBALS</span> debacle), Perl &#8211; the language with the most established collection of modules on the market &#8211; has a namespace system for added on functionality which works so well even Python copied it. <span class="caps">PHP</span>, however, is no longer a stable platform to develop releasable code on, since your code may stop working at any point. Worst, this will manifest itself as a <span class="caps">PHP</span> syntax error, and you cannot guard against new internal functions unless you check the existence of every function before you use it.</p>

	<p>So, <span class="caps">PHP</span>, it&#8217;s been nice using you, but until you stop fucking around with the namespaces, it&#8217;s time to try something new.</p>

	<p>Suggestions, anyone?</p>

	<p><!-- --></p>]]></content:encoded>
	<dc:date>2004-03-29T16:59:40+00:00</dc:date>
	<dc:subject>programming</dc:subject>
	<dc:subject>PHP</dc:subject>
	<slash:comments>12</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1360</trackback:ping>
</item>
<item>
	<title>Best Joke Ever</title>
	<link>http://www.aquarionics.com/journal/2004/02/17/Best_Joke_Ever</link>
	<comments>http://www.aquarionics.com/journal/2004/02/17/Best_Joke_Ever</comments>
	<description>What do you call a man in sandals?

	Phillip Flop.

	Today, I&amp;#8217;ve been taught how wonderful Java is, how it runs perfectly on Solaris, and how it should backend onto Oracle.

	You see, whilst all the interesting people get to go to eTech, I&amp;#8217;ve spent today (and will spend tomorrow) at the Sun Tech Day here in Sunny (did you see what I did there?) London.

	Yay.</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2004/02/17/Best_Joke_Ever</guid>
	<content:encoded><![CDATA[<p>What do you call a man in sandals?</p>

	<p>Phillip Flop.</p>

	<p>Today, I&#8217;ve been taught how wonderful Java is, how it runs perfectly on Solaris, and how it should backend onto Oracle.</p>

	<p>You see, whilst all the <em>interesting</em> people get to go to eTech, I&#8217;ve spent today (and will spend tomorrow) at the <a href="http://uk.sun.com/events/2004/feb/techdays/">Sun Tech Day</a> here in Sunny (did you see what I did there?) London.</p>

	<p>Yay.</p>]]></content:encoded>
	<dc:date>2004-02-17T19:07:40+00:00</dc:date>
	<dc:subject>Humour</dc:subject>
	<dc:subject>programming</dc:subject>
	<slash:comments>3</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1322</trackback:ping>
</item>
<item>
	<title>Muttering</title>
	<link>http://www.aquarionics.com/journal/2003/12/21/Muttering</link>
	<comments>http://www.aquarionics.com/journal/2003/12/21/Muttering</comments>
	<description>So, At close of play Sunday (02:45 AM) I&amp;#8217;ve suceeded in writing the istic.net wonderful user system that will consolodate all the accounts on most of the various websites I&amp;#8217;ve done. CIN/R has a design, said user system, campaigns, character class, preferences &amp;#38; architecture, CIN/F still needs to be designed then moved over (And probably rewritten, but that&amp;#8217;s another job)...</description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2003/12/21/Muttering</guid>
	<content:encoded><![CDATA[<p>So, At close of play Sunday (02:45 AM) I&#8217;ve suceeded in writing the istic.net wonderful user system that will consolodate all the accounts on most of the various websites I&#8217;ve done. <span class="caps">CIN</span>/R has a design, said user system, campaigns, character class, preferences &#38; architecture, <span class="caps">CIN</span>/F still needs to be designed then moved over (And probably rewritten, but that&#8217;s another job) <span class="caps">JIN</span>/HIN/NIN have to be confirmed &#8211; It&#8217;s an awfully stupid thing to do if I&#8217;m just going to scrap the whole idea again &#8211; Which leaves only Touchstone (Now <span class="caps">CIN</span>/S), Threadnaut (AIN/T) and Angelica (MIN?) on the geek-list. Of course, then there is Toffia, Alice, Cevearn, <span class="caps">ACDS</span> etc.</p>

	<p>Tomorrow, then, should leave <span class="caps">CIN</span>/R with characters, games, lassos and approvals, with artifacts to follow.</p>

	<p>Then, of course, I have to redesign <span class="caps">CIN</span>/F.</p>]]></content:encoded>
	<dc:date>2003-12-21T02:57:38+00:00</dc:date>
	<dc:subject>Personal</dc:subject>
	<dc:subject>programming</dc:subject>
	<slash:comments>1</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1261</trackback:ping>
</item>
<item>
	<title>General Public Virus</title>
	<link>http://www.aquarionics.com/journal/2003/11/25/General_Public_Virus</link>
	<comments>http://www.aquarionics.com/journal/2003/11/25/General_Public_Virus</comments>
	<description></description>
	<guid isPermaLink="true">http://www.aquarionics.com/journal/2003/11/25/General_Public_Virus</guid>
	<content:encoded><![CDATA[<p>Today, I&#8217;m going to take a minute out of my working day and rant at you about software development.</p>

	<p>I work for a company that does Cool Things With Data. That&#8217;s all you know, that&#8217;s all I&#8217;ll tell you. When we are looking for testers, I shall mention what it is, and you can all go &#8220;oooh&#8221;.</p>

	<p>One of the things I&#8217;ve done in this is created the method by which <span class="caps">RSS</span> data is put into the program (Our automated statistics are generated into <span class="caps">RSS</span>, because I was fairly sure it would be easy to get it out again). Now I want to get it out again, so I&#8217;m going to have to write an <span class="caps">RSS</span>-Reading Thingy.</p>

	<p>This is not my desire. The last thing I want to spend x amount of my life doing is writing <span class="caps">RSS</span> parsers. Far better minds than mine have spent ages on the problem of parsing the amount of really, truely horrible things that people do with <span class="caps">RSS</span>, and they have released these things.</p>

	<p>The best and most respected that has been released in <span class="caps">PHP</span>, which is the environment I&#8217;m doing this in, is <a href="http://magpierss.sf.net">Magpie <span class="caps">RSS</span></a>, which you give a <span class="caps">URL</span> and it gives you an object containing data. So far, so hoopy. I installed it, integrated it, loved it and forgot about it.</p>

	<p>Now we come to Second Stage stuff, and I&#8217;m looking at the licences of the bits we&#8217;re using. The sections we grabbed from Epistula are fine, because they&#8217;re <span class="caps">BSD</span> licenced. Magpie isn&#8217;t, because it&#8217;s <acronym title="General Public Licence">GPL</acronym>, and the <span class="caps">GPL </span><a href="http://www.gnu.org/licenses/gpl-faq.html#IfLibraryIsGPL">specifically states</a> that I can&#8217;t include a <span class="caps">GPL</span> library if my code isn&#8217;t going to be <span class="caps">GPL</span>&#8217;d.</p>

	<p>It isn&#8217;t. Not because of any &#8220;We want to trap our users&#8221; stuff, but simply because out continued existance of a company involves people paying us for our services. With this money, they can pay me. With this payment, I can write more software. And eat. And buy broadband. And spend my weekends making free software. And I realise that in the ivory tower of the Free Software Movement it doesn&#8217;t matter, because All Non-Free Software Is Evil.</p>

	<p>Out of interest, any Free Software Zealots in the audience know how we programmers are supposed to earn our food?</p>

	<p>This shouldn&#8217;t matter. This is Politics, and I don&#8217;t care that <span class="caps">ESR</span> supports Baring Arms, nor which direction Linus voted last election, nor what <span class="caps">RMS</span> thinks of his country&#8217;s economic prospects.</p>

	<p>What I care about, as a user and a developer, is that I am currently unable to use the best tool for the job because of the politics of making something free.</p>

	<p>So, the next time you decide you want to release under a free licence, remember there are other licences than the <span class="caps">GPL</span> that even <a href="http://www.debian.org/intro/free">Debian likes</a>.</p>

	<p>And now, Back to <span class="caps">XML</span> parsing. Yay.</p>]]></content:encoded>
	<dc:date>2003-11-25T10:22:39+00:00</dc:date>
	<dc:subject>computing</dc:subject>
	<dc:subject>programming</dc:subject>
	<dc:subject>BrowserAngel</dc:subject>
	<slash:comments>5</slash:comments>
	<slash:section>journal</slash:section>
	<trackback:ping>http://www.aquarionics.com/trackback/journal/1249</trackback:ping>
</item>
</channel>
</rss>