<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Riseburn</title>
 <subtitle>Articles</subtitle>
 <link href="http://riseburn.net/feed" rel="self"/>
 <link rel="alternate" type="text/html" href="http://riseburn.net/" />

 <updated>2011-05-19T08:55:10Z</updated>
<entry>
<title>Problems with languages</title><link href='/articles/problems-with-languages'/><id>tag:risburn.net:97</id><updated>2011-04-22T22:31:30Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Over the years, I've had many conversations about programming languages. Looking back on them now, they were mostly pointless. However, I think there are a few areas ripe for improvement.</p>

<h3>Isolation</h3>

<p>To date, compilers, editors and code management have all been seen as separate. This places bounds on improvements because parts taken and improved in isolation either aren't effective or have a detrimental effect on the system as a whole.</p>

<h3>Storage</h3>

<p>Almost all programming languages and editors read and write plain text files. This means that what the engineer edits, what the compiler sees and what is stored on disk are forced to be the same at all times. This has the following effects:</p>

<ol>
<li>it prohibits <em>real</em> out of band information, eg comments and inline documentation.</li>
<li>storage can't be optimised for anything other than editing, eg use of a tree structure to aid language agnostic comparison tools.</li>
<li>style can't be separated from content - where do you like to put your curly brackets? The compiler doesn't care so it should be an editor thing.</li>
</ol>

<h3>Code blocks</h3>

<p>Code blocks are currently special in popular languages. This can be evidenced by trying to replicate if within the language using code blocks. For example, in Java, one would have to use multiple classes adhering to an interface or reflection to get the same thing. This is a problem when you're passing code blocks to other parts of the system to be run.</p>

<h3>Chopping it all up</h3>

<p>The code you write is rarely an island. Your product is not your code; your product is the sum of your code and many other components you didn't write. The management of your code within the context of the multitude of components making up your product is critical. This includes taking account of dependancies across versions and multiple versions of the <em>same</em> component within a system.</p>

<h3>Forced optmisation</h3>

<p>Here are two examples of creating a mutable <a href="http://en.wikipedia.org/wiki/Hash_table">hash table</a>:</p>

<ul>
<li><code>Map options = new HashMap();</code> (in <a href="http://en.wikipedia.org/wiki/Java_(programming_language)">Java</a>)</li>
<li><code>NSMutableDictionary options = [NSMutableDictionary dictionary];</code> (using <a href="http://en.wikipedia.org/wiki/Cocoa_(API)">Cocoa</a>) </li>
</ul>

<p>Functionally, they're are almost identical. However they are slightly different in that in the the Java example the engineer chooses the performance, and in the Cocoa example, the engineer leaves that up to the underlying API.</p>

<p>Neither is strictly wrong, but neither is quite right either. Java should not force the engineer into <a href="http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize">premature optimisation</a>, but it's difficult to see how Cocoa can always get it right at run time. There are many examples of this kind of thing in most major languages, especially in the type system.</p>

<h3>Solutions?</h3>

<p>I suspect that a full versioned bundle that exists both on disk and within the version control system as an atomic object would be a good start. This would contain both source code and compiler output, along with dependancies and version preferences.</p>

<p>As for what the language itself would be like, I think it should at least:</p>

<ol>
<li>natively support multi-threading and the throwing around of code blocks.</li>
<li>not contain anything the compiler can work out for itself. Anything not critical to program flow should be in a side channel.</li>
<li>not present <a href="http://en.wikipedia.org/wiki/False_dilemma">false dilemmas</a> with regards to optimisation. This could be by allowing the engineer to state a preference in a side channel, or performance metrics from test systems to update the preference for specific platforms.</li>
<li>put anything the compiler doesn't need but the engineer would like in a side channel (eg comments) or in editor preferences (eg style information).</li>
</ol>
 ]]></content></entry><entry>
<title>On the UI of links</title><link href='/articles/on-the-ui-of-links'/><id>tag:risburn.net:89</id><updated>2011-02-19T16:50:00Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Here are three sentences - identical text, but with different linking styles:</p>

<p><style>.a89high {text-decoration:underline !important;color: rgb(0, 0, 238) !important;}.a89medium {text-decoration:none !important;color: rgb(0, 0, 255) !important;}.a89low {text-decoration:none !important;color: rgb(6, 69, 173) !important;}.a89medium:hover,.a89low:hover {text-decoration:underline !important}</style></p>

<ul>
<li><p>The quick brown fox jumps over the lazy dog.</p></li>
<li><p><a href="http://en.wiktionary.org/wiki/the" class="a89high">The</a> <a href="http://en.wiktionary.org/wiki/quick#Adjective" class="a89high">quick</a> <a href="http://en.wikipedia.org/wiki/Brown" class="a89high">brown</a> <a href="http://en.wikipedia.org/wiki/Fox" class="a89high">fox</a> <a href="http://en.wikipedia.org/wiki/Jumping" class="a89high">jumps</a> <a href="http://en.wiktionary.org/wiki/over#Preposition" class="a89high">over</a> <a href="http://en.wiktionary.org/wiki/the" class="a89high">the</a> <a href="http://en.wikipedia.org/wiki/Laziness#Animals" class="a89high">lazy</a> <a href="http://en.wikipedia.org/wiki/Dog" class="a89high">dog</a>.</p></li>
<li><p>The quick brown <a href="http://en.wikipedia.org/wiki/Fox" class="a89low">fox</a> jumps over the lazy <a href="http://en.wikipedia.org/wiki/Dog" class="a89low">dog</a>.</p></li>
</ul>

<p>All quite different. The final line shows the current Wikipedia style: a compromise between the extremes of the first two. It's pretty much the same for every other web page out there: a compromise between readability of the textual content verses the <a href="http://en.wikipedia.org/wiki/Findability">findability</a> of the hyperlinks.</p>

<p>I propose that this is a <a href="http://en.wikipedia.org/wiki/False_dilemma">false dilemma</a>; possibly coming from an implicit belief that the page is static when viewing lots of text.</p>

<p>I think there are three states a user (and thus the page) should be in:</p>

<ol>
<li>Reading content, not interested in links at all.</li>
<li>Looking for links.</li>
<li>Checking the link is the right one.</li>
</ol>

<p>Each transition between the user's state should be accompanied by a change in visuals. For example, the text below decorates links with underlines when the mouse hovers over the link (states 2 &harr; 3).</p>

<ul>
<li><a href="http://en.wiktionary.org/wiki/the" class="a89medium">The</a> <a href="http://en.wiktionary.org/wiki/quick#Adjective" class="a89medium">quick</a> <a href="http://en.wikipedia.org/wiki/Brown" class="a89medium">brown</a> <a href="http://en.wikipedia.org/wiki/Fox" class="a89medium">fox</a> <a href="http://en.wikipedia.org/wiki/Jumping" class="a89medium">jumps</a> <a href="http://en.wiktionary.org/wiki/over#Preposition" class="a89medium">over</a> <a href="http://en.wiktionary.org/wiki/the" class="a89medium">the</a> <a href="http://en.wikipedia.org/wiki/Laziness#Animals" class="a89medium">lazy</a> <a href="http://en.wikipedia.org/wiki/Dog" class="a89medium">dog</a>.</li>
</ul>

<p>In addition, all the other links on this website should also change visuals between states 1 &harr; 2. If the user moves, the links appear. If the user stays still for three seconds, the links fade away. Interestingly, even though the fade is fast, the visuals just look wrong if it's not there.</p>

<p>For reference, I've implemented the 1 &harr; 2 state change as a small javascipt files called <a href="/links.js">links.js</a>.</p>
 ]]></content></entry><entry>
<title>2010 Calendar</title><link href='/articles/2010-calendar'/><id>tag:risburn.net:83</id><updated>2009-12-15T18:32:00Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>I created my first calendar for <a href="/articles/designing-a-better-calendar" title="Riseburn article: Designing a better calendar">2008</a>, a better one for <a href="/articles/2009-calendar" title="Riseburn article: 2009 Calendar">2009</a> and once again it's that time of year.</p>

<p>However, I'm still not quite content with the results of the 2009 calendar. Specifically, I don't like the month names down the left side as one has to constantly reference the left side of the page even when looking at a date on the right. This is even worse than the similar problem of week day names as the calendar is wider than it is tall meaning the text is even farther from where it is needed.</p>

<p>After many iterations and suggestions from friends I've come up with what I think is a reasonable solution. Each Monday box has an additional value - a three letter month value: </p>

<p><img src="/2010-calendar/mondays.png" alt="Monday labels" /></p>

<p>This solution means that month names are never more than three squares away but do not interrupt the user too much by being on every square.</p>

<p>So, here's the first version of the <a href="/2010-calendar/2010.pdf">2010 calendar</a>.</p>
 ]]></content></entry><entry>
<title>2009 Calendar</title><link href='/articles/2009-calendar'/><id>tag:risburn.net:76</id><updated>2009-01-15T22:26:27Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>In the dying months of 2008 I wrote of my efforts to <a href="/articles/designing-a-better-calendar" title="Riseburn article: Designing a better calendar">design a better calendar</a>.</p>

<p>I'm grateful to all the comments I've received. In response, I've made a few improvements:</p>

<ul>
<li>The lines between the days have been thinned from 1mm to 0.4mm.</li>
<li>The colours were originally based off the spectrum. In order to remove any confusion, they have been reversed.</li>
<li>The month names have been reduced from 15pt to 10pt.</li>
</ul>

<p>Without further ado, here's the first version of the <a href="/2009-calendar/2009.pdf">2009 calendar</a>.</p>
 ]]></content></entry><entry>
<title>Oatmeal and Raisin Cookies</title><link href='/articles/oatmeal-and-raisin-cookies'/><id>tag:risburn.net:74</id><updated>2008-12-07T11:53:18Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Here's a recipe for making oatmeal and raisin cookies. The ingredients are the same as I was given but the method has been simplified somewhat.</p>

<h4>Ingredients</h4>

<pre><code>175g butter
1/4 tsp salt (if butter unsalted)
160g light brown sugar
130g caster sugar
1 large egg
1 tsp vanilla extract
3/4 tsp baking soda (known to work without)
3/4 tsp baking powder
160g plain flour

170g rolled oats
200g raisins
</code></pre>

<h4>Method</h4>

<ol>
<li>Using one bowl, add everything up to and including the plain flour.</li>
<li>Mix the contents together.</li>
<li>Add the oats and the raisins</li>
<li>Mix the contents together.</li>
<li>Drop dough on to an ungreased baking sheet with a 5cm gap between blobs.</li>
<li>Bake at 190&deg;C for 10 minutes (in a fan assisted oven)</li>
<li>Leave to cool</li>
</ol>
 ]]></content></entry><entry>
<title>Kardashev scale</title><link href='/articles/kardashev-scale'/><id>tag:risburn.net:67</id><updated>2008-11-16T13:03:51Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>According to Wikipedia, "The <a href="http://en.wikipedia.org/wiki/Kardashev_scale">Kardashev scale</a> is a method of measuring a civilization's level of technological advancement." For reference the formula is:</p>

<table style='border-collapse:collapse'>
<tr><td rowspan='2' style='vertical-align:middle'>K</td><td rowspan='2' style='vertical-align:middle'>=</td><td>log<sub>10</sub>(Watts) &minus 6</td></tr>
<tr><td style='border-top:1px solid black;text-align:center'>10</td></tr>
</table>

<p>There's no variable for population, so my yearly average of <a href="http://en.wikipedia.org/wiki/List_of_countries_by_energy_consumption_per_capita">5.2 thousand Watts</a> in 2003 would give me a measly score of &minus;.23. However, I think my score should be the same as my civilization, which is Type 0.71.</p>

<p>So, I've re-formed the formula to factor in population while giving me approximately the same answer:</p>

<table style='border-collapse:collapse'>
<tr><td rowspan='2' style='vertical-align:middle'>K<sub>P</sub></td><td rowspan='2' style='vertical-align:middle'>=</td><td>log<sub>10</sub>(Watts) &minus log<sub>10</sub>(Population)  + 3.4</td></tr>
<tr><td style='border-top:1px solid black;text-align:center'>10</td></tr>
</table>

<p>All very good. Now imagine that I'm part of Type I civilization, what would my yearly average be? The answer comes to a staggering 4 million Watts. Just for me. A question for a <a href="http://en.wikipedia.org/wiki/Science_fiction">science fiction</a> author might be "What does a civilization look like if everyone has access to a few MegaWatts?"</p>
 ]]></content></entry><entry>
<title>Exchange rates</title><link href='/articles/exchange-rates'/><id>tag:risburn.net:64</id><updated>2008-11-09T15:30:52Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>According to Wikipedia, the <a href="http://en.wikipedia.org/wiki/United_Kingdom">United Kingdom</a> has a per capita GDP of US$37,328 which (according to Google) is about &pound;20,223. Again from Wikipedia, average <a href="http://en.wikipedia.org/wiki/Working_time">annual working hours</a> in the UK is 1652.</p>

<p>So, on average, the UK worker is paid &pound;14.40 per hour (before tax). What's interesting about this is that the calculation can be done the other way:</p>

<p><center>&pound;1 &asymp; 0.069 hours (4.1 minutes)</center></p>

<p>To put this in more personal terms, approximately 4.1 minutes of your life is worth &pound;1. You'll never see that four minutes again; you'll never get it back.</p>
 ]]></content></entry><entry>
<title>Curtains</title><link href='/articles/curtains'/><id>tag:risburn.net:70</id><updated>2008-10-30T22:11:01Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>I love the BBC's <a href="http://www.bbc.co.uk/iplayer/">iPlayer</a>. There's just one problem - every few minutes my screen goes to sleep and I have to wiggle the mouse.</p>

<p>This problem can be mitigated by using a tool called <a href="http://lightheadsw.com/caffeine/">Caffeine</a> from Lighthead Software. Except I forget to switch it off and the machine stay active all night.</p>

<p>So, I've written my own Mac OS X <a href="http://en.wikipedia.org/wiki/Site-specific_browser">site-specific browser</a> for iPlayer and named it Curtains. When this application opens it goes straight to the iPlayer. When you're on an episode page, the screen will not dim.</p>

<p>So, if this meets your use case too, feel free to download and give it a go:</p>

<p><center><a style="text-decoration:none;" href="/projects/curtains/curtains.zip"><img  border="0" src="/projects/curtains/TheatreSpotlights_48x48.png"><br>Curtains</a></center></p>

<p>Additionally, there is a <a href="/projects/curtains/">project page</a>.</p>
 ]]></content></entry><entry>
<title>Designing a better calendar</title><link href='/articles/designing-a-better-calendar'/><id>tag:risburn.net:61</id><updated>2008-08-21T21:43:00Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>For the past few years I've been trying to acquire a copy of Edward R. Tufte's <a href="http://www.edwardtufte.com/tufte/books_ei">Envisioning Information</a> and last week I succeeded.</p>

<p>I'd hoped for a book that would tell me what to do. I did get a little instruction, but this was in-between a gorgeous tour of both good and bad practice. It seems clear that the learning is in the doing.</p>

<p>Conveniently, I've just such a project in mind: my calendar. On my cubicle wall is a year planner. It's an A3 photocopy of a an A4 original and a bad photocopy at that.</p>

<p>So, I've tried to improve it, and the result is my <a href="/designing-a-better-calendar/2008.pdf">2008 calendar</a>. Here a list of what I've changed:</p>

<ul>
<li>The new one is in colour.</li>
<li>The new one has coloured workdays and white holidays. This makes Wednesday easier to find.</li>
<li>White borders around the days. The days should be prominent, not the borders.</li>
<li>Smaller text for the month names to enable bigger day boxes.</li>
<li>Smaller text for the calendar title. If one doesn't know what year it is by the end of January then a calendar won't be much help anyway.</li>
<li>Rows are split into three month quarters to make month recognition easier.</li>
</ul>

<p>I appreciate 2008 is half gone, but this is just a practice. I may improve it for 2009.</p>
 ]]></content></entry><entry>
<title>Georgia</title><link href='/articles/georgia'/><id>tag:risburn.net:60</id><updated>2008-07-26T17:05:10Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Last year I published a small programming language named <a href="/articles/flores" title="Riseburn article: Flores">Flores</a>. At the time it seamed that no-one could be productive with a language that limited. Well, one can indeed get a long way; Flores existed a good 4 months before the post and makes it 19 months old.</p>

<p>Inevitably one does need new features, a programmer cannot live by Strings alone. So lets create a version 2 of Flores, one with more features. The problem with that is that there will be some inevitable questions:</p>

<ul>
<li>Will version 1 code work with a version 2 scripting engine?</li>
<li>Do I have to upgrade to get keep getting bug fixes?</li>
</ul>

<p>These are valid questions, but they shouldn't even need to be asked. There's nothing wrong with Flores, it's complete in its own right. That's what fulfilling the requirements means. Really what we mean here is: build a new (and different) language on top of the Flores source code and add fundamentally new features.</p>

<p>So, without further ado, meet <a href="/projects/lang/Georgia/">Georgia</a>. It has the following features:</p>

<ol>
<li>Everything Flores had at release 6 (unless otherwise stated)</li>
<li>Natively works with Objects instead of Strings</li>
<li>Allowes integers to be parsed without quotes. Eg 1 instead of "1"</li>
<li>Digits are not allowed as part of function names.</li>
</ol>

<p>Georgia is available <a href="/projects/lang/Georgia/">here</a> and as with Flores I hope you find it useful.</p>
 ]]></content></entry><entry>
<title>Marriage</title><link href='/articles/marriage'/><id>tag:risburn.net:59</id><updated>2008-05-24T20:39:54Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Here in the UK we have so many ways of pairing up that it can get a bit confusing. So to help me work out which one's which I've put this little table together:</p>

<table class="marriage">
<tr class="t"><th><th>Unmarried<th>Church marriage<th>Civil marriage<th class="r">Civil partnership</tr>

<tr class="m"><th class="l">Allowed to use the title <em>marriage</em><th class="c"><th class="c"><img src="/famfamfam/tick.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="r"><img src="/famfamfam/cross.png"/></tr>

<tr class="m"><th class="l">Allowed to use religious wording during ceremony<th class="c"><th class="c"><img src="/famfamfam/tick.png"/><th class="c"><img src="/famfamfam/cross.png"/><th class="r"><img src="/famfamfam/cross.png"/></tr>

<tr class="m"><th class="l">Valid within religion<th class="c"><img src="/famfamfam/cross.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="c"><img src="/famfamfam/cross.png"/><th class="r"><img src="/famfamfam/cross.png"/></tr>

<tr class="m"><th class="l">Full partnership rights under law<th class="c"><img src="/famfamfam/cross.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="r"><img src="/famfamfam/tick.png"/></tr>


<tr class="m"><th class="l">Next of kin<th class="c"><img src="/famfamfam/cross.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="r"><img src="/famfamfam/tick.png"/></tr>

<tr class="m"><th class="l">Right to be at partner's hospital bedside<th class="c"><img src="/famfamfam/cross.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="r"><img src="/famfamfam/tick.png"/></tr>

<tr class="m"><th class="l">Annulled if not children produced<th class="c"><th class="c"><img src="/famfamfam/cross.png"/><th class="c"><img src="/famfamfam/cross.png"/><th class="r"></tr>

<tr class="m"><th class="l">Allowed joint adoption<th class="c"><img src="/famfamfam/cross.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="c"><img src="/famfamfam/tick.png"/><th class="r"><img src="/famfamfam/tick.png"/></tr>

<tr class="b"><th class="l">Allowable combinations<th class="c"><img src="/famfamfam/male.png"/><img src="/famfamfam/female.png"/><br /><img src="/famfamfam/male.png"/><img src="/famfamfam/male.png"/><br /><img src="/famfamfam/female.png"/><img src="/famfamfam/female.png"/><th class="c"><img src="/famfamfam/male.png"/><img src="/famfamfam/female.png"/><th class="c"><img src="/famfamfam/male.png"/><img src="/famfamfam/female.png"/><th class="r"><img src="/famfamfam/male.png"/><img src="/famfamfam/male.png"/><br /><img src="/famfamfam/female.png"/><img src="/famfamfam/female.png"/></tr>
</table>

<p>I hope that clears things up.</p>
 ]]></content></entry><entry>
<title>Dear Scotland</title><link href='/articles/dear-scotland'/><id>tag:risburn.net:58</id><updated>2008-05-21T22:55:21Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>It seems such a long time ago that we were married. I know that our courtship was long and difficult, and that I wasn't your first choice of partner; if you were to wed at all. I guess now, as our 300th anniversary itself passes into history, is a good time to take stock and decide if we're right for each other now.</p>

<p>It is true we married, each of us, for very different reasons. I remember at the time you may have felt you had no other choice, and I was not a chivalrous suitor. I know you haven't let those early hurts go; I'm sorry that I've never been able to make it up to you.</p>

<p>There comes a time in a country's life, whether they're ready for it or not, when they can't force their partners to stay. I fear my time has come, when I realise that all those thoughtless little things I did will be held against me. I know that you've been drawing away from me a while now and you may think I just don't care any more. Nothing however could be further from the truth: you're more beautiful today than you ever were. And it has been with a heavy heart that I'm getting ready to let you go.</p>

<p>Please know that whatever you may hear, I do want you to stay. Not anymore to have dominion over you, I know that time has passed, but because I like your company, the way you laugh, and all those other little quirks only an old couple can know about each other.</p>

<p>Yours, always</p>

<p>England</p>
 ]]></content></entry><entry>
<title>In search of a crime</title><link href='/articles/in-search-of-a-crime'/><id>tag:risburn.net:56</id><updated>2008-01-20T11:18:11Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Following on from <a href="/articles/in-search-of-no-crime" title="Riseburn article: In search of no crime">In search of no crime</a> it seems reasonable to spend a little time peeling apart the crime itself.</p>

<p>After a little thought it was clear that a <em>crime</em> can be split into three sections:</p>

<ol>
<li>Intent</li>
<li>Action</li>
<li>Outcome</li>
</ol>

<p>For example, because the driver is concentrating on something else (intent), a car might be wobbling down the road (action) and hits someone (outcome).</p>

<p>What's interesting here is that the criminal justice system, ostensibly in the UK, works the other way:</p>

<ol>
<li>Detect outcome</li>
<li>Detect action</li>
<li>Ascertain intent</li>
</ol>

<p>This is necessary because until we see an outcome from the crime, even if that's just someone witnessing it, a crime cannot be judged to have occurred.</p>

<p>To understand the impact of of all of this it may be worth looking at taking the perspectives of the 3 groups in <a href="/articles/in-search-of-no-crime" title="Riseburn article: In search of no crime">In search of no crime</a>. Here's a table showing what part each group plays in the 6 events from above: </p>

<p><style>
 .isoac .in {background: #ddd;width:100px;}
 .isoac {width:500px;}
</style></p>

<table class='isoac'>
<tr><th></th><th class='th'>Perpetrator</th><th class='th'>Victim</th><th class='th'>Onlooker</th></tr>
<tr><th class='lh'>Intent</th><td class='in'>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th class='lh'>Action</th><td class='in'>&nbsp;</td><td class='in'>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th class='lh'>Outcome</th><td class='in'>&nbsp;</td><td class='in'>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th class='lh'>Detect outcome</th><td>&nbsp;</td><td>&nbsp;</td><td class='in'>&nbsp;</td></tr>
<tr><th class='lh'>Detect action</th><td>&nbsp;</td><td>&nbsp;</td><td class='in'>&nbsp;</td></tr>
<tr><th class='lh'>Ascertain intent</th><td>&nbsp;</td><td class='in'>&nbsp;</td><td class='in'>&nbsp;</td></tr>
</table>

<p>How these different perspectives affect things is left to the reader. </p>
 ]]></content></entry><entry>
<title>The game is on</title><subtitle>With responses from kyb and John</subtitle><link href='/articles/the-game-is-on'/><id>tag:risburn.net:52</id><updated>2007-06-28T07:27:12Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Think of a game. Now, it's likely that the game you've thought of has these three characteristics:</p>

<ol>
<li>a winner</li>
<li>a loser</li>
<li>an end</li>
</ol>

<p>A critical point seems to be that until the end of the game there is neither a winner or loser. For example, it makes sense to say "who won the 1997 <a href="http://en.wikipedia.org/wiki/The_Boat_Race">boat race</a>?"; yet it makes no sense yet to ask "who won the 2097 boat race?".</p>

<p>Now, imagine a game with the following characteristics:</p>

<ol>
<li>it only ends when the last player leaves</li>
<li>players can play individually and in any number of teams at the same time, and can change teams at any point</li>
<li>players time in the game is finite</li>
<li>players can be actively removed from the game</li>
<li>most teams take the removal of a member very seriously</li>
<li>a <em>losing</em> team always gets another move, even if a proxy carries it out. </li>
</ol>

<p>It's very difficult to see how one could ever <em>win</em> such a game, or in fact what <em>winning</em> would even mean in such a context.</p>

<p>Now, lets take a specific example of a specific game that most people would characterise with the fist list: a <a href="http://en.wikipedia.org/wiki/World_War_I">World War I</a>. It seams to fit, there was a winner, a loser, and an end (11 November 1918). Except it didn't, the loser's kept on living and got another move: <a href="http://en.wikipedia.org/wiki/World_War_II">World War II</a>. All real life conflicts like war, terrorism, gang warfare, or a dispute with your neighbour, are actually of the second type of game, not the first.</p>

<p>Which is unfortunate really; just when the winner basks in glory the loser makes another move. Pity the winner.</p>
 ]]></content></entry><entry>
<title>Flores</title><link href='/articles/flores'/><id>tag:risburn.net:51</id><updated>2007-04-12T22:30:20Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Just over a year ago I wrote the post entitled <a href="/articles/yet-another-programming-language" title="Riseburn article: Yet Another Programming Language">Yet Another Programming Language</a>. That particular project hasn't quite been finished yet. However, I <em>have</em> written a very small execution engine in Java named Flores.</p>

<p>Flores has the following <em>features</em>:</p>

<ol>
<li>One data type - String. Well, two if you count the singleton <code>null</code>.</li>
<li>The <code>while</code> operator, complete with <code>continue</code> and <code>break</code>.</li>
<li>The <code>if</code> operator, complete with <code>else</code>.</li>
<li>The <code>=</code> operator.</li>
<li>All functions are defined externally in Java as static methods. These have to be added to a Flores engine object at Java runtime.</li>
<li>No functions by default. The developer needs to add them.</li>
</ol>

<p>This may look like an odd features list, but there is method in the madness. I have often needed a small scripting lanaguage with one or more of the following features:</p>

<ul>
<li>Security. I want total control over a script's access to the outside world. With Flores, if I don't explicitly add a function, it's not there.</li>
<li>Maintainability. At 731 lines, including comments, there can only be so many bugs.</li>
<li>Simplicity. I don't want tail recursion or co-routines. When I say simple, I really mean it.</li>
<li>Licensing. I need a license that's business friendly, and for that, I've always found the <a href="http://www.opensource.org/licenses/zlib-license.php">zlib/libpng License</a> reliable.</li>
</ul>

<p>Flores is available <a href="http://riseburn.net/projects/lang/Flores/">here</a>. If you have some of the same criteria that I do, hopefully you'll find it useful. </p>
 ]]></content></entry><entry>
<title>Tax Loopholes</title><subtitle>With responses from kybernetikos</subtitle><link href='/articles/tax-loopholes'/><id>tag:risburn.net:32</id><updated>2007-03-04T23:59:46Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>The dictionary on my computer defines a loophole as "an ambiguity or inadequacy in the law or a set of rules". However, in most countries, the law is defined to be correct; one cannot plead in a court that the law is wrong. If the law is defined to be correct, a loophole, tax or otherwise cannot exist.</p>

<p>However, let's consider the following situation: Alex normally pays &pound;10,000 in tax per year. However, upon reading the <a href="http://www.hmrc.gov.uk/">Inland Revenue</a> rules, notices that only &pound;6,000 need be paid. What should Alex do? Remember, while a payment may be morally questionable, both are entirely legal.</p>

<p>Clearly, the difference can't be described as <a href="http://en.wikipedia.org/wiki/Tax">tax</a> because Alex isn't compelled to pay it. Therefore, Alex would be making a &pound;4,000 donation to the state.</p>

<p>Isn't Alex nice.</p>
 ]]></content></entry><entry>
<title>Choices</title><subtitle>With responses from kybernetikos</subtitle><link href='/articles/choices'/><id>tag:risburn.net:50</id><updated>2007-03-04T22:24:11Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>The word choice is very popular in our country these days.</p>

<p>On the surface this is a great idea, but it's important to remember that a choice is only truly free if one's choice isn't affected by another's.</p>

<p>Say Alex and Chris are given the choice of 3 holidays: Norway, Kenya and New Zealand. But if there is only one vacancy per destination Alex and Chris can't both choose Kenya. Not really a free choice.</p>

<p>In order to have a free choice there needs to be at least as many of each option available as there are choosers.</p>

<p>So, imagine we have 450 children and 3 schools. In order to be completely free choice each school needs to make avaliable 450 places: 1350 places in total. However, there are only 450 children, so 900 places will be wasted. This may cost nothing if it takes a school less than 6 months to create a place. If however it takes longer, an actual place, with classes, buildings and the land to put them on need to be built in anticipation of a child coming; but with only a 1 in 3 chance of a child actually coming.</p>

<p>It is clear therefor that, while it is possible to attain this level of choice, it's quite expensive. Oh, and it was your money.</p>

<p>And the moral for this little story? When someone offers you a choice, find out who's paying for it before accepting.</p>
 ]]></content></entry><entry>
<title>In search of no crime</title><link href='/articles/in-search-of-no-crime'/><id>tag:risburn.net:44</id><updated>2007-01-03T19:49:00Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>This post starts with the premise of lowering the crime rate to zero, or as close to it as possible. This post will not discuss the merit or otherwise of such a premise.</p>

<p>It is clear, if a zero crime rate is to be achieved, that when a crime is committed each member of the society needs:</p>

<ol>
<li>to be persuaded not to commit the crime in future</li>
<li>a mechanism by which they may put the event in the past and move on</li>
</ol>

<p>However, each member cannot be treated in that same way. For instance, the perpetrator should probably be treated differently to the victim. With this in mind, I've split the society into 3 groups:</p>

<ul>
<li>The victims</li>
<li>The perpetrators</li>
<li>The onlookers (everybody else)</li>
</ul>

<p>We thus have 6 factors that need to be accounted for in any proposed solution. A solution that takes account of all 6 satisfactorily has, for now, been left as an exercise for the reader.</p>
 ]]></content></entry><entry>
<title>Pilgrim's rest</title><link href='/articles/pilgrims-rest'/><id>tag:risburn.net:40</id><updated>2006-10-28T10:43:26Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p><img src="/pilgrims-rest/the-end.jpg" height="260" width="440"/></p>
 ]]></content></entry><entry>
<title>Russian roulette at 30 miles per hour</title><subtitle>With responses from kyb, MattLG, John, Roo and Ben Walsh</subtitle><link href='/articles/russian-roulette-at-30-miles-per-hour'/><id>tag:risburn.net:38</id><updated>2006-09-13T21:56:37Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p><a href="http://en.wikipedia.org/wiki/Russian_roulette">Russian roulette</a> is viewed, almost mythically, by many people as the most dangerous game one can ever play. Really? Well, for a start, it should beat minor traffic accidents.</p>

<p>The <a href="http://www.thinkroadsafety.gov.uk/campaigns/slowdown/slowdown.htm">current campaign</a> in the UK tells us that in an incident at 30 mph 80% of pedestrians survive. That may sound pretty good until one calculates that the survival rate for Russian roulette is greater than 83% (5/6). I say greater because not all players die, even if shot in the head.</p>

<p>As with all dangerous activities, there is also a risk of serious injury. Being hit at 20 mph is no picnic, but pull the trigger with an empty chamber and you're not going to feel a thing.</p>

<p>In fact, on the whole, making every possible effort not to hit people, in any way, is probably the best policy. It is interesting, though, that the scenario seen as a reasonable compromise really isn't. At all.</p>
 ]]></content></entry><entry>
<title>The physical network stack</title><subtitle>With responses from kyb</subtitle><link href='/articles/the-physical-network-stack'/><id>tag:risburn.net:36</id><updated>2006-09-05T20:33:42Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>For a while I've been trying to work out what the difference is between the road and rail network. Specifically, I'd like to know why the rail network was fantastically successful in the 19th and early 20th centuries, but has been comprehensively beaten by the road network in the later 20th century.</p>

<p>In order to make comparisons easy I have decided to split physical networks (as opposed to data) into a stack:</p>

<ol>
 <li>Pathway layer</li>
 <li>Link layer</li>
 <li>Vehicle layer</li>
 <li>Object layer</li>
</ol>

<p>By way of example I have created this table of a few choice networks:</p>

<table class="pns">
<tr class="t">
 <th class="l"></th>
 <th class="l"><a href="http://en.wikipedia.org/wiki/Royal_Mail">RoyalMail&trade;</a></th>
 <th class="l">Rail</th>
 <th class="l">Road</th>
</tr>
<tr class="m">
 <th class="l">Pathway</th>
  <td class="c">Any of the other physical networks</td>
 <td class="c">Track</td>
 <td class="r">Motorways (freeways), roads, tracks, fields (depending on vehicle), the rail network, ferries</td>

</tr>
<tr class="m">
 <th class="l">Link</th>
  <td class="c">Sorting office, postbox</td>
 <td class="c">Stations, terminals</td>
 <td class="r">Gates, road junctions, garages</td>

</tr>
<tr class="m">
 <th class="l">Vehicle</th>
  <td class="c">Envelope, parcel</td>
 <td class="c">Rolling stock</td>
 <td class="r">Cars (and taxis), lorries (trucks), buses (including coaches), tanks, tractors, combine harvesters, motorcycles, bicycles</td>

</tr>
<tr class="b">
 <th class="l">Object</th>
  <td class="c">Any inanimate object up to 20Kg</td>
 <td class="c">Pretty much anything</td>
 <td class="r">Pretty much anything</td>

</tr>
</table>

<p>From this a few interesting questions arise. For each network:</p>

<ol>
 <li>who controls each of the layers,</li>
 <li>by how much,</li>
 <li>and how does that control affect other users?</li>
</ol>

<p>I'll admit that I haven't thought about those yet, but hopefully this exercise has brought me closer to answering my original question. I'm just not quite sure how.</p>
 ]]></content></entry><entry>
<title>Marking multiple arbitrary points on Google Maps</title><link href='/articles/marking-multiple-arbitrary-points-on-google-maps'/><id>tag:risburn.net:35</id><updated>2006-08-27T20:02:10Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>This post is a follow up to <a href="/articles/markers-at-arbitrary-points-on-google-maps" title="Riseburn article: Markers at arbitrary points on Google Maps">Markers at arbitrary points on Google Maps</a> I wrote last year. At that time I noticed the following failings:</p>

<ul>
 <li>Only one marker could be placed</li>
 <li>Descriptions were very limited. For example, one could not add any styling or links</li>
</ul>

<p>This has now changed with the addition to Google Maps of something called <a href="http://earth.google.com/kml/kml_overview.html">KML</a> which was previously only available on Google Earth. It appears that KML allows one to mark multiple points by:</p>

<ol>
 <li>Creating an XML file containing all the points one wishes to describe,</li>
 <li>Making that file accessible to Google Maps</li>
</ol>

<p>In order to show this in action I have created the file <a href="/marking-muliple-arbitrary-points-on-google-maps/oaklands.kml.txt">oaklands.kml</a>. The following things should be noted:</p>

<ol>
 <li>The <a href="http://earth.google.com/kml/kml_tags.html#point">&lt;Point&gt;</a> tag is set out in the following way: longitude,latitude,altitude. This is different to points entered into Google Maps query box which are in the format: latitude,longitude.</li>
 <li><br> tags should not be written with any slashes in.</li>
 <li>All the &lt;description&gt; tags I've seen have their data contained within &lt;![CDATA[ … ]]&gt;. I suggest you do the same.</li>
</ol>

<p>Now, all that remains is for me to present an updated Google Maps link for <a href="http://maps.google.co.uk/maps?q=http://riseburn.net/marking-muliple-arbitrary-points-on-google-maps/oaklands.kml">Oaklands Community School</a>.</p>
 ]]></content></entry><entry>
<title>Rape on trial</title><subtitle>With responses from an unknown person and John</subtitle><link href='/articles/rape-on-trial'/><id>tag:risburn.net:33</id><updated>2006-07-24T23:35:24Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>This post was prompted by an episode of <a href="http://www.bbc.co.uk/panorama/">Panorama</a> (shown on the <a href="http://www.bbc.co.uk/">BBC</a>) entitled <a href="http://news.bbc.co.uk/1/hi/programmes/panorama/5099644.stm">Rape on trial</a>.</p>

<p>I've never quite been comfortable with the way the rape as a crime is set up. After a good discussion with Miss John, my perspective stems from imagining the following scenarios.</p>

<p>Imagine the situation given that all of the following are true:</p>

<ol>
 <li>Alex wishes to have sex with Chris</li>
 <li>Alex and Chris have sex</li>
 <li>By some magical mechanism, we can clearly see what is going on inside Alex's and Chris' head</li>
</ol>

<p>Given these, I can see 4 outcomes:</p>

<table class="rot">
<tr class="t">
<th class="l"></th>
<th class="c">Alex believes Chris has <strong>not</strong> given consent</th>
<th class="r">Alex believes Chris <strong>has</strong> given consent</th>
</tr>
<tr class="m">
<th class="l">Chris <strong>has</strong> given consent</th>
<td class="c">A</td>
<td class="r">B</td>
</tr>
<tr class="b">
<th class="l">Chris has <strong>not</strong> given consent</th>
<td class="c">C</td>
<td class="r">D</td>
</tr>
</table>

<h3>A</h3>

<p>This <em>is</em> a disturbing situation. However, even though we can detect Alex's thoughts Chris can't. Also, Chris is not materially hurt by this.</p>

<h3>B</h3>

<p>Two people having consentual sex (and hopefully a good time)</p>

<h3>C</h3>

<p>This is clearly rape. Alex believes that constent has not been given but continues to the detriment of Chris.</p>

<h3>D</h3>

<p>Alex essentially has a catastrophic misunderstanding of Chris's wishes. This is not a deliberate misunderstanding, we would be able to detect that. However, while this might be seriously negligent, I would be very uncomfortable convicting Alex of rape. I would suggest some extensive education for both Alex and Chris to make sure that in future, they both read and give out the correct signals.</p>

<p>My problem here is that the above analysis raises more questions than answers:</p>

<ul>
 <li>What qualifies as consent? Can consent be withdrawn, and if so, at what point?
 </li><li>The definition of rape states that because Chris did not consent, Alex was guilty of rape even in case D. Really?</li>
 <li>Because we can't in fact read peoples minds, how as jurors do we work out who consented, and to what?</li>
</ul>
 ]]></content></entry><entry>
<title>My Strengths</title><subtitle>With responses from Kaman and Rachel</subtitle><link href='/articles/my-strengths'/><id>tag:risburn.net:30</id><updated>2006-03-24T20:35:08Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>A few months ago a very good friend of mine bought me a book entitled <a href="http://www.amazon.co.uk/exec/obidos/redirect?link_code=ur2&amp;camp=1634&amp;tag=riseburn-21&amp;creative=6738&amp;path=ASIN/0743201140/">Now, Discover Your Strengths</a> by <a href="http://www.marcusbuckingham.com/">Marcus Buckingham</a> and Donald O. Clifton. This book allows one to undertake an online test to find out what one's strengths are.</p>

<p>It turns out mine are:</p>

<ul>
<li>Focus</li>
<li>Competition</li>
<li>Strategic</li>
<li>Learner</li>
<li>Relator</li>
</ul>
 ]]></content></entry><entry>
<title>Imagine</title><link href='/articles/imagine'/><id>tag:risburn.net:29</id><updated>2006-02-28T21:29:47Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Imagine the perfect journey; what would it be like?</p>

<p>For me it's a journey in a car that just flows by. I don't have to stop at roundabouts; rather, as I approach junctions, a space appears just in the right place at the right time for me to fit in. As I come down the slip road, drivers courteously move into the next lane to let me in, just as others do the same for them. And at the end of my journey, there's a parking space; not too small, nor too large, but just right for my vehicle to fit squarely in the middle. In short, a set of almost perfect moments.</p>

<p>For me though, perfection requires more. It's a journey, where not only do all those things happen, but I make them happen for all the road users around me.</p>
 ]]></content></entry><entry>
<title>Yet Another Programming Language</title><link href='/articles/yet-another-programming-language'/><id>tag:risburn.net:25</id><updated>2006-02-07T00:24:41Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>For a while now, perhaps the last 15 years, I've had the urge to write my own programming language. I know that there are thousands of people qualified to build a good language, but deep down, I still reckon I could build something better.</p>

<p>But here's the rub: better than what? In what way, and why? Well, here is the set of criteria on which I am basing my language:</p>

<ol>
<li>it will be written by me</li>
<li>it will be interpreted</li>
<li>the scripts in the language will be readable</li>
<li>the source that implements the language will be readable</li>
<li>the implementation will be in C</li>
<li>and none of that fancy C either</li>
<li>the source will, if possible, total less than 1000 lines</li>
</ol>

<p>To answer my questions, for me, the closer a language comes to meeting the needs laid out in one's set of criteria, the better it is. If your favorite language, or maybe the one you've just written, doesn't match the above set (ignoring #1), that's not a problem. You just need to make sure it matches your own criteria.</p>

<p>The point to note about the above list is that I came up with it <strong>before</strong> I started designing and writing the language. I've stuck to it too, otherwise by my argument, the language wouldn't do what I wanted and would therefore be pretty useless.</p>

<p>I'm still writing my language; I don't feel I want to show it to the world before at least the core is complete. What I will say is that at home I've been working on little else since a few days before Christmas. However, the experience has already been fruitful in that at least one lesson has become very clear: do not design and write a programming language.</p>
 ]]></content></entry><entry>
<title>Becoming An Early Riser: The Aftermath</title><link href='/articles/becoming-an-early-riser-the-aftermath'/><id>tag:risburn.net:15</id><updated>2005-11-16T19:55:34Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p><a href="/articles/becoming-an-early-riser" title="Riseburn article: Becoming An Early Riser">Eight weeks ago</a> I started getting up at 7am and I can say that there have been a few changes in this house.</p>

<p>I'll admit right now that I don't always get up at 7am. It usually happens for one of three reasons:</p>

<ul>
<li>I was up too late the night before</li>
<li>I made the mistake of pressing the snooze button</li>
<li>I'm not allowed</li>
</ul>

<p>It's definitely been an education and I'm happy to say that I've learned a few things:</p>

<ol>
<li>Really, the worst thing that can happen when you wake up is to press the snooze button. Just don't do it.</li>
<li>If you go to bed too late then you can safely set your alarm a little later than normal. As long it doesn't become a regular thing.</li>
<li>Make sure you come to some kind of concensus with those who share your life. Otherwise, you may be asleep when they want you to be awake.</li>
</ol>

<p>As a result of this exercise I now class myself as an earlier riser. That's nice, but I think the critical lesson for me has been self control. I now worry less about going to bed late because I know that I can get up when the time comes. That's very liberating.</p>

<p>So, for me it was well worth it. My biggest piece of advice to any potential early risers would be: Take a pair of <a href="http://en.wikipedia.org/wiki/Plier">pliers</a> to your alarm clock and rip the snooze button off. </p>
 ]]></content></entry><entry>
<title>Death is Nothing at all</title><link href='/articles/death-is-nothing-at-all'/><id>tag:risburn.net:17</id><updated>2005-10-29T23:30:49Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<blockquote style='white-space:pre'>Death is nothing at all.
I have only slipped away into the next room.
I am I, and you are you.
Whatever we were to each other, that we still are.
Call me by my old familiar name,
speak to me in the easy way you always used.
Put no difference in your tone,
wear no forced air of solemnity or sorrow.
Laugh as we always laughed
at the little jokes we enjoyed together.
Play, smile, think of me, pray for me.
Let my name be ever the household name that it always was,
let it be spoken without effort,
without the trace of a shadow on it.
Life means all that it ever meant.
It is the same as it ever was; there is unbroken continuity.
Why should I be out of mind because I am out of sight?
I am waiting for you, for an interval,
somewhere very near, just around the corner.
All is well.</blockquote>

<p>Henry Scott Holland</p>
 ]]></content></entry><entry>
<title>Rules of the road</title><subtitle>With responses from kybernetikos and John</subtitle><link href='/articles/rules-of-the-road'/><id>tag:risburn.net:16</id><updated>2005-10-28T17:33:31Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>There are some things I take very seriously, and driving is one of them. If you believe that the roads can be made a better place simply by lowering speed limits then I'd like you to put your money where your mouth is by performing a little test:</p>

<ol>
<li>Find a brick or concrete (your choice) wall</li>
<li>Stand 30 metres away from the wall</li>
<li>Sprint towards the wall as fast as you can</li>
<li>Do not stop or slow down until you have hit the wall</li>
<li>Tell me that speed limits are the only requirement for road safety</li>
</ol>

<p>If my calculations are correct you just hit that wall at around 20 miles/hour (9 metres/second). Now if you managed all the points (including 5) then I'm frankly astonished. Just to see how true you are to your beliefs I'd like you to perform one more test:</p>

<ol>
<li>Stand still</li>
<li>Be hit by a wall going 20 miles/hour. It's hard to find a moving wall so try using a family car in place of the wall.</li>
<li>Again. Tell me that speed limits are the only requirement for road safety.</li>
</ol>

<p>Still, I suppose it's better than being hit at 30 miles/hour. However, I think you'd agree that it would be stupid to hit or be hit by a wall in the first place; and that's exactly my point.</p>

<p>Most people would agree that speed limits should not be the only method of road safety, but when we look around the world at what goverments and pressure groups do to directly affect drivers' behaviour it basically boils down to "Drive slower".</p>

<p>I expect and demand better. So should you, of yourself and of others.</p>

<p>I suggest we start at the beginning and remind ourselves of what the <a href="http://en.wikipedia.org/wiki/Axiom">axioms</a> for driving should be:</p>

<ol>
<li>Do not hit other road users (pedestrians are road users too)</li>
<li>Do not, through your actions, cause any road user to hit any other road user</li>
</ol>

<p>Now all we have to do is follow them.</p>
 ]]></content></entry><entry>
<title>A JavaScript Calendar</title><subtitle>With responses from MattLG</subtitle><link href='/articles/a-javascript-calendar'/><id>tag:risburn.net:3</id><updated>2005-10-16T17:22:37Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>As I've said <a href="/articles/markers-at-arbitrary-points-on-google-maps" title="Riseburn article: Markers at arbitrary points on Google Maps">before</a>, Google maps are great; this time the starting point is the dragging. After quite a while using the site I started to think about what other tools could benefit from the dragging treatment.</p>

<p>Google maps style dragging seems to work with any tool that has the following properties:</p>

<ul>
 <li>It would take up far more than one page</li>
 <li>Chopping it up into lots of pages makes life difficult</li>
</ul>

<p>After some thought, I realised that it doesn't matter what the tool is, the mechanism is the same:</p>

<ol>
 <li>Create a window on to the larger tiled space</li>
 <li>Move that window around the space in response to dragging</li>
 <li>If the space is too large to hold in memory then seamlessly add and remove tiles as needed</li>
</ol>

<p><!--more-->
The first one to my mind was the calendar, which I decided to build. Before talking about the issues I had building a drag-able calendar, <a href="/projects/calendar/Calendar.html">here is the demo</a>.</p>

<p>Right, I trust you've had a good play. I'm not going to tell you exactly how I did it here because frankly you can look at the source code. What I will describe here are the few major problems I had to deal with:</p>

<ul>
<li>Only having a passing knowledge of JavaScript</li>
</ul>

<p>This is my way of saying I'm sorry the code isn't perfect. I didn't create an event model for the calendaring system like Google maps has, mainly because I don't really understand fully how the built in ones work.</p>

<ul>
<li>Expansion or contraction of tiles</li>
</ul>

<p>This was a major headache. When you create an entry the current row expands (try it if you haven't already) and overlaps with the one below. I couldn't work out which one had moved until I realised that only the bottom edge moves. So if two rows overlap, it was the top one that changed and we need to move the bottom one down. Easy.</p>

<ul>
<li>The built in Date object</li>
</ul>

<p>As you may have noticed from the demo, the range of dates is huge. The built in Date object doesn't seem to be able to cope with this and still give accurate days of the week. Also, if one tries to add or remove an arbitrary number of days, weeks or months, the result is a complete mess.</p>

<p>Thus I wrote my own, called DateTime. The code in quite a few major places is directly copied from the <a href="http://sqlite.org/">SQLite</a> <a href="http://www.sqlite.org/cvstrac/wiki?p=DateAndTimeFunctions">date code</a>.  The interface has been written differently because I wanted an almost drop in object to replace my Date code. I'd just like to say that I think the ideas behind the date modification code (DataTime.modify()) are inspired: just being able to change the date so easily is brilliant.</p>

<p>I did start work on storing the entries (you've probably noticed they vanish on reload or zooming) but it was taking forever. It's fair to say that I'm not really one of the world's completer-finishers: I'm interested in fleshing out new ideas, but only to the point where I know they work. So, there you are: <a href="/projects/calendar/Calendar.html">A JavaScript Calendar</a>.</p>
 ]]></content></entry><entry>
<title>Markers at arbitrary points on Google Maps</title><subtitle>With responses from roo</subtitle><link href='/articles/markers-at-arbitrary-points-on-google-maps'/><id>tag:risburn.net:12</id><updated>2005-10-08T14:17:55Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Google maps is great: being able to find anything in the UK with just a postcode is very nice. However, sometimes the marker that it places on the map for you is not quite right.</p>

<p>For instance, <a href="http://maps.google.co.uk/maps?q=SO16+8BY&amp;spn=0.006127,0.015064&amp;hl=en">SO16 8BY</a> is the postcode for <a href="http://www.oaklands.southampton.sch.uk/">Oaklands Community School</a>. The marker it places on the map for you is at the wrong end of the street which is very annoying.
<!--more-->
It turns out that it's possible to take the latitude and longitude from a google url and pop it directly into the query box. Thus the actual location if Oaklands School, <a href="http://maps.google.co.uk/maps?q=50.942002,-1.453006&amp;spn=0.024507,0.060257&amp;hl=en">50.942002, -1.453006</a>, can be shown.</p>

<p>The best way to obtain the lat/long of a point is to take a blank map, center the map at the desired point (say by double clicking at that point) and click on "Link to this page". The lat/long value you want is the bit in the url after  &amp;ll= and before the next &amp;.</p>

<p>As an extra bonus, Google Maps allows one to add more or less arbitrary plain text into the marker overlay, by placing it in brackets after the query in the search box. So the final map would be: <a href="http://maps.google.co.uk/maps?q=50.942002,-1.453006+(Oaklands+Community+School)&amp;spn=0.024507,0.060257&amp;hl=en">Oaklands Community School</a>.</p>
 ]]></content></entry><entry>
<title>Rich Dad, Poor Dad</title><subtitle>With responses from kyb and Chris Lautischer</subtitle><link href='/articles/rich-dad-poor-dad'/><id>tag:risburn.net:10</id><updated>2005-09-25T11:32:27Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>I recently read <a href="http://www.amazon.co.uk/exec/obidos/redirect?link_code=ur2&amp;camp=1634&amp;tag=riseburn-21&amp;creative=6738&amp;path=ASIN/0751532711">Rich Dad, Poor Dad </a><img src="http://www.assoc-amazon.co.uk/e/ir?t=riseburn-21&amp;l=ur2&amp;o=2" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> by Robert Kiyosaki et al. I thought it was so good that I went on to read <a href="http://www.amazon.co.uk/exec/obidos/redirect?link_code=ur2&amp;camp=1634&amp;tag=riseburn-21&amp;creative=6738&amp;path=ASIN/0751532800">Rich Dad, Poor Dad 2: Cash Flow Quadrant</a><img src="http://www.assoc-amazon.co.uk/e/ir?t=riseburn-21&amp;l=ur2&amp;o=2" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />.</p>

<p>Unfortunately, this has caused a few problems with my friends. When I get excited about things I talk about them, unceasingly. My friends are truly wonderful people, but there's only so much anyone can take. Not good.</p>

<p>So what follows is an explanation of what I thought Mr Kiyosaki was talking about.
<!--more-->
I bought a flat last year for approximately &pound;100,000. I could afford this place because although the mortgage (plus a few other costs) was about &pound;250 per month more than my previous rent, I had more than that left over every month. All very nice, but would you spend &pound;100,000 based on just that logic?</p>

<p>Of course you wouldn't. You'd:</p>

<ol>
 <li>take inflation into account to count against house value appreciation and payment depreciation over the full 25 years of the mortgage</li>
 <li>take into account the various costs and limitations you will incur by signing up to a 25 year contract</li>
 <li>work out the total cost of renting, taking into account savings and investments gained (say with the &pound;250 left over every month)</li>
 <li>make sure you have a financial plan for the next 25 years before you sign those years away to the bank</li>
 <li>do lots of other things I can't even think of because I do not have sufficient financial education</li>
</ol>

<p>I know you would, because failure to do those things and more before spending a total of &pound;200,000 (with interest most people pay double the buying price to the bank) over 25 years would be insane.</p>

<p>The point that I took away from the book is that I do not have sufficient financial education to make competent decisions about my life. I cannot blame anyone else, it is my fault. Further more, now that I recognise this, it would be incompetent of me to continue to abdicate from my financial responsibility to both myself and loved ones.</p>
 ]]></content></entry><entry>
<title>Becoming An Early Riser</title><subtitle>With responses from Roo</subtitle><link href='/articles/becoming-an-early-riser'/><id>tag:risburn.net:9</id><updated>2005-09-20T19:13:00Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>A few months ago (my <a href="http://del.icio.us/happybeans">delicious account</a> says early July) I read an article entitled <a href="http://www.stevepavlina.com/blog/2005/05/how-to-become-an-early-riser/">How to Become an Early Riser</a> by <a href="http://www.stevepavlina.com/">Steve Pavlina</a>. I haven't been able to get up early without being a danger to both myself and others since I was 10 years old but I've always lamented losing so much of my time.</p>

<p>So, starting last Tuesday morning I began following the Steve Pavlina path to early rising. My normal pattern is to sleep from 1am to 9am. My plan was to get up at 7am and go to sleep when I was tired.
<!--more-->
Eight days later and I've learned quite a lot:</p>

<ol>
<li>I still sleep about 8 hours a day, I now go to sleep at 11pm. This is annoying as the whole point of this exercise as to give me more time.</li>
<li>The first week has been hard. Really hard.</li>
<li>Breakfast usually gets me through the first 3 hours of my day until lunch time. My day now starts 2 hours earlier so I'm famished by 10. I now have a stash of apples to keep me going. Five-a-day here we come!</li>
<li>My daily routine is now out of sync with Mrs John. She is understandably not happy with being woken up 2 hours early or losing 2 hours with me in the evening.</li>
<li>I never knew that there was an actual Saturday morning.</li>
</ol>

<p>Has it been worth it? Even though I've not gained any time by doing this, being able to get up earlier than 9am is a definite skill even if I don't use it often. Also, gaining half a day I never knew existed has been quite nice.</p>

<p>Will I carry on with the minimum of a month that Steve suggests?</p>

<p>One day at a time.</p>
 ]]></content></entry><entry>
<title>The lot of women and men</title><subtitle>With responses from cocoabeans, kyb, MattLG and Clifford Brock</subtitle><link href='/articles/the-lot-of-women-and-men'/><id>tag:risburn.net:7</id><updated>2005-08-24T20:05:12Z</updated><content type='html' xml:base='http://www.riseburn.net/'><![CDATA[	<p>Put these in order of importance:</p>

<ul><li>Political power</li>
<li>Good job</li>
<li>Relationship with one's children</li>
<li>Relationship with one's co-workers</li>
<li>Access to one's children</li>
<li>Pension</li></ul>

<p>Now imagine 2 groups: one has a greater relationship with their co-workers and one with a greater relationship with their children. The first group has more access to political power, the second more access to their children. Which group would you rather be in?</p>

<p>I think neither group is totally happy with their lot. It does, however, do well to remember what each group is missing and how sad that is. </p>
 ]]></content></entry></feed>

