<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jon.than.io/</title>
	<atom:link href="http://jon.than.io/feed" rel="self" type="application/rss+xml" />
	<link>http://jon.than.io</link>
	<description>Linux Server Wrangler (Middle-Weight Class) /w touch of DevOps. Ex-Projectionist, Geek, Android Abuser &#38; Gravely Gay! ;) Opinions noted here are mine, all mine!</description>
	<lastBuildDate>Thu, 05 Apr 2012 08:27:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Fuel Crisis is all about GDP</title>
		<link>http://jon.than.io/fuel-crisis-is-all-about-gdp?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fuel-crisis-is-all-about-gdp</link>
		<comments>http://jon.than.io/fuel-crisis-is-all-about-gdp#comments</comments>
		<pubDate>Fri, 30 Mar 2012 10:09:23 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=157</guid>
		<description><![CDATA[It&#8217;s been interesting to see the mountain that is the #FuelCrisis build out of a mole-hill. What was just a vote to position themselves for a strike, should the fuel delivery drivers not accept the negotiations on their pay &#38; conditions, has lead to shortages of petrol and diesel across the country when there was no reason for it. [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been interesting to see the mountain that is the <a title="Twitter: Search FuelCrisis" href="https://twitter.com/search?q=FuelCrisis" target="_blank">#FuelCrisis</a> build out of a mole-hill. What was just a vote to position themselves for a strike, should the fuel delivery drivers not accept the negotiations on their pay &amp; conditions, has lead to shortages of petrol and diesel across the country when there was no reason for it.</p>
<p><span id="more-157"></span>But, I don&#8217;t think this is a coincidence. Yes, I&#8217;m being skeptial here, but a few days ago the <a title="BBC: OECD predicts recession in the UK" href="http://www.bbc.co.uk/news/business-17547978" target="_blank">OECD predicted that UK growth would be negative in Q1/2012</a> by around 0.2-0.3%. The<a title="Economy of the United Kingdom" href="http://en.wikipedia.org/wiki/Economy_of_the_United_Kingdom" target="_blank"> UK&#8217;s GDP for 2011</a> was around $2.48 trillion, and assuming a rate of ~$1.60/£1 for <a title="Dollars2Pounds" href="http://www.dollars2pounds.com/" target="_blank">much of 2011</a>, GDP can be calculated as £1.55 trillion in native currency. Therefore, for a <em>contraction of 0.2% in Q1</em>, we need to lose ((£1.55t/4)*0.002) or <em>£775million</em>.</p>
<p>The <a title="Excise duty boost after fuel panic" href="http://www.asianimage.co.uk/news/9621348.Excise_duty_boost_after_fuel_panic/?ref=nt" target="_blank">AA have said</a> that there is a potential for <em>750million</em> additional litres of fuel to be sold should everyone convert a half-full tank to a full one, while the normal sales of 90million litres per day <a title="No Strike Yet, But Petrol Sales Jump 172%" href="http://uk.news.yahoo.com/fuel-strike-unleaded-petrol-sales-rise-172-054947054.html" target="_blank">has risen by <em>172% for petrol &amp; 77% for diesel</em></a>  (so approx <em>103.5millions extra litres per day</em> based on the same split below). Given this started on<em> March 28th,</em> we have <em>5 days</em> this quarter over which there could be panic buying, giving a maximum potential of, say, <em>517.5million</em> litres.</p>
<p>With Petrol, <a title="Fuel prices are on the rise" href="http://www.peterboroughtoday.co.uk/news/et-business/business-news/fuel-prices-are-on-the-rise-1-3683008" target="_blank">as of yesterday</a>, at around £1.409, and Diesel at £1.471, and using <a title="Guardian: Diesel car sales overtake petrol in UK for first time" href="http://www.guardian.co.uk/business/2010/aug/05/diesel-car-sales-overtake-petrol" target="_blank">an old statistics that more diesel is now sold than petrol</a>, I&#8217;ll assume here a 40/60% spilt, giving an <em>average price of £1.446 per litre</em>.</p>
<p>Therefore, <em>775million litres</em> sold, <em>at £1.446 per litre</em> gives <em>£748 million additional</em> revenue for this quarter alone. That has the potential to <em>increase GDP by up to 0.2%</em> for this quarter, and save a double-dip recession that our government is so keep to avoid at all costs, lest the look like failures in managing our economy!</p>
<p>Whether this is the truth is a whole different matter, but it&#8217;s an interesting spin on the whole situation none-the-less!</p>
<p>As a quick breakdown&#8230;</p>
<pre>GDP:
($2.48t @ £1.60/£1) ÷ 4 = £387.5b/Q
                ∴ 0.2% ~= £775m

Fuel Sales: 90m litres/day
  Petrol: 40% = 36m; +172% =  62.0m extra
  Diesel: 60% = 54m;  +77% =  41.5m extra +
                     Total = 103.5m extra
                   5x Days = 517.5m

Extra Sales: 517.5m @ £1.4462 = £748m
  Petrol: £1.409 × 40% = £0.5636
  Diesel: £1.471 × 60% = £0.8826 +
                 Total = £1.4462

GDP Increase: £0.748b ÷ £387.5b =~ 0.19%</pre>
<p><strong>Update</strong>: Didn&#8217;t notice that the 172% increase was for Petrol only, so I&#8217;ve added calculations for a 77% increase in diesel as well. Still works out that it would increase GDP by 0.2% rather than 0.3%!</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/fuel-crisis-is-all-about-gdp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git, CruiseControl &amp; Origin Pull</title>
		<link>http://jon.than.io/git-with-cruisecontrol-and-origin-pul?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=git-with-cruisecontrol-and-origin-pul</link>
		<comments>http://jon.than.io/git-with-cruisecontrol-and-origin-pul#comments</comments>
		<pubDate>Wed, 21 Mar 2012 12:04:10 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[SysAdmin]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=149</guid>
		<description><![CDATA[Although still heavily using Subversion for much of our source repository handling, some of our development team at the company I work for have requested to use Git instead using our internal repositories. Unfortunately, it&#8217;s integration within CruiseControl is a little bit more difficult and not as simple as it is with SVN. This is mainly [...]]]></description>
			<content:encoded><![CDATA[<p>Although still heavily using Subversion for much of our source repository handling, some of our development team at the company I work for have requested to use Git instead using our internal repositories. Unfortunately, it&#8217;s integration within CruiseControl is a little bit more difficult and not as simple as it is with SVN.</p>
<p><span id="more-149"></span>This is mainly because the <tt>&lt;modificationset /&gt;</tt> <tt>&lt;svn /&gt;</tt> listener just runs an update against the server and allow a build to trigger build on changed. However, the one for <tt>&lt;git /&gt;</tt> checks only for changes within the repository &#8211; there is no &#8216;<tt>git origin pull</tt>&#8216; test.</p>
<p>For example, we use:</p>
<pre>&lt;!-- Project --&gt;
&lt;project name="svn-test" buildafterfailed="false"&gt;
  &lt;property name="checkout" value="/path/to/checkout"/&gt;
  &lt;listeners&gt;
    &lt;currentbuildstatuslistener file="${logsdir}/status.txt"/&gt;
  &lt;/listeners&gt;
  &lt;modificationset quietperiod="30"&gt;
    &lt;svn localworkingcopy="${checkout}"/&gt;
  &lt;/modificationset&gt;
  &lt;schedule&gt;
    &lt;ant buildfile="/cruise/conf/buildSvnTest.xml"&gt;
      &lt;property name="working_dir" value="${checkout}"/&gt;
    &lt;/ant&gt;
  &lt;/schedule&gt;</pre>
<p>However, simply changing <tt>&lt;svn localworkingcopy="${checkout}"/&gt;</tt> to <tt>&lt;git localworkingcopy="${checkout}"/&gt;</tt> will not work. You need to create some <tt>&lt;bootstrappers /&gt;</tt> which will ensure a &#8216;<tt>git origin pull</tt>&#8216; is run first:</p>
<pre>&lt;!-- Project --&gt;
&lt;project name="get-test" buildafterfailed="false"&gt;
  &lt;property name="checkout" value="/path/to/checkout"/&gt;
  &lt;plugin name="git" classname="net.sourceforge.cruisecontrol.sourcecontrols.Git"/&gt;
  &lt;bootstrappers&gt;
    &lt;gitbootstrapper LocalWorkingCopy="${checkout}"/&gt;
  &lt;/bootstrappers&gt;
  &lt;listeners&gt;
    &lt;currentbuildstatuslistener file="${logsdir}/status.txt"/&gt;
  &lt;/listeners&gt;
  &lt;modificationset quietperiod="30"&gt;
    &lt;git localworkingcopy="${checkout}/"/&gt;
  &lt;/modificationset&gt;
  &lt;schedule&gt;
    &lt;ant buildfile="/cruise/conf/buildSvnTest.xml"&gt;
      &lt;property name="working_dir" value="${checkout}"/&gt;
    &lt;/ant&gt;
  &lt;/schedule&gt;</pre>
<p>You should now be able to successfully build your project on the next push to your origin.</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/git-with-cruisecontrol-and-origin-pul/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forced Downloads via Proxy</title>
		<link>http://jon.than.io/forced-downloads-via-proxy?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=forced-downloads-via-proxy</link>
		<comments>http://jon.than.io/forced-downloads-via-proxy#comments</comments>
		<pubDate>Mon, 13 Feb 2012 23:47:56 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Challenge]]></category>
		<category><![CDATA[Proxy]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=138</guid>
		<description><![CDATA[Was presented with a challenge today to see if someone can create a way to get a remote user to download an image from a third-party server when you don&#8217;t have access to the files. Although a little bit of a cop-out, I came up with the idea of proxying through Apache and trying to [...]]]></description>
			<content:encoded><![CDATA[<p>Was presented with a challenge today to see if someone can create a way to get a remote user to download an image from a third-party server when you don&#8217;t have access to the files. Although a little bit of a cop-out, I came up with the idea of proxying through Apache and trying to rewrite the headers on the fly to <tt>application/octet-type</tt> to force a download by the browser.</p>
<p>However, the first attempt didn&#8217;t work (<strong>note</strong>: this assumes that <tt>mod_proxy</tt> and <tt>mod_header</tt> are enabled and <tt>AllowOverride All</tt> has been set in the <tt>httpd.conf</tt>):</p>
<pre># /.htaccess
RewriteEngine on
RewriteRule proxy/(.+)$ http://$1 [P,T=appliction/octet-stream,L]</pre>
<p>While creating the <tt>proxy/</tt> directory and adding a <tt>.htaccess</tt> file with:</p>
<pre># /proxy/.htaccess
RewriteEngine on
RewriteRule (.+)$ http://$1 [P,L]
Header set Content-Type application/octet-type</pre>
<p>or even using</p>
<pre>ForceType application/octet-type</pre>
<p>also don&#8217;t work. Options to <tt>unset</tt> and then <tt>set</tt> or <tt>edit</tt> the header don&#8217;t apply (although in some cases you may be able to use <tt>append</tt>). In essence, it seams that you cannot alter headers received from the remote server when proxying request; only those created by Apache itself can be changed.</p>
<p>Therefore, using <a title="RFC2183" href="www.ietf.org/rfc/rfc2183.txt" target="_blank">RFC2183</a>&#8216;s option for <tt>Content-Disposition</tt> you can get a browser to treat a response an <tt>attachment</tt> which in effect tells it to be downloaded while still retaining the correct <tt>Content-Type</tt>:</p>
<pre># /proxy/.htaccess
RewriteEngine on
RewriteRule (.+)$ http://$1 [P,L]
Header set Content-Disposition attachment</pre>
<p>Just make sure that you put in place suitable conditions and/or rules so your web server doesn&#8217;t become an open pseudo-proxy for the entire web!</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/forced-downloads-via-proxy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Whats Going On</title>
		<link>http://jon.than.io/whats-going-on?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=whats-going-on</link>
		<comments>http://jon.than.io/whats-going-on#comments</comments>
		<pubDate>Sun, 04 Dec 2011 12:54:28 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[LGBT]]></category>
		<category><![CDATA[YouTube]]></category>
		<category><![CDATA[Bullying]]></category>
		<category><![CDATA[It Gets Better]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=82</guid>
		<description><![CDATA[Please take the time to watch this video and spread the word. Seriously. Please. I came across it last night and he made me cry. For just a few short minutes, he opens up his heart and gives us a glimpse of his short life; his pain and his suffering. He&#8217;s an inspiration, but he also just [...]]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.youtube.com/embed/TdkNn3Ei-Lg?version=3&amp;autohide=1&amp;rel=0&amp;color=white&amp;fs=1&amp;hd=1&amp;showinfo=0&amp;wmode=transparent" width="560" height="340" title="Whats Going On" style="background-color:#000;display:block;margin-bottom:0;max-width:100%;" frameborder="0" allowfullscreen></iframe><p style="font-size:11px;margin-top:0;"><a href="http://www.youtube.com/watch?v=TdkNn3Ei-Lg" target="_blank" title="Watch on YouTube">Watch this video on YouTube</a>.</p>
<p><strong>Please</strong> take the time to watch this video and spread the word. <strong>Seriously</strong>. Please. I came across it last night and he made me cry. For just a few short minutes, he opens up his heart and gives us a glimpse of his short life; his pain and his suffering.</p>
<p>He&#8217;s an inspiration, but he also just shows what&#8217;s wrong with the world at the moment: One of the silent majority who has decided to speak out about what he experiences every day.</p>
<p>If you do anything today, please do this and I <strong>dare you</strong> not to be moved by him!</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/whats-going-on/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Heartbreaking It Gets Better</title>
		<link>http://jon.than.io/heartbreaking-it-gets-better?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=heartbreaking-it-gets-better</link>
		<comments>http://jon.than.io/heartbreaking-it-gets-better#comments</comments>
		<pubDate>Sun, 25 Sep 2011 17:08:59 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[LGBT]]></category>
		<category><![CDATA[YouTube]]></category>
		<category><![CDATA[Bullying]]></category>
		<category><![CDATA[Gay Rights]]></category>
		<category><![CDATA[It Gets Better]]></category>
		<category><![CDATA[Suicide]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=78</guid>
		<description><![CDATA[I&#8217;ve been following this a lot since the news started breaking on Wednesday and it just moves me. I know in the USA there&#8217;s a lot of issue with LGBTQ youth in schools (to which almost anyone with power is largely ignoring), but I think this case is even more significant. Not least because it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.youtube.com/embed/-Pb1CaGMdWk?version=3&amp;autohide=1&amp;rel=0&amp;color=white&amp;fs=1&amp;hd=1&amp;showinfo=0&amp;wmode=transparent" width="560" height="340" title="It Gets Better, I promise!" style="background-color:#000;display:block;margin-bottom:0;max-width:100%;" frameborder="0" allowfullscreen></iframe><p style="font-size:11px;margin-top:0;"><a href="http://www.youtube.com/watch?v=-Pb1CaGMdWk" target="_blank" title="Watch on YouTube">Watch this video on YouTube</a>.</p>
<p>I&#8217;ve been following this a lot since the news started breaking on Wednesday and it just moves me. I know in the USA there&#8217;s a lot of issue with LGBTQ youth in schools (to which almost anyone with power is largely ignoring), but I think this case is even more significant. Not least because it&#8217;s another in a long list of cries for help and/or release, but because for a short time, he had his brief, actual hope.</p>
<p><span id="more-78"></span>Despite his <a title="YouTube: Anti-LGBT Bullying" href="http://www.youtube.com/watch?v=Wd11Hfeaz-8" target="_blank">hardship for so long</a> at the end of last year and the start of this, he started to see light at the end of the tunnel. Through family, friends, counselling and his music (with tribute to Lady GaGa there), saw hope, so much so that he recorded his own &#8216;It Gets Better&#8217; video (this video). You can see the pain he&#8217;s been through when he talks and even though he is young he wants to pass a true message from someone going through it back out to those that need it.</p>
<p>Four months later, <a title="Pink News: New York boy, 14, kills himself after anti-gay bullying" href="http://www.pinknews.co.uk/2011/09/21/new-york-boy-14-kills-himself-after-anti-gay-bullying/" target="_blank">he killed himself</a>.</p>
<p>All this hope, promise and belief that he managed to find in himself once again was taken way, beyond the point of no return, and one final sleep was the only way out he could now see.</p>
<p>All around this world, this must stop. The ignorance portrayed, and the hate give out, by Religion/the Religious or by those who see the world built around their morals, especially in those countries that consider themselves free and civilised, is really angering me. I know there are exceptions to the rule, and I know that there are those with faith that do truly follow the tenants of love, life and tolerance, but something must now give.</p>
<p>To those that use nothing more than belief and ignorance to perpetuate their hate, yet preach love, and want nothing more than to enforce their morals on everyone while at the same time extolling the virtues of freedom and choice &#8211; this boy&#8217;s blood is on your hands, along with all those before and any in the future that suffer this emptiness (although I hope with all my heart we are so close to the end).</p>
<p>I know my words can never mean much to him now and probably as a single person, my abilities to change the world, or even a small bit of it, are limited, but for as long as it takes, I will stand with those who are bullied or victimised for something they didn&#8217;t choose and is simple a part of who they are.</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/heartbreaking-it-gets-better/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dear Bullies,</title>
		<link>http://jon.than.io/dear-bullies?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dear-bullies</link>
		<comments>http://jon.than.io/dear-bullies#comments</comments>
		<pubDate>Thu, 22 Sep 2011 21:13:04 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[LGBT]]></category>
		<category><![CDATA[Bullying]]></category>
		<category><![CDATA[Gay Rights]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=76</guid>
		<description><![CDATA[There are people who are white, there are people who are black, there are people who are Latino/a, there are people who are Asian, there are people who are Australian, there are people who are British, there are people who are Icelandic, there are people who are gay, there are people who are straight, there are people who are bisexual, there are people who are lesbian, [...]]]></description>
			<content:encoded><![CDATA[<p>There are people who are <strong>white</strong>, there are people who are <strong>black</strong>, there are people who are <strong>Latino/a</strong>, there are people who are <strong>Asian</strong>, there are people who are <strong>Australian</strong>, there are people who are <strong>British</strong>, there are people who are <strong>Icelandic</strong>, there are people who are <strong>gay</strong>, there are people who are <strong>straight</strong>, there are people who are <strong>bisexual</strong>, there are people who are <strong>lesbian</strong>, there are people who are <strong>pansexual</strong>, there are people who are <strong>just plain sexual</strong>, <span id="more-76"></span>there are <strong>transgender</strong> people, and there are <strong>cysgender</strong> people (in short, not trans), there are people who are <strong>asexual</strong>, there are people who are <strong>beautiful</strong>, there are people who have <strong>frizzy hair</strong>, there are people who have <strong>high cheekbones</strong>, there are people who have <strong>acne</strong>, there are people who are <strong>a little larger</strong> than most, there are people who are <strong>a little bit thinner</strong> than most, there are people who wear <strong>Lady Gaga tees</strong>, there are people who wear strictly <strong>Armani</strong>, there are people who <strong>rock out with their Crocs out</strong>, there are <strong>old</strong> people, there are <strong>young</strong> people, there are <strong>toddlers</strong>, there are people who are a collage of all of these identities whom we don’t know yet, because they are still <strong>in utero</strong>, there are people who <strong>boycott Starbucks</strong>, there are people who <strong>don’t know any other coffeeshops</strong>, there are people who <strong>work out</strong> five times a week, there are people <strong>training</strong> to be triathletes, there are people who have <strong>never seen a dumbell</strong> in their lives and have no plans to, there are people who can <strong>run five miles</strong>, there are people who can <strong>walk three meters</strong>, there are people who <strong>can’t walk </strong>at all, there are people who <strong>can’t hear, see, smell, taste</strong>, who <strong>see colors as sounds</strong> and <strong>hear sounds in concepts</strong> and there are people who are majoring in <strong>philosophy</strong> and <strong>business</strong> and <strong>recreation</strong> and people who will be <strong>stereotype straight</strong>, fixing up the house on the weekends, and loving his kids, and there will be the <strong>gay men</strong> who consider homosexuality to be just another trait, and there will be gay men who will be the baddest fabulous-est <strong>queeniest bitches on the block</strong>, and there will be <strong>super butch</strong> and <strong>less butch</strong> lesbians, and there will be people will <strong>1,000 friends</strong> on Facebook, and there will be people who <strong>prefer</strong> the company of <strong>books</strong>, because books really GET them, and there are people who will <strong>marry</strong>and people who will <strong>sleep around</strong>, people who will <strong>marry a career</strong>, and people who will devote their lives to <strong>what they believe in</strong>. There will be people who are <strong>confident</strong>, but more often there are people who deep down, feel <strong>insecure</strong>, and not good enough, and though encompassed by a sea of people every single day, they feel <strong>alone</strong>. There are people who don’t know the meaning of the word “alone” at all, but I’ve never met one. There are seven billion people in the world, but above anything else, there are <em><strong>people</strong></em>, who are really just trying to get by.</p>
<p>So kindly lay off those people you think are weird. If you put that energy you are using to put someone else down into figuring out your own true identity, I promise you that, even for you, your life and your feelings of self worth <strong>will get better</strong>. And you know what? Maybe the world will be a better place.</p>
<p>R.I.P. Jamey Rodemeyer. Despite people telling you that you horrible and disgusting and wrong for your love, you were, are, and forever will be fucking perfect. I hope you can see that now, wherever you are.</p>
<p>I won&#8217;t take credit for this; written by <a title="Love, Sex and Ramen: Dear Bullies" href="http://livefastdontdie.tumblr.com/post/10513012558" target="_blank">Love, Sex and Ramen</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/dear-bullies/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Burning of the Koran</title>
		<link>http://jon.than.io/the-burning-of-the-koran?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-burning-of-the-koran</link>
		<comments>http://jon.than.io/the-burning-of-the-koran#comments</comments>
		<pubDate>Sat, 10 Sep 2011 01:26:00 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Bible]]></category>
		<category><![CDATA[Christianity]]></category>
		<category><![CDATA[Islam]]></category>
		<category><![CDATA[Koran]]></category>
		<category><![CDATA[Religion]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=47</guid>
		<description><![CDATA[Canceling the burning of the Koran was probably the worst thing Terry Jones could have done today. With such emphasis originally on free speach in an effort to demonstrate the ingress made by Islam in many &#8216;Christian&#8217; countries, to cancel it after the steps made by the Muslims now means that it cannot be interpreted as [...]]]></description>
			<content:encoded><![CDATA[<p><a title="US pastor cancels Koran burning" href="http://www.bbc.co.uk/news/world-us-canada-11255366">Canceling the burning of the Koran</a> was probably the worst thing Terry Jones could have done today. With such emphasis originally on free speach in an effort to demonstrate the ingress made by Islam in many &#8216;Christian&#8217; countries, to cancel it after the steps made by the Muslims now means that it cannot be interpreted as such anymore.</p>
<p>This simply makes it an act of terrorism; akin to threatening to blow up something unless you get your way. If it was truly looking to accomplish what he set out, he&#8217;s failed. Spectacularly.</p>
<p>Go you &#8216;enlightened&#8217; people of the &#8216;bible belt&#8217;!</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/the-burning-of-the-koran/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oxford Speed Cameras Back</title>
		<link>http://jon.than.io/oxford-speed-cameras-back?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxford-speed-cameras-back</link>
		<comments>http://jon.than.io/oxford-speed-cameras-back#comments</comments>
		<pubDate>Mon, 01 Aug 2011 19:22:20 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Oxford]]></category>
		<category><![CDATA[Speed Cameras]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=63</guid>
		<description><![CDATA[I&#8217;ve been keeping my eye on this topic over the last few days as for the first 48 hours or so, nothing other than &#8216;deaths and serious injuries on the roads had increased&#8216; had been released. However, an updated article from earlier on, just as the initial heat and interest around this started to die [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been keeping my eye on <a title="Oxfordshire's speed cameras to be switched back on" href="http://www.bbc.co.uk/news/uk-england-oxfordshire-12928747" target="_blank">this topic</a> over the last few days as for the first 48 hours or so, nothing other than &#8216;<em>deaths and serious injuries on the roads had increased</em>&#8216; had been released. However, an updated article from earlier on, just as the initial heat and interest around this started to die down suddenly shows a different picture:</p>
<ul>
<li>Slight Injuries:<br />
<strong>2009: 70</strong>; 2010: 55 (<strong>down</strong> since they were switched off);</li>
<li>Serious Injuries:<br />
2009: 13; 2010: 13 (<strong>no change</strong>);</li>
<li>Fatalities:<br />
2009: 0; 2010: 0 (<strong>no change</strong>); and</li>
<li>Total Accidents:<br />
<strong>2009: 62</strong>; 2010: 60 (<strong>down</strong> since they were switched off).</li>
</ul>
<p>Matching periods of 08/2009-01/2010 and 08/2010-01/2011, accidents and injuries at sites where the cameras have been placed<strong> have gone down, not up</strong> as is initially suggested.</p>
<p>To back up their figures, they need to cover the <strong>whole</strong> of Oxfordshire:</p>
<ul>
<li>Slight Injuries:<br />
2009: 982; <strong>2010: 999</strong> (<strong>slightly up</strong> since they were switched off);</li>
<li>Serious Injuries:<br />
2009: 160; <strong>2010: 179</strong> (<strong>up</strong> since they were switched off);</li>
<li>Fatalities:<br />
2009: 12; <strong>2010: 18</strong> (<strong>up</strong> since they were switched off); and</li>
<li>Total Accidents:<br />
<strong>2009: 885</strong>; 2010: 867 (<strong>down</strong> since they were switched off).</li>
</ul>
<p>This is <strong>not</strong> as clear cut as they&#8217;ve been making it out to be over the last two days and I don&#8217;t find it that surprising that it&#8217;s taken until now for the rest of these figures to be released. So, yes, while there is a significant increase in the amount of deaths (up 50%) and overall, <strong>injuries across the county are up 2.18%</strong>,<strong>injuries at camera sites are down 22.1%</strong>. This combined with the fact that<strong>accidents are down 2.16% overall</strong> means that they have had to manipulate the statistics to back up their argument.</p>
<p>They have used a set of figures, loosely related to the ones they should have used, to justify a decision which I believe is in some way incorrect. £600,000 should be used to fund more police <strong>in cars</strong> to patrol the area, interact with the public and deter bad driving rather than just switching on camera.</p>
<p>After all: &#8220;T<em>oday the Police are switching back on Speed Cameras in the country after statistics show that accidents and injuries around camera sites have fallen</em>&#8221; isn&#8217;t quite as catchy a headline!</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/oxford-speed-cameras-back/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Distribution is not Murder with MCollective</title>
		<link>http://jon.than.io/distribution-is-not-murder-with-mcollective?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=distribution-is-not-murder-with-mcollective</link>
		<comments>http://jon.than.io/distribution-is-not-murder-with-mcollective#comments</comments>
		<pubDate>Sat, 25 Jun 2011 21:51:41 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[BitTorrent]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MCollective]]></category>
		<category><![CDATA[Murder]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=65</guid>
		<description><![CDATA[I work as a Systems Administrator for a UK-based major music streaming website and we pride ourselves on our ability to grow efficiently and make extensive use of open-source tools and programs whenever possible. We&#8217;re growing fast and although we haven&#8217;t reached the ceiling, some of the tools we used are tweaked versions of the [...]]]></description>
			<content:encoded><![CDATA[<p>I work as a Systems Administrator for a UK-based major music streaming website and we pride ourselves on our ability to grow efficiently and make extensive use of open-source tools and programs whenever possible.</p>
<p>We&#8217;re growing fast and although we haven&#8217;t reached the ceiling, some of the tools we used are tweaked versions of the ones developed when we had just a few servers. Knowing that there is this ceiling, and its approaching fast, I&#8217;ve been putting in some time recently researching on how to take it to the next level.</p>
<p><span id="more-65"></span>One of our senior developers suggested something he&#8217;d seen previously: <a title="Twitter: Murder" href="http://engineering.twitter.com/2010/07/murder-fast-datacenter-code-deploys.html" target="_blank">Murder</a>. Developed by Twitter last year to help them get code out to their thousands of servers, they were able to tap into the distributed peer-to-peer capabilities of Bittorrent as a powerful alternative to their original from-central-server pull configuration.</p>
<p>However, their tool is configured to drop into Capistrano. With us using Puppet to manage our server&#8217;s configuration, we have instead installed and configured MCollective instead, and therefore we needed to write a client and agent to integrate the two.</p>
<p><strong>Making Murder</strong></p>
<p>Murder is essentially in two parts: a BitTornado backend (with some slight reconfiguration to improve speed on a low-latency network but no changes to the actual libraries) and three custom scripts to make the torrents, provide the tracker and seed/peer the files themselves.</p>
<p>I took the configuration changes from Murder and forward-ported them to the latest version (the one in their Git responsibly is over a year old) and repacked them all into .deb packages (we run Debian on all our servers). Their changes disable UPnP (not needed outside of a home network), drop all the timeouts, decrease the time between updates from the tracker and imposing a limit on the upload and download speeds stopping transfers from swamping the network and server resources.</p>
<p>However, their choice was to set each peer to only download from one other, essentially cascading the updates through the system almost one server at a time. However my tests with this method was not particularly fast &#8211; upping the client limit to a maximum of two peers showed big improvements and I was able to transfer a 180Mb test file (an ISO image) between twelve servers simultaneously in 28 seconds.</p>
<p>With these changes added as a diff to the current BitTornado package, and another package created for the Murder programs, we added them to our internal repository and pushed them out with Puppet.</p>
<p><strong>MCollective<br />
</strong></p>
<p>MCollective is the spark here and I&#8217;m sure what your most interested in. I must however make a point right from the start: This is only the second program I&#8217;ve written in Ruby (the first being a multi-threaded latency monitor to analysis the different parts of our site and the different stages of each request to pinpoint issues in serving our site). Additionally, this is the first experience I&#8217;ve had in working with MCollective. Anyone who does use it, or takes a look at the code; feedback is welcome. Just don&#8217;t expect the most efficient code it could be right now!</p>
<p>In essence, the client program processes the arguments, does some sanity checking, then creates a .torrent file with murder_make_torrent before launching a separate thread which seeds the package with murder_client.</p>
<pre>system("/usr/sbin/murder_make_torrent #{$opt[:package]} #{$opt[:tracker]} #{$opt[:torrent]}")
$opt[:seeder] = Thread.new($opt[:package], $opt[:torrent]) { |package,torrent|
  system("/usr/sbin/murder_client seed #{torrent} #{package} #{get_address($opt[:tracker].split(':',2).first)}")
}</pre>
<p>The .torrent file is read, encoded into a base64 string and then sent to each agent via the main thread along with the name of the package, the location of the tracker and the application for which we&#8217;re deploying.</p>
<pre>$opt[:package_hash] = Base64.encode64(Marshal.dump({
  :package =&gt; File.basename($opt[:package]),
  :tracker =&gt; $opt[:tracker],
  :torrent =&gt; IO.read($opt[:torrent])
})).split(/\n/).join</pre>
<p>Each agent takes that data, launches a class which matches to the name of the application we&#8217;re deploying to (which in turn handles the specifics of deploying each application), and then runs a method corresponding to an action (for example, add() when we&#8217;re adding a new version or upgrade() for applications which supports only a single concurrent version at any one time).</p>
<pre>class Deploy&lt;RPC::Agent
  metadata :name =&gt; "deploy",
           :description =&gt; "Agent to deploy our website, including Assets and Tomcat files.",
           :author =&gt; "Jonathan Wright ",

  DeployPackage.valid_actions.each do |act|
    action act do
      # Get the details passed to us from the API
      application = request[:application]
      version = request[:version]
      package = request[:package]
      # Make sure that there's a class for this application's deployment
      reply.fail! "Application #{application} not available" \
        unless Agent.const_defined?(application.capitalize) \
            &amp;&amp; Agent.const_get(application.capitalize).class.is_a?(Class)
      # If a class exists, create an instance of it so we can work with it
      worker = Agent.const_get(application.capitalize).new(reply, logger, version, package)
      # Now make sure that the action requests has a method for it, then run
      reply.fail! "Command not valid for target" \
        unless worker.do_validate(act) # &lt;-- this is a custom method of worker's parent class
      reply[:output] = worker.send(act)
    end
  end
end</pre>
<p>It will then launch murder_client as a peer, download the file and then extract it or process it as required. Although not currently enabled as part of our first round testing, it can then create a new thread which will run for a maximum of 30 seconds (using Timeout.timeout()) in which it will re-seed the package back to the network at the same time it&#8217;s processing the copy it has.</p>
<pre>begin
  # This needs to be done in a separate thread as so not to interfere
  # with remainder of the deployment
  @thread = Thread.new {
    begin
      # We'll also wrap this in a Timeout class; fixed time run
      status = Timeout::timeout(@@timeout) {
        system("/usr/sbin/murder_client seed #{torrent} #{package} #{address}")
      }
    rescue Timeout::Error =&gt; e
      # We should always reach this section as the program as once the
      # timeout it reached Timeout::Error is raised
      nil
    end
  }
rescue =&gt; e
  # If we can't start the tread, we won't worry. Just make a note of it
  @logger.debug "Could not start thread for seeding #{@package}"
  @thread = nil
end</pre>
<p><strong>First Tests</strong></p>
<p>Our first tests (completed yesterday) had distributed a 25Mb file containing around 2,200 images, css &amp; javascript files among 41 servers in less than 30 seconds; an action that had previously taken between 3 and 10 minutes our original rsync method. It should be noted that the majority of servers completed in less than 15 seconds with the main seeder becoming increasingly important in serving the content as the nodes completed and disappeared from the tracker.</p>
<p>With the re-seeding thread enabled I expect this to drop as all the nodes stay available for longer.</p>
<p>I also tested with a smaller set of assets at 1.7Mb (about 350 files) and the program was able to distribute that file and extract it to the same 41 severs in 2.2 seconds.</p>
<p>The code isn&#8217;t yet read for full release, and I will do that in due course. A few things are needed first:</p>
<ul>
<li>Like the Agent part of the code, I would like to make the client part into a dynamic class-loading version which will separate logic and action. Much of the current code is heavily biased to our internal business processes and would need to be changed by any person wishing to use it before they could;</li>
<li>Export the configuration to MCollective itself &#8211; far to much of it is within the program and classes as they&#8217;ve been written and added I&#8217;ve coded it all. This will also make it much easier to configure the program from within Puppet by altering the template for server.cfg;</li>
<li>Rework BitTornado changing it&#8217;s namespace to Murder and combine the Libraries and Programs into one package to avoid conflicts with BitTornado and easier package management; plus</li>
<li>Bug fixes (as I find them&#8230;) and more testing!</li>
</ul>
<p>If you would like to see a copy of the current code, drop me a note on <a title="@netwrker on @twitter" href="http://twitter.com/netwrker" target="_blank">@twitter</a> or leave a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/distribution-is-not-murder-with-mcollective/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disgusted: &#8216;Victim&#8217; May Sue the Fire Service</title>
		<link>http://jon.than.io/disgusted-victim-may-sue-the-fire-service?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=disgusted-victim-may-sue-the-fire-service</link>
		<comments>http://jon.than.io/disgusted-victim-may-sue-the-fire-service#comments</comments>
		<pubDate>Thu, 24 Mar 2011 15:00:28 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[BBC]]></category>
		<category><![CDATA[Fire Brigade]]></category>

		<guid isPermaLink="false">http://jon.than.io/?p=61</guid>
		<description><![CDATA[I saw this on TV while I was at the gym about a week ago and it just make me SO angry. Although I&#8217;ve calmed down a little since then, I still cannot believe the nerve of Babjide Osobu and feel compelled to write this. As a quick overview: In September last year, a fit of jealousy [...]]]></description>
			<content:encoded><![CDATA[<p>I saw <a title="Victim's family may sue the Fire Service" href="http://www.mk-news.co.uk/News/Victims-family-may-sue-the-fire-service.htm" target="_blank">this</a> on TV while I was at the gym about a week ago and it just make me <strong>SO </strong>angry. Although I&#8217;ve calmed down a little since then, I still cannot believe the nerve of Babjide Osobu and feel compelled to write this.</p>
<p><span id="more-61"></span>As a quick overview: In September last year, a fit of jealousy caused someone to set light to a mid-level flat in a multi-story house. The intended target was away, but his wife and three-year-old daughter were inside. They died.</p>
<p>The trial has concluded, and Barbara Zhanje has been jailed for their murder, but on the steps of the Court House after the judgement, the Uncle of the deceased and her daughter, Mr. Osobu, said:</p>
<blockquote><p>&#8220;The fire brigade tried but it was not good enough. Lawyers will be looking at things to see if we can take further action.&#8221;</p></blockquote>
<p>Although this article doesn&#8217;t quote the core incident here (and in fact appears to suggest that the blame for failing to save them lays with the Fire Brigade), <a title="&quot;Jilted girlfriend killed mum and toddler in house fire&quot; (Yorkshire Post)" href="http://www.yorkshirepost.co.uk/news/at-a-glance/top-stories/jilted_girlfriend_killed_mum_and_toddler_in_house_fire_1_3130682" target="_blank">this one does</a>. Specifically:</p>
<blockquote><p>Ms Elmi was taken out of her room with the assistance of a ladder. Firefighters entered the property to search the second floor but the landing collapsed &#8211; causing one of the officers to fall through the floor injuring himself.</p>
<p>They were unable to get to the back bedroom where Ms Ejifunmilayo and her daughter were and retreated.</p></blockquote>
<p>&#8220;<strong>One of the firefighters fell through the landing</strong>.&#8221; In doing everything they can to search for these people, the building became unstable, a firefighter fell and was injured, so they &#8220;retreated.&#8221;</p>
<p>Now Mr. Osobu <strong>wants to sue the Fire Brigade </strong>for not doing enough to save those that died. At this point, I have to say, <em>for fuck&#8217;s sake</em>, the building was collapsing and a firefighter as well was almost killed; what more can they do?</p>
<p>It was very tragic what happened and should never have happened. But to lay the blame for the loss of life at the Fire Brigade as well as the murderer, and to then suggest that you will <strong>sue</strong> them for failing to save these two people <strong>is beyond belief</strong>.</p>
<p>I want to see him strap on a suit and run into a burning building without knowing what it&#8217;s like inside, where people are or whether you&#8217;re going to come back out alive, or undamaged, and see how he copes. Once he does that, maybe then he can consider his next step very carefully.</p>
]]></content:encoded>
			<wfw:commentRss>http://jon.than.io/disgusted-victim-may-sue-the-fire-service/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

