<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/>
  <title>Planet BLUG</title>
  <updated>2012-05-18T19:17:09Z</updated>
  <generator uri="http://intertwingly.net/code/venus/">Venus</generator>
  <author>
    <name>BLUG</name>
    <email>lee.b@kintassa.com</email>
  </author>
  <id>http://planet.belfastlinux.org/atom.xml</id>
  <link href="http://planet.belfastlinux.org/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://planet.belfastlinux.org/" rel="alternate"/>

  <entry>
    <id>tag:www.earth.li,2012:/~noodles/blog//1.269</id>
    <link href="http://www.earth.li/~noodles/blog/2012/05/going-to-debconf-12.html" rel="alternate" type="text/html"/>
    <title>Going to DebConf 12</title>
    <summary>Meant to post this a while ago when I booked the tickets, but life has a habit of being busy at present. I'm pleased to say I'm going to DebConf 12 in Managua. In the off-chance someone else might be on some of the same flights as me, here's what I've booked: Outbound: 2012-07-07 00:15 SFO -&amp;gt; 08:12 CLT US466 2012-07-07 11:40 CLT -&amp;gt; 13:44 MIA US1831 2012-07-07 16:07 MIA -&amp;gt; 16:45 MGA US4925 Inbound: 2012-07-14 21:15 MGA -&amp;gt; 01:50 MIA US4944 2012-07-15 06:15 MIA -&amp;gt; 08:19 CLT US1800 2012-07-15 09:40 CLT -&amp;gt; 12:08 SFO US1485 There were some single stop options but the timings didn't them any quicker, they weren't any cheaper, and these times worked better for me anyway....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p><img alt="DebConf12.png" class="mt-image-center" height="60" src="http://www.earth.li/%7Enoodles/blog/DebConf12.png" style="float: center; margin: 0 20px 20px 0;" width="180"/> </p><div>
Meant to post this a while ago when I booked the tickets, but life has a habit of being busy at present. I'm pleased to say I'm going to DebConf 12 in Managua. In the off-chance someone else might be on some of the same flights as me, here's what I've booked:<p/>

<p>Outbound:</p>

<pre><code>2012-07-07 00:15 SFO -&gt; 08:12 CLT US466
2012-07-07 11:40 CLT -&gt; 13:44 MIA US1831
2012-07-07 16:07 MIA -&gt; 16:45 MGA US4925
</code></pre>

<p>Inbound:</p>

<pre><code>2012-07-14 21:15 MGA -&gt; 01:50 MIA US4944
2012-07-15 06:15 MIA -&gt; 08:19 CLT US1800
2012-07-15 09:40 CLT -&gt; 12:08 SFO US1485
</code></pre>

<p>There were some single stop options but the timings didn't them any quicker, they weren't any cheaper, and these times worked better for me anyway.
</p></div><p/></div>
    </content>
    <updated>2012-05-12T15:50:36Z</updated>
    <published>2012-05-12T15:38:28Z</published>
    <category label="DebConf" scheme="http://www.sixapart.com/ns/types#tag" term="debconf"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://redbrain.co.uk/?p=657</id>
    <link href="http://redbrain.co.uk/index.php/about-me/should-i/" rel="alternate" type="text/html"/>
    <title>Should I?</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Well today i had a thought where i have spent about 3 to 4 years of my life working on my own projects and Open Source trying to learn outside of University. In my Degree path there is no Final Year project or anything, this always annoyed me. I only have 2 exams at the [...]</p></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Well today i had a thought where i have spent about 3 to 4 years of my life working on my own projects and Open Source trying to learn outside of University. In my Degree path there is no Final Year project or anything, this always annoyed me. I only have 2 exams at the moment which i don’t fee that confident in. And since Gccpy is actually starting to get interesting where its starting to work and i completed my own interpreter to a decent amount crules and i created my own static compiler cmod a modula compiler for i386. I already had a thesis document started along side Gccpy and i am thinking of finishing it up this week to some extend detailing all 3 of these projects focusing on gccpy of course and handing this into my university i feel this must count towards something and i just want this monkey off my back i guess and i feel this might help. You can view the code for any of these projects over at:</p>
<p><a href="http://code.redbrain.co.uk" title="http://code.redbrain.co.uk">code.redbrain.co.uk</a></p>
<p>Reminder the Gccpy code has been moved to the gccpy repository on that server and stable *ish code is maintined on the gccpy branch of the GCC git repository when i reach more stable code i will push the svn server also.</p></div>
    </content>
    <updated>2012-04-24T14:51:05Z</updated>
    <category term="About Me"/>
    <category term="Compilers"/>
    <category term="Update!"/>
    <author>
      <name>redbrain</name>
    </author>
    <source>
      <id>http://redbrain.co.uk</id>
      <link href="http://redbrain.co.uk/index.php/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://redbrain.co.uk" rel="alternate" type="text/html"/>
      <subtitle>Frustrated Software Developer</subtitle>
      <title>RedBrain @ $HOME : ~ $</title>
      <updated>2012-04-24T15:17:07Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2012:/~noodles/blog//1.268</id>
    <link href="http://www.earth.li/~noodles/blog/2012/04/the-future-is-here-again.html" rel="alternate" type="text/html"/>
    <title>The future is here again</title>
    <summary>Back in 2004 when Simon and I went full time with Black Cat one of the first things I did was sort out an ADSL offering, including native IPv6. We were one of the first UK ISPs to offer this (possibly the first; I know A&amp;amp;A had been doing tunneled IPv6 for a lot longer, but I'm not sure exactly when they enabled IPv6 on the PPP session. Also Bogons were fairly quick to enable it as well). By the middle of 2004 I was fully IPv6 enabled; my colo box had a native connection, my entire home network (a /64 for the wired, a /64 for the wireless) was configured, BCN had multiple native IPv6 connections to other ISPs (such as peering over LoNAP). By and large it just worked; I remember at one point looking at a traffic graph link from someone in Australia and them indicating surprise that I'd come in over v6. I hadn't noticed anything different than normal, which is exactly how it should be. When we sold BCN in 2007 unfortunately one of the casualties was the v6 support. The ISP that took over the ADSL wasn't setup to be able to continue the v6 support, nor were RapidSwitch, who took over most of the hosting (I note with sadness that RapidSwitch still don't seem to be offering v6, though they keep saying it's a work in progress). So I stopped having any v6 for some time, refusing to slum it with a tunnel. This changed at the start of last year, when I sought out new hosting for the. I ended up selecting Bytemark, partly because I knew of their commitment to v6. I'd chosen Sonic as my US access ISP, again partly because they offered an IPv6 tunnel service (while not as nice as native v6 over the DSL I felt that a tunnel provided by the DSL ISP was acceptable for access). However a combination of not having a machine that was always on at home, and a dynamic IP on my connection, meant that I never got round to configuring anything permanent up. Recently I got around to buying a little low powered box to be always-on and this week I finally looked at configuring it up as the tunnel endpoint, planning to do some sort of screen scraping of the web interface to automatically update the tunnel broker information for the rare occurrences when my IP changes. The first nice surprise was that Sonic are now doing static IPs for free (previously you could only have a block of 8 for $20/month extra). That makes things a lot easier. So tonight I configured up the little server as the tunnel endpoint, installing radvd and some basic v6 firewalling. As expected my laptop sees the RAs, automatically configures everything up and my ssh sessions start to go over IPv6 instead. Looks like my phone also does the same. I'm not entirely sure what the NAT on the ADSL router is doing and if inbound connections will fail if there's nothing outbound holding the translation entry active, but I'm sure I can work around that if it turns out to be a problem. I care more about access than hosting anything on the end of my DSL anyway. This means I'm finally almost back to where I was nearly 8 years ago, just in time for World IPv6 Launch day....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>Back in 2004 when <a href="http://www.earth.li/%7Ehuggie/">Simon</a> and I went full time with Black Cat one of the first things I did was sort out an ADSL offering, including native IPv6. We were one of the first UK ISPs to offer this (possibly the first; I know <a href="http://www.aaisp.net.uk/">A&amp;A</a> had been doing tunneled IPv6 for a lot longer, but I'm not sure exactly when they enabled IPv6 on the PPP session. Also <a href="http://www.bogons.net/">Bogons</a> were fairly quick to enable it as well). By the middle of 2004 I was fully IPv6 enabled; my colo box had a native connection, my entire home network (a /64 for the wired, a /64 for the wireless) was configured, BCN had multiple native IPv6 connections to other ISPs (such as peering over <a href="http://www.lonap.net/">LoNAP</a>). By and large it just worked; I remember at one point looking at a traffic graph link from someone in Australia and them indicating surprise that I'd come in over v6. I hadn't noticed anything different than normal, which is exactly how it should be.</p>

<p>When we sold BCN in 2007 unfortunately one of the casualties was the v6 support. The ISP that took over the ADSL wasn't setup to be able to continue the v6 support, nor were <a href="http://www.rapidswitch.com/">RapidSwitch</a>, who took over most of the hosting (I note with sadness that RapidSwitch still don't seem to be offering v6, though they keep saying it's a work in progress). So I stopped having any v6 for some time, refusing to slum it with a tunnel.</p>

<p>This changed at the start of last year, when I sought out new hosting for <a href="http://the.earth.li/">the</a>. I ended up selecting <a href="http://www.bytemark.co.uk/">Bytemark</a>, partly because I knew of their commitment to v6. I'd chosen  <a href="http://www.sonic.net/">Sonic</a> as my US access ISP, again partly because they offered an IPv6 tunnel service (while not as nice as native v6 over the DSL I felt that a tunnel provided by the DSL ISP was acceptable for access). However a combination of not having a machine that was always on at home, and a dynamic IP on my connection, meant that I never got round to configuring anything permanent up.</p>

<p>Recently I got around to buying a little low powered box to be always-on and this week I finally looked at configuring it up as the tunnel endpoint, planning to do some sort of screen scraping of the web interface to automatically update the tunnel broker information for the rare occurrences when my IP changes. The first nice surprise was that Sonic are now doing static IPs for free (previously you could only have a block of 8 for $20/month extra). That makes things a lot easier. So tonight I configured up the little server as the tunnel endpoint, installing radvd and some basic v6 firewalling. As expected my laptop sees the RAs, automatically configures everything up and my ssh sessions start to go over IPv6 instead. Looks like my phone also does the same. I'm not entirely sure what the NAT on the ADSL router is doing and if inbound connections will fail if there's nothing outbound holding the translation entry active, but I'm sure I can work around that if it turns out to be a problem. I care more about access than hosting anything on the end of my DSL anyway.</p>

<p>This means I'm finally almost back to where I was nearly 8 years ago, just in time for <a href="http://www.worldipv6launch.org/">World IPv6 Launch</a> day.</p></div>
    </content>
    <updated>2012-04-24T06:00:34Z</updated>
    <published>2012-04-24T05:38:55Z</published>
    <category label="IPv6" scheme="http://www.sixapart.com/ns/types#tag" term="ipv6"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://redbrain.co.uk/?p=653</id>
    <link href="http://redbrain.co.uk/index.php/update/gccpy-update/" rel="alternate" type="text/html"/>
    <title>Gccpy Update!</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I have been very quite this last long while. Things are actually finally starting to come together for me now i am about to finish my degree when i got a few job interviews out of the blue and the one i really wanted i have now got the offer for the job and i [...]</p></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I have been very quite this last long while. Things are actually finally starting to come together for me now i am about to finish my degree when i got a few job interviews out of the blue and the one i really wanted i have now got the offer for the job and i am taking it. I have 2 exams to finish and i am just studying for them at the moment but not worrying about it that much because i quite frankly just don’t care that much because it wont affect any part of my life any-more. I have dreamed of this day for years and it feels so good. I have a small dilemma in that i went for Google Summer of code again for the 3rd year for Cython my proposal you can see here: <a href="http://www.google-melange.com/gsoc/proposal/review/google/gsoc2012/redbrain1123/22002#c25002">gsoc 2012 proposal </a>. Which i don’t feel i can accept if i get accepted but i shall see the start dates for my new job are set yet as i have to wait on the paper work coming though still and i will have to complete a course on financial software. I will give more info on the job because its quite exciting when i get everything set it stone more.</p>
<p> </p>
<p>What i want to talk about is that my project in creating a Python Front-end to GCC is finally starting to do stuff now its quite exciting as of 1 hour ago you can compile this amount of python and have it work:</p>
<p> </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> date:</div>
</li>
<li class="li1">
<div class="de1">  day = <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">  month = <span class="nu0">0</span></div>
</li>
<li class="li2">
<div class="de2">  year = <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw1">print</span> <span class="nu0">11</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">  <span class="kw1">def</span> <span class="kw4">__init__</span> <span class="br0">(</span><span class="kw2">self</span>, x, y, z<span class="br0">)</span>:</div>
</li>
<li class="li1">
<div class="de1">    <span class="kw2">self</span>.<span class="me1">day</span> = x</div>
</li>
<li class="li2">
<div class="de2">    <span class="kw2">self</span>.<span class="me1">month</span> = y</div>
</li>
<li class="li1">
<div class="de1">    <span class="kw2">self</span>.<span class="me1">year</span> = z</div>
</li>
<li class="li1">
<div class="de1">    <span class="kw1">print</span> <span class="nu0">22</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">  <span class="kw1">def</span> print_date <span class="br0">(</span><span class="kw2">self</span><span class="br0">)</span>:</div>
</li>
<li class="li2">
<div class="de2">    <span class="kw1">print</span> <span class="nu0">33</span></div>
</li>
<li class="li1">
<div class="de1">    <span class="kw1">print</span> <span class="kw2">self</span>.<span class="me1">day</span>, <span class="kw2">self</span>.<span class="me1">month</span>, <span class="kw2">self</span>.<span class="me1">year</span></div>
</li>
<li class="li1">
<div class="de1">    <span class="kw1">print</span> <span class="nu0">34</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="nu0">0</span></div>
</li>
<li class="li2">
<div class="de2">x = date <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">2</span>, <span class="nu0">3</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">x.<span class="me1">print_date</span> <span class="br0">(</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">x.<span class="me1">day</span> = <span class="nu0">10</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">print</span> <span class="nu0">3</span></div>
</li>
<li class="li1">
<div class="de1">x.<span class="me1">print_date</span> <span class="br0">(</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="nu0">4</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p> </p>
<p>Although this is an extremely basic example this shows a helluva lot in how data is accessed and addressed which is all the core of dynamic typing. Right now i am just flesing things out with conditionals and loops now which will lead me on to creating the yield instruction and returns (which is half implemented) which i plan to use <a href="http://en.wikipedia.org/wiki/Setjmp.h">Setjmp.h</a> to implement. Which leads on to exceptions etc. Then we move on to imports and some standard library stuff before i would work on a basic garbage collector.</p>
<p> </p>
<p>Anyone interested i output gimple code for that example:</p>
<p> </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">t_date_1.<span class="me1">py</span>.__main_start__ <span class="br0">(</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_attrib_t * D<span class="nu0">.200</span>;</div>
</li>
<li class="li2">
<div class="de2">  <span class="kw4">struct</span> gpy_object_attrib_t * D<span class="nu0">.201</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_attrib_t * D<span class="nu0">.202</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_attrib_t * D<span class="nu0">.203</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_attrib_t * D<span class="nu0">.204</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_attrib_t * D<span class="nu0">.205</span>;</div>
</li>
<li class="li2">
<div class="de2">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.206</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.207</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.37</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.38</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.210</span>;</div>
</li>
<li class="li2">
<div class="de2">  <span class="kw4">struct</span> gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.39</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.212</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.213</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.40</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.215</span>;</div>
</li>
<li class="li2">
<div class="de2">  <span class="kw4">struct</span> gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.41</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.217</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * * __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.42</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.219</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.220</span>;</div>
</li>
<li class="li2">
<div class="de2">  <span class="kw4">void</span> &lt;retval&gt;;</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">  gpy_rr_extend_runtime_stack <span class="br0">(</span><span class="nu0">3</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.200</span> = gpy_rr_fold_attribute <span class="br0">(</span><span class="st0">"month"</span>, 0B, <span class="nu0">20</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.201</span> = gpy_rr_fold_attribute <span class="br0">(</span><span class="st0">"day"</span>, 0B, <span class="nu0">16</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  D<span class="nu0">.202</span> = gpy_rr_fold_attribute <span class="br0">(</span><span class="st0">"__field_init__"</span>, t_date_1.<span class="me1">py</span>.<span class="me1">date</span>.__field_init__, <span class="nu0">12</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.203</span> = gpy_rr_fold_attribute <span class="br0">(</span><span class="st0">"print_date"</span>, t_date_1.<span class="me1">py</span>.<span class="me1">date</span>.<span class="me1">print_date</span>, <span class="nu0">8</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.204</span> = gpy_rr_fold_attribute <span class="br0">(</span><span class="st0">"__init__"</span>, t_date_1.<span class="me1">py</span>.<span class="me1">date</span>.__init__, <span class="nu0">4</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.205</span> = gpy_rr_fold_attribute <span class="br0">(</span><span class="st0">"year"</span>, 0B, <span class="nu0">0</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  C<span class="nu0">.13</span> = gpy_rr_fold_attrib_list <span class="br0">(</span><span class="nu0">6</span>, D<span class="nu0">.205</span>, D<span class="nu0">.204</span>, D<span class="nu0">.203</span>, D<span class="nu0">.202</span>, D<span class="nu0">.201</span>, D<span class="nu0">.200</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  A<span class="nu0">.14</span> = __GPY_GLOBL_RR_STACK_POINTER;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.206</span> = gpy_rr_fold_class_decl <span class="br0">(</span>C<span class="nu0">.13</span>, <span class="nu0">24</span>, <span class="st0">"t_date_1.py.date"</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  *A<span class="nu0">.14</span> = D<span class="nu0">.206</span>;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.15</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, P<span class="nu0">.15</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  A<span class="nu0">.16</span> = __GPY_GLOBL_RR_STACK_POINTER;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.17</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.18</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.19</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">3</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.207</span> = *A<span class="nu0">.16</span>;</div>
</li>
<li class="li2">
<div class="de2">  R<span class="nu0">.20</span> = gpy_rr_fold_call <span class="br0">(</span>D<span class="nu0">.207</span>, <span class="nu0">3</span>, P<span class="nu0">.17</span>, P<span class="nu0">.18</span>, P<span class="nu0">.19</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.37</span> = __GPY_GLOBL_RR_STACK_POINTER;</div>
</li>
<li class="li1">
<div class="de1">  A<span class="nu0">.21</span> = __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.37</span> + <span class="nu0">-4</span>;</div>
</li>
<li class="li1">
<div class="de1">  *A<span class="nu0">.21</span> = R<span class="nu0">.20</span>;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.22</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, P<span class="nu0">.22</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.38</span> = __GPY_GLOBL_RR_STACK_POINTER;</div>
</li>
<li class="li1">
<div class="de1">  A<span class="nu0">.24</span> = __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.38</span> + <span class="nu0">-4</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.210</span> = *A<span class="nu0">.24</span>;</div>
</li>
<li class="li1">
<div class="de1">  T<span class="nu0">.23</span> = gpy_rr_eval_attrib_reference <span class="br0">(</span>D<span class="nu0">.210</span>, <span class="st0">"print_date"</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.39</span> = __GPY_GLOBL_RR_STACK_POINTER;</div>
</li>
<li class="li1">
<div class="de1">  A<span class="nu0">.25</span> = __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.39</span> + <span class="nu0">-4</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.212</span> = *A<span class="nu0">.25</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.213</span> = *T<span class="nu0">.23</span>;</div>
</li>
<li class="li1">
<div class="de1">  R<span class="nu0">.26</span> = gpy_rr_fold_call <span class="br0">(</span>D<span class="nu0">.213</span>, <span class="nu0">1</span>, D<span class="nu0">.212</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  P<span class="nu0">.27</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, P<span class="nu0">.27</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.29</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">10</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.40</span> = __GPY_GLOBL_RR_STACK_POINTER;</div>
</li>
<li class="li1">
<div class="de1">  A<span class="nu0">.30</span> = __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.40</span> + <span class="nu0">-4</span>;</div>
</li>
<li class="li2">
<div class="de2">  D<span class="nu0">.215</span> = *A<span class="nu0">.30</span>;</div>
</li>
<li class="li1">
<div class="de1">  T<span class="nu0">.28</span> = gpy_rr_eval_attrib_reference <span class="br0">(</span>D<span class="nu0">.215</span>, <span class="st0">"day"</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  *T<span class="nu0">.28</span> = P<span class="nu0">.29</span>;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.31</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">3</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, P<span class="nu0">.31</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.41</span> = __GPY_GLOBL_RR_STACK_POINTER;</div>
</li>
<li class="li1">
<div class="de1">  A<span class="nu0">.33</span> = __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.41</span> + <span class="nu0">-4</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.217</span> = *A<span class="nu0">.33</span>;</div>
</li>
<li class="li1">
<div class="de1">  T<span class="nu0">.32</span> = gpy_rr_eval_attrib_reference <span class="br0">(</span>D<span class="nu0">.217</span>, <span class="st0">"print_date"</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.42</span> = __GPY_GLOBL_RR_STACK_POINTER;</div>
</li>
<li class="li2">
<div class="de2">  A<span class="nu0">.34</span> = __GPY_GLOBL_RR_STACK_POINTER<span class="nu0">.42</span> + <span class="nu0">-4</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.219</span> = *A<span class="nu0">.34</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.220</span> = *T<span class="nu0">.32</span>;</div>
</li>
<li class="li1">
<div class="de1">  R<span class="nu0">.35</span> = gpy_rr_fold_call <span class="br0">(</span>D<span class="nu0">.220</span>, <span class="nu0">1</span>, D<span class="nu0">.219</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.36</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">4</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, P<span class="nu0">.36</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">t_date_1.<span class="me1">py</span>.<span class="me1">date</span>.__field_init__ <span class="br0">(</span><span class="kw4">struct</span> t_date_1.<span class="me1">py</span>.<span class="me1">date</span> * __object_state__<span class="br0">)</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">void</span> &lt;retval&gt;;</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.0</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  __object_state__-&gt;day = P<span class="nu0">.0</span>;</div>
</li>
<li class="li2">
<div class="de2">  P<span class="nu0">.1</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  __object_state__-&gt;month = P<span class="nu0">.1</span>;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.2</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  __object_state__-&gt;year = P<span class="nu0">.2</span>;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.3</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">11</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, P<span class="nu0">.3</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">t_date_1.<span class="me1">py</span>.<span class="me1">date</span>.<span class="me1">print_date</span> <span class="br0">(</span><span class="kw4">struct</span> gpy_object_t * self, <span class="kw4">struct</span> gpy_object_t * * __arguments__<span class="br0">)</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.116</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.117</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_object_t * D<span class="nu0">.118</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">void</span> &lt;retval&gt;;</div>
</li>
<li class="li2">
<div class="de2"> </div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.8</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">33</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, P<span class="nu0">.8</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  T<span class="nu0">.9</span> = gpy_rr_eval_attrib_reference <span class="br0">(</span>self, <span class="st0">"day"</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  T<span class="nu0">.10</span> = gpy_rr_eval_attrib_reference <span class="br0">(</span>self, <span class="st0">"month"</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  T<span class="nu0">.11</span> = gpy_rr_eval_attrib_reference <span class="br0">(</span>self, <span class="st0">"year"</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.116</span> = *T<span class="nu0">.11</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.117</span> = *T<span class="nu0">.10</span>;</div>
</li>
<li class="li1">
<div class="de1">  D<span class="nu0">.118</span> = *T<span class="nu0">.9</span>;</div>
</li>
<li class="li1">
<div class="de1">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">3</span>, D<span class="nu0">.118</span>, D<span class="nu0">.117</span>, D<span class="nu0">.116</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  P<span class="nu0">.12</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">34</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, P<span class="nu0">.12</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li2">
<div class="de2">t_date_1.<span class="me1">py</span>.<span class="me1">date</span>.__init__ <span class="br0">(</span><span class="kw4">struct</span> gpy_object_t * self, <span class="kw4">struct</span> gpy_object_t * * __arguments__<span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">void</span> &lt;retval&gt;;</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">  x = *__arguments__;</div>
</li>
<li class="li2">
<div class="de2">  y = MEM<span class="br0">[</span><span class="br0">(</span><span class="kw4">struct</span> gpy_object_t * *<span class="br0">)</span>__arguments__ + 4B<span class="br0">]</span>;</div>
</li>
<li class="li1">
<div class="de1">  z = MEM<span class="br0">[</span><span class="br0">(</span><span class="kw4">struct</span> gpy_object_t * *<span class="br0">)</span>__arguments__ + 8B<span class="br0">]</span>;</div>
</li>
<li class="li1">
<div class="de1">  T<span class="nu0">.4</span> = gpy_rr_eval_attrib_reference <span class="br0">(</span>self, <span class="st0">"day"</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  *T<span class="nu0">.4</span> = x;</div>
</li>
<li class="li1">
<div class="de1">  T<span class="nu0">.5</span> = gpy_rr_eval_attrib_reference <span class="br0">(</span>self, <span class="st0">"month"</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2">  *T<span class="nu0">.5</span> = y;</div>
</li>
<li class="li1">
<div class="de1">  T<span class="nu0">.6</span> = gpy_rr_eval_attrib_reference <span class="br0">(</span>self, <span class="st0">"year"</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  *T<span class="nu0">.6</span> = z;</div>
</li>
<li class="li1">
<div class="de1">  P<span class="nu0">.7</span> = gpy_rr_fold_integer <span class="br0">(</span><span class="nu0">22</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  gpy_rr_eval_print <span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, P<span class="nu0">.7</span><span class="br0">)</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p> </p>
<p>Its very exciting because its taken almost 3 years of my life in my spare time and 2 Google summer of Code to get this far but finally the huge task of getting the core working its nerly there. I will need to write up alot more about this project from now because its at a state where its much easier to work with people because creating a code base from scratch which can change alot with new ideas its hard untill your sure how each part will work but when its such a big project it can be difficult unless your working together fulltime almost.</p></div>
    </content>
    <updated>2012-04-21T18:33:20Z</updated>
    <category term="Update!"/>
    <author>
      <name>redbrain</name>
    </author>
    <source>
      <id>http://redbrain.co.uk</id>
      <link href="http://redbrain.co.uk/index.php/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://redbrain.co.uk" rel="alternate" type="text/html"/>
      <subtitle>Frustrated Software Developer</subtitle>
      <title>RedBrain @ $HOME : ~ $</title>
      <updated>2012-04-24T15:17:08Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.mccartney.ie/wordpress/?p=262</id>
    <link href="http://www.mccartney.ie/wordpress/2012/04/an-average-day/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=an-average-day" rel="alternate" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2012/04/an-average-day/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=an-average-day#comments" rel="replies" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2012/04/an-average-day/feed/atom/" rel="replies" type="application/atom+xml"/>
    <title xml:lang="en">An Average Day</title>
    <summary xml:lang="en">There is no such thing as an average or normal day, but here’s what today yesterday looked like (the first day back after a 6 day break): 1000-1200 Wiki Gardening – moving some WIP from my head/evernote to team wiki pages 1200-1230 Monitoring &amp; Measuring Catchup – a quick check around on the stuff we don’t [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>There is no such thing as an average or normal day, but here’s what <del>today</del> yesterday looked like (the first day back after a 6 day break):</p>
<ul>
<li>1000-1200 Wiki Gardening – moving some WIP from my head/evernote to team wiki pages</li>
<li>1200-1230 Monitoring &amp; Measuring Catchup – a quick check around on the stuff we don’t get alerted about, checkup on some new nodes I added to cacti before I finished up last week.</li>
<li>1230-1330 Reading – closing out a bunch of open tabs etc</li>
<li>1330-1430 Lunch (the joy of working from home, soup &amp; sandwiches with family:-))</li>
<li>1430-1600 Open CM tickets for up coming changes, upgrade Puppet Dashboard, publish some more strategy information on our internal wiki.  Work through the dreaded email back log.</li>
<li>1600-1700 Baby Dr Appointment</li>
<li>1700-1800 Weekly Team conference call (mostly around some major work scheduled for this weekend)</li>
<li>1800-2100 Family Time – help the kids tidy up &amp; get them to bed, get something to eat</li>
<li>2100-2200 Finish up some puppet work, mostly tidying up &amp; committing some work to git, review steps for some up coming work with Pacific Time colleague</li>
<li>2200-2300 TV Break  - Michael McIntyre <img alt=":-)" class="wp-smiley" src="http://www.mccartney.ie/wordpress/wp-includes/images/smilies/icon_smile.gif"/> </li>
<li>2300-0030 more follow up with PT colleague, ironed out plan for moving from DAS to NAS for a pilot set of machines, committed plan to wiki for tracking, discussed the general meanness of some of the people we work with.</li>
</ul>
<div><em>After the brain searching trying to remember what I did, I’ve re-installed <a href="http://www.rescuetime.com/" target="_blank">RescueTime</a>..</em></div></div>
    </content>
    <updated>2012-04-12T11:25:37Z</updated>
    <published>2012-04-12T11:25:37Z</published>
    <category scheme="http://www.mccartney.ie/wordpress" term="Random Toad"/>
    <author>
      <name>simonm</name>
      <uri>http://www.mccartney.ie/blog</uri>
    </author>
    <source>
      <id>http://www.mccartney.ie/wordpress/feed/atom/</id>
      <link href="http://www.mccartney.ie/wordpress" rel="alternate" type="text/html"/>
      <link href="http://www.mccartney.ie/wordpress/feed/atom/" rel="self" type="application/atom+xml"/>
      <subtitle xml:lang="en">too boring to have a real blog</subtitle>
      <title xml:lang="en">ze blog of simon</title>
      <updated>2012-04-12T11:49:19Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:pgregg.com,2012:/blog//2.350</id>
    <link href="http://pgregg.com/blog/2012/03/my-onlive-experience.html" rel="alternate" type="text/html"/>
    <title>My OnLive Experience</title>
    <summary>In February BT posted an offer (no longer on the BT web site) allowing customers in Northern Ireland to buy an OnLive Gaming Console (MicroConsole) for £9.99 (normal price £70) plus £6 shipping. Seemed like a good deal - and so I signed up (2 Feb 2012). Remember these prices - they are important as they come up later.Executive Summary:I bought a MicroConsole device from OnLive, that is faulty.OnLive is failing to uphold consumer's Statutory rights in the UK. And even goes to far as to explicitly deny those rights to consumers, itself a criminal offense in the UK. I...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">In February BT posted an <a href="http://www.hotukdeals.com/deals/onlive-console-for-9-99-p-p-for-bt-bb-customers-ni-plus-3-months-playpack-bundle-1120954">offer</a>
 (no longer on the BT web site) allowing customers in Northern Ireland 
to buy an OnLive Gaming Console (MicroConsole) for £9.99 (normal price 
£70) plus £6 shipping. Seemed like a good deal - and so I signed up (2 
Feb 2012). Remember these prices - they are important as they come up 
later.<br/><br/>Executive Summary:<br/>I bought a MicroConsole device from OnLive, that is faulty.<br/>OnLive
 is failing to uphold consumer's Statutory rights in the UK. And even 
goes to far as to explicitly deny those rights to consumers, itself a 
criminal offense in the UK. I have been denied a refund of a defective 
unit on the grounds that the unit was free and all I paid was postage 
(which is incorrect).<br/>OnLive's website states "No refunds" - a criminal offense in the UK.<br/>Onlive
 have stated that my MicroConsole was free, and I only paid shipping 
costs. And shipping costs will not be refunded. *wrong*<br/>OnLive are 
also denying Sale of Goods Act by saying that I only have 7 days to 
cancel and that I agreed to this in the Terms of Service. This relates to the Distance Selling Regulations and not to faulty goods under the Sale of Goods Act.<br/><br/>I am of the 
opinion that I acted reasonably and gave OnLive sufficient time to 
rectify the problem. I also believe, given the time lines showing that 
the hardware never worked, that I can not, in law, be deemed to have 
accepted the goods, and so have a lawful right to fully reject them, and
 obtain a full refund for all monies paid.<br/><br/>I don't want to criticise OnLive Technical Support, just their Customer Service policies. <br/><br/>Timeline: I will update the timeline below as things develop.<br/><br/>I
 received the MicroConsole the week of February 18 (not sure exactly 
what date) and attempted to use it, however it was nothing like the 
experience received when playing on the PC.  The PC was reasonably quick
 and responsive and I would estimate ran at maybe 15fps which was 
reasonable for streaming videogame over the internet.  The MicroConsole 
on the otherhand was laggy, and I achieved maybe 3 to 4 fps. In short, 
the game (Dirt 3) was unplayable.<br/><br/>I opened a Support ticket February 18. And so the saga begins.<br/><br/>My original support request: <span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            02/18/2012 05:18 PM (timestamps from OnLive support portal)</span><br/><br/><blockquote>I have attempted to set up my MicroConsole and am able to connect to the service.<br/>However any time I attempt to play/start HomeFront game, the MC crashes and reboots.<br/>Attempting to play Dirt3 results in a game running at approx 4 frames per second.<br/>Playing Homefront on my PC is fine.<br/></blockquote><blockquote>The
 MC constantly pops a message in the top right complaining of network 
problems - but the fact my PC works fine, shows the network is fine.<br/><a href="http://www.speedtest.net/result/1782184455.png" target="_blank">http://www.speedtest.net/result/1782184455.png</a><br/>My home is wired for Gbit ethernet, and the MC is plugged into that. I've tried an alternative ethernet cable - no difference.<br/></blockquote><blockquote>Even the intro screen/animation on the MC is blocky and just looks wrong.<br/></blockquote><blockquote>I'm beginning to think I got a bad MC as I have never been able to play a game on it.<br/></blockquote><blockquote>Thanks,<br/>PG.    <br/></blockquote>Within an 80 minutes I had a reply, excellent. Except it is a standardised get-more-info affair. Fair enough I suppose: <span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            02/18/2012 06:40 PM</span><br/><br/><blockquote>Greetings PG,<br/></blockquote><blockquote>Thank you for contacting OnLive. To help our team troubleshoot the issue, please provide the following information:<br/></blockquote><blockquote>- In what country are you located?<br/>- What is the name of your Internet Service Provider?<br/>- Is an error message displayed when you connect? If so, what is the message?<br/>- What are the results of the broadband quality test from <a href="http://www.pingtest.net/" target="_blank">http://www.pingtest.net</a>? *<br/>- What are the results of the Internet connection test from <a href="http://www.speedtest.net/" target="_blank">http://www.speedtest.net</a>? *<br/>- What is the brand and model of the cable or DSL modem used in your home network?<br/>- What (if any) is the brand and model of the router used in your home network? <br/>- Are you behind a firewall and/or are any antivirus applications running? <br/>-  Are you using a Wireless (Wi-Fi) or Wired router? <br/>If Wi-Fi, please check for interference:<br/>-
 Are you the only person currently on network (using the Internet), or 
are other members of your household sharing the connection? <br/>- If you have a smartphone, is it configured to share your Wi-Fi network?<br/></blockquote><blockquote>* For best results, choose the server closest to your location:<br/>US<br/>-- East Coast --&gt; Washington D.C.<br/>-- West Coast --&gt; San Francisco, CA<br/>-- Midwest --&gt; Dallas, TX<br/>UK <br/>-- London<br/></blockquote><blockquote>Best regards,<br/></blockquote><blockquote>Realiana<br/>Customer Service Representative<br/><a href="http://support.onlive.com/" target="_blank">http://support.onlive.com/</a><br/></blockquote><br/>So I respond to each of the questions: <span class="rn_ThreadTime">02/19/2012 06:13 AM</span><br/><br/><blockquote>In what country are you located?<br/></blockquote><blockquote>UK<br/></blockquote><blockquote>- What is the name of your Internet Service Provider?<br/></blockquote><blockquote>BT<br/></blockquote><blockquote>- Is an error message displayed when you connect? If so, what is the message?<br/></blockquote><blockquote>No error message.<br/></blockquote><blockquote>- What are the results of the broadband quality test from <a href="http://www.pingtest.net/" target="_blank">http://www.pingtest.net</a>? *<br/></blockquote><blockquote><a href="http://www.pingtest.net/result/57209759.png" target="_blank">http://www.pingtest.net/result/57209759.png</a><br/></blockquote><blockquote>- What are the results of the Internet connection test from <a href="http://www.speedtest.net/" target="_blank">http://www.speedtest.net</a>? *<br/></blockquote><blockquote><a href="http://www.speedtest.net/result/1782184455.png" target="_blank">http://www.speedtest.net/result/1782184455.png</a><br/></blockquote><blockquote>- What is the brand and model of the cable or DSL modem used in your home network?<br/></blockquote><blockquote>BT Supplied HomeHub3 (I believe) - supplied with the BT Infinity service.<br/></blockquote><blockquote>- What (if any) is the brand and model of the router used in your home network?<br/></blockquote><blockquote>Same device as the BT HomeHub3<br/></blockquote><blockquote>- Are you behind a firewall and/or are any antivirus applications running?<br/></blockquote><blockquote>No - just the BT HomeHub.<br/></blockquote><blockquote>- Are you using a Wireless (Wi-Fi) or Wired router?<br/></blockquote><blockquote>BT HomeHub does Wifi - but I am not using Wifi. I have Gbit Cat5e wired ethernet connections to all devices, including the MC.<br/></blockquote><blockquote>If Wi-Fi, please check for interference:<br/></blockquote><blockquote>No
 interference.  The BT HomeHub3 is supposed to scan and pick the best 
channel with no interferences. However, the issue is moot - my nearest 
neighbour is 100m away and using my phone's (android app) Wifi Analyser,
 I am the only wifi network it can see.<br/></blockquote><blockquote>- Are you the only person
 currently on network (using the Internet), or are other members of your
 household sharing the connection?<br/></blockquote><blockquote>At the times of testing, I am the only one using the network.<br/></blockquote><blockquote>- If you have a smartphone, is it configured to share your Wi-Fi network?<br/></blockquote><blockquote>No.<br/></blockquote><blockquote>Thanks,<br/>PG    <br/></blockquote>The following Wednesday I get a holding email: <span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            02/22/2012 12:09 PM<br/><br/></span><blockquote>Hello,<br/></blockquote><blockquote>Thank you for the information. I will forward your inquiry
 to our Technical Team for further assistance, They will contact you via
 email as soon as they are able.<br/></blockquote><blockquote>Thank you for your patience. Have a lovely day!<br/></blockquote><blockquote>Best regards,<br/></blockquote><blockquote>Realiana<br/>Customer Service Representative<br/><a href="http://support.onlive.com/" target="_blank">http://support.onlive.com/</a><br/></blockquote>And so I wait another 2 days to receive: <span class="rn_ThreadTime">02/24/2012 02:23 PM<br/><br/></span><blockquote>Hello,<br/><br/>Your issues may have to do with a couple of things. I saw 
that you had run a speed test, but we would like it if you could run the
 test to London. <br/><br/>Can you please run a test for me at 
www.speedtest.net and find the white dot that represents London. Click 
on that dot and start the test. When the test finishes, please click on 
Share This Result, then click Copy and paste the results here.<br/><br/>Best regards,<br/><br/>Berret<br/>OnLive Technical Support<br/><a href="http://support.onlive.com/" target="_blank">http://support.onlive.com</a><br/></blockquote><br/>2 days later, I reply: <span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            02/26/2012 04:41 PM<br/><br/></span><blockquote>Hi, <br/><br/>Here are some results from London based speedtests that I ran just now. <br/><br/><a href="http://www.speedtest.net/result/1798764992.png" target="_blank">http://www.speedtest.net/result/1798764992.png</a><br/><br/><a href="http://www.speedtest.net/result/1798810091.png" target="_blank">http://www.speedtest.net/result/1798810091.png</a><br/><br/><a href="http://www.speedtest.net/result/1798812080.png" target="_blank">http://www.speedtest.net/result/1798812080.png</a><br/><br/><a href="http://www.speedtest.net/result/1798812973.png" target="_blank">http://www.speedtest.net/result/1798812973.png</a><br/><br/>Thanks, <br/>PG <br/></blockquote>    <span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            02/28/2012 04:22 PM:<br/><br/></span><blockquote>Hello,<br/><br/>Thank you very much for providing those links for me. Is 
this issue only on your MicroConsole, or do you notice issues on you 
computer as well?<br/><br/>Best regards,<br/><br/>Berret<br/>OnLive Technical Support<br/><a href="http://support.onlive.com/" target="_blank">http://support.onlive.com</a><br/></blockquote><br/><span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            02/28/2012 06:26 PM<br/><br/></span><blockquote>Hi, <br/><br/>No. PC play seems to be working well. <br/><br/>Thanks, <br/>PG <br/>-- <br/>Sent from my Android phone with K-9 Mail. Please excuse my brevity. <br/></blockquote><span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            03/01/2012 10:26 AM<br/><br/></span><blockquote>Hey PG,<br/><br/>I am trying to do some research into why you are having 
this experience on your MicroConsole only. Can you try and run a few 
more sessions on the device, so we can get some details? When I look up 
your previous sessions, they are understandably computer ones for the 
most part. <br/><br/>I appreciate the help in figuring out your issue.<br/><br/>Best regards,<br/><br/>Berret<br/>OnLive Technical Support<br/><a href="http://support.onlive.com/" target="_blank">http://support.onlive.com</a><br/></blockquote><br/>Now,
 somehow I did not get this email :( but on Monday 5th I got a 
notification that the ticket was closed because I did not reply.<br/><br/>







<blockquote><p class="MsoNormal"><b><span style="">From:</span></b><span style=""> OnLive Support [mailto:support@onlive.com] <br/>
<b>Sent:</b> 05 March 2012 08:22<br/>
<b>Subject:</b> MC blocky and crashes. [Incident: 120218-000143]</span> <span style=""> <br/></span></p><span style="">This ticket has been closed because we have not heard
back from you in 3 days. This is an automated message, but you can re-open the
ticket at any time by replying to this email.</span><br style=""/><span style=""/></blockquote>

<span style="">
<br/></span>I replied saying I didn't get the earlier message, assuming it would reopen the ticket.<br/>It
 didn't, but I was not aware of that and several days later I logged 
into the web site to find the ticket still closed :(  So I open another 
ticket.<br/> <br/><span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            03/20/2012 05:33 PM<br/><br/></span><blockquote>Unfortunately you did not solve 120218-000143.<br/><br/>I did not receive the message just before you closed the ticket and so was surprised when the ticket was closed.<br/><br/>In your message about closing it you state:<br/>"This
 ticket has been closed because we have not heard back from you in 3 
days. This is an automated message, but you can re-open the ticket at 
any time by replying to this email."<br/><br/>Unfortunately this is not 
true because I did reply to this email with further information but this
 did not reopen the ticket. Now when I look at the ticket online, it 
says I can not reopen the ticket.<br/><br/>So with that complaint out of the way...<br/><br/>I wish to request a refund for this MC because it simply does not perform the function to which it is supposed to do.<br/>Please advise as to the correct process to follow to achieve this.<br/><br/>Thank you<br/>Paul Gregg<br/></blockquote><br/>It was then I spotted on their web site the message "No refunds" and so sent a followup:<br/><br/><span class="rn_ThreadTime">03/20/2012 06:14 PM<br/><br/></span><blockquote>Oh - I just saw this:<br/><br/>  What if I change my mind, and want to return the OnLive Game System or an accessory?<br/><br/>    All purchases are final. No refunds.<br/>    Find comprehensive support information at: OnLive Game System. <br/><br/>FYI - Not only is this term unlawful -  OnLive is *committing* a criminal offense in the UK.<br/><br/>Under
 the Consumer Protection from Unfair Trading Regulations 2008 it is also
 a criminal offence to mislead a consumer about his/her legal rights. 
Examples might include stating 'no refunds' or 'sold as seen'.    <br/></blockquote><br/>The picked it up again: <span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            03/21/2012 04:02 PM<br/><br/></span><blockquote>Hello,<br/><br/>Thank you for contacting us again, I apologize you had not
 seen my previous message. I would happy to continue to troubleshoot 
your issue with you if you are still having a bad experience. If you 
would like to pursue a refund, you are correct that our policy is that 
all sales are final, but we can escalate you to our billing department 
to review your request. <br/><br/>Please let us know how you would like to proceed.<br/><br/>Best regards,<br/><br/>Berret<br/>OnLive Technical Support<br/><a href="http://support.onlive.com/" target="_blank">http://support.onlive.com</a><br/></blockquote><br/> <span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            03/21/2012 05:26 PM<br/><br/></span><blockquote>Hi Berret, <br/><br/>Thank you for your reply. <br/>I am at the point where I believe the MC is faulty because it crashes and reboots when I start a game. <br/><br/>I
 understand that you state all sales are final - however this is 
contrary to UK law as I noted - and by even displaying this notice you 
are committing a criminal offense in UK law. I trust you will rectify 
this. Further, under the Sale of Goods Act, goods must be of 
merchantable quality and fit for purpose. You've had over a month to try
 and make the MC<br/>I bought work, without success, and I am within my legal right to demand a full refund. This is what I am invoking now. <br/><br/> 1.  You will provide a full refund for the faulty MC. <br/> 2.  You will provide return postage, or collection service to return the faulty MC to you. <br/><br/>Thank you, <br/>Paul Gregg <br/></blockquote><br/><span class="rn_ThreadTime">03/24/2012 06:58 PM<br/><br/></span><blockquote>Hello,<br/><br/>I will escalate your request to the billing department, 
and they will explain the next steps to you. They will be in on Monday 
and will address your issue as quickly as they can.<br/><br/>Best regards,<br/><br/>Berret<br/>OnLive Technical Support<br/><a href="http://support.onlive.com/" target="_blank">http://support.onlive.com</a><br/></blockquote><br/><span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            03/26/2012 11:13 AM<br/><br/></span><blockquote>Greetings,<br/><br/>Thank you for contacting OnLive. <br/><br/>We understand that you are requesting a refund for your OnLive Game System purchase..  <br/>In order to credit your account, please return the OnLive Gaming System to following address:<br/><br/>ATTN: OnLive Department<br/>LGI Logistics Group International UK LTD <br/>4 Clarendon Drive <br/>Wymbush <br/>Milton Keynes <br/>MK8 8DA <br/><br/>After
 we receive the OnLive Game System, we will apply a refund to your 
account. If we do not receive the device within 10 days from this email 
date, you will not receive the refund.<br/><br/>If you have any other questions please feel free to ask.<br/><br/>Joseph<br/>Warranty Department<br/><a href="http://support.onlive.com/" target="_blank">http://support.onlive.com/</a></blockquote><br/><br/><span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            03/27/2012 08:32 AM<br/><br/></span><blockquote>Hi Joseph,<br/><br/>Thank you for your message.  However, I would request 
that you pick the returned item up from me as is my right under Sale of 
Goods Act for faulty goods.<br/><br/>To be clear - I am requesting a full refund (again under law) and NOT a "credit to my account".<br/><br/>The device is faulty and has never performed as advertised. As is evidenced by support tickets you can see in my account.<br/><br/>Quote:<br/><a href="http://www.oft.gov.uk/business-advice/treating-customers-fairly/sogahome/sogaexplained/" target="_blank">http://www.oft.gov.uk/business-advice/treating-customers-fairly/sogahome/sogaexplained/</a><br/>"In
 the case of faulty goods being returned because they are not fit for 
purpose do not match their description or are not of a satisfactory 
quality , the customer is entitled to claim the cost of postage from you
 or to request that you arrange collection of the item."<br/><br/>I will have the goods packaged in the original box available from my shipping address from Wednesday 28th March.<br/><br/>Thank you.<br/><br/>Paul Gregg    <br/></blockquote><br/><span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            03/27/2012 11:31 AM<br/><br/></span><blockquote>Greetings,<br/><br/>As mentioned in the terms of service that you agreed 
upon when you created your account it states that "All hardware sales 
subject to a 7-day right to cancel." <br/><br/>You are past the 7-day right to cancel.<br/><br/>The
 OnLive Game System you ordered was free and only the shipping cost was 
charged to your account. That cost was to pay to have the unit sent to 
you which it was. Shipping costs will not be refunded.<br/><br/>If the 
unit is defective, we have no problem exchanging the unit for you at no 
cost to you. Would you like for me to process an exchange for a brand 
new unit for you? I can even provide you with a free 5-day PlayPass to 
use on a game of your choice to try out the new system.<br/><br/>If you have any other questions please feel free to ask.<br/><br/>Joseph<br/>Warranty Department<br/><a href="http://support.onlive.com/" target="_blank">http://support.onlive.com/</a><br/></blockquote><br/><span class="rn_ThreadAuthor"/>
        <span class="rn_ThreadTime">
            03/27/2012 03:40 PM<br/><br/></span><blockquote>Hi Joseph,<br/><br/>Thank you for your reply.<br/><br/>I would like to address each of your points in turn.<br/><br/>1. 7 day right to cancel:<br/>
 "Notwithstanding the above, the purchase of an OGS or any other 
hardware will constitute the supply of goods, and you will have seven 
days (beginning the day after you receive the goods) in which you may 
choose to cancel the contract."<br/><br/>This quote relates to the 
Distance Selling Regulations within which I would have a legal right to 
return the goods, without reason, for a full refund.<br/><br/>This is NOT a
 DSR issue. I am attempting to return the Goods under the Sale of Goods 
Act as faulty. Not as described, not fit for purpose and not of 
satisfactory quality. Given the dates of my support tickets, it should 
be obvious that the MicroConsole was faulty when delivered. I also filed
 my first ticket with the 7 days of delivery which, again, signals to 
you that I have not "accepted" the Good in law.<br/><br/>2. "You are past the 7-day right to cancel."<br/><br/>Irrelevant for reasons stated in 1.<br/><br/>3.
 "The OnLive Game System you ordered was free and only the shipping cost
 was charged to your account. That cost was to pay to have the unit sent
 to you which it was. Shipping costs will not be refunded."<br/><br/>Incorrect. The offer was a discounted MicroConsole @ £9.99 and £ 6.00 shipping.<br/><br/>4. "If the unit is defective, we have no problem exchanging the unit for you at no cost to you"<br/><br/>Thank
 you for your offer. However, since the original contract in in breech 
under Sale of Goods Act - I am legally entitled to reject the good and 
request a full refund, including postage. In essence, I should not be 
out of pocket since the contract is void.<br/><br/>Further, since you appear to be relying on DSR "7 day" notice period - <br/>Your
 attention is drawn to the Consumer Protection (Distance Selling) 
Regulations 2000, specifically to regulation 14 which states that you 
may not make any charge in relation to the supply of goods under a 
contract whereby the cancellation of the contract is due to the breach 
of implied terms of the contract (specifically implied terms in relation
 to section 14 of the Sale of Goods Act).<br/><br/>I therefore request that you reimburse both goods and postage fees in accordance with these regulations.<br/><br/>Regards,<br/>PG    <br/></blockquote><br/><br/> <br/><br/></div>
    </content>
    <updated>2012-03-27T22:49:29Z</updated>
    <published>2012-03-27T20:48:58Z</published>
    <category label="consumer" scheme="http://www.sixapart.com/ns/types#tag" term="consumer"/>
    <category label="onlive" scheme="http://www.sixapart.com/ns/types#tag" term="onlive"/>
    <author>
      <name>Paul Gregg</name>
      <uri>http://pgregg.com</uri>
    </author>
    <source>
      <id>tag:pgregg.com,2009-02-01:/blog//2</id>
      <link href="http://pgregg.com/blog/" rel="alternate" type="text/html"/>
      <link href="http://pgregg.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <title>Plop in the Ocean</title>
      <updated>2012-03-27T22:49:29Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:pgregg.com,2012:/blog//2.349</id>
    <link href="http://pgregg.com/blog/2012/03/onlive-uk-terms-of-service-copy.html" rel="alternate" type="text/html"/>
    <title>OnLive UK Terms of Service and Terms of Use, copy</title>
    <summary>Copy taken from http://www.onlive.co.uk/legal/termsofservice and http://www.onlive.co.uk/legal/index on March 27, 2012. TERMS OF SERVICE OnLive EMEA S.à r.l TERMS OF SERVICE Last Updated 7 December 2011 Welcome to the OnLive® Game Service (the "Service" or "SERVICE"), a service of OnLive EMEA s.à r.l (collectively, "OnLive" or "ONLIVE" or "we" or "us"). The OnLive Terms of Service (the "Terms") govern our relationship with anyone who accesses the Service by any method or means, including but not limited to access of the Service through the OnLive Game System ("OGS"), which includes the MicroConsole™ TV adapter (the "MicroConsole TV adapter") and the Gamepad...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><div style="padding: 0px 15px 0px 5px;">
				    
				    <h4 class="txt_or" style="padding: 24px 0px 10px;">Copy taken from <a href="http://www.onlive.co.uk/legal/termsofservice">http://www.onlive.co.uk/legal/termsofservice</a> and<a href="http://www.onlive.co.uk/legal/index"> http://www.onlive.co.uk/legal/index</a> on March 27, 2012.</h4><div style="padding: 0px 15px 0px 5px;">
			    <h4 class="txt_or" style="padding: 24px 0px 10px 0px;">TERMS OF SERVICE</h4>
			    

                <div id="c_terms_of_service">OnLive EMEA S.à r.l
                            TERMS OF SERVICE

                            Last Updated 7 December 2011
                            Welcome to the OnLive® Game Service (the 
"Service" or "SERVICE"), a service of OnLive EMEA s.à r.l (collectively,
 "OnLive" or "ONLIVE" or "we" or "us"). The OnLive Terms of Service (the
 "Terms") govern our relationship with anyone who accesses the Service 
by any method or means, including but not limited to access of the 
Service through the OnLive Game System ("OGS"), which includes the 
MicroConsole™ TV adapter (the "MicroConsole TV adapter") and the Gamepad
 Controller ("Controller").

                            Please read the Terms, the Privacy Policy 
and the OnLive Community Guidelines carefully. By clicking "I Agree," 
you agree to be bound by the Terms, the OnLive Privacy Policy, and the 
OnLive Community Guidelines.  

                            Your use of the Service is only for purposes
 that are permitted by these Terms. Any use or access of the Service by 
any means other than those authorised by these Terms is prohibited 
unless specifically agreed with OnLive. 

                            On an ongoing basis, OnLive makes changes 
and additions to the Service including but not limited to: new games, 
features, and functionality. OnLive will provide reasonable notice of 
all material changes and additions to the Service. Your continued use of
 the Service after such notification will indicate your acceptance of 
any such changes and additions and your continued acceptance of the 
Terms, the OnLive Privacy Policy, and the OnLive Community Guidelines.

                            You may not use the Service if you do not 
agree to be, or are unable to be, bound by the Terms, the OnLive Privacy
 Policy, and the OnLive Community Guidelines. 

                            1. Privacy

                            The OnLive Privacy Policy tells you about 
the way we handle and protect your Personal Information (as defined in 
the OnLive Privacy Policy) when you use the Service. We ask that you 
review and agree to the OnLive Privacy Policy before sharing Personal 
Information on the Service.

                            2. Community Guidelines

                            In order to provide a safe and welcoming 
environment for all of our users, we have established certain ground 
rules regarding your behavior on the Service that are specified in the 
OnLive Community Guidelines. The OnLive Community Guidelines apply to 
your use of the Service and any and all User Generated Content (as 
defined in Section 9 below) that you contribute to the Service. OnLive 
reserves the right to terminate or suspend your OnLive Service Account 
("Account") if you breach the OnLive Community Guidelines.

                            3. Eligibility

                            In order to register for an Account on the 
Service, you must be at least 18 years of age, be an emancipated minor 
or have reached the age of majority in your country of residence, and be
 a current resident of the United Kingdom ("Account Holder"). As an 
Account Holder, you represent and warrant to OnLive that you meet the 
eligibility criteria in the preceding sentence. 

                            4. Accepting and Changing the Terms 

                            You become bound by the Terms by (a) 
clicking to agree to the Terms; (b) downloading to a desktop, laptop, 
mobile device or obtaining through any other means on any other device 
or medium, the OnLive Application Software without the authorization of 
OnLive; (c) installing the OnLive Application Software without the 
authorization of OnLive; or (d) otherwise accessing the Service without 
the authorization of OnLive. 

                            We may change the Terms at any time in our 
sole discretion. We will provide you with reasonable notice of any 
changes to the Terms.  Continued use of the Service after the notice 
period will constitute acceptance of the Terms.

                            5. Third Party Terms

                            Buying or accessing certain third party 
content on the Service may require you to review, and accept or decline 
certain third party disclosures, policies, and agreements including but 
not limited to third party end user license agreements, privacy 
policies, and terms of service ("Third Party Terms").  

                            You may be presented with Third Party Terms 
prior to your purchase or use of third party content, or wherever 
OnLive, in its sole discretion, deems presentation of Third Party Terms 
is reasonably necessary or legally required to provide proper notice to 
you. You can accept Third Party Terms by (a) entering your password to 
purchase access to or to use the third party content on the Service or 
(b) accessing the purchased or selected third party content through the 
Service having been given reasonable notice of the Third Party Terms.  
If you do not accept Third Party Terms in the manner described but you 
nevertheless gain unauthorized access to the Service, you will be deemed
 to have accepted Third Party Terms upon such access of the third party 
content. If you choose to decline any Third Party Terms, you may do so 
by not purchasing the third party content referenced by the Third Party 
Terms or otherwise declining the Third Party Terms as provided by OnLive
 or the third party providing the Terms. 

                            Please be advised that some Third Party 
Terms may state or imply you have certain rights to a physical product, 
rights to download, or install third party content to a local machine, 
and/or other rights associated with physical possession or control of 
third party content. Such statements within Third Party Terms may not be
 applicable to use of the third party content on the Service. 

                            In all Third Party Terms, the user agreeing 
to, and/or the user presented with Third Party Terms, will in all cases 
continue to be the consumer end user of the third party content. Unless 
expressly agreed by OnLive, OnLive shall not be the intended or actual 
licensee, user, or recipient of any Third Party Terms.   

                            6. Accounts

                            You do not have the right to share your 
Account with any third party, except as you provide pursuant to the 
Parental Controls features.  You are solely responsible for all activity
 on your Account, including violations of the Terms by any third party 
that accesses the Service through your Account, and for the security of 
your Account. You also agree to the following:

                            • You agree to provide and maintain an 
active email address through which you can be reached for the duration 
of your Account. You agree to provide accurate and up-to-date email 
address, contact and billing information to OnLive. 
                            • You agree to use the Service only for 
purposes that are permitted by (a) the Terms and (b) any applicable law,
 regulation, or generally accepted practices or guidelines in the 
relevant jurisdictions.
                            • You agree to notify OnLive of any 
unauthorized use of your Account, any impending or threatened event that
 may negatively impact the Service, security of the Service, or any 
other violation of the Terms known to you, including by third parties 
that have accessed the Service through your Account.
                            • You agree to not make any attempt to 
access the Service via any means or interface other than those which 
have been provided to you by OnLive, unless you have been granted 
explicit written permission by an authorized representative of OnLive to
 do otherwise. 
                            • You agree to not engage in any activity 
that interferes with or disrupts, degrades, harms or threatens to harm 
the Service, security of the Service, our servers, or the use of the 
Service by any of our users.
                            • You agree to not represent to any third 
party that you are an OnLive employee or authorized representative of 
OnLive.
                            • You agree to not register a Player Tag 
(i.e. OnLive user name) that is vulgar, offensive, libelous, slanderous,
 discriminatory or obscene or that violates any law, or otherwise 
breaches the Terms or Community Guidelines. 
                            • You agree to not transfer or share your 
Account with any other party except as permitted by the Parental 
Controls features as explained below. 
                            • You agree not to transfer or share your 
OnLive Service login information with any other party. 
                            • You agree to not tamper with in any 
manner, disassemble, reverse engineer, or otherwise modify any hardware 
or software of the Service made available to you.
                            • The Service includes parental controls 
features ("Parental Controls") which restrict access to certain content 
and features which may be deemed inappropriate for Minors (youth between
 13 and up to 18).  The Parental Controls can only be accessed with a 
parental control passcode, and you agree not to share this parental 
control passcode with any third parties (including the Minor for whom 
the Parental Controls are activated).


                            You may provide access to your Account to 
any member of your household (each an "Authorised User"), provided the 
following conditions are met:

                            • You do not allow access to your Account to
 any person under the age of 13 years old;
                            • You do not provide the details of your 
parental control passcode to any third party, including any Authorised 
User;
                            • You expressly bring the OnLive Privacy 
Policy to the attention of each Authorised User; and expressly inform 
each Authorised User that their personal data, which may be disclosed 
through OnLive Friends and Voice Chat features, may be collected by 
OnLive and disclosed to other users while on the Service.

                            You, as the Account Holder, assume 
responsibility for all activity on the Account from Authorised Users, 
including Authorised User activity when Parental Controls are enabled.  
Account Holders who set up Parental Controls and allow Minors to use an 
Account are liable for all activities of such Minor and all public 
disclosures of information made by such Minor. 

                            OnLive reserves the right to terminate or 
suspend your Account for breach of the account guidelines set out in 
this Section 6. 

                            7. OnLive Application Software

                            The OnLive Application Software and other 
related materials (collectively, the "Materials") made accessible to you
 in connection with the Service will be licensed under, and subject to, 
the terms and conditions of the OnLive End User License Agreement 
("OnLive EULA"). 

                            8. Our Content

                            With the exception of User Generated Content
 (as defined in Section 9 below), as between you and OnLive or its 
affiliates, subsidiaries, licensors, or suppliers retain title to and 
ownership of everything on or used in connection with the Service, 
including, but not limited to, text; images; graphics; logos; audio and 
video content; visual, auditory, tactile, and motion user interfaces, 
and any OnLive hardware, software, or computer code (collectively, 
"Content"). This also includes, without limitation, the structure, 
design, animation, video, effects, overall "look and feel" and 
arrangement of Content on the Service. With regard to any gaming 
statistics like scores, rankings, log in/log out times, length of 
gameplay, and your presence on the Service, OnLive owns that content 
exclusively and/or shares ownership of that content with third party 
content providers and may grant any of our affiliates, subsidiaries, 
licensors, partners, or suppliers permission to use such content, 
including the use and display of such content publicly for the purposes 
of leaderboards, enhancing multiplayer gameplay, tournaments, and 
marketing and promotion efforts. Subject to license restrictions and 
these Terms, certain Content on the Service may not be available to 
users accessing the Service through specific client devices (e.g. 
Macintosh, Windows PC, MicroConsole™ TV adapter, cell phones, tablet 
computers, Internet TVs, and set-top boxes). Such limitations will be 
specified in the Content descriptions provided prior to your purchase of
 any such Content, during the purchase process and/or in the EULA for 
any particular piece of Content which has such restrictions.

                            OnLive owns patents, copyrights, trademarks,
 service marks, trade names, trade secrets, domain names and other 
intellectual property, and proprietary rights throughout the world in, 
or to, or associated with the Content and/or the Service (the "IP 
Rights"), and the Content and the Service are protected by the IP Rights
 and all other applicable intellectual property rights and laws. Subject
 to your compliance with the Terms, the OnLive Privacy Policy and the 
OnLive Community Guidelines, OnLive grants you a limited, personal, 
non-exclusive, non-transferable, non-sublicensable, revocable license 
under the IP Rights to use the Service in accordance with the Terms, for
 the duration of your membership and/or access to the Service, solely 
for your personal and non-commercial use.

                            You may not modify, reproduce, distribute, 
create derivative works or adaptations of, publish, perform, display, 
transmit or in any way exploit any of the Content in whole or in part 
except as expressly authorized by OnLive. You may not, in whole or in 
part, reverse engineer, derive (or attempt to derive) any source code, 
modify, disassemble, decompile, or remove any proprietary notices or 
labels from the Service or any hardware or software associated or used 
in connection with the Service. Except as expressly and unambiguously 
provided herein, OnLive does not grant you any express or implied rights
 in or to the Service, any Content or any software associated or used in
 connection with the Service. Except as expressly provided herein (or in
 the Privacy Policy) you may not transfer, publish, display, disclose or
 make available any reproductions of the Service or the Content to any 
other parties in any way, including, without limitation, by uploading 
videos or images to file sharing sites, sharing or making available 
screen captures of the Service or any Content, or sharing or making 
available any source code or executable code of any software associated 
or used in connection with the Service. You may not rent, lease, license
 or sublicense the Service to others, or use the Service in any manner 
for the benefit of any third party.   

                            9. User Generated Content

                            Any time you post a message or communication
 on an OnLive sponsored forum, or create, post, upload, submit, share or
 distribute any content through the use of the Service, including the 
OnLive User Community Forums, or play a game on the Service, including 
any user name, tag, handle, motto, avatar video or still, and including 
contributions via video, voice and text chat, text messaging, forums, 
message boards, whether within or outside a game (any such message, 
communication, content or play, collectively, "User Generated Content" 
or "UGC"), you grant OnLive a non-exclusive, worldwide, perpetual, 
irrevocable, unrestricted, royalty-free, fully paid-up license (with the
 right to sublicense) to use, reproduce, distribute, display, perform, 
transmit, modify, edit, create derivative works from, and otherwise 
exploit such UGC, in any form, format, or medium now known or later 
developed. You represent and warrant that you have the right to grant 
these rights to OnLive and that you will not post any content or links, 
user-generated or otherwise, that infringe, misappropriate or violate 
any privacy, intellectual property, or any other rights of any party, or
 which violates our Community Guidelines, or that is vulgar, offensive, 
libelous, slanderous, discriminatory or obscene or that violates any 
law. You hereby waive all "moral rights" with respect to all UGC and all
 copyrights therein to the extent such moral rights can be waived under 
the existing law of any jurisdiction, and, to the extent such moral 
rights cannot be waived, you warrant that you will not seek to enforce 
such moral rights against OnLive.

                            UGC specifically excludes any gaming and 
Service usage statistics like scores, rankings, log in/log out times, 
length of gameplay, and your presence on the Service. OnLive owns gaming
 and Service usage statistics exclusively and/or shares ownership of 
that content with third party content providers and may grant any of our
 affiliates, subsidiaries, licensors, partners, or supplier's permission
 to use such content, including the use and display of such content 
publicly for the purposes of leaderboards, enhancing multiplayer 
gameplay, tournaments, and marketing and promotion efforts.

                            OnLive reserves the right to pre-screen, 
monitor, moderate, and delete any UGC that you or other OnLive users 
submit to the Service, including, but not limited to, posts made to 
public forums. However, we have no obligation to do so, and you may be 
exposed to content you find vulgar, offensive, libelous, slanderous, 
discriminatory, obscene or is in violation of a law. 

                            You acknowledge that OnLive is not an 
author, publisher or editor of any UGC posted on the Service or of any 
information provided by another content provider on the Service.

                            10. Voice Chat

                            Voice chat communications within the Service
 should not be considered private.  Voice chat communications may be 
heard by others as part of gameplay or in other contexts, for example, 
as part of Spectating. OnLive is under no obligation to monitor user 
communications but reserves the right to act on reports of misconduct or
 abuse of such privileges at OnLive's sole discretion. Because voice 
chat and other communications may be viewed and/or heard, users should 
avoid revealing any personally identifiable information.

                            11. OnLive Purchases and Billing

                            Offers are only valid within the United 
Kingdom. Offers cannot be combined unless expressly stated. Some game 
purchases may not be available for all platforms and different prices 
may be charged for different platforms (e.g., PC, Mac, and MicroConsole 
TV adapter). Promotion codes and coupons have no cash value.

                            Subject to any OnLive promotional offers you
 may accept, OnLive may require payment of fees for the Service 
membership offer you select (the "Membership Plan"), third party 
content, and any additional items and services that may be available 
through the Service. You may have to register for an Account and sign up
 for a Membership Plan in order to access the various features of the 
Service and pay for any third party content. All purchases are charged 
in GBP.

                            By registering for an Account on the 
Service, you represent that you are at least 18 years of age and have 
reached the age of majority in your country of residence. A credit card 
is not required to sign up for the Service. However, if you select a 
Membership Plan that requires a credit card, you represent that you are 
authorized to use that credit card. You must also be authorized to use 
any subsequent credit card in the event you change or update the credit 
card you used to register. By signing up for a Membership Plan, you 
expressly authorize OnLive to charge you for services and products 
purchased under your Account including but not limited to required or 
optional fees associated with maintaining an active Membership Plan in 
good standing (the "Membership Fees"), third party content, and any 
additional items and services that may be available through the Service.
 Membership Plans may require one-time or recurring Membership Fees.  If
 so, OnLive will bill you in accordance with the terms of your 
Membership Plan.

                            You acknowledge that the Service (including 
the sale of a right to play games through it) is a supply of services to
 you by OnLive, which commences once you register for the Service and 
pay the Membership Fees or once you purchase the right to play a 
particular game. OnLive will have commenced the supply of services to 
you by granting you access to the Service or the relevant game, and you 
will lose your right to cancel the purchase under Directive 97/7/EC as 
implemented in your country of residence. Notwithstanding the above, the
 purchase of an OGS or any other hardware will constitute the supply of 
goods, and you will have seven days (beginning the day after you receive
 the goods) in which you may choose to cancel the contract. If you 
provide notice of such cancellation to OnLive, and return the 
merchandise and we will provide you with a full refund for the purchase.

                            Prices for any third party content are 
subject to change at any time without notice. OnLive reserves the right 
to change the pricing, billing, Membership Plans and Membership Fees for
 the Service at any time. In the event OnLive makes any such changes to 
the Service, we will provide you with at least thirty (30) calendar days
 notice via the email address you have provided in your Account. If you 
do not consent to these changes, you must stop using the Service and may
 close your Account. 

                            In the event your Account is closed or 
suspended for any reason, including because you do not consent to the 
changes to the changes to the pricing, billing, Membership Plans and 
Membership Fees for the Service, OnLive reserves the right to charge you
 for any costs, surcharges, or debts still pending on your Account. You 
may not register a new OnLive Account until all costs, surcharges, and 
debts are settled for any prior OnLive Account that you have used, or 
have been used with the same credit card or email address.

                            12. OnLive Game System: MicroConsole TV 
Adapter and OnLive Gamepad Controller

                            The Terms also apply to use of the OnLive 
Game System, which includes the MicroConsole TV adapter and OnLive 
Gamepad Controller ("Controller") to access the Service. Use of the 
MicroConsole TV adapter or Controller confirms your agreement to: 

                            • Accept any software updates and upgrades 
sent to the MicroConsole TV adapter and/or Controller.
                            • Accept any different or additional terms 
applicable to the third party components included with the MicroConsole 
TV adapter and/or Controller.
                            • Not tamper with in any manner, 
disassemble, reverse engineer, or otherwise modify the MicroConsole TV 
adapter and/or Controller.
                            • Save as permitted by law, not derive (or 
attempt to derive), modify, decompile, or remove any software code from 
the MicroConsole TV adapter and/or Controller.
                            • Not remove any proprietary notices or 
labels from the MicroConsole TV adapter and/or Controller.
                            • Save as permitted by law, use any software
 in the MicroConsole TV adapter only in executable form and solely in 
conjunction with the MicroConsole TV adapter.

                            Basic information relating to setup, 
installation and support is shipped with the MicroConsole TV adapter and
 Controller, and further details are found in the Support section of the
 OnLive website.

                            13. Suspending Your Account

                            You may suspend (i.e. temporarily 
deactivate) your Account at any time, for any or no reason, for up to 
twelve (12) months by contacting OnLive CS from the Support section of 
the OnLive website. Also, OnLive may suspend an Account, or resume a 
suspended Account, under certain conditions specified in the Terms, 
including, for example, the expiration or renewal of your Service 
membership term. OnLive may suspend your Account if it is inactive (i.e.
 you have not successfully logged in to the Service using your Account, 
or you have not made any transactions associated with your Account) for 
twelve (12) months. You or OnLive may resume (i.e. reactivate) a 
suspended Account, if the Account is in good standing and any 
outstanding concerns have been addressed, at any time during the 
suspension.

                            Suspending your Account will temporarily 
disable your access to the Service using the suspended Account, and 
temporarily disable your access to all content or services on the 
Service that the Account would otherwise have access to, if any, whether
 purchased or not. Resuming your Account will restore your access to the
 suspended Account, and restore your access to content and services that
 are still available to you after the time that has elapsed during the 
suspension period or provide access to content and services that became 
available to you during the suspension. During this time, OnLive will 
retain all of your information, including your Personal Information, 
just as if the Account is in active use so as to enable OnLive to (a) 
keep track of any content or service expirations or activations during 
the suspension period, and (b) reactivate your Account if it is resumed 
during that twelve (12) month period. During the suspension period you, 
or OnLive under certain conditions specified in the Terms of Service, 
may close your Account per the terms described below in Closing Your 
Account. OnLive will close your Account if it not resumed within twelve 
(12) months of the last suspension. If you decide to suspend your 
Account, please contact OnLive CS from the Support section of the OnLive
 website.

                            The Terms will continue to apply to you in 
full from the time you accept the Terms, as set forth in the "Accepting 
and Changing the Terms" section herein, throughout your Account 
suspension and until your Account is closed by either you or OnLive. 

                            14. Closing Your Account

                            CLOSING YOUR ACCOUNT WILL RESULT IN 
PERMANENT LOSS OF ACCESS, CONTENT, SERVICES AND VALUE ON THE ONLIVE 
SERVICE. ONLIVE URGES YOU TO CONSIDER SUSPENDING YOUR ACCOUNT, PER THE 
"SUSPENDING YOUR ACCOUNT" SECTION ABOVE. RATHER THAN CLOSING YOUR 
ACCOUNT, PLEASE READ THIS "CLOSING YOUR ACCOUNT" SECTION CAREFULLY 
BEFORE PROCEEDING WITH CLOSURE.

                            You may close your Account at any time, 
however, OnLive may close an Account if the Account is suspended and not
 resumed within the twelve (12) month maximum suspension period, as 
detailed in the "Suspending Your Account" section, above, or under 
certain conditions specified in the Terms of Service. Closing your 
Account will immediately and permanently terminate your access to the 
Service using the closed Account; immediately and permanently terminate 
your access to all content, messages, services on the Service that the 
closed Account would otherwise have access to or could derive value 
from; and result in your immediate and permanent forfeiture of any 
coupons, access passes, credits, or anything that may be of value 
directly or indirectly associated with the Account, if any, whether 
purchased or not. Any remaining payments due on the Account will remain 
due and collectable after the Account is closed until they are paid. If 
you decide to close your Account, please contact OnLive CS from the 
Support section of the OnLive website.  Within six (6) months after 
closing your Account or after any payments due on the Account are paid, 
whichever is later, we will either delete or securely encrypt your 
Personal Information except your email address, which we will keep in 
order to determine whether to send further marketing-related emails. We 
will also keep all financial and transactional records that are required
 for accounting, revenue-reporting and tax-reporting purposes. Your 
non-Personal Information, such as your Player Tag and password, will not
 be deleted. We will also keep information about your use of the 
Services or Websites including, but not limited to, data about your 
gameplay, session times and durations, and use of the Service, though we
 will disassociate such information from your Personal Information. 
Please note that even after you remove information from your Account or 
delete your Account entirely, information that was shared with other 
users may continue to exist on the Service.

                            If you engage in any repeated or 
objectionable misconduct, to be determined in accordance with these 
Terms and the OnLive Community Guidelines, OnLive reserves the right to 
either suspend or close your Account, in OnLive's sole discretion, 
immediately and without notice as set forth in the "Suspending Your 
Account" and "Closing Your Account" sections herein. Please refer to the
 OnLive Community Guidelines for examples of objectionable conduct. 

                            The Terms will continue to apply to you in 
full from the time you accept the Terms, as set forth in the "Accepting 
and Changing the Terms" section herein, until your Account is closed by 
either you or OnLive. 

                            15. Survival

                            Sections 8, 9, 10, 11, 12, 13, 14, 15, 16, 
17, 18, 19, 20, 21, 22, 23, and 24 of the Terms shall survive any 
expiration or termination of the Terms, or your Account. Expiration or 
termination of the Terms or your Account will not affect any accrued 
rights or liabilities under these Terms. The Privacy Policy will survive
 termination of the Terms, or your Account in accordance with its terms.

                            16. Copyright Policy

                            OnLive respects the intellectual property of
 others and we expect our users to do the same. If you are a copyright 
owner or authorized to act on behalf of a copyright owner and believe 
that any content or material provided through or in connection with the 
Service infringes any copyright you own or for which you are authorized 
to act on behalf of the copyright owner, please provide OnLive's Agent 
for Notice with written or electronic notice containing the following: 

                                   Notice of Alleged Infringement 
("Notice")

                            1. A description of the copyrighted work(s) 
you claim has been infringed. 
                            2. A description of the allegedly infringing
 content or material, including the location on the Service of the 
allegedly infringing content or material with sufficient detail to 
enable us to locate it on the Service. 
                            3. Your address, telephone number, and email
 address. 
                            4. Both of the following statements outlined
 in the Notice:
                            a. "I hereby state that I have a good faith 
belief that the disputed use of the copyrighted material is not 
authorized by the copyright owner, its agent, or the law."
                            b. "I hereby state that the information in 
this Notice is accurate and that I am the owner of, or authorized to act
 on behalf of the owner of, an exclusive right that is allegedly 
infringed."
                            5. Your full legal name and your electronic 
or physical signature.

                            Please send all of the above to:

                            Copyright Agent
                            c/o OnLive, Inc.
                            181 Lytton Ave.
                            Palo Alto, CA 94301
                            Main:  (650) 543-5500
                            Fax:  (650) 543-5595

                            Or by email to:

                            copyrightenforcement@onlive.com

                            Any Personal Information provided to OnLive 
pursuant to this section 16 shall be held and processed by OnLive in 
accordance with the OnLive Privacy Policy. 

                            17. Disputes and Governing Law and 
Jurisdiction

                            You agree to handle any disputes between you
 and OnLive in accordance with the policy outlined below, the OnLive 
Privacy Policy or as otherwise agreed in writing between you and OnLive.
 As an alternative to litigation, we will consider reasonable requests 
to resolve any dispute through dispute resolution procedures such as 
arbitration or mediation.

                            The construction, validity and performance 
of these Terms and all non-contractual obligations arising from or 
connected with these Terms, the OnLive Privacy Policy, the OnLive 
Community Guidelines or the Service shall be governed by English law.  
Any action or proceeding brought to adjudicate any dispute related to 
the Terms, OnLive Privacy Policy, OnLive Community Guidelines, or the 
Service shall be subject to the non-exclusive jurisdiction of the 
English courts, except as otherwise agreed by the parties in writing.

                            18. Injunctive Relief

                            If you breach or indicate your intention to 
breach the Terms (including, without limitation, in a manner that 
infringes, misappropriates or violates any intellectual property or 
privacy rights or may cause irreparable or continuing harm), OnLive may 
seek injunctive relief against you, or any other remedy available under 
applicable law.

                            19. Representations and Warranties

                            You represent and warrant that (i) you have 
the full power and authority to enter and perform under the Terms, (ii) 
the execution and performance of your obligations under the Terms does 
not constitute a breach of or conflict with any other agreement or 
arrangement by which you are bound, and (iii) the Terms are a legal, 
valid, and binding obligation of you, enforceable in accordance with its
 terms and conditions. 

                            20. Indemnification

                            You agree to defend, indemnify and hold 
OnLive, its directors, officers, employees, contractors,  affiliates, 
suppliers, and licensors (collectively "OnLive Indemnified Parties") 
harmless from any liability, damage, settlement, loss, or expense 
(including, without limitation, attorneys' fees and costs) incurred in 
connection with any third-party claim, demand or action ("Claim") 
brought or made against any of the OnLive Indemnified Parties arising 
out of or relating to any actions by you that infringes any copyright, 
trademark, trade secret, patent or other intellectual property right of 
any person or defames any person or violates their rights of publicity 
or privacy. If you have to indemnify any of the OnLive Indemnified 
Parties under this Section, OnLive and/or the relevant OnLive 
Indemnified Parties will have the right to control the defense, 
settlement, and resolution of any Claim at your sole expense. You may 
not settle or otherwise resolve any Claim without OnLive's prior express
 written permission. 

                            21. INFORMATION NOTICE 

                            OnLive provides the Service on an "as is" 
and "as available" basis, though OnLive will provide the Service to you 
with reasonable skill and due care. 

                            OnLive does not represent or warrant that 
the Service or its use (i) will be uninterrupted; or (ii) will be free 
of inaccuracies or errors. OnLive utilizes the internet, which by its 
very nature can be unreliable and unpredictable. Internet connection and
 reliability problems may reduce service quality and in some cases make 
the service unavailable. In addition to an internet connection, the 
service also requires suitable, capable, reliable, and fully operational
 devices and software, which are all outside of OnLive's control.

                            OnLive is not responsible for any internet, 
telephone, wireless, or other fees associated with your use or access of
 any service, product, or content through the OnLive Service, including 
your use or access of any free service, product, or content through the 
OnLive Service. 

                            22. LIMITATION OF LIABILITY

                            TO THE EXTENT NOT PROHIBITED BY LAW, IN NO 
EVENT SHALL ONLIVE (OR ANY OF ITS AFFILIATES OR LICENSORS) NOR ANY OF 
THE OFFICERS, DIRECTORS, EMPLOYEES, SHAREHOLDERS, LICENSORS, CUSTOMERS, 
AGENTS OR REPRESENTATIVES OF ONLIVE HAVE ANY LIABILITY OF ANY KIND OR 
NATURE TO YOU OR ANY THIRD PARTY FOR ANY INDIRECT, INCIDENTAL, 
CONSEQUENTIAL, SPECIAL, OR PUNITIVE DAMAGES WHATSOEVER (INCLUDING, BUT 
NOT LIMITED TO, DAMAGES FOR ANY LOSS OF PROFITS OR LOSS OF ANY 
CONFIDENTIAL OR OTHER INFORMATION OR FOR BUSINESS INTERRUPTION) ARISING 
OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE 
MATERIALS OR THE SERVICE OR OTHERWISE WITH RESPECT TO THIS AGREEMENT, 
WHETHER ARISING IN TORT (INCLUDING NEGLIGENCE), CONTRACT, STRICT 
LIABILITY OR OTHERWISE, WHETHER OR NOT YOU HAVE ADVISED OF THE 
POSSIBILITY OF ANY SUCH LOSS OR DAMAGE.

                            OnLive will not be liable for any liability 
associated with provision of the service or failure to provide the 
Service associated with infrastructure (including, without limitation, 
the internet), devices and software outside of OnLive's control such as 
computers, displays, televisions, input devices, switches, routers, 
firewalls, operating systems, and browsers.

                            Nothing in these Terms will exclude or limit
 either party's liability for (i) fraud or fraudulent misrepresentation;
 (ii) death or personal injury caused by its negligence (iii) under the 
indemnity in section 19; or (iv) any other liability which cannot be 
excluded by law.

                            23. Severability

                            If any provision of the Terms is held 
invalid or unenforceable, in whole or in part, such provision shall be 
modified to the minimum extent necessary to make it valid and 
enforceable. This shall, in no way, affect the validity and 
enforceability of all other provisions in the Terms. 

                            24. Miscellaneous

                            You and OnLive are independent parties, and 
nothing in the Terms constitutes a partnership or joint venture between 
you and OnLive or makes either party the agent of the other. Unless 
otherwise specified herein, the Terms, the OnLive Privacy Policy, and 
the OnLive Community Guidelines constitute the entire agreement between 
you and OnLive with respect to the subject matter hereof and supersede 
all prior or contemporaneous communications, negotiations and proposals 
with respect to such subject matter. You may not assign or transfer the 
Terms or any of your rights or obligations under the Terms (whether by 
operation of law or otherwise) without the prior written consent of 
OnLive.

                            25. Beta Program

                            OnLive may from time-to-time establish a 
Beta program ("Beta") to give certain users an opportunity to test and 
experience additional new features of the Service, pay for and use third
 party content, and gather feedback on the new features and content on 
the Service. Any and all information made available to you by virtue of 
your participation in a Beta, whether furnished to you directly by 
OnLive or learned by you through your access to a Beta, is confidential 
to OnLive. For example, you may not do any Tweets, Facebook posts, or 
other online posting of details, and you may not post or otherwise 
communicate screenshots, or videos, or any other content whatsoever 
about your participation in a Beta. You may disclose that you are a 
participant in a Beta, but you may not discuss with or disclose to any 
third party any information you learn through a Beta including your 
opinions regarding a Beta. If you are chosen to participate in a Beta, 
you will:

                            • Carry out the testing in connection with a
 Beta personally. You will not display or provide access to the Service 
to any other person. 
                            • Use your best efforts to secure your 
system and the Beta against unauthorized access or disclosure.
                            • Never disclose any information about a 
Beta, including, without limitation, any information about the Service 
provided or made available by OnLive or any hardware, software, 
screenshots, video, or other code or scripts to any third party.  
                            • Never discuss gameplay, quality of 
service, or bugs encountered while using a Beta anywhere outside of 
OnLive's provided in-site forums and customer support.
                            • Delete and destroy all information related
 to a Beta in your possession or control immediately upon the request of
 OnLive, and confirm deletion and destruction of such information if 
requested to do so by OnLive.

                            OnLive notes that any breach by you of this 
confidentiality provision will cause irreparable harm to OnLive, and 
OnLive may seek injunctive relief to prevent the breach or threatened 
breach of your obligations.

                            As a Beta user, you agree to:	

                            • Test and evaluate a Beta and/or devices to
 be used with the Beta, including, but not limited to, audiovisual 
content, features, functionality, capabilities, operation, Service 
performance and device performance. 
                            • Inform OnLive of any bugs or other defects
 you encounter in connection with the Service.
                            • Receive all software updates and upgrades,
 if any that OnLive sends to the MicroConsole TV adapter, to your 
computer, or to any hardware or software associated or used in 
connection with the Service, including the OnLive Gamepad Controller.
                            • Comply with reasonable requests and 
instructions from OnLive in connection with Beta, which may be provided 
from time to time during a Beta, including, but not limited to, requests
 and instructions to test or evaluate specific aspects of the Service. 
                            • Provide OnLive with your comments, 
feedback, evaluations, analyses, suggestions and recommendations 
regarding a Beta ("Feedback"), all as voluntarily provided by you or as 
may otherwise be requested by OnLive.

                            Your participation in a Beta is strictly 
voluntary and for your enjoyment. While your participation in a Beta is 
helpful, you understand that it is not a vital part of the development 
of the Service so as to give you any right to compensation or payment. 
Participation in one phase of a Beta does not entitle you to 
participation in any other phase of a Beta, if any, or to any 
compensation or payment with respect to the Service. You acknowledge and
 agree that your participation in a Beta (or any phase of a Beta) does 
not give you any claim of ownership to any part of the Service.

                            All Feedback that you provide or make 
available to OnLive during a Beta, however communicated by you and 
whether at OnLive's request or not, shall be the sole and exclusive 
property of OnLive, and you hereby irrevocably assign to OnLive all of 
your right, title and interest in and to such Feedback, including, 
without limitation, any and all intellectual property rights in or to 
any such Feedback. Without limiting the generality of the preceding 
sentence, you agree that OnLive and its successors, assigns and 
licensees shall have the perpetual and irrevocable right to reproduce, 
modify and otherwise use and exploit all of the Feedback (and any and 
all portions and derivatives thereof) in any manner now known or 
hereafter devised for any purposes, including, but not limited to, in 
connection with the development and exploitation of the Service or any 
other product or service, without any compensation or the provision of 
any credit to you. You hereby waive all moral rights with respect to all
 Feedback and all copyrights therein to and, the extent such moral 
rights cannot be waived, you warrant that you will not enforce such 
moral rights against OnLive.

                            All other terms in the OnLive Terms of 
Service continue to apply to your participation in a Beta.              
  </div>
            
				</div><p><br/></p><h4 class="txt_or" style="padding: 24px 0px 10px 0px;">TERMS OF USE</h4>

                    <div id="c_terms_of_use">
                                    <p>ONLIVE, INC. TERMS OF USE AGREEMENT</p>
                                    <p class="hard_return"><i>As of September 22, 2011</i></p>
                                    <h5 class="soft_return">Acceptance of Terms</h5>
        						<p class="hard_return">This Terms of Use Agreement (the "<b>Agreement</b>") applies to certain websites of OnLive EMEA S.à r.l and its group of companies (collectively, "<b>OnLive</b>", "we", "our", or "us" or the "<b>OnLive Websites</b>").
 By visiting, accessing, or using the OnLive Websites or any portion 
thereof , you agree that you have read, understood, and agree to be 
bound by this Agreement, whether or not you are a registered user of any
 of the OnLive Websites or any portion thereof.</p>
        						<p class="soft_return">We reserve the right to amend this 
Agreement at any time and without notice. If we do this, we will post 
the amended Agreement on this page and indicate at the top of the page 
the date the Agreement was last revised. Your continued use of the 
OnLive Websites after any such changes constitutes your acceptance of 
the new Terms of Use. If you do not agree to any of these terms or any 
future Terms of Use, do not visit, use or access (or continue to access)
 the OnLive Websites. This Agreement applies to all visitors, users, and
 others who access the OnLive Websites ("<b>Users</b>"). The Agreement incorporates by reference our <a class="txt_or" href="http://www.onlive.co.uk/legal/%3C?php%20echo%20base_url%28%29;?%3Elegal/privacypolicy">Privacy Statement</a>,
 or any supplemental terms, schedules, exhibits and related materials 
that are attached or referenced herein. It is your responsibility to 
review this Agreement from time to time for any changes as it creates a 
binding legal agreement between you and us. You do not have to register 
in order to visit the OnLive Websites. In the future, though, we may 
allow you to register with the OnLive Websites and create a "User" 
account.</p>

        						<h5 class="soft_return">Permission to Use the Site</h5>
        						<p class="hard_return">Subject to all of the terms and 
conditions of this Agreement, you are hereby granted a non-exclusive, 
limited, personal licence to access the OnLive Websites and view our 
Content (as defined below). We reserve all rights not expressly granted 
herein in the OnLive Websites and the Content (as defined below). We may
 terminate this licence for convenience at any time at our sole 
discretion.</p>
        						<p class="hard_return">You agree not to engage in any of 
the following prohibited activities: (i) copying, distributing, or 
disclosing any part of the OnLive Websites in any medium, including 
without limitation by any automated or non-automated "scraping"; (ii) 
using any automated system, including without limitation "robots", 
"spiders", or "offline readers", to access the OnLive Websites in a 
manner that sends more request messages to our servers than a human can 
reasonably produce in the same period of time by using a conventional 
on-line web browser; (iii) transmitting spam, chain letters, or other 
unsolicited email; (iv) using any "bot", spider, site search/retrieval 
tool or utility, or any other manual or automated technique, to collect,
 extract, index, mine, or otherwise seek to obtain any data or 
information from OnLive, OnLive Websites, or any User, or in any manner 
compromise, degrade or circumvent the navigational structure or the 
presentation of the OnLive Websites, or the display or performance of 
the Content (as defined below) of the OnLive Websites; (v) attempting to
 interfere with, compromise the system integrity or security or decipher
 any transmissions to or from the servers running the OnLive Websites; 
(vi) taking any action that imposes, or may impose an unreasonable or 
disproportionately large load on our infrastructure (as determined at 
our sole discretion); (vii) uploading invalid data, viruses, worms, or 
other software agents through the OnLive Websites; (viii) collecting or 
harvesting any personally identifiable information from the OnLive 
Websites; (ix) using the OnLive Websites for any commercial solicitation
 purposes; (x) using the OnLive Websites or any Content or products 
obtained through the OnLive Websites for any resale or commercial use; 
(xi) collecting or using any product listings, descriptions, or prices 
on the OnLive Websites; (xii) impersonating another person or otherwise 
misrepresenting your affiliation with a person or entity, conducting 
fraud, hiding or attempting to hide your identity; (xiii) interfering 
with the proper working of the OnLive Websites; (xiv) bypassing the 
measures we may use to prevent or restrict access to the OnLive 
Websites; or (xv) disseminating any abusive, harmful, offensive or 
illegal content. We may permanently or temporarily terminate, suspend, 
or otherwise refuse to permit your access to the OnLive Websites without
 notice and liability for any reason, including if in our sole 
determination you violate any provision of this Agreement, or for no 
reason. You further understand and agree that OnLive has the right, but 
not the obligation, to remove in whole or in part any Content related to
 the OnLive Websites, including without limitation all data and Content 
residing on our servers, at any time at our sole discretion, with or 
without notice and with no liability to us of any kind.</p>
        						<p class="soft_return">The OnLive Websites or portions 
thereof are subject to scheduled and unscheduled site interruptions. All
 aspects of the OnLive Websites are subject to change or elimination at 
our sole discretion. We reserve the right to interrupt the OnLive 
Websites with or without prior notice for any reason or no reason. You 
agree that OnLive is not liable to you for any interruption of the 
OnLive Websites or any portion thereof, or any delay or failure to 
provide the OnLive Websites or any portion thereof.</p>

        						<h5 class="soft_return">Our Proprietary Rights</h5>
        						<p class="hard_return">The OnLive Websites and all 
materials therein or transferred thereby, including, without limitation,
 software, images, text, graphics, illustrations, logos, trademarks, 
trade names, photographs, audio, videos, and music (the "<b>Content</b>"), and all Intellectual Property Rights related thereto, are the exclusive property of OnLive and our licensors.</p>
        						<p class="hard_return">Except as explicitly provided 
herein, nothing in this Agreement shall be deemed to create a licence in
 or under any such Intellectual Property Rights, and you agree not to 
sell, licence, rent, modify, distribute, copy, reproduce, transmit, 
publicly display, publicly perform, publish, adapt, edit or create 
derivative works from any materials or Content accessible on the OnLive 
Websites. Use of the Content or materials on the OnLive Websites for any
 purpose not expressly permitted by this Agreement is strictly 
prohibited.</p>
        						<p class="soft_return">For the purposes of this Agreement, "<b>Intellectual Property Rights</b>"
 means all patent rights, copyright rights, mask work rights, moral 
rights, rights of publicity, trademark, trade dress and trade name 
rights, service mark rights, goodwill, trade secret rights and other 
intellectual property rights as may now exist or hereafter come into 
existence, and all applications therefore and registrations, renewals 
and extensions thereof, under the laws of any state, country, territory 
or other jurisdiction worldwide.</p>

        						<h5 class="soft_return">Eligibility/Representations and Warranties</h5>
        						<p class="hard_return">You shall be solely responsible for
 your use of the OnLive Websites and all activity undertaken by you 
while visiting the OnLive Websites.</p>
        						<p class="hard_return">This OnLive Websites are intended 
solely for Users who are thirteen (13) years of age or older, and any 
use or access to the OnLive Websites by anyone under thirteen (13) is 
unauthorized, unlicensed, and in violation of this Agreement. In 
connection with your use of the OnLive Websites, you affirm, represent 
and warrant, in addition to the other representations and warranties in 
this Agreement, the following: You are at least thirteen (13) years of 
age.</p>
        						<p class="soft_return">You must be at least eighteen (18) 
years of age to register for an account on the OnLive Service. In 
connection with registering for an OnLive account, you affirm, represent
 and warrant, in addition to the other representations and warranties in
 this Agreement, the following: You are at least eighteen (18) years of 
age, or if you are under 18 years of age you are an emancipated minor 
and are fully able and competent to enter into the terms, conditions, 
obligations, affirmations, representations, and warranties set forth in 
this Agreement, and to abide by and comply with this Agreement.</p>

        						<h5 class="soft_return">Privacy</h5>
        						<p class="hard_return">We care about the privacy of our Users. Click <a class="txt_or" href="http://www.onlive.co.uk/legal/%3C?php%20echo%20base_url%28%29;?%3Elegal/privacypolicy">here</a>
 to view our Privacy Statement, which is incorporated by reference in 
this Agreement as if it is fully set forth herein. By using the OnLive 
Websites, you are consenting to have your personal data transferred to 
and processed in the United States.</p>
        						<p class="hard_return">Your use of the Site may be subject
 to use by us of "cookies", which are text files placed on your computer
 to temporarily store information. Our use of cookies is subject to the 
Privacy Statement.</p>
        						<p class="hard_return">Third-Party Websites, Advertisers 
or Sites: As set forth in our Privacy Statement, the OnLive Websites may
 contain links to third-party websites, advertisers, or sites that are 
not owned or controlled by us. We have no control over, and assume no 
responsibility for, the content, privacy policies, or practices of any 
third party websites. If you access a third party website from the 
OnLive Websites, you do so at your own risk, and you understand that 
this Agreement and our Privacy Statement do not apply to your use of 
such sites. To the fullest extent permissible by law, you expressly 
relieve us from any and all liability arising from your use of any 
third-party website or third party owned content. Additionally, your 
dealings with or participation in promotions of advertisers that may be 
found on the OnLive Websites, including payment and delivery of goods, 
and any other terms (such as warranties) are solely between you and such
 advertisers. You agree that we are not responsible for any loss or 
damage of any sort relating to your dealings with such advertisers.</p>
        						<p class="soft_return">We encourage you to be aware of 
when you leave the OnLive Websites, and to read the terms and conditions
 and privacy policy of any third-party website that you visit.</p>

        						<h5 class="soft_return">Indemnity</h5>
        						<p class="soft_return">You agree to defend, indemnify and 
hold harmless OnLive, and its subsidiaries, agents, managers, partners, 
suppliers, advertisers, product and OnLive Website providers, and other 
affiliated companies, and their employees, contractors, agents, officers
 and directors, from and against any and all claims, damages, 
obligations, losses, liabilities, costs or debt, and expenses (including
 but not limited to attorneys' and experts' fees) arising from: (i) any 
infringement of OnLive's Intellectual Property Rights by you; (ii) your 
violation of any third-party right, including without limitation any 
right of privacy, publicity rights or Intellectual Property Rights; and 
(iii) your violation of any law, rule or regulation of the UK or any 
other country.</p>

        						<h5 class="soft_return">No Warranty</h5>
        						<p class="hard_return">The OnLive Websites are provided on
 an "as is" and "as available" basis. Use of the OnLive Websites is at 
your own risk. To the extent permitted by law, OnLive Websites are 
provided without warranties of any kind, whether express or implied. 
Without limiting the foregoing, OnLive, its subsidiaries, and its 
licensors do not warrant that the operation of the OnLive Websites or 
the information, content, materials, or products included on the OnLive 
Websites is accurate, reliable or correct; that the OnLive Websites will
 meet your requirements; that the OnLive Websites will be available at 
any particular time or location, uninterrupted or secure; that any 
defects or errors will be corrected; or that the OnLive Websites are 
free of viruses or other harmful components. Any information, content, 
materials, or products downloaded or otherwise obtained through the use 
of the OnLive Websites is obtained at your own risk and you will be 
solely responsible for any damages or losses, including damage to your 
computer system or loss of data, that result from such procurement.</p>
        						<p class="soft_return">OnLive does not warrant, endorse, 
guarantee, or assume responsibility for any product or websites 
advertised or offered by a third party through the Onlive Websites or 
any hyperlinked website or site, or featured in any banner or other 
advertising, and OnLive will not be a party to or in any way monitor any
 transaction between you and third-party providers of products or sites.</p>

        						<h5 class="soft_return">Limitation of Liability</h5>
        						<p class="hard_return">OnLive will not be responsible for 
any damage, loss or expense resulting from hacking, tampering or other 
unauthorized access or use of the Onlive Websites or your account or the
 information contained therein.</p>
        						<p class="hard_return">To the extent permitted by law, in 
no event shall Onlive (or any of its affiliates or licensors) nor any of
 the officers, directors, employees, shareholders, licensors, customers,
 agents or representatives of Onlive have any liability of any kind or 
nature to you or any third party for any indirect, incidental, 
consequential, special, or punitive damages whatsoever (including, but 
not limited to, damages for any loss of profits or loss of any 
confidential or other information or for business interruption) arising 
out of or in any way relating to your use of the OnLive Websites 
(including an inability to access or use the OnLive Websites) or 
otherwise with respect to this Agreement, whether arising in tort 
(including negligence), contract, strict liability or otherwise, whether
 or not you have advised of the possibility of any such loss or damage.</p>
        						<p class="hard_return">OnLive will not be liable for any 
liability associated with infrastructure (including, without limitation,
 the internet), devices and software outside of OnLive's control such as
 computers, displays, televisions, input devices, switches, routers, 
firewalls, operating systems, and browsers.</p>
        						<p class="soft_return">Nothing in this Agreement will 
exclude or limit either party's liability for (i) fraud or fraudulent 
misrepresentation; (ii) death or personal injury caused by its 
negligence (iii) under the indemnity in clause 6 above; or (iv) any 
other liability which cannot be excluded by law.</p>

        						<h5 class="soft_return">Export Control</h5>
        						<p class="soft_return">You may not use, export or 
re-export any Content or any copy or adaptation of such Content, or any 
product or service offered on the OnLive Websites, in violation of any 
applicable laws or regulations, including, without limitation, UK export
 laws and regulations. The OnLive Websites are controlled and operated 
from facilities in the UK. We make no representations that the OnLive 
Websites or any portions thereof are appropriate or available for use in
 other locations. Those who access or use the OnLive Websites from other
 jurisdictions do so of their own volition and are entirely responsible 
for compliance with all applicable UK and local laws and regulations, 
including but not limited to export and import regulations. You may not 
use the OnLive Websites if you are a resident of a country embargoed by 
the UK, or are a foreign person or entity blocked or denied by the UK 
government.</p>

        						<h5 class="soft_return">Assignment</h5>
        						<p class="soft_return">This Agreement, and any rights and 
licenses granted hereunder, may not be transferred or assigned by you, 
but may be assigned by us without restriction.</p>

        						<h5 class="soft_return">General</h5>
        						<ul class="tos_alpha"><li>
        								<p class="hard_return">Governing Law and Legal Actions. 
You agree to handle any disputes between you and OnLive in accordance 
with the policy outlined below, the OnLive Privacy Policy or as 
otherwise agreed in writing between you and OnLive. As an alternative to
 litigation, OnLive will consider reasonable requests to resolve any 
dispute through dispute resolution procedures such as arbitration or 
mediation.</p>
        								<p class="hard_return">The construction, validity and 
performance of this Agreement and all non-contractual obligations 
arising from or connected with this Agreement, the OnLive Privacy 
Statement, the OnLive Community Guidelines or the service shall be 
governed by English law.  Any action or proceeding brought to adjudicate
 any dispute related to this Agreement, the OnLive Privacy Statement, 
OnLive Community Guidelines, or the service shall be subject to the 
non-exclusive jurisdiction of the English courts, except as otherwise 
agreed by the parties in writing.</p>
        								<p class="soft_return">If you breach or indicate your 
intention to breach this Agreement (including, without limitation, in a 
manner that infringes, misappropriates or violates any Intellectual 
Property Rights or privacy rights or may cause irreparable or continuing
 harm), OnLive may seek injunctive relief against you, or any other 
remedy available under applicable law</p>
        							</li><li>
        								<p class="soft_return">Notification Procedures. We may 
provide notifications, whether such notifications are required by law or
 are for marketing or other business related purposes, to you via email 
notice, written or hard copy notice, or through conspicuous posting of 
such notice on our website, as determined by us in our sole discretion. 
We reserve the right to determine the form and means of providing 
notifications to our Users.</p>
        							</li><li>
        								<p class="soft_return">Entire Agreement/Severability. 
This Agreement, together with our Privacy Statement and any other legal 
notices and agreements published by us via the OnLive Websites, shall 
constitute the entire agreement between you and OnLive concerning the 
OnLive Websites. If any provision of this Agreement is deemed invalid by
 a court of competent jurisdiction, the invalidity of such provision 
shall not affect the validity of the remaining provisions of this 
Agreement, which shall remain in full force and effect.</p>
        							</li><li>
        								<p class="soft_return">No Waiver. No waiver of any term 
of this Agreement shall be deemed a further or continuing waiver of such
 term or any other term, and OnLive's failure to assert any right or 
provision under this Agreement shall not constitute a waiver of such 
right or provision.</p>
        							</li></ul>                    </div>
                    

				</div></div>
    </content>
    <updated>2012-03-27T21:57:26Z</updated>
    <published>2012-03-27T20:02:33Z</published>
    <author>
      <name>Paul Gregg</name>
      <uri>http://pgregg.com</uri>
    </author>
    <source>
      <id>tag:pgregg.com,2009-02-01:/blog//2</id>
      <link href="http://pgregg.com/blog/" rel="alternate" type="text/html"/>
      <link href="http://pgregg.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <title>Plop in the Ocean</title>
      <updated>2012-03-27T22:49:29Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/124-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/124-Life-after-the-tomb-minidlna.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>Life after the tomb: minidlna</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Last Sunday morning I tried to access my <a href="http://mediatomb.cc/">mediatomb</a> UPnP music server using the radio in my kitchen to be told it was offline. After messing around at the radio end a bit, I went to check on the actual machine, and found that mediatomb was not running. Attempting to restart it looked OK, but it was segfaulting almost immediately.<br/><br/>

After trawling around a bit on <a href="http://bugs.debian.org/mediatomb/">bugs.debian.org</a> I finally found this <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=662020">little gem</a>. Basically mediatomb has been removed from unstable, partly because it's (ahem) unstable. I can't disagree with anything Neil says here; it's been a pain to keep mediatomb working, and there have been many problems. Nevertheless, after solving these and generally having it working (till Sunday) I was frustrated that was the end of the road. Obviously Neil has had <a href="http://www.linux.codehelp.co.uk/serendipity/index.php?/archives/234-Rubbish-in-the-archive.html">a bit of a backlash too</a>.<br/><br/>

Anyway, life goes on and I looked in the Debian archive for alternatives and found <a href="http://sourceforge.net/projects/minidlna/">minidlna</a>. I wasn't too optimistic from the package description, but thought I'd give it a whirl. It has no web interface, but I don't care about that. Anyway, I installed it, reconfigured the path, forced a database reload, and was very pleased to find it all worked out of the box. Far less hassle that mediatomb has proven.<br/><br/>

Only a tiny grumble so far, while all the playlists appear, and are in the correct order, if you browse by Albums, or Artists, the eventual track list is always alphabetical and not track order. I've read some claims that this is due to the client, but every single client I have used to get the lists from mediatomb in track order, and every single one now gets in alphabetical order.<br/><br/>

Time to dive into the source at some time...</div>
    </content>
    <updated>2012-03-05T19:05:12Z</updated>
    <category term="Free Software"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-03-05T20:17:08Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/123-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/123-Bacon-and-Egg-cupcakes.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>Bacon and Egg cupcakes</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">This Sunday it's the birthday of both Bruce Wayne and my better half, Tamsin. I figure Bruce will have a birthday breakfast sorted, so I thought I might look at having a special breakfast for Tam. So it's French toast on order, and pancakes for Aimee etc.. Recently I had tripped over <a href="http://cupcakestakethecake.blogspot.com/2011/12/bacon-and-egg-cupcakes.html">this image</a> of bacon and egg cupcakes. A bit of research revealed lots of recipes which seemed a bit overly convoluted, so I thought I'd try my own ahead of the big day.<br/><br/>

You will need:<br/>
<ul>
<li>A muffin baking tray (it needs to be deep, so not the shallow bun variation);</li>
<li>Decent quality back bacon, well, the important bit is the shape and size of the slices;</li>
<li>Eggs, since it's a cosmetic recipe, I used organic eggs that tend to have great colour as well as flavour.</li>
</ul><br/><br/>

I tried two different variations of bacon, which you can see below.<br/><br/>

First of all, just grill the bacon normally. I know you know what that looks like, but to get an idea of the size of the slices I used. (Click on any thumbnail to enlarge)<br/><br/>
<div class="serendipity_imageComment_center" style="width: 110px;"><div class="serendipity_imageComment_img"><a class="serendipity_image_link" href="http://www.piglets.org/serendipity/uploads/cooking/IMGP9968.JPG"><img alt="Grilling bacon" class="serendipity_image_center" height="73" src="http://www.piglets.org/serendipity/uploads/cooking/IMGP9968.serendipityThumb.JPG" width="110"/></a></div><div class="serendipity_imageComment_txt">The normal slices I used.</div></div>
<br/><br/>

But I also tried another variation of back bacon without the fatty "tail":<br/><br/>
<div class="serendipity_imageComment_center" style="width: 110px;"><div class="serendipity_imageComment_img"><a class="serendipity_image_link" href="http://www.piglets.org/serendipity/uploads/cooking/IMGP9970.JPG"><img alt="Lean bacon" class="serendipity_image_center" height="73" src="http://www.piglets.org/serendipity/uploads/cooking/IMGP9970.serendipityThumb.JPG" width="110"/></a></div><div class="serendipity_imageComment_txt">More lean version</div></div>
<br/><br/>

If, like me, you only have a single oven, turn off the grill, and put the oven on at around 200 degrees centigrade (probably 180 for fan assisted ovens, and that's around 400 Fahrenheit for any Americans). Give the grill element some time (only about 5-10 minutes) to cool down, so you will be baking the eggs later and not grilling them.<br/><br/>

Now, you need to simply put the bacon into one of the cups in the tray. Don't do what I did and use an edge, working from the centre probably makes a lot more sense. For the "normal" bacon I simply put the slice round the edge, and it covers almost everything. I actually took the most fatty bit off the second slice and placed it on over the hole. I didn't bother to do anything special with the tray, and I didn't use cupcake cases or bread as I've seen in some of the more complex procedures. You don't have to worry about the odd small gap, but cover what you can.<br/><br/>
<div class="serendipity_imageComment_center" style="width: 110px;"><div class="serendipity_imageComment_img"><a class="serendipity_image_link" href="http://www.piglets.org/serendipity/uploads/cooking/IMGP9969.JPG"><img alt="Wrap two, or one and a half slices into each cups" class="serendipity_image_center" height="73" src="http://www.piglets.org/serendipity/uploads/cooking/IMGP9969.serendipityThumb.JPG" width="110"/></a></div><div class="serendipity_imageComment_txt">Wrap two, or one and a half slices into each cups</div></div><br/><br/>

My second variation involved using three of the lean slices to make a flower petal kind of effect.<br/><br/>
<div class="serendipity_imageComment_center" style="width: 110px;"><div class="serendipity_imageComment_img"><a class="serendipity_image_link" href="http://www.piglets.org/serendipity/uploads/cooking/IMGP9971.JPG"><img alt="The leaner bacon version." class="serendipity_image_center" height="73" src="http://www.piglets.org/serendipity/uploads/cooking/IMGP9971.serendipityThumb.JPG" width="110"/></a></div><div class="serendipity_imageComment_txt">The leaner bacon version.</div></div><br/><br/>

Now you simply have to carefully crack an egg into each cup, trying not to rupture the yolk.<br/><br/>
<div class="serendipity_imageComment_center" style="width: 110px;"><div class="serendipity_imageComment_img"><a class="serendipity_image_link" href="http://www.piglets.org/serendipity/uploads/cooking/IMGP9972.JPG"><img alt="Eggs cracked in." class="serendipity_image_center" height="73" src="http://www.piglets.org/serendipity/uploads/cooking/IMGP9972.serendipityThumb.JPG" width="110"/></a></div><div class="serendipity_imageComment_txt">Eggs cracked in.</div></div><br/><br/>

So now bake in the centre of the oven, for around 15-20 minutes. I found the second variation seemed to take more time to cook because the egg was further away from the metal most likely.  Then use a silicon spatula or similar to easy the edge of the bacon away from the case, lift out, and serve warm.<br/><br/>
<div class="serendipity_imageComment_center" style="width: 110px;"><div class="serendipity_imageComment_img"><a class="serendipity_image_link" href="http://www.piglets.org/serendipity/uploads/cooking/IMGP9974.JPG"><img alt="The end result." class="serendipity_image_center" height="73" src="http://www.piglets.org/serendipity/uploads/cooking/IMGP9974.serendipityThumb.JPG" width="110"/></a></div><div class="serendipity_imageComment_txt">The end result.</div></div><br/><br/>

You can see one cut in half. Tam and I tried the results and we feel the original version (with the regular bacon) is the best, and I think it looks the best too. At just under 20 minutes I found the white totally set, but the yolk still had a good moist consistency. The saltiness of the bacon infuses the egg in a really pleasing way. I hope you enjoy trying it. I will be making them again on Sunday.<br/><br/>

<div class="serendipity_imageComment_center" style="width: 110px;"><div class="serendipity_imageComment_img"><a class="serendipity_image_link" href="http://www.piglets.org/serendipity/uploads/cooking/IMGP9975.JPG"><img alt="One cut in half." class="serendipity_image_center" height="73" src="http://www.piglets.org/serendipity/uploads/cooking/IMGP9975.serendipityThumb.JPG" width="110"/></a></div><div class="serendipity_imageComment_txt">One cut in half.</div></div></div>
    </content>
    <updated>2012-02-15T15:29:55Z</updated>
    <category term="Cooking"/>
    <category term="bacon and egg cupcakes"/>
    <category term="cooking"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-03-05T20:17:08Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2012:/~noodles/blog//1.267</id>
    <link href="http://www.earth.li/~noodles/blog/2012/02/on-arranging-meetings.html" rel="alternate" type="text/html"/>
    <title>On arranging meetings</title>
    <summary>I've been spending a lot more time recently in meetings. Mostly things I should actually be at. And in general if it's something I think is reasonable I'll try to be there. In an effort to help with this I actually keep my work calendar up to date. Given that I'm running Linux on my laptop and the corporate standard is Exchange this requires a little bit of effort on my part (the Thunderbird Provider for Microsoft Exchange and Android support for talking to Exchange are helpful with this). Sometimes it seems like I shouldn't bother. I spent this week at a conference, and marked my calendar to indicate I was out of the office. I think I had at least 3 meeting requests, all for things that would actually have been appropriate for me to go to. Last week I managed to be booked for 7 hours of meetings from 7am until noon. That included a 30 minute window where I was triple booked. The thing is, I'm really not that busy in terms of meetings - you can usually find a spot when I'm free on any given day unless I'm actually not in the office. If you bother to check my calendar, that is. Another problem I have is the times people like to book meetings at. Booking a technical meeting at 9am isn't going to get me at my best. Equally doing so at 5pm is likely to have me clock watching to make sure I don't miss my bus and/or train. Also I seem to work with far too many people who don't eat lunch and book hour long meetings at midday or 1pm. I understand sometimes that's the only time you can get everyone into a room together, but at least bloody ask and explain the need rather than just sending out a meeting invite. Finally, book meetings of a realistic length. There are some people who invite me to things and cause me to add another 30 minutes on the end, because I know it always overruns. It's not all bad. I have a VP who always runs a meeting to time, and never seems to call one for spurious reasons. I've also worked with a program manager who will organize the meeting so that if you're only there for one point on the agenda that'll get dealt with near the beginning so it doesn't take up more of your time that it needs to. Funnily enough I'm much more likely to go to things both of these people arrange. Disclaimer: In the unlikely event anyone I work with who invites me to meetings is reading this, I might be talking about you, but everything I mention has been done by more than one person, so I'm not thinking about anyone in particular for each point....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>I've been spending a lot more time recently in meetings. Mostly things I
should actually be at. And in general if it's something I think is
reasonable I'll try to be there. In an effort to help with this I
actually keep my work calendar up to date. Given that I'm running Linux
on my laptop and the corporate standard is Exchange this requires a
little bit of effort on my part (the <a href="https://addons.mozilla.org/en-us/thunderbird/addon/provider-for-microsoft-exchang/">Thunderbird Provider for Microsoft
Exchange</a>
and Android support for talking to Exchange are helpful with this).</p>

<p>Sometimes it seems like I shouldn't bother. I spent this week at a
conference, and marked my calendar to indicate I was out of the office.
I think I had at least 3 meeting requests, all for things that would
actually have been appropriate for me to go to. Last week I managed to
be booked for 7 hours of meetings from 7am until noon. That included a
30 minute window where I was triple booked.</p>

<p>The thing is, I'm really not that busy in terms of meetings - you can
usually find a spot when I'm free on any given day unless I'm actually
not in the office. If you bother to check my calendar, that is.</p>

<p>Another problem I have is the times people like to book meetings at.
Booking a technical meeting at 9am isn't going to get me at my best.
Equally doing so at 5pm is likely to have me clock watching to make sure
I don't miss my bus and/or train. Also I seem to work with far too many
people who don't eat lunch and book hour long meetings at midday or 1pm.</p>

<p>I understand sometimes that's the only time you can get everyone into a
room together, but at least bloody ask and explain the need rather than
just sending out a meeting invite.</p>

<p>Finally, book meetings of a realistic length. There are some people who
invite me to things and cause me to add another 30 minutes on the end,
because I know it always overruns.</p>

<p>It's not all bad. I have a VP who <em>always</em> runs a meeting to time, and
never seems to call one for spurious reasons. I've also worked with a
program manager who will organize the meeting so that if you're only
there for one point on the agenda that'll get dealt with near the
beginning so it doesn't take up more of your time that it needs to.
Funnily enough I'm much more likely to go to things both of these people
arrange.</p>

<p>Disclaimer: In the unlikely event anyone I work with who invites me to
meetings is reading this, I might be talking about you, but everything I
mention has been done by more than one person, so I'm not thinking about
anyone in particular for each point.</p></div>
    </content>
    <updated>2012-02-11T23:46:29Z</updated>
    <published>2012-02-11T23:44:31Z</published>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/122-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/122-Swan-Heated-Tray-repair.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>Swan Heated Tray repair</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">We have a nice <a href="http://www.amazon.co.uk/Swan-Professional-Cordless-Warming-SW03SS/dp/B0041MIBEA/ref=pd_sim_sbs_kh_1">Swan Heated Tray</a> courtesy of my Mum. It's useful for lots of things, heating plates for dinner and then placing serving dishes on it, or for keeping a stack of pancakes warm on Sunday. Unfortunately it stopped working recently. The red power LED still lit when power was applied but no heating. Google produced no answers (which is why I'm writing this for anyone following a similar trail). The helpline couldn't help, and theoretically the tray was under warranty, but with no receipt we couldn't follow their advice to return it to the store. So I had to fix it myself.<br/><br/>

<strong>You should obviously think twice before messing around with something (a) electrical and (b) which generates large amounts of heat. Please don't kill yourself or burn your house down, that will make us both feel really bad.</strong><br/><br/>

The tray is fitted with triangular screws which reinforces my comments above, but not having previously purchased some triangular screwdrivers, these were <a href="http://www.amazon.co.uk/gp/product/B004KFHHVQ">next to be acquired.</a> I figured they might come in useful for something else in the future.<br/><br/>

Taking the device apart shows that basically it's quite simple, there are some blocks through which elements do the heating, a lot of glass fibre (so wear gloves) to protect the underneath from the blocks.<br/><br/>

<div class="serendipity_imageComment_right" style="width: 110px;"><div class="serendipity_imageComment_img"><a class="serendipity_image_link" href="http://www.piglets.org/serendipity/uploads/IMGP9965.JPG"><img alt="The inside of the tray" class="serendipity_image_right" height="73" src="http://www.piglets.org/serendipity/uploads/IMGP9965.serendipityThumb.JPG" width="110"/></a></div><div class="serendipity_imageComment_txt">The inside of the tray. You can see the connections on the two right most blocks where I removed the section of cabling that was not working.</div></div>

 There are also a number of polythene covers to hold the corners of the blocks, though it seems a few were missing. There was no obvious fuse much to my surprise and irritation. A bit of testing with a continuity tester showed that a particular loop of cable was no longer doing its job. I pulled it out, and pulled back some insulated sheathing to reveal the culprit fuse. <br/><br/>

<div class="serendipity_imageComment_left" style="width: 110px;"><div class="serendipity_imageComment_img"><a class="serendipity_image_link" href="http://www.piglets.org/serendipity/uploads/IMGP9966.JPG"><img alt="The culprit" class="serendipity_image_left" height="73" src="http://www.piglets.org/serendipity/uploads/IMGP9966.serendipityThumb.JPG" width="110"/></a></div><div class="serendipity_imageComment_txt">The culprit</div></div>Replacement fuses can be <a href="http://uk.rs-online.com/web/p/products/1769328/?searchTerm=176-9328">obtained here</a>. I teased upon the crimps with a precision screw driver and fitted the replacement, crimping it very firmly back in place. Then it was a matter of putting it all back together and testing it was appropriate safety measures in case of problems. All working again.</div>
    </content>
    <updated>2012-02-04T14:40:51Z</updated>
    <category term="hardware"/>
    <category term="heated tray"/>
    <category term="repairs"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-03-05T20:17:08Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2012:/~noodles/blog//1.266</id>
    <link href="http://www.earth.li/~noodles/blog/2012/01/i-want-you-to-see-my-storage-a.html" rel="alternate" type="text/html"/>
    <title>I want you to see my storage automagically</title>
    <summary>For my day job I build storage systems. A lot of what I do at present involves caring a lot about how different OSes deal with things like new LUNs being presented from a SCSI target, or errors along a subset of the available paths to a device. It will come as no surprise to you to discover that they all suck (for values of all equal to Linux, Solaris, Windows and VMWare). New LUNs are particularly annoying. I'm in the situation that creation and removal of a LUN is exceptionally easy. Hmmm. Maybe I need to back up here a bit first. SCSI has the concept of a target (think, device, eg hard drive). Each target can present multiple logical units. Each of these is assigned a number - a Logical Unit Number. Most devices (a hard drive, or a CDROM drive) will present a single LUN. A storage array will tend to present multiple LUNs; one for each volume that is exported to the host. At the host level each LUN really just looks like a separate device (for Linux /dev/sda and /dev/sdb may well be separate LUNs on the same array, rather than 2 separate arrays/hard drives, for example. At the block device level you don't care about the difference usually). Anyway. For various reasons I end up adding and removing LUNs quite often. And there are ways for the array to indicate that this has happened to the host (the UNIT ATTENTION/REPORT LUNS DATA CHANGED check condition seems to be favoured these days, as a complete Fibre Channel LIP can be disruptive). What I'd like to happen in that case is the host to pick up the check condition and drop and/or add the devices that have changed. Instead everything wants a manual rescan. rescan-scsi-bus tends to be simplest for Linux. Windows wants a manual refresh in Disk Administrator. VMWare a "Rescan HBAs" from vSphere. Solaris a "devfsadm -C" and possibly a "cfgadm -al" first. And all of these can be temperamental about picking up the changes. We've done a lot about hotplug for the desktop user experience, without doing the same level for the server experience. I appreciate that there are situations that you don't want your server to reconfigure things without being told to, but the current situation can be detrimental (for example Linux multipathing will hold a device open even after it's disappeared and is returning an "INVALID LUN" response; it would be much better if it could cleanly close that device and wait for it to return). Storage is capable of being much more than just a single block device these days, and it's a shame that nothing seems to deal fully with that fact. (Yes, yes, I should write and submit patches, but I appreciate that there's not always a simple answer, nor necessarily an answer that works for all situations automatically. Plus, y'know, not enough hours in the day and I hope you all appreciate I've taken a break from watching BSG to write this.)...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>For my day job I build storage systems. A lot of what I do at present
involves caring a lot about how different OSes deal with things like new
LUNs being presented from a SCSI target, or errors along a subset of the
available paths to a device.</p>

<p>It will come as no surprise to you to discover that they all suck (for
values of all equal to Linux, Solaris, Windows and VMWare). New LUNs are
particularly annoying. I'm in the situation that creation and removal of
a LUN is exceptionally easy.</p>

<p>Hmmm. Maybe I need to back up here a bit first. SCSI has the concept of
a target (think, device, eg hard drive). Each target can present
multiple logical units. Each of these is assigned a number - a Logical
Unit Number. Most devices (a hard drive, or a CDROM drive) will present
a single LUN. A storage array will tend to present multiple LUNs; one
for each volume that is exported to the host. At the host level each LUN
really just looks like a separate device (for Linux /dev/sda and
/dev/sdb may well be separate LUNs on the same array, rather than 2
separate arrays/hard drives, for example. At the block device level you
don't care about the difference usually).</p>

<p>Anyway. For various reasons I end up adding and removing LUNs quite
often. And there are ways for the array to indicate that this has
happened to the host (the UNIT ATTENTION/REPORT LUNS DATA CHANGED check
condition seems to be favoured these days, as a complete Fibre Channel
LIP can be disruptive). What I'd like to happen in that case is the host
to pick up the check condition and drop and/or add the devices that have
changed. Instead everything wants a manual rescan.
<a href="http://www.garloff.de/kurt/linux/">rescan-scsi-bus</a> tends to be
simplest for Linux. Windows wants a manual refresh in Disk
Administrator. VMWare a "Rescan HBAs" from vSphere. Solaris a "devfsadm
-C" and possibly a "cfgadm -al" first. And all of these can be
temperamental about picking up the changes.</p>

<p>We've done a lot about hotplug for the desktop user experience, without doing the same level for the server experience. I
appreciate that there are situations that you don't want your server to
reconfigure things without being told to, but the current situation can
be detrimental (for example Linux multipathing will hold a device open
even after it's disappeared and is returning an "INVALID LUN" response;
it would be much better if it could cleanly close that device and wait
for it to return). Storage is capable of being much more than just a
single block device these days, and it's a shame that nothing seems to
deal fully with that fact.</p>

<p>(Yes, yes, I should write and submit patches, but I appreciate that
there's not always a simple answer, nor necessarily an answer that works
for all situations automatically. Plus, y'know, not enough hours in the day and I hope you all appreciate I've taken a break from watching BSG to write this.)</p></div>
    </content>
    <updated>2012-01-23T00:01:03Z</updated>
    <published>2012-01-22T23:57:40Z</published>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2012:/~noodles/blog//1.265</id>
    <link href="http://www.earth.li/~noodles/blog/2012/01/totally-divorced.html" rel="alternate" type="text/html"/>
    <title>Totally divorced</title>
    <summary>I got divorced earlier this month; the decree absolute arrived in the post last weekend. I'm hoping this isn't news to anyone who knows me well, and I only really mention it here as an endpoint given that I blogged about the wedding itself....</summary>
    <content xml:lang="en">I got divorced earlier this month; the decree absolute arrived in the post last weekend. I'm hoping this isn't news to anyone who knows me well, and I only really mention it here as an endpoint given that I blogged about the wedding itself.</content>
    <updated>2012-01-22T22:18:51Z</updated>
    <published>2012-01-22T22:12:11Z</published>
    <category scheme="http://www.sixapart.com/ns/types#category" term="Wedding"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.mccartney.ie/wordpress/?p=256</id>
    <link href="http://www.mccartney.ie/wordpress/2011/12/faking-production-database-access/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=faking-production-database-access" rel="alternate" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2011/12/faking-production-database-access/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=faking-production-database-access#comments" rel="replies" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2011/12/faking-production-database-access/feed/atom/" rel="replies" type="application/atom+xml"/>
    <title xml:lang="en">Faking Production – database access</title>
    <summary xml:lang="en">One of our services has been around for a while, a realy long time.  It used to get developed in production, there is an awful lot of work involved in making the app self-contained, to where it could be brought up in a VM and run without access to production or some kinds of fake [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>One of our services has been around for a while, a realy long time.  It used to get developed in production, there is an awful lot of work involved in making the app self-contained, to where it could be brought up in a VM and run without access to production or some kinds of fake supporting environment.  There’s lots of stuff hard coded in the app (like database server names/ip etc), and indeed, and there’s a lot of code designed to handle inaccessible database servers in some kind of graceful manor.</p>
<p>We’ve been taking bite sized chunks of all of this over the last few years, we’re on the home straight.</p>
<p>One of the handy tricks we used to get this application to be better self-contained was avoid changing all of the database access layer (hint, there isn’t one) and just use iptables to redirect requests to production database servers to either local empty database schema on the VM, or shared database servers with realistic amounts of data.</p>
<p>We manage our database pools (master-dbs.example.com, slave-dbs.example.com, other-dataset.example.com etc) using DNS (PowerDNS with MySQL back end), in production, if you make a DNS request for master-dbs.example.com, you will get 3+ IPs back, one of which will be in your datacentre, the others will be other datacentres, the app has logic for selecting the local DB first, and using an offsite DB if there is some kind of connection issue.  We also mark databases as offline by prepending the relevant record in MySQL with OUTOF, so that a request for master-dbs.example.com will return only 2 IPs, and a DNS request for OUTOFmaster-dbs.example.com will return any DB servers marked out of service.</p>
<p>Why am I telling you all of this?  Well, it’s just not very straight forward for us to update a single config file and have the entire app start using a different database server. <em>Fear not, our production databases aren’t actually accessible from the dev environments.</em></p>
<p>But what we can do is easily identify the IP:PORT combinations that an application server will try and connect to.  And once we know that it’s pretty trivial to generate a set of iptables statements that will quietly divert that traffic elsewhere.</p>
<p>Here’s a little ruby that generates some iptables statements to divert access to remote, production, databases to local ports, where you can either use ssh port-forwarding to forward on to a shared set of development databases, or to several local empty-schema MySQL instances:</p>
<blockquote><p>require “rubygems”<br/>
require ‘socket’</p>
<p># map FQDNs to local ports<br/>
fqdn_port  = Hash.new<br/>
fqdn_port["master-dbs.example.com"] = 3311<br/>
fqdn_port["slave-dbs.example.com"] = 3312<br/>
fqdn_port["other-dataset.example.com"] = 3314</p>
<p>fqdn_port.each do |fqdn, port|<br/>
  puts “#”<br/>
  puts “# #{fqdn}”<br/>
  # addressess for this FQDN<br/>
  fqdn_addr = Array.new</p>
<p>  # get the addresses for the FQDN<br/>
  addr = TCPSocket.gethostbyname(fqdn)<br/>
  addr[3, addr.length].each { |ip| fqdn_addr &lt;&lt; ip }</p>
<p>  addr = TCPSocket.gethostbyname(‘OUTOF’ + fqdn)<br/>
  addr[3, addr.length].each { |ip| fqdn_addr &lt;&lt; ip }</p>
<p>  fqdn_addr.each do |ip|<br/>
    puts “iptables -t nat -A OUTPUT -p tcp -d #{ip} –dport 3306 -j DNAT –to 127.0.0.1:#{fqdn_port[fqdn]}”<br/>
  end<br/>
end</p></blockquote>
<p>And yes, this only generates the statements, just pipe the output into bash if you want the commands actually run.  Want to see what it’s going to do?  Just run it.  Simples.</p></div>
    </content>
    <updated>2011-12-20T12:52:44Z</updated>
    <published>2011-12-20T12:52:44Z</published>
    <category scheme="http://www.mccartney.ie/wordpress" term="*nix"/>
    <category scheme="http://www.mccartney.ie/wordpress" term="Bright Ideas"/>
    <category scheme="http://www.mccartney.ie/wordpress" term="Linux &amp; Laptops"/>
    <category scheme="http://www.mccartney.ie/wordpress" term="Open Source"/>
    <category scheme="http://www.mccartney.ie/wordpress" term="Random Toad"/>
    <category scheme="http://www.mccartney.ie/wordpress" term="Work"/>
    <author>
      <name>simonm</name>
      <uri>http://www.mccartney.ie/blog</uri>
    </author>
    <source>
      <id>http://www.mccartney.ie/wordpress/feed/atom/</id>
      <link href="http://www.mccartney.ie/wordpress" rel="alternate" type="text/html"/>
      <link href="http://www.mccartney.ie/wordpress/feed/atom/" rel="self" type="application/atom+xml"/>
      <subtitle xml:lang="en">too boring to have a real blog</subtitle>
      <title xml:lang="en">ze blog of simon</title>
      <updated>2012-04-12T11:49:19Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.264</id>
    <link href="http://www.earth.li/~noodles/blog/2011/11/all-i-need-is-a-large-enough-w.html" rel="alternate" type="text/html"/>
    <title>All I need is a large enough white wall</title>
    <summary>I think I'm currently supposed to be out buying a TV at the moment. Or something else expensive. Instead I'm lying on the sofa listening to Whale and drinking tea. That's much better in my opinion, but it reminded me that I hadn't mentioned that I bought a projector. I had the loan of a projector for a while when I was in Belfast. It was a huge thing that made a lot of noise, but was pretty cool for watching films with. When I moved to the US I decided not to bother with a TV to start with - using my laptop did just fine for most things. Except films. They really benefit from a bigger screen. Especially if you want to watch them with someone else. So I started looking at pico projectors, because I wanted something small and cute that I could throw in a bag with my tiny laptop. At the time the best the pico projectors could do was 840x480, which I felt wasn't really that great. However back in January TI announced their DLP Pico HD chipset, offering a resolution 1280x800. I kept a look out for projectors using this to appear, and eventually, in July, Amazon claimed to have availability of the Vivtek Qumi. So I bought one. And I'm very happy with it. I'm not a heavy user, and there are some niggles, but it's small and does exactly what I want. In low light conditions it'll happily throw an image all the way across the room, which is more than it's rated at. There's a mini-HDMI connector on the back, so it's a doddle to plug it into my laptop using the supplied HDMI to mini-HDMI cable. The laptop auto-detects the device and extends the desktop appropriate, as you'd expect. It'll also do media playback itself - there's a USB host port and a micro SD slot on the back. This works ok, and the included remote means you can easily set the projector somewhere above your head and still be able to easily control it. Unfortunately the built in speakers are fairly useless. There's a 3.5mm socket for external speakers, but having to plug something else in detracts from the convenience factor of the built-in media player. Also my unit had the power switch installed upside down (the little red line indicating the power is on actually shows up when it's off), but that's the only complaint I've got about the build quality. There's a little neoprene case to store the thing in as well. So, er, yeah. I think I can continue to make do without a normal TV for a while longer and avoid the nightmare that I suspect are the shops on Black Friday....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>I think I'm currently supposed to be out buying a TV at the moment. Or something else expensive. Instead I'm lying on the sofa listening to <a href="http://en.wikipedia.org/wiki/Whale_%28band%29">Whale</a> and drinking <a href="http://www.taylorsofharrogate.co.uk/teaitem.asp?itmid=1722">tea</a>. That's much better in my opinion, but it reminded me that I hadn't mentioned that I bought a projector.</p>

<p>I had the loan of a projector for a while when I was in Belfast. It was a huge thing that made a lot of noise, but was pretty cool for watching films with. When I moved to the US I decided not to bother with a TV to start with - using my laptop did just fine for most things. Except films. They really benefit from a bigger screen. Especially if you want to watch them with someone else. So I started looking at pico projectors, because I wanted something small and cute that I could throw in a bag with my <a href="http://www.earth.li/~noodles/blog/2010/11/new-laptop-acer-aspire-timelin.html">tiny laptop</a>. At the time the best the pico projectors could do was 840x480, which I felt wasn't really that great. However back in January TI announced their DLP Pico HD chipset, offering a resolution 1280x800.</p>

<p>I kept a look out for projectors using this to appear, and eventually, in July, <a href="http://www.amazon.com/">Amazon</a> claimed to have availability of the Vivtek <a href="http://www.myqumi.com/">Qumi</a>. So I bought one. And I'm very happy with it. I'm not a heavy user, and there are some niggles, but it's small and does exactly what I want. In low light conditions it'll happily throw an image all the way across the room, which is more than it's rated at. There's a mini-HDMI connector on the back, so it's a doddle to plug it into my laptop using the supplied HDMI to mini-HDMI cable. The laptop auto-detects the device and extends the desktop appropriate, as you'd expect.</p>

<p>It'll also do media playback itself - there's a USB host port and a micro SD slot on the back. This works ok, and the included remote means you can easily set the projector somewhere above your head and still be able to easily control it. Unfortunately the built in speakers are fairly useless. There's a 3.5mm socket for external speakers, but having to plug something else in detracts from the convenience factor of the built-in media player. Also my unit had the power switch installed upside down (the little red line indicating the power is on actually shows up when it's off), but that's the only complaint I've got about the build quality. There's a little neoprene case to store the thing in as well.</p>

<p>So, er, yeah. I think I can continue to make do without a normal TV for a while longer and avoid the nightmare that I suspect are the shops on Black Friday.</p></div>
    </content>
    <updated>2011-11-26T00:32:16Z</updated>
    <published>2011-11-26T00:28:12Z</published>
    <category scheme="http://www.sixapart.com/ns/types#category" term="TV"/>
    <category label="review" scheme="http://www.sixapart.com/ns/types#tag" term="review"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://redbrain.co.uk/?p=648</id>
    <link href="http://redbrain.co.uk/index.php/update/detective-story/" rel="alternate" type="text/html"/>
    <title>Detective Story</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>So the other day, was exciting something i will always remember; becoming a detective. What you say, yes well i will try to keep this mostly anonymous as i think that’s more appropriate due to the circumstances. Well a close friend of mine created a website for buying and selling cars in a foreign country [...]</p></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>So the other day, was exciting something i will always remember; becoming a detective. What you say, yes well i will try to keep this mostly anonymous as i think that’s more appropriate due to the circumstances. Well a close friend of mine created a website for buying and selling cars in a foreign country which his brother lives in. So all going well website is fine bla bla, I just helped my friend system admin for the server maintaining apache, mysql, postfix etc.. the website was fairly busy.</p>
<p>But there was fake accounts created over time posting fake ads selling cars but most of which in-fact all were very obvious scams but one of which ads was created 5 times on this website from 5 different users with 5 different emails but each listing was exactly the same. Long and short of it one person fell for this listing and ended up wiring ~£8000 to this scammer. So the victim contacted the local police which contacted us to try and find as much details as possible on the scammer like emails ip’s etc.</p>
<p>As the scammer was trying to get more money out of the victim the police suggested to play along with the scammer so we can catch him in the act. But my job was to find out as much information as you can. And by god the amount of information you can figure out about someone based of server logs is scary if your clever.</p>
<p>So we cross referenced the times which the scammer signed up to the website each time, to get his ip and his email and checking the post data to be 100% sure we had the right ip. There were 5 instances we had to go through. 3 of which ips would origionate from exactly the same place which was a major city and isp the other 2 were in a more local rural town. And if you take more attention to the dates the first 2 sign-ups by this scammer originated from this city and occurred around June then nothing until October or so where the next 3 sign-ups occurred so this could give rise to the idea that this person moved house. We know its the same scammer each time when the listing is exactly the same each time and the trace on the ip go to the same places each time.</p>
<p>So yes this was an interesting day but very very interesting what you can figure out about people from their IP.</p>
<p> </p></div>
    </content>
    <updated>2011-11-16T17:36:07Z</updated>
    <category term="Update!"/>
    <author>
      <name>redbrain</name>
    </author>
    <source>
      <id>http://redbrain.co.uk</id>
      <link href="http://redbrain.co.uk/index.php/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://redbrain.co.uk" rel="alternate" type="text/html"/>
      <subtitle>Frustrated Software Developer</subtitle>
      <title>RedBrain @ $HOME : ~ $</title>
      <updated>2012-04-24T15:17:07Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.263</id>
    <link href="http://www.earth.li/~noodles/blog/2011/11/the-cost-of-progress.html" rel="alternate" type="text/html"/>
    <title>The cost of progress</title>
    <summary>You should probably ignore this post. I'm just venting. I'll be better after a nice cup of tea. Things that are causing me to fume about the fact Gnome Shell just hit Debian/Testing: Spacefun came back. Even on GDM3. Just fucking die already. I had to reboot to get bluetooth working again. /desktop/gnome/shell/windows/workspaces_only_on_primary set by default? SRSLY? It failed to carry over my previous monitor settings. I'm pretty sure I don't have a latent desire for a machine running OS X, whatever the GNOME devs might think. How many mouse clicks to get to the list of applications? Er, why have you changed my default apps? (Why is clicking a link in a terminal opening Epiphany rather than a new tab in Iceweasel?) I update my testing boxes (work + home laptops) almost every day. It rarely breaks, and certainly when it does I accept that's what I get for doing rolling upgrades. I can't remember the last time I did an upgrade that actually made me angry. Also I suspect this thing is going to have a complete fit on my binary nVidia/hacked up DisplayLink configuration at work (the DisplayLink side refuses to do 3D for starters). Perhaps better not to upgrade there until I have a sufficient block of free time. Maybe it's time to go back to evilwm. I only stopped because I wanted a dock for wifi/bluetooth etc applets on my laptop that didn't get hidden when I fullscreened things. Implementing _NET_WM_STRUT might make that doable... (I'm sure some of this is just dealing with the change but it's a bit bloody difficult to deal with a complete change in user interface that hasn't even managed to carry across settings from the old one.)...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>You should probably ignore this post. I'm just venting. I'll be better after a nice cup of tea.</p>

<p>Things that are causing me to fume about the fact <a href="http://live.gnome.org/GnomeShell">Gnome Shell</a> just hit <a href="http://www.debian.org/">Debian</a>/Testing:</p>

<ul>
<li>Spacefun came back. Even on GDM3. Just fucking die already.</li>
<li>I had to reboot to get bluetooth working again.</li>
<li><code>/desktop/gnome/shell/windows/workspaces_only_on_primary</code> set by default? SRSLY?</li>
<li>It failed to carry over my previous monitor settings.</li>
<li>I'm pretty sure I don't have a latent desire for a machine running OS X, whatever the GNOME devs might think.</li>
<li>How many mouse clicks to get to the list of applications?</li>
<li>Er, why have you changed my default apps? (Why is clicking a link in a terminal opening Epiphany rather than a new tab in Iceweasel?)</li>
</ul>

<p>I update my testing boxes (work + home laptops) almost every day. It rarely breaks, and certainly when it does I accept that's what I get for doing rolling upgrades. I can't remember the last time I did an upgrade that actually made me angry.</p>

<p>Also I suspect this thing is going to have a complete fit on my binary nVidia/hacked up DisplayLink configuration at work (the DisplayLink side refuses to do 3D for starters). Perhaps better not to upgrade there until I have a sufficient block of free time.</p>

<p>Maybe it's time to go back to <a href="http://www.6809.org.uk/evilwm/">evilwm</a>. I only stopped because I wanted a dock for wifi/bluetooth etc applets on my laptop that didn't get hidden when I fullscreened things. Implementing <code>_NET_WM_STRUT</code> might make that doable...</p>

<p>(I'm sure some of this is just dealing with the change but it's a bit bloody difficult to deal with a complete change in user interface that hasn't even managed to carry across settings from the old one.)</p></div>
    </content>
    <updated>2011-11-08T06:13:25Z</updated>
    <published>2011-11-08T05:53:51Z</published>
    <category label="Debian" scheme="http://www.sixapart.com/ns/types#tag" term="debian"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://redbrain.co.uk/?p=644</id>
    <link href="http://redbrain.co.uk/index.php/update/update-1/" rel="alternate" type="text/html"/>
    <title>Update #1</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>So i plan to try and do an update of me every 2 weeks on my blog to get more into routine in my life. For the last few years i realized i was very depressed and frustrated, from university i would go in and do my mathematics side of my degree and go to [...]</p></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>So i plan to try and do an update of me every 2 weeks on my blog to get more into routine in my life. For the last few years i realized i was very depressed and frustrated, from university i would go in and do my mathematics side of my degree and go to my Computer Science classes and hope to learn from these to understand what the updates in my debian system meant like changes to libc for security reasons then once 2nd year hit, it became very obvious that university wasn’t going to teach me the skills i wanted or hoped. So i took things into my own hands and threw my self into ~4 years of solid learning on my own and university kind of took a back step.</p>
<p>I have no regrets in the choices that i made,  doing what i have done has opened so many more doors for me in my life than anything else has in my life, including university. These days so many students go to university especially science related topics and dont get a related job from it in the end. I can say for me i know i am good at programming, i know i love it; i know i want to do this for the rest of my life as a career  not many people at my age can say anything like that about themselves. For me i never wanted to blame university to not get where i wanted to be in life. If it wasn’t for me taking so much time to learn on my own i wouldn’t have become a decent GCC hacker with server access etc. Mentored by Ian Taylor a well know free software hacker. I took my until june this year to break a lot of depression i had in my life and to accept my failing at university i felt like i had let down my whole family so much when i failed a module, it was when i tried the absolute hardest i possibly could at an applied math module at university and it didn’t pay off and there didn’t seem to be anyone to help you or talk to about it. That was in my 2nd year and that was when i really pushed my self into open source and free software.</p>
<p>It feels good to just talk about it and it doesnt make me feel sad anymore, i am back at university this year i should have been finished now but i failed all my modules last year it really took the biscuit if i am honest, i realised even more so that there is no chance students can learn anything useful from university, well at least from my university if you compare what others do. But yeah the long and short of it is i only need to pass 4 modules now this year to finish up my degree and i will be finished. Its hard for me but i will do it there is so much i want to do this year so i am pushing my self into alot of work to keep my mind active and my self in a routine.</p>
<p> </p>
<p>It scares me how much power your mind has over your body, when getting over all my depression i feel so much better in every day life. Its like i can see again but anyways enough of me blabing on i have lots of gccpy updates to post so i will do that over the coming weeks.</p></div>
    </content>
    <updated>2011-11-01T13:44:16Z</updated>
    <category term="Update!"/>
    <author>
      <name>redbrain</name>
    </author>
    <source>
      <id>http://redbrain.co.uk</id>
      <link href="http://redbrain.co.uk/index.php/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://redbrain.co.uk" rel="alternate" type="text/html"/>
      <subtitle>Frustrated Software Developer</subtitle>
      <title>RedBrain @ $HOME : ~ $</title>
      <updated>2012-04-24T15:17:07Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/121-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/121-Gnome-3,-or-Gnome-Shell-issues.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>Gnome 3, or Gnome Shell issues</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I use the <a href="http://www.debian.org">Debian</a> operating system on several computers. My "main" computer (<em>Imladris</em>) runs Debian <em>unstable (Sid)</em> while the others mostly run on <em>testing</em>. I've been anticipating the Gnome 3 upgrade for some time, mainly because of the switch to <a href="http://live.gnome.org/GnomeShell">Gnome Shell</a> which is a completely new way of using the desktop. I had played with Gnome Shell a while ago, and was kind of impressed and worried by it in equal measure, I decided it wasn't ready for prime time so stopped using it. Naturally I assumed it would be much more impressive upon release; especially since Debian is not (by far) the first GNU/Linux distribution to include Shell.<br/><br/>

A while ago a big upgrade came through on imladris, and it was clear it was the Gnome 3 upgrade. I share this computer with three other users, two of which are children for whom I have implemented password less login (locally only). I can only say I think Gnome have significantly mishandled the upgrade. Here are some reasons why.<br/><br/>

<strong>Login is seriously slow</strong><br/><br/>

The display manager can take up to a whole minute to display the list of users (and often doesn't display the icons). There are some bug reports about a possible race condition that causes this, but seriously on a reasonable spec computer this is unacceptably slow. The same problems occurs when switching user.<br/><br/>

<strong>I couldn't login</strong><br/><br/>

My, admittedly old user account simply wouldn't launch a working desktop. I had to (at a command prompt) delete configuration directories to get my account working again.<br/><br/>

<strong>Absolutely zero support for the user in transition</strong><br/><br/>

So the average user does the upgrade and suddenly their entire desktop has changed. But when they first login there will be some guidance about where everything is gone... right? No. Having already used Shell, I knew, but I had to try and show everyone else how to use the machine again. It's not that spectacularly intuitive.<br/><br/>

<strong>Actually, a lot of functions have just gone</strong><br/><br/>

There's a huge removal of existing functionality. All your carefully tweaked panels: gone. All your applets: gone. And bizarrely often with <em>no working alternative</em>.<br/><br/>

<strong>Not friendly for children</strong><br/><br/>

It was possible to set up a Gnome 2 account to make it easy for kids. Low res graphics, and big panels with big select icons. The new paradigm completely ignores all that in favour of a sleek minimalist environment which is probably not that easy for young children to understand.<br/><br/>

<strong>Dictatorial design choices</strong><br/><br/>

It's been decided that we don't need minimise buttons or maximise buttons. It's been decided not to honour old desktop backgrounds. It's been decided not to honour existing resolution settings. It's been decided not to show anything on the Desktop (much to the confusion of many users). It's been decided we can't right click on the desktop.<br/><br/>

Some of this kind of nonsense is exactly why I don't like some other operating systems who believe they know what's best for you with Messianic Zeal (I'm looking at you Apple).<br/><br/>

All in all I find this transition very disappointing. There are lots of basic things no-one seems to have thought of, and years of desktop customisation have been swept away with an extraordinary arrogance. Don't get me wrong, I support the idea of trying a new Desktop paradigm: but, for instance, if people used to have applets on their desktop for the weather, or for system monitoring, it's because they needed it. Rolling out a new desktop that simply ignores these things in favour of how some people thing everyone should use their desktop is exasperating.<br/><br/>

I'm seriously hoping that Gnome Shell improves significantly and fast. I won't hold my breath.</div>
    </content>
    <updated>2011-10-30T19:35:36Z</updated>
    <category term="Free Software"/>
    <category term="review"/>
    <category term="debian"/>
    <category term="free software"/>
    <category term="Gnome"/>
    <category term="linux"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-03-05T20:17:08Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.mccartney.ie/wordpress/2011/10/17/246/</id>
    <link href="http://www.mccartney.ie/wordpress/2011/10/246/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=246" rel="alternate" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2011/10/246/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=246#comments" rel="replies" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2011/10/246/feed/atom/" rel="replies" type="application/atom+xml"/>
    <title xml:lang="en">State of the Java Onion</title>
    <summary xml:lang="en">I’m siting on my flight home from my first devopsdays in Goteborg, so firstly, many thanks to the awesome Patrick Debois, Ulf &amp; many many others that put the effort in to organising the conference, and everybody that turned up and made the event so worth while! My primary reason for going was to hear [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>I’m siting on my flight home from my first <a href="http://devopsdays.org/">devopsdays</a> in Goteborg, so firstly, many thanks to the awesome <a href="https://twitter.com/#!/patrickdebois">Patrick Debois</a>, <a href="http://twitter.com/#!/ulfmansson">Ulf</a> &amp; many many others that put the effort in to organising the conference, and everybody that turned up and made the event so worth while! My primary reason for going was to hear other people’s experience with configuration management and general ops deployment experience. (I’m in the process of adding puppet to our large legacy LAMP stack)</p>
<p>I kind of expected to be the fuddy duddy in the room (my group runs 4 SaaS services, our largest is a LAMP+JBoss SIP stack, a Solaris/Tomcat/Oracle/Coherence stack, a Linux/Tomcat/MySQL stack and a Apache/Weblogic/Cognos/Oracle stack, all hosted on our own hardware, how retro), so I was prepared to hear stories of how easy it was to deploy services built on modern interpreted stacks to the cloud, but I was pleasantly surprised to hear that plenty of people are using java application servers of all shapes &amp; sizes in production. I was less pleased to hear, but somewhat comforted, that everybody running java stacks in production is suffering pain somewhere (damn, no silver bullet to take home).</p>
<p> </p>
<h2>Deployment Pain</h2>
<p>Lots of people were good enough to share their success &amp; horror stories about how their current java stacks get into production, some of the recurring topics:</p>
<h3>Orchestration</h3>
<p>I think this deserved a talk or open space on it’s own, but <a href="https://twitter.com/#!/lusis">John E. Vincent</a> covered chunks of this in his great tools talk, and it came up in the “deploying java artifacts” open space.</p>
<p>I’ve got some take away reading to do about tools like Apache <a href="http://whirr.apache.org/">Whirr</a> &amp; <a href="http://www.urbancode.com/">UrbanCode’s</a> deployment &amp; configuration tools, but everybody has similar problems, needing a controlled, reliable method of automating the pre &amp; post deployment steps (traffic bleed off, deploy, service verification, data load, back in service) and managing the service availability during the deployment (or managing the stress on systems affected by the post deployment steps)</p>
<h3>Hot/Cold deployments?</h3>
<p>In general, hot deployments never seem to work as planned reliably, hot deployments are highly desirable for some services due to session requirements, but most people observed that hot deployments are prone to problems, leaking memory on many occasions, leading to hot deployments being something you can only get away with a few times, if at all depending on your memory overhead.<br/>
The guys from <a href="http://www.zeroturnaround.com">zeroturnaround</a> demoed their latest jrebel/liverebel tools. <a href="http://www.zeroturnaround.com/jrebel">JRebel</a> is a developer focused tool that allows a jar to be hot updated in a running JaS, for quicker iterative java development. <a href="http://www.zeroturnaround.com/liverebel">LiveRebel</a> is built on similar technology but aimed at use in production, to do hot updates (I’m not sure how this differs from the hot deployments of war &amp; ear etc, but that’s a gap in my JaS understanding)</p>
<h3>war/ear or exploded webapps directory?</h3>
<p>Currently we do both, and each have their pros &amp; cons, exploded webapp directories have a tendency to build up undocumented cruft essential to the smooth running, and war/ear deploys have a tendency to break your heart with environment issues <em>(what do you mean we need a new build to use a different database server!?)</em></p>
<p>For our next service going into production, we need to be able to vary the number of tomcats running on a physical host, each running on a different port, to support this we’ve extended our existing in_service hook, which in a our simpler environments just lets the load balancer know that this host is now good to take traffic, now it will build out the multiple tomcat CATALINA_HOME trees from scratch, going as far as grabbing the ant &amp; tomcat tarballs required (version numbers pulled from central config db, allowing per host overrides for piloting versions on individual machines), the aim here is 2 fold, have a clearly documented process for building a working CATALINA_HOME and be able to dynamically vary our tomcat count without lots of manual preparation required)</p>
<h3>Environment &amp; Configuration</h3>
<p>Lots of issues &amp; lots of different solutions to this one, best case, war file ships with 3 environments configured, default to production, over ride on the command line for other environments (down side, production passwords are in the artefacts &amp; therefore in source control).</p>
<p>There was some discussion over externalising the config, various methods (XML includes in comtext.xml/server.xml) and providing an standard-ish API to get/set properties (some commercial JaS already do this).</p>
<p>Horror stories included the deploy process having a start to explode the war, stop, remove the war, fix the config, restart. Another involved a post restart data load that took 30-40min before the tomcat was ready for traffic again.</p>
<p>General concencus was that involving dev in more of the ops deployment pain helped hilight areas that needed some improvement.</p>
<h3>Config/Properties APIs</h3>
<p>There was a little bit of discussion around APIs for managing configs in a running AS, some of the commercial AS already have this, but their was little support around the room for single vendor solutions, although most agreed that practically nobody changes AS after initial selection, the desire for a single tool was focused on having a single tool to gain momentum instead of fragmented tooling.</p>
<h3>No Ops in the Java Serverlet Steering committee?</h3>
<p><em>I missed the exact names of the standards &amp; people involved, I’ll update this if you have specifics</em><br/>
One of the participants in the java artifacts open space is on the Java Community Process mailing list, he pointed out that their was practically no one representing ops in the ML, some of the proposed changes for horrified ops people in the room.</p>
<h2>the platform/application split</h2>
<p>Some ardent supporters of deploying nothing but packages, people using FPM and other tools to build RPMs and other packages of the AS and another package for application.</p>
<p>Part of this also comes down to your orchestration tools and how you run your CM, <a href="http://ramon71.hyves.nl">Ramon</a> of Hyves hilighted that they don’t run puppet continuously, they run once a day, due to orchestration requirements and scale (they have 3,000+ application server in production).</p>
<p>Most people agree that the CM goes as far as preparing the AS for an application to be dropped in, although most of these environments ran a single AS per host.</p></div>
    </content>
    <updated>2011-10-16T23:14:37Z</updated>
    <published>2011-10-16T23:11:46Z</published>
    <category scheme="http://www.mccartney.ie/wordpress" term="Random Toad"/>
    <author>
      <name>simonm</name>
      <uri>http://www.mccartney.ie/blog</uri>
    </author>
    <source>
      <id>http://www.mccartney.ie/wordpress/feed/atom/</id>
      <link href="http://www.mccartney.ie/wordpress" rel="alternate" type="text/html"/>
      <link href="http://www.mccartney.ie/wordpress/feed/atom/" rel="self" type="application/atom+xml"/>
      <subtitle xml:lang="en">too boring to have a real blog</subtitle>
      <title xml:lang="en">ze blog of simon</title>
      <updated>2012-04-12T11:49:19Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.262</id>
    <link href="http://www.earth.li/~noodles/blog/2011/10/thanks-for-the-offer-but.html" rel="alternate" type="text/html"/>
    <title>Thanks for the offer, but...</title>
    <summary>I was due for another Google interview mail it seems. I have to say I wasn't expecting it, but this week I had a follow up to my polite mail from 6 months ago that said "No thanks, I'm not looking" asking if it was still the case. Normally I welcome this little bit of ego stroking; it's always nice to be wanted. Except that's not really the case, is it? It's an invitation to interview for something, not any indication that you've done more than tick some initial boxes. Google mails inevitably ask me if I'd like to work in SRE. It's always SRE. No one ever emails and asks if I want to work on self-replicating nanobots that will roam Mars searching for the perfect spot to build a beach house. And that's where things fall down. If someone currently has a job, then emailing them out of the blue to ask if they want to come and interview for something vague is hoping that they're either looking, and just haven't come to you yet, or not looking but unhappy enough with their current role that all they needed to start was an email asking them to submit a recent CV. For the former, if you're Google, do you really think that person doesn't know where to find you? For the latter, you're being quite presumptuous, aren't you? The act of updating my CV my be some effort (actually it's usually not, because the stuff that's not on it is the stuff I can't talk about because it's not released yet, or stuff that's specific and thus wouldn't go on a CV for a vague job spec). Even if it's not the act of interviewing is potentially a waste of time for both of us, if the role isn't clear. One argument used is that people will be placed according to the skills they show during the interview process. That's fine from the employers point of view, but if you're actively trying to get some interest from people who are gainfully employed you really need to grab their attention somehow. I can't remember the last time I had an unsolicited email interview offer that actually wowed me, or indeed even showed more than a passing sign of tailoring a spec to my profile. When I was running Black Cat I made a point of always replying to unsolicited CVs. How polite I was depended on how the covering emails were worded (a Word document with nothing else was likely to get short shrift, something well targeted in a Linux friendly format would normally get some comment about how we weren't hiring and were unlikely to be, but if that changed it would be mentioned on the website), but I felt people deserved a reply - I have been disappointed by not receiving responses myself to what I considered well targeted job inquiries. So far I've so far taken the same approach with mails from corporate recruiters (less so with recruiters that are associated with recruitment firms, rather than directly with the companies they are hiring for), but I'm starting to feel like changing that stance. Candidates are told to tailor CVs to the role being applied for, provide a decent cover letter, and in general make companies want to talk to them. Companies who are sending out recruitment emails should be held to the same standard. Even assuming you do a basic phone screen first, I can probably expect to need to take a day off work assuming that goes well. You need to convince me I can justify that before I'm going to feel like engaging at all. (And if I'm honest, based on what I've seen so far, it's unlikely to happen. All of the things I've considered have come from conversations with people I know directly about companies they own or work for, never some random contact via email. I try hard not to think of recruitment mail as spam, but I can how that line of thought follows through.) I should apologize to Google here. They got mentioned as an example, but I don't think they're particularly bad. I did interview with them at one point, and made the decision not to continue that process after deciding a different, more certain, path was better for me. So I've displayed interest. And in response to my reply today of "I know where to find you, so please assume I'll do so if I change my mind." they've said they'll make a note on their records....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>I was due for another Google interview mail it seems. I have to say I wasn't expecting it, but this week I had a follow up to my polite mail from 6 months ago that said "No thanks, I'm not looking" asking if it was still the case.</p>

<p>Normally I welcome this little bit of ego stroking; it's always nice to be wanted. Except that's not really the case, is it? It's an invitation to interview for something, not any indication that you've done more than tick some initial boxes. Google mails inevitably ask me if I'd like to work in SRE. It's always SRE. No one ever emails and asks if I want to work on self-replicating nanobots that will roam Mars searching for the perfect spot to build a beach house.</p>

<p>And that's where things fall down. If someone currently has a job, then emailing them out of the blue to ask if they want to come and interview for something vague is hoping that they're either looking, and just haven't come to you yet, or not looking but unhappy enough with their current role that all they needed to start was an email asking them to submit a recent CV.</p>

<p>For the former, if you're Google, do you really think that person doesn't know where to find you? For the latter, you're being quite presumptuous, aren't you? The act of updating my CV my be some effort (actually it's usually not, because the stuff that's not on it is the stuff I can't talk about because it's not released yet, or stuff that's specific and thus wouldn't go on a CV for a vague job spec). Even if it's not the act of interviewing is potentially a waste of time for both of us, if the role isn't clear.</p>

<p>One argument used is that people will be placed according to the skills they show during the interview process. That's fine from the employers point of view, but if you're actively trying to get some interest from people who are gainfully employed you really need to grab their attention somehow. I can't remember the last time I had an unsolicited email interview offer that actually wowed me, or indeed even showed more than a passing sign of tailoring a spec to my profile.</p>

<p>When I was running Black Cat I made a point of always replying to unsolicited CVs. How polite I was depended on how the covering emails were worded (a Word document with nothing else was likely to get short shrift, something well targeted in a Linux friendly format would normally get some comment about how we weren't hiring and were unlikely to be, but if that changed it would be mentioned on the website), but I felt people deserved a reply - I have been disappointed by not receiving responses myself to what I considered well targeted job inquiries.</p>

<p>So far I've so far taken the same approach with mails from corporate recruiters (less so with recruiters that are associated with recruitment firms, rather than directly with the companies they are hiring for), but I'm starting to feel like changing that stance. Candidates are told to tailor CVs to the role being applied for, provide a decent cover letter, and in general make companies want to talk to them. Companies who are sending out recruitment emails should be held to the same standard. Even assuming you do a basic phone screen first, I can probably expect to need to take a day off work assuming that goes well. You need to convince me I can justify that before I'm going to feel like engaging at all.</p>

<p>(And if I'm honest, based on what I've seen so far, it's unlikely to happen. All of the things I've considered have come from conversations with people I know directly about companies they own or work for, never some random contact via email. I try hard not to think of recruitment mail as spam, but I can how that line of thought follows through.)</p>

<p>I should apologize to Google here. They got mentioned as an example, but I don't think they're particularly bad. I did interview with them at one point, and made the decision not to continue that process after deciding a different, more certain, path was better for me. So I've displayed interest. And in response to my reply today of "I know where to find you, so please assume I'll do so if I change my mind." they've said they'll make a note on their records.</p></div>
    </content>
    <updated>2011-10-05T06:02:36Z</updated>
    <published>2011-10-05T05:55:20Z</published>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.mccartney.ie/wordpress/?p=239</id>
    <link href="http://www.mccartney.ie/wordpress/2011/09/windows-7-essentials/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=windows-7-essentials" rel="alternate" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2011/09/windows-7-essentials/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=windows-7-essentials#comments" rel="replies" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2011/09/windows-7-essentials/feed/atom/" rel="replies" type="application/atom+xml"/>
    <title xml:lang="en">Windows 7 Essentials</title>
    <summary xml:lang="en">I’ve just rebuilt my laptop (a combination of McAfee Whole Disk Encryption slowing the current build down &amp; a Crucial ReadSSD 128Gb that was too cheap to resist forced me to, honest guv), so it’s time to refresh &amp; re-document the essential software list: Windows 7 Professional 64bit VistaSwitcher (better alt-tab) WindowSpace (snap windows to [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>I’ve just rebuilt my laptop (a combination of McAfee Whole Disk Encryption slowing the current build down &amp; a Crucial ReadSSD 128Gb that was too cheap to resist forced me to, honest guv), so it’s time to refresh &amp; re-document the essential software list:</p>
<ol>
<li>Windows 7 Professional 64bit</li>
<li><a href="http://www.ntwind.com/software/vistaswitcher.html">VistaSwitcher</a> (better alt-tab)</li>
<li><a href="http://www.ntwind.com/software/windowspace/download.html">WindowSpace</a> (snap windows to screen edges &amp; other windows, extended keyboard support for moving/resizing)</li>
<li><a href="http://launchy.net/">Launchy</a></li>
<li><a href="http://www.mozilla.org/en-GB/thunderbird/">Thunderbird</a>6
<ol>
<li><a href="https://addons.mozilla.org/en-US/thunderbird/addon/lightning/">Lightning</a> (required for work calendars)</li>
<li>OBET</li>
<li><a href="https://addons.mozilla.org/en-US/thunderbird/addon/provider-for-google-calendar/">Provider for Google Calendar</a> (so I can see my personal calendar)</li>
<li><a href="https://addons.mozilla.org/en-US/thunderbird/addon/google-contacts/">Google Contacts</a> (sync sync sync)</li>
<li><a href="https://addons.mozilla.org/en-us/thunderbird/addon/mail-redirect/">Mail Redirect</a> (bounce/redirect email to a ticketing system)</li>
<li><a href="https://addons.mozilla.org/en-us/thunderbird/addon/nostalgy/">Nostalgy</a> (move/copy mail to different folders from the keyboard)</li>
<li><a href="https://addons.mozilla.org/en-us/thunderbird/addon/phoenity-shredder/">Phoenity Shredder</a> or <a href="https://addons.mozilla.org/en-us/thunderbird/addon/littlebird-for-thunderbird/">Littlebird</a> (the default theme is a bit slow, these are lighter and quicker)</li>
<li>Hacked <a href="https://addons.mozilla.org/en-US/thunderbird/addon/blunderdelay/">BlunderDelay</a> &amp; mailnews.sendInBackground=true</li>
</ol>
</li>
<li><a href="http://www.google.com/chrome">Chrome</a> + <a href="http://www.xmarks.com/">Xmarks</a></li>
<li><a href="http://www.xmarks.com/">Xmarks for IE</a></li>
<li><a href="http://www.evernote.com/">Evernote</a></li>
<li><a href="http://www.dropbox.com/">Dropbox</a> &amp; <a href="http://wiki.dropbox.com/DropboxAddons/DropboxFolderSync">Dropbox Folder Sync</a></li>
<li><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">PuTTY</a> (remember to export HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions)</li>
<li><a href="http://winscp.net/eng/index.php">WinSCP</a></li>
<li><a href="http://www.pidgin.im/">Pidgin</a> + <a href="http://www.cypherpunks.ca/otr/binaries/windows/pidgin-otr-3.2.0-1.exe">OTR</a></li>
<li><a href="http://www.vim.org/download.php#pc">gVim</a></li>
<li>Cisco AnyConnect (main work VPN)</li>
<li>Cisco VPNClient (backup &amp; OOB VPN)</li>
</ol>
<p>I think that’s it for now.</p></div>
    </content>
    <updated>2011-09-12T12:14:12Z</updated>
    <published>2011-09-12T10:24:37Z</published>
    <category scheme="http://www.mccartney.ie/wordpress" term="Bright Ideas"/>
    <category scheme="http://www.mccartney.ie/wordpress" term="Random Toad"/>
    <author>
      <name>simonm</name>
      <uri>http://www.mccartney.ie/blog</uri>
    </author>
    <source>
      <id>http://www.mccartney.ie/wordpress/feed/atom/</id>
      <link href="http://www.mccartney.ie/wordpress" rel="alternate" type="text/html"/>
      <link href="http://www.mccartney.ie/wordpress/feed/atom/" rel="self" type="application/atom+xml"/>
      <subtitle xml:lang="en">too boring to have a real blog</subtitle>
      <title xml:lang="en">ze blog of simon</title>
      <updated>2012-04-12T11:49:19Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:pgregg.com,2011:/blog//2.347</id>
    <link href="http://pgregg.com/blog/2011/08/amusing-true-near-death-experience.html" rel="alternate" type="text/html"/>
    <title>Amusing, True Near Death Experience.</title>
    <summary>Those who know me will know that there have been two important events occurring in my life this week. 1) Tiling my kitchen, and 2) Trying to buy a HP TouchPad.As part of tiling the kitchen, significant other wanted to replace all the standard white wall sockets with Stainless Steel ones to match the rest of the kitchen colour scheme. I was safely over half way through this task, having disconnected the socket mains supply, when a van pulled up bearing HP TouchPad goodness. Thus the next 30 minutes of my life was accounted for.Upon returning to the kitchen tasks...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Those who know me will know that there have been two important events occurring in my life this week. 1) Tiling my kitchen, and 2) Trying to buy a HP TouchPad.<br/><br/>As part of tiling the kitchen, significant other wanted to replace all the standard white wall sockets with Stainless Steel ones to match the rest of the kitchen colour scheme. I was safely over half way through this task, having disconnected the socket mains supply, when a van pulled up bearing HP TouchPad goodness. Thus the next 30 minutes of my life was accounted for.<br/><br/>Upon returning to the kitchen tasks I came to the Cooker 40A switch. I disconnected the ring main from the switch and proceeded to move the wires so that I kept the supply and load pairs apart when BUZZZZZZ and 240 Volts of high energy goodness shot through my hand and up my arm.<br/><br/>Yes folks, TouchPad caused me to forget to flip the cooker ring circuit in the fuse box.<br/><br/>Cue me jumping back, dropping tools and collapsing to the floor in a bout of Arrrrgh.<br/><br/>Wife said "Stop it, you'll scare the kids.".<br/><br/>Kids run in asking what happened and wife explains that Daddy electrocuted himself.<br/><br/>Six year old Lauren asked "Could you see his bones?".<br/><br/></div>
    </content>
    <updated>2011-08-25T23:02:50Z</updated>
    <published>2011-08-25T22:49:59Z</published>
    <author>
      <name>Paul Gregg</name>
      <uri>http://pgregg.com</uri>
    </author>
    <source>
      <id>tag:pgregg.com,2009-02-01:/blog//2</id>
      <link href="http://pgregg.com/blog/" rel="alternate" type="text/html"/>
      <link href="http://pgregg.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <title>Plop in the Ocean</title>
      <updated>2012-03-27T22:49:29Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://martian.org/marty/?p=236</id>
    <link href="http://martian.org/marty/2011/03/17/beam-me-up-scotty/" rel="alternate" type="text/html"/>
    <link href="http://martian.org/marty/2011/03/17/beam-me-up-scotty/#comments" rel="replies" type="text/html"/>
    <link href="http://martian.org/marty/2011/03/17/beam-me-up-scotty/feed/atom/" rel="replies" type="application/atom+xml"/>
    <title xml:lang="en">Beam me up, Scotty.</title>
    <summary xml:lang="en">Based on the messages we have received from family and friends, I’m sure that if Star Trek’s transporter technology worked they would without hesitation beam us out of Tokyo. But despite the best efforts of many so-called “news” media, I don’t feel afraid to be in Tokyo. I’m not unnamed Starfleet crewman #2. With the [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>Based on the messages we have received from family and friends, I’m sure that if Star Trek’s transporter technology worked they would without hesitation beam us out of Tokyo.</p>

<p>But despite the best efforts of many so-called “news” media, I don’t feel afraid to be in Tokyo.  I’m not unnamed Starfleet crewman #2. With the tricorder information I have here I am confident that my continued exploration of Tokyo is much safer than being dematerialized, where I would risk being trapped in a pattern buffer for 70 years, or cloned by inadvertent reflection off the ionosphere.</p>

<p>I’m glad to say that the radiation threatening my life, just like the transporter, does not yet exist.</p></div>
    </content>
    <updated>2011-08-06T13:59:44Z</updated>
    <published>2011-03-17T14:38:41Z</published>
    <category scheme="http://martian.org/marty" term="Uncategorized"/>
    <category scheme="http://martian.org/marty" term="quake"/>
    <author>
      <name>Marty</name>
      <uri>http://martian.org/marty/wp-atom.php</uri>
    </author>
    <source>
      <id>http://martian.org/marty/feed/atom/</id>
      <link href="http://martian.org/marty" rel="alternate" type="text/html"/>
      <link href="http://martian.org/marty/feed/atom/" rel="self" type="application/atom+xml"/>
      <subtitle xml:lang="en">Marty was here!</subtitle>
      <title xml:lang="en">バカな火星人</title>
      <updated>2012-01-11T13:16:06Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/120-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/120-Multi-User-Sound-in-GNULinux.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>Multi User Sound in GNU/Linux</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">For some years now, basically since Aimee became old enough to use a computer, I have had a need for decent multi-user sound. Specifically I would often have intricate work open in multiple work spaces on my desktop, and Aimee would want to do some artwork.<br/><br/>

I guess Aimee was about two when she started using my computer a fair bit, and I immediately had a separate account for her with lower resolution graphics, easier menus, simple shortcuts and the like. I also had a graphics tablet for her, which she mastered very quickly. Another important reason to have a separate account was that if stuff got really badly messed up I could just nuke the account and start again, and she couldn't really hurt my configuration.<br/><br/>

As you would imagine, lots of the excellent free software for children, like <a href="http://gcompris.net/">GCompris</a>, and <a href="http://tuxpaint.org/">Tuxpaint</a> is very rich in its sound effects, and sometimes the sound is not just desirable, but essential for the activities. So a very annoying persistent problem has been that, once in a while, something in the sound stack in my login would stop Aimee's sound from working.<br/><br/>

Now I share my main PC with two other people, Tamsin and Aimee, and soon Matilda too, so this recurrent problem is more of an issue, it's also very hard to nail down. Despite protests to the contrary the default ALSA setup <a href="http://lists.debian.org/debian-multimedia/2011/01/msg00015.html">still has this problem</a>; <a href="http://www.freedesktop.org/wiki/Software/ConsoleKit">ConsoleKit</a> on its own doesn't seem to get it quite right. I tried <a href="http://www.pulseaudio.org/">PulseAudio</a> for a while, and generally it was an improvement, but the problem did still occur sometimes. I even made sure all the users were members of the right groups including <em>pulse-rt</em>.<br/><br/>

Then I found this entry in the <a href="http://www.pulseaudio.org/wiki/FAQ">PulseAudio FAQ</a>.<br/><br/>

<blockquote>
<strong>Sound doesn't work when switching users</strong><br/><br/>

PulseAudio works with a single user, but when an additional user logs in (fast user switching), sound/audio does not work for the additional user.<br/><br/>

Check that no users are part of the "audio" group.<br/><br/>

In simple setups (e.g. singe user, without PulseAudio), users must be a member of the "audio" group to access the sound devices (/dev/snd/* (which have group "audio" write permissions)). Switching users will not automatically stop programs using those sound devices though, so those sound devices will not be accessible to a new (faster user switched) user's programs.<br/><br/>

By removing all users from the "audio" group (the PulseAudio server still runs in the "audio" group), PulseAudio is able manage access to sound devices (/dev/snd/*) amongst multiple users with the help of ConsoleKit.<br/><br/> 
</blockquote><br/><br/>

It would never have occurred to me to remove the users from the <em>audio</em> group, but doing so seems to have solved the problem. I almost don't want to say that, because every "solution" up to now has been partial, but so far no problems, so maybe this will be the fix.</div>
    </content>
    <updated>2011-08-04T08:42:28Z</updated>
    <category term="Free Software"/>
    <category term="debian"/>
    <category term="free software"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-03-05T20:17:08Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/119-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/119-Rooting-and-Upgrading-the-HTC-Desire.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>Rooting and Upgrading the HTC Desire</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>I have been asked by a few friends to document how I did this. All the information is derived from elsewhere and its currency may be limited. Trying to root and flash phones is potentially dangerous. You need to take your time and consider what you are doing carefully. If you break your phone, you own the pieces. This worked for me, but I can make no guarantees. You get the idea.</strong><br/><br/>

<strong>Read the whole article before you start please.</strong><br/><br/>

The HTC Desire is a lovely phone, but it has two pretty annoying flaws. First of all the battery life isn't great, but that's not what this article is about, and secondly, the internal memory is very limited. I thought when I got the phone that Froyo would save me because it had apps2sd. Apps2sd allows you to move applications from the internal memory to the SD card, but it has some serious limitations:

<ul>
  <li>apps with widgets and some other bits won't work properly from SD</li>
  <li>many apps only partially move to SD</li>
  <li>some huge apps won't move at all (I'm looking at you Google).</li>
</ul><br/><br/>

The ROM images I was getting, from Google to HTC to O2 were out of date, and they clearly didn't even care about fixing some significant issues (like the broken authentication in the HTC Peep program). This wouldn't matter because you could install a decent twitter client if you had the memory... oh... you get the idea. I was rapidly having to remove apps hand over fist with every upgrade, and my Daughter was complaining about their absence. So I decided to sort it out.<br/><br/>

Some ROM images have the rather different data2sd. This allows you to treat part of your SD card as the internal memory of the phone. This makes a crucial difference, no messing about partially moving to "SD", but allowing a large amount of memory to be treated as internal.<br/><br/>

<strong>Step Zero: You will need</strong><br/><br/>

<ol>
<li>This process will take some time, during which you won't really be able to use your phone. Make sure you have time. If it works you will have to do some work setting some things back up, it will to some extent be like having a new phone; some work can be done to minimise this. See below.</li>
<li>For this to work you will need a half decent SD card. Mine is a class 6, 8G card. The class information is written in the card in a number with a circle on it, and has to do with the speed of the card. Class 2 will apparently be painful. Class 4 is apparently fine. But I already had class 6. Get a decent card.</li>
<li>Some means of mounting the card on your PC, usually an SD to micro SD adapter.</li>
<li>Possibly a blank CD, and some spare Hard Disc space for backups.</li>
</ol>

<strong>Step One: Backup Your Phone.... Really</strong><br/><br/>

Even if this all works it will be like having a new phone to some extent, so expect to do some setup again. If you don't have time, don't start. Backup your phone. I had Backup PRO which I used to backup everything. I did this to the SD card this time, but actually, I should have done it online instead (or as well). I'll explain why later. Backup PRO wasn't free, but it was cheap and has been more than worth it for me. I've used it several times.<br/><br/>

Now backup your SD card. Either mount it as a drive or take it out of the phone and put it in your adapter or whatever. Copy <strong>everything</strong> to your PC as files (in the past I've used dd, but this is not needed).<br/><br/>

<strong>Step Two: Root Your Phone</strong><br/><br/>

At some points in the past this has been very tricky, but this was easy this time. I went to the <a href="http://unrevoked.com/">Unrevoked</a> website, and downloaded the software to flash the phone. Follow the instructions carefully and <strong>read all the guidance</strong>. Click on the Desire, and your OS, and download what's needed (some extra drivers for Windows please note). I was using Debian GNU/Linux at the time.<br/><br/>

Turn on "USB Debugging" (Menu &gt;&gt; Settings &gt;&gt; Applications &gt;&gt; Development) on the phone, and then plug the phone in (leave it as charge only when it prompts you). Run the software, wait, and in a few minutes your phone should reboot with ClockworkMod and root access. Note some people suggest you need to run the program on your PC as root, I did need to do so.<br/><br/>

<strong>Step Three: Check you can access recover mode</strong><br/><br/>

For some reason I couldn't do this with the volume buttons on power on, so I did the following. Power off the phone. Hold the "back" (hardware button) down. Now press power on. You will get to the Bootloader screen. By using the power button you can run the Bootloader. This brings another menu and (after some patience) allows you to move up and down with the volume buttons until you pick "Recovery". Now press the power button again. When the phone reboots it will be into recovery mode. Peruse the options, see that you can navigate with the optical trackball and the back button.<br/><br/>

<strong>Step Four: Possibly install a ROM manager</strong><br/><br/>

Now you can pick an alternative ROM of your choice. But this article following on below is specific to the Supernova ROM.<br/><br/>

I installed ROM Manager (and it's cheap but not free upgrade) to allow me to download ROMs and flash them, and I flashed Cyanogen... but I didn't like it. I did it for old time's sake and much as I tried to bring myself to like it I found I missed the HTC Sense stuff (that surprised me). You can experiment with all of this. I strongly recommend you opt to wipe user data on a major ROM change, the phone will probably hang if you don't when you reboot, and you'll have to get into recovery mode anyway and do it there.<br/><br/>

<strong>Step Five: Get the ROM files</strong><br/><br/>

The ROM I went for was <a href="http://supernova.droidzone.in/">Supernova</a> since essentially it's a good, HTC Sense oriented, Gingerbread based ROM with the data2sd extra. In other words, you get newer Android goodies with much the same user experience, but don't have to worry so much about the memory. You need to sign up to the website and then go to the download links and get the ROM and data2sd installer. Copy them to your hard disc for now.<br/><br/>

<strong>Step Six: Prepare your SD card</strong><br/><br/>

For the data2sd to work, you need to prepare your SD card with a FAT32 partition (for general use) followed by an ext4 partition (for use as internal memory). Don't panic if you're not a Linux user. There is a way to do this for you.<br/><br/>

In Debian, I installed gparted. I then put the SD card in its adapter and in the machine. The machine may mount it automatically... make sure you unmount it before proceeding. Run gparted and follow on below.<br/><br/>

If you are using another OS, get the <a href="http://gparted.sourceforge.net/livecd.php">GParted</a> live CD.<br/><br/>

Follow these <a href="http://supernova.droidzone.in/supernova-rom-home/resources/how-to-partition-for-starburst/">instructions</a> carefully.<br/><br/>

<strong>Make sure the GParted is accessing the correct device in the pull down before you start, make sure the disc space in front of you looks correct. YOU DO NOT WANT TO ACCIDENTALLY REPARTITION YOUR COMPUTER'S HARD DISC. TAKE YOUR TIME.</strong> Personally I went for about 7000 MB on FAT32 and the remainder for my ext4 partition.<br/><br/>

Get out of GParted, back into your regular environment (close GParted, reboot or whatever). Now copy your SD card backup (remember that, right?) back onto the card. Finally copy the two ZIP files from the Supernova website (the ROM and data2sd installer) into the root of the SD card. Dismount the card and put it in your phone.<br/><br/>

<strong>Step Seven: Install the ROM and data2sd bits</strong><br/><br/>

I recommend you read and follow <a href="http://supernova.droidzone.in/category/installation/">the official instructions</a> carefully from here in. Note I didn't bother with the radio code because I was confident it was already very recent. <strong>Follow the instructions very carefully to be sure the data2sd will work correctly... note there are a few very specific things you must do and must not do in between boots.</strong>. Basically you need to use reovey mode to do a factory reset, navigate to the ROM ZIP and install, reboot, change a few settings, back to recovery, navigate to the data2sd ZIP, install, reboot.<br/><br/>

<strong>Step Eight: Restore as needed</strong><br/><br/>

You should now have loads of space in internal memory. Check in Menu &gt;&gt; Settings &gt;&gt; Applications &gt;&gt; Storage.<br/><br/>

I then put in my Google credentials and restored everything after downloading Backup PRO again. Because my backup was on the SD and it was copying to SD, it was slow. I recommend using the online option. Be patient, if you are restoring call logs and SMS messages it will take time, do not navigate away. Wait for it to finish and immediately restart. Think twice about copying "settings", I always worry it will cause the newer ROM to cease. Your mileage may vary.</div>
    </content>
    <updated>2011-07-11T08:23:00Z</updated>
    <category term="hardware"/>
    <category term="android"/>
    <category term="linux"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-03-05T20:17:08Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.261</id>
    <link href="http://www.earth.li/~noodles/blog/2011/06/chromium.html" rel="alternate" type="text/html"/>
    <title>Chromium</title>
    <summary>The thing that finally made me install Chromium? The refusal of Google+ to work with Firefox 3.5 (from Debian/testing). Well played Google. Well played.Update: Please note I didn't say "switch to Chromium", it was just installing it at all. I've also pulled in FF 5 from experimental which seems to be working nicely - I hope that it can make its way into unstable and thus to testing soon....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">The thing that finally made me install Chromium? The refusal of Google+ to work with Firefox 3.5 (from Debian/testing). Well played Google. Well played.<br/><br/>Update: Please note I didn't say "switch to Chromium", it was just installing it at all. I've also pulled in FF 5 from experimental which seems to be working nicely - I hope that it can make its way into unstable and thus to testing soon.<br/></div>
    </content>
    <updated>2011-07-02T03:16:06Z</updated>
    <published>2011-07-01T04:27:02Z</published>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/118-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/118-Tau-versus-Pi.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>Tau versus Pi</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Today, two of my friends independently sent me a story about <a href="http://www.bbc.co.uk/news/science-environment-13906169">Tau Day</a> which I had hitherto never heard of. One of them asked for me comment about whether this had any point to it. At first I thought the article was just mathematical trolling, thought about it a bit more, thought there might be a real point to it, thought some more and concluded it seemed rather silly.<br/><br/>

The argument is about whether the mathematical constant pi, would be better being replaced throughout mathematics with an alternative tau, which is just twice pi (in other words, replacing pi everywhere with a half of this tau). It's suggested that formulae with tau will be more simple.<br/><br/>

<strong>Basic Geometry</strong><br/><br/>

So this is all about the fact that pi was defined historically as the ratio of the circumference to the diameter of the circle, a very old classical reference stemming back to Greek geometry (incidentally pi is also known as Archimedes' constant since he attempted to calculate an approximation to it). Once upon a time, the formula used in schools would have been:<br/><br/>

<img alt="C = \pi D" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=C%20%3D%20%5Cpi%20D" title="C = \pi D"/><br/><br/>

related the circumference <em>C</em> to the diameter <em>D</em>. But generally now, we use the radius <em>r</em> rather than the diameter. And so that gives us (for circumference and area):<br/><br/>

<img alt="C = 2 \pi r \quad ; \quad A = \pi r^2" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=C%20%3D%202%20%5Cpi%20r%20%5Cquad%20%3B%20%5Cquad%20A%20%3D%20%5Cpi%20r%5E2" title="C = 2 \pi r \quad ; \quad A = \pi r^2"/><br/><br/>

The argument for tau begins by observing the extra 2 in the first formula, and wouldn't be nicer if we just defined tau to be twice pi so that these formula would be so much nicer. Would they?<br/><br/>

<img alt="C = \tau r ; \quad A = \frac{\tau}{2} r^2" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=C%20%3D%20%5Ctau%20r%20%3B%20%5Cquad%20A%20%3D%20%5Cfrac%7B%5Ctau%7D%7B2%7D%20r%5E2" title="C = \tau r ; \quad A = \frac{\tau}{2} r^2"/><br/><br/>

Set aside for the moment the fact that pi is probably the most recognisable Greek letter in the world that speaks languages based on the Latin alphabet (aside from those that are, or appear to be the same). Set aside the fact that tau is used for other specific purposes in much of modern Mathematics, and in particular in the discipline of Topology. The first formula might be nicer, but the second one is probably worse, and by enough to make the improvement of the first rather parlous. OK. But the article talks about this being the problem behind radians, so maybe that's where we get the big gain. Let's explore that.<br/><br/>

<strong>Radians instead of Degrees</strong><br/><br/>

There's nothing particularly clever about using degrees. It's an arbitrary choice (360 degrees in a circle) that probably owes a lot to do with <a href="http://en.wikipedia.org/wiki/Degree_%28angle%29#History">historical factors</a> in one civilisation. It <em>is</em> true that when you start to do some significant mathematics with degrees, it starts to look quite unwieldy. The classic two formulae to consider are the length of an arc and area of a sector.<br/><br/>

Suppose we have a circle of radius <em>r</em> and we want to work out the length of an <em>arc</em> (a part of the circumference) where the angle subtending this arc is <em>theta</em> degrees (don't panic, no more Greek to come). Then in degrees the formula will be:<br/><br/>

<img alt="s = \frac{\theta}{360} \times 2 \pi r = \frac{2 \pi r \theta}{360}" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=s%20%3D%20%5Cfrac%7B%5Ctheta%7D%7B360%7D%20%5Ctimes%202%20%5Cpi%20r%20%3D%20%5Cfrac%7B2%20%5Cpi%20r%20%5Ctheta%7D%7B360%7D" title="s = \frac{\theta}{360} \times 2 \pi r = \frac{2 \pi r \theta}{360}"/><br/><br/>

The reason why is that the fraction on the left is the fraction of the relevant angle out of all the angle available, multiplied by the total arc length available (the whole circumference). The formula is not beautiful, and the similar formula for sector area is also a big ugly.<br/><br/>

<img alt="A = \frac{\theta}{360} \times \pi r^2 = \frac{\pi r^2 \theta}{360}" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=A%20%3D%20%5Cfrac%7B%5Ctheta%7D%7B360%7D%20%5Ctimes%20%5Cpi%20r%5E2%20%3D%20%5Cfrac%7B%5Cpi%20r%5E2%20%5Ctheta%7D%7B360%7D" title="A = \frac{\theta}{360} \times \pi r^2 = \frac{\pi r^2 \theta}{360}"/><br/><br/>

You will note that in both cases there is a 360 on the bottom of the fraction and a 2 pi on the top. This looks like nature's way of trying to tell us something. What would happen if we used an unit of angle so that, instead of having 360 of them in a circle, we had 2 pi of them in a circle (proponents of tau will just say tau of them in a circle)? The formula, derived using the same logic, become much nicer.<br/><br/>

<img alt=" s = \frac{\theta}{2 \pi} \times 2 \pi r = r \theta " src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=%20s%20%3D%20%5Cfrac%7B%5Ctheta%7D%7B2%20%5Cpi%7D%20%5Ctimes%202%20%5Cpi%20r%20%3D%20r%20%5Ctheta%20" title=" s = \frac{\theta}{2 \pi} \times 2 \pi r = r \theta "/><br/>
<img alt=" A = \frac{\theta}{2 \pi} \times \pi r^2 = \frac{1}{2} r^2 \theta" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=%20A%20%3D%20%5Cfrac%7B%5Ctheta%7D%7B2%20%5Cpi%7D%20%5Ctimes%20%5Cpi%20r%5E2%20%3D%20%5Cfrac%7B1%7D%7B2%7D%20r%5E2%20%5Ctheta" title=" A = \frac{\theta}{2 \pi} \times \pi r^2 = \frac{1}{2} r^2 \theta"/><br/><br/>

So we get<br/><br/>
<img alt=" s = r \theta \quad ; \quad A = \frac{1}{2} r^2 \theta" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=%20s%20%3D%20r%20%5Ctheta%20%5Cquad%20%3B%20%5Cquad%20A%20%3D%20%5Cfrac%7B1%7D%7B2%7D%20r%5E2%20%5Ctheta" title=" s = r \theta \quad ; \quad A = \frac{1}{2} r^2 \theta"/><br/><br/>


Now these are beautiful, elegant formulae, and the underpinning of why radians (the unit of angle we are talking about here) are used instead of degrees in much of higher mathematics, the formula are much simpler (particularly true when using calculus). Also, look at that first formula, it has all the resonance of <em>F = ma</em>. 1 unit of arc length is found in a circle of radius 1 unit with an angle of 1 radian. So beautiful is this that it used as the definition of the radian in many books. So far, so good. Did we really need tau to produce these? Does it matter that it it tau and not pi that cancels out? I can't see why.<br/><br/>



<strong>Fourier Series</strong><br/><br/>

Another example owes to the <a href="http://en.wikipedia.org/wiki/Fourier_series">work of Fourier</a>, who showed that repeating patterns can be broken into sums of the most basic repeating functions, the ones that are most simple are the sine and cosine functions. These are used to model waves of any sort which are of course ubiquitous in nature. It turns out you can build up more odd shapes like triangular and square waves out of these sinusoidal ones. Being able to do this is important in many aspects of Science and Engineering, and eventually this theory leads to all sorts of cool stuff like the way data is compressed in photos and more.<br/><br/>

<div class="serendipity_imageComment_center" style="width: 388px;"><div class="serendipity_imageComment_img"><img alt="The graphs of Sine and Cosine" class="serendipity_image_center" height="288" src="http://www.piglets.org/serendipity/uploads/sincos2.png" width="388"/></div><div class="serendipity_imageComment_txt">The graphs of Sine and Cosine (sin t and cos t)</div></div><br/><br/>

This graph is labelled in degrees, so you can imagine if we change it to radians as we should then the 360 would become 2 pi. This is where again, proponents of tau will argue that replacing the 360 with a simple tau makes things easier. And it does, if all you want to do is to label that diagram. But the foundation of Fourier theory is building functions up in combinations of these:<br/><br/>

<img alt=" 1, \sin t, \cos t, \sin 2t, \cos 2t, \sin 3t, \cos 3t, \ldots " src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=%201%2C%20%5Csin%20t%2C%20%5Ccos%20t%2C%20%5Csin%202t%2C%20%5Ccos%202t%2C%20%5Csin%203t%2C%20%5Ccos%203t%2C%20%5Cldots%20" title=" 1, \sin t, \cos t, \sin 2t, \cos 2t, \sin 3t, \cos 3t, \ldots "/><br/><br/>

The formulae you need to be able to deal with to do this are (among others):<br/><br/>

<img alt=" a_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(t) \cos nt dt \quad ; \quad  b_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(t) \sin nt dt" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=%20a_n%20%3D%20%5Cfrac%7B1%7D%7B%5Cpi%7D%20%5Cint_%7B-%5Cpi%7D%5E%7B%5Cpi%7D%20f%28t%29%20%5Ccos%20nt%20dt%20%5Cquad%20%3B%20%5Cquad%20%20b_n%20%3D%20%5Cfrac%7B1%7D%7B%5Cpi%7D%20%5Cint_%7B-%5Cpi%7D%5E%7B%5Cpi%7D%20f%28t%29%20%5Csin%20nt%20dt" title=" a_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(t) \cos nt dt \quad ; \quad  b_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(t) \sin nt dt"/><br/><br/>

which I grant, strike fear into the hearts of many. But they don't look nicer with tau (and are a little more awkward):<br/><br/>

<img alt=" a_n = \frac{2}{\tau} \int_{-\frac{\tau}{2}}^{\frac{\tau}{2}} f(t) \cos nt dt \quad ; \quad  b_n = \frac{2}{\tau} \int_{-\frac{\tau}{2}}}^{\frac{\tau}{2}} f(t) \sin nt dt" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=%20a_n%20%3D%20%5Cfrac%7B2%7D%7B%5Ctau%7D%20%5Cint_%7B-%5Cfrac%7B%5Ctau%7D%7B2%7D%7D%5E%7B%5Cfrac%7B%5Ctau%7D%7B2%7D%7D%20f%28t%29%20%5Ccos%20nt%20dt%20%5Cquad%20%3B%20%5Cquad%20%20b_n%20%3D%20%5Cfrac%7B2%7D%7B%5Ctau%7D%20%5Cint_%7B-%5Cfrac%7B%5Ctau%7D%7B2%7D%7D%7D%5E%7B%5Cfrac%7B%5Ctau%7D%7B2%7D%7D%20f%28t%29%20%5Csin%20nt%20dt" title=" a_n = \frac{2}{\tau} \int_{-\frac{\tau}{2}}^{\frac{\tau}{2}} f(t) \cos nt dt \quad ; \quad  b_n = \frac{2}{\tau} \int_{-\frac{\tau}{2}}}^{\frac{\tau}{2}} f(t) \sin nt dt"/><br/><br/>

Remember, the people arguing for tau are claiming it simplifies formulae, not making them look worse.<br/><br/>

<strong>Euler's Identity</strong><br/><br/>

Finally, I cannot leave this without talking about <a href="http://en.wikipedia.org/wiki/Euler%27s_identity">Euler's identity</a> considered by most mathematicians (including myself) to be one of the most beautiful results in Mathematics.<br/><br/>

<img alt="e^{i \pi} + 1 = 0" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=e%5E%7Bi%20%5Cpi%7D%20%2B%201%20%3D%200" title="e^{i \pi} + 1 = 0"/><br/><br/>

This result can be written in a few ways, but this way is very commonly used. This is because in this form you can see how this identity connects the five most important numbers of Mathematics: 0, 1, pi, <em>i</em> and <em>e</em>. With tau, it just doesn't have the same beauty:<br/><br/>

<img alt="e^{i \frac{\tau}{2}} + 1 = 0" src="http://www.piglets.org/serendipity/plugin/mimetex.php?q=e%5E%7Bi%20%5Cfrac%7B%5Ctau%7D%7B2%7D%7D%20%2B%201%20%3D%200" title="e^{i \frac{\tau}{2}} + 1 = 0"/><br/><br/>

so I will stick with pi. Thanks all the same.</div>
    </content>
    <updated>2011-06-28T14:32:15Z</updated>
    <category term="STEM"/>
    <category term="mathematics"/>
    <category term="stem"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-03-05T20:17:08Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.260</id>
    <link href="http://www.earth.li/~noodles/blog/2011/06/building-a-freedos-bootable-us.html" rel="alternate" type="text/html"/>
    <title>Building a FreeDOS bootable USB stick under Linux</title>
    <summary>This is for my own reference more than anything else; periodically I find myself needing to boot DOS. Usually because I want to upgrade a BIOS and the upgrade tool only works with Windows or DOS. Yes, I'm aware of flashrom, but the scary messages about toasting laptops means I'm much happier going the DOS route there. So I need a writable medium with a DOS boot image. The easy way to do it is to find a DOS floppy image and write that to a USB stick with dd, but it's basically a one off and means you can't fit a whole lot on the image. I wanted to do a native USB boot. The following did the trick for me. Firstly, this is all on a Debian testing box, in particular with dosfstools (3.0.9-1), mbr (1.1.11-4) and syslinux (2:4.04+dfsg-2). I don't think I'm using anything particularly new from these tools, so I suspect Debian stable will work just fine. In the below my USB stick is on /dev/sdb, I've got a copy of FreeDOS in ~/FreeDOS/ (I extracted the files from a balder10.img floppy image that's easy enough to find, but all you need is kernel.sys and command.com), and I wanted things neatly in their own subdirectories so I could try and keep the key for repeated use and know which bits I wanted to keep and which were transient. I also added a copy of the Debian Installer for convenience; it would need a copy of the netinst ISO dropped into the root to actually be useful, as there's not enough to do a full netboot from the wider Internet using just the HD initrd. # Create a single bootable LBA VFAT partition spanning entire stick. echo 0,,C,* | sfdisk /dev/sdb # Format as VFAT and give it a disk label. mkfs.vfat -n 'DOS BOOT' /dev/sdb1 # Install an MBR install-mbr /dev/sdb # Mount it and create some directories for our files. mount /dev/sdb1 /media/DOS\ BOOT/ cd /media/DOS\ BOOT/ mkdir boot mkdir boot/syslinux/ mkdir FreeDOS # Copy the chain.c32 syslinux tool over. cp /usr/lib/syslinux/chain.c32 boot/syslinux/ # Copy FreeDOS over and move the important bits to / cp ~/FreeDOS/* FreeDOS/ mv FreeDOS/command.com . mv FreeDOS/autoexec.bat . mv FreeDOS/fdconfig.sys . # Add the Debian Installer mkdir boot/d-i/ cd boot/d-i/ wget http://cdn.debian.net/debian/dists/squeeze/main/installer-amd64/current/images/hd-media/initrd.gz wget http://cdn.debian.net/debian/dists/squeeze/main/installer-amd64/current/images/hd-media/vmlinuz # Install syslinux syslinux -d boot /dev/sdb1 I made a boot/syslinux.help file containing: Available boot options are: FreeDOS d-i and a boot/syslinux.cfg with: prompt 1 display syslinux.help default FreeDOS label FreeDOS COM32 /boot/syslinux/chain.c32 APPEND freedos=/FreeDOS/kernel.sys label d-i KERNEL /boot/d-i/vmlinuz INITRD /boot/d-i/initrd.gz Initial testing was done using kvm which was a lot easier than constantly rebooting my laptop. Hopefully this is of help to someone. The only neat bit that I didn't see elsewhere when I was looking was the use of chain.c32 to load kernel.sys rather than having to use a FreeDOS provided boot sector image....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>This is for my own reference more than anything else; periodically I find myself needing to boot DOS. Usually because I want to upgrade a BIOS and the upgrade tool only works with Windows or DOS. Yes, I'm aware of <a href="http://www.flashrom.org/">flashrom</a>, but the scary messages about toasting laptops means I'm much happier going the DOS route there. So I need a writable medium with a DOS boot image. The easy way to do it is to find a DOS floppy image and write that to a USB stick with dd, but it's basically a one off and means you can't fit a whole lot on the image. I wanted to do a native USB boot. The following did the trick for me.</p>

<p>Firstly, this is all on a <a href="http://www.uk.debian.org/">Debian</a> testing box, in particular with dosfstools (3.0.9-1), mbr (1.1.11-4) and syslinux (2:4.04+dfsg-2). I don't think I'm using anything particularly new from these tools, so I suspect Debian stable will work just fine.</p>

<p>In the below my USB stick is on <code>/dev/sdb</code>, I've got a copy of <a href="http://www.freedos.org/">FreeDOS</a> in <code>~/FreeDOS/</code> (I extracted the files from a <code>balder10.img</code> floppy image that's easy enough to find, but all you need is <code>kernel.sys</code> and <code>command.com</code>), and I wanted things neatly in their own subdirectories so I could try and keep the key for repeated use and know which bits I wanted to keep and which were transient. I also added a copy of the Debian Installer for convenience; it would need a copy of the netinst ISO dropped into the root to actually be useful, as there's not enough to do a full netboot from the wider Internet using just the HD initrd.</p>

<pre><code>    # Create a single bootable LBA VFAT partition spanning entire stick.
    echo 0,,C,* | sfdisk /dev/sdb
    # Format as VFAT and give it a disk label.
    mkfs.vfat -n 'DOS BOOT' /dev/sdb1
    # Install an MBR
    install-mbr /dev/sdb
    # Mount it and create some directories for our files.
    mount /dev/sdb1 /media/DOS\ BOOT/
    cd /media/DOS\ BOOT/
    mkdir boot
    mkdir boot/syslinux/
    mkdir FreeDOS
    # Copy the chain.c32 syslinux tool over.
    cp /usr/lib/syslinux/chain.c32 boot/syslinux/
    # Copy FreeDOS over and move the important bits to /
    cp ~/FreeDOS/* FreeDOS/
    mv FreeDOS/command.com .
    mv FreeDOS/autoexec.bat .
    mv FreeDOS/fdconfig.sys .

    # Add the Debian Installer
    mkdir boot/d-i/
    cd boot/d-i/
    wget http://cdn.debian.net/debian/dists/squeeze/main/installer-amd64/current/images/hd-media/initrd.gz
    wget http://cdn.debian.net/debian/dists/squeeze/main/installer-amd64/current/images/hd-media/vmlinuz

    # Install syslinux
    syslinux -d boot /dev/sdb1
</code></pre>

<p>I made a <code>boot/syslinux.help</code> file containing:</p>

<pre><code>    Available boot options are: FreeDOS d-i
</code></pre>

<p>and a <code>boot/syslinux.cfg</code> with:</p>

<pre><code>    prompt 1
    display syslinux.help
    default FreeDOS

    label FreeDOS
        COM32 /boot/syslinux/chain.c32
        APPEND freedos=/FreeDOS/kernel.sys

    label d-i
        KERNEL /boot/d-i/vmlinuz
        INITRD /boot/d-i/initrd.gz
</code></pre>

<p>Initial testing was done using <a href="http://www.linux-kvm.org/">kvm</a> which was a lot easier than constantly rebooting my laptop.</p>

<p>Hopefully this is of help to someone. The only neat bit that I didn't see elsewhere when I was looking was the use of <code>chain.c32</code> to load <code>kernel.sys</code> rather than having to use a FreeDOS provided boot sector image.</p></div>
    </content>
    <updated>2011-06-05T03:59:28Z</updated>
    <published>2011-06-05T03:37:03Z</published>
    <category label="Linux" scheme="http://www.sixapart.com/ns/types#tag" term="linux"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.259</id>
    <link href="http://www.earth.li/~noodles/blog/2011/05/a-minor-keyring-maint-rant.html" rel="alternate" type="text/html"/>
    <title>A minor keyring-maint rant</title>
    <summary>This should probably be an official FAQ, but a) I wanted to rant a bit more than is probably acceptable for something "official" and b) the sort of person this information is directed at never bloody reads keyring.debian.org, which is the logical place for it. Who are keyring-maint? Currently Gunnar Wolf (good cop) and Jonathan McDowell (bad cop). Previous keyring maintainers include Igor Grobman &amp;amp; James Troup. I'd like to be a DM/DD. Do I send you my key? No. You go through the DebianMaintainer or NM processes. Then the DM team or DAM tell us to add your key to the appropriate keyring. I'd like to replace my DM/DD key in the Debian keyring. What should I do? Read the instructions at http://keyring.debian.org/replacing_keys.html I have a new key that isn't signed by anyone else, will you accept it? No. Did you read http://keyring.debian.org/replacing_keys.html ? I've got a single DD signature on my new key. That's enough, right? Not unless your old key has been lost and you're getting a different DD to request the replacement for you (and if they're prepared to ask for a key replacement we'll wonder why they're not prepared to sign the new key too). Did you read http://keyring.debian.org/replacing_keys.html ? I'm still really confused about how I should request a key replacement. Help? Try reading https://rt.debian.org/Ticket/Display.html?id=3141 (which just happens to be a recent decent example). Clear subject line (I'd have added a real name too, but it's still fairly clear), full fingerprint of the old and new keys, inline signed so RT doesn't mangle it. New key signed by old key and 3 other DDs. Request signed by old key. That RT link needs a login. I don't have one. Have you tried reading up on the Debian RT system? There's a generic read only login that'll get you access. That's too hard. Can't you just give me the details? Damnit. It appears the read-only login details are currently disabled due to misuse (one wonders how). Try reading http://wiki.debian.org/rt.debian.org Why are you using RT? Isn't bugs.debian.org more appropriate? We need the ability to for people to contact us is in a private fashion, for example if they need to us to remove a key because it's been lost or compromised. We could only use RT for that purpose and use bugs.d.o for things that can be public, but this way all the information is in one place and we get to make the call about when it becomes a publicly viewable ticket. What's with jetring? Should I send you a jetring changeset? jetring is a tool written by Joey Hess that used to be used to manage the Debian Maintainers keyring. keyring-maint borrowed a number of good ideas from jetring but don't use it at all. We ignore jetring changesets. So you just want key fingerprints, not attached keys? Yes. Of course you have to make sure your key is actually on a public keyserver so we can get it. the.earth.li is a good choice (because Jonathan runs it and thus pays more attention to it), but subkeys.pgp.net or pool.sks-keyservers.net are also commonly used. My key has expired and I want to update the key expiry date. I should email RT asking for this to be done, right? No, you should send the updated key via HKP to keyring.debian.org. You can do this with "gpg --keyserver keyring.debian.org --send-key " Obviously replace with your own key ID. I tried to send an entirely new key via HKP to keyring.debian.org, but I can't see it there. What gives? keyring.debian.org only accepts updates to keys it already knows about. That means you can send updated expiry dates, new uids and new signatures to your existing key, but not an entirely new key. I sent my updated key via HKP to keyring.debian.org and can see it's updated there, but the Debian archive processing tools (eg dak) don't seem to recognize the update. Why not? The updates sent via HKP are folded back into the HKP server automatically every 15 minutes or so. They are folded into the live Debian keyrings on a manual basis, at least once a month. This means if your key has an expiry date then you probably want to update your key at least a month before it expires. Where can I find these live Debian keyrings? They're what's available via rsync from keyring.debian.org::keyrings/keyrings/ This is canonical location for the current Debian Developers and Debian Maintainers keyrings. What about the debian-keyring package? This is a convenience package of the keyrings. It's usually the most out of date. We update it sporadically and try to ensure that the version shipped with a stable Debian release is current at the point of release. It is not used by any of the official Debian infrastructure. Why don't you automatically update my key in the live keyring when I send an update via HKP? We think that automatic updates of keys that allow uploads to Debian are a bad thing and that invoking a human eye at some step of the process is a useful sanity check. Paranoid much? Never enough. How are updates to the keyring tracked? We use bzr to maintain the keyring, with a separate file per key that can then be easily combined into the various keyrings. You can see the repository at: http://bzr.debian.org/scm/loggerhead/keyring/debian-keyring/changes Note that this is only updated when a keyring is pushed to live; the working tree may contain details of compromised keys and thus isn't public. What's with the whole replacement of 1024 bit keys? 2 things. Firstly 1024 bit keys tend to use SHA1 as a hash algorithm, which has been shown to be weaker than expected. While we're not aware of active exploits against this updating all of the keys Debian uses is not a trivial process and it's wiser to get it done /before/ there's a known issue. Secondly computing power has moved on and we feel that upgrading to larger key sizes is prudent. Elliptic curve cryptography (ECC) keys look like the future. Can I use one for Debian? No, not at present. When there are tools that are part of a Debian stable release that support them we'll look into it, after discussion with the major users of the keyring (DSA, ftpmaster, the secretary)....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>This should probably be an official FAQ, but a) I wanted to rant a bit more than is probably acceptable for something "official" and b) the sort of person this information is directed at never bloody reads <a href="http://keyring.debian.org/">keyring.debian.org</a>, which is the logical place for it.</p>

<p><em>Who are keyring-maint?</em></p>

<p>Currently Gunnar Wolf (good cop) and Jonathan McDowell (bad cop). Previous
keyring maintainers include Igor Grobman &amp; James Troup.</p>

<p><em>I'd like to be a DM/DD. Do I send you my key?</em></p>

<p>No. You go through the
<a href="http://wiki.debian.org/DebianMaintainer">DebianMaintainer</a> or
<a href="http://nm.debian.org/">NM</a> processes. Then the DM team or DAM tell us
to add your key to the appropriate keyring.</p>

<p><em>I'd like to replace my DM/DD key in the Debian keyring. What should I do?</em></p>

<p>Read the instructions at 
<a href="http://keyring.debian.org/replacing_keys.html">http://keyring.debian.org/replacing_keys.html</a></p>

<p><em>I have a new key that isn't signed by anyone else, will you accept it?</em></p>

<p>No. Did you read
<a href="http://keyring.debian.org/replacing_keys.html">http://keyring.debian.org/replacing_keys.html</a>
?</p>

<p><em>I've got a single DD signature on my new key. That's enough, right?</em></p>

<p>Not unless your old key has been lost and you're getting a different
DD to request the replacement for you (and if they're prepared to ask
for a key replacement we'll wonder why they're not prepared to sign
the new key too).</p>

<p>Did you read
<a href="http://keyring.debian.org/replacing_keys.html">http://keyring.debian.org/replacing_keys.html</a>
?</p>

<p><em>I'm still really confused about how I should request a key replacement. Help?</em></p>

<p>Try reading
<a href="https://rt.debian.org/Ticket/Display.html?id=3141">https://rt.debian.org/Ticket/Display.html?id=3141</a>
(which just happens to be a recent decent example). Clear subject line
(I'd have added a real name too, but it's still fairly clear), full
fingerprint of the old and new keys, inline signed so RT doesn't mangle
it. New key signed by old key and 3 other DDs. Request signed by old
key.</p>

<p><em>That RT link needs a login. I don't have one.</em></p>

<p>Have you tried reading up on the Debian RT system? There's a generic
read only login that'll get you access.</p>

<p><em>That's too hard. Can't you just give me the details?</em></p>

<p>Damnit. It appears the read-only login details are currently disabled
due to misuse (one wonders how). Try reading
<a href="http://wiki.debian.org/rt.debian.org">http://wiki.debian.org/rt.debian.org</a></p>

<p><em>Why are you using RT? Isn't bugs.debian.org more appropriate?</em></p>

<p>We need the ability to for people to contact us is in a private fashion,
for example if they need to us to remove a key because it's been lost
or compromised. We could only use RT for that purpose and use bugs.d.o
for things that can be public, but this way all the information is in
one place and we get to make the call about when it becomes a publicly
viewable ticket.</p>

<p><em>What's with jetring? Should I send you a jetring changeset?</em></p>

<p>jetring is a tool written by Joey Hess that used to be used to manage
the Debian Maintainers keyring. keyring-maint borrowed a number of
good ideas from jetring but don't use it at all. We ignore jetring
changesets.</p>

<p><em>So you just want key fingerprints, not attached keys?</em></p>

<p>Yes. Of course you have to make sure your key is actually on a
public keyserver so we can get it. the.earth.li is a good choice (because
Jonathan runs it and thus pays more attention to it), but subkeys.pgp.net
or pool.sks-keyservers.net are also commonly used.</p>

<p><em>My key has expired and I want to update the key expiry date. I should email RT asking for this to be done, right?</em></p>

<p>No, you should send the updated key via HKP to keyring.debian.org. You
can do this with</p>

<p>"gpg --keyserver keyring.debian.org --send-key &lt;keyid&gt;"</p>

<p>Obviously replace &lt;keyid&gt; with your own key ID.</p>

<p><em>I tried to send an entirely new key via HKP to keyring.debian.org, but I can't see it there. What gives?</em></p>

<p>keyring.debian.org only accepts updates to keys it already knows
about. That means you can send updated expiry dates, new uids and new
signatures to your existing key, but not an entirely new key.</p>

<p><em>I sent my updated key via HKP to keyring.debian.org and can see it's updated there, but the Debian archive processing tools (eg dak) don't seem to recognize the update. Why not?</em></p>

<p>The updates sent via HKP are folded back into the HKP server
automatically every 15 minutes or so. They are folded into the live
Debian keyrings on a manual basis, at least once a month.</p>

<p>This means if your key has an expiry date then you probably want to
update your key at least a month before it expires.</p>

<p><em>Where can I find these live Debian keyrings?</em></p>

<p>They're what's available via rsync from
keyring.debian.org::keyrings/keyrings/</p>

<p>This is canonical location for the current Debian Developers and
Debian Maintainers keyrings.</p>

<p><em>What about the debian-keyring package?</em></p>

<p>This is a convenience package of the keyrings. It's usually the most
out of date. We update it sporadically and try to ensure that the
version shipped with a stable Debian release is current at the point
of release. It is not used by any of the official Debian
infrastructure.</p>

<p><em>Why don't you automatically update my key in the live keyring when I send an update via HKP?</em></p>

<p>We think that automatic updates of keys that allow uploads to Debian
are a bad thing and that invoking a human eye at some step of the
process is a useful sanity check.</p>

<p><em>Paranoid much?</em></p>

<p>Never enough.</p>

<p><em>How are updates to the keyring tracked?</em></p>

<p>We use bzr to maintain the keyring, with a separate file per key that
can then be easily combined into the various keyrings. You can see
the repository at:</p>

<p><a href="http://bzr.debian.org/scm/loggerhead/keyring/debian-keyring/changes">http://bzr.debian.org/scm/loggerhead/keyring/debian-keyring/changes</a></p>

<p>Note that this is only updated when a keyring is pushed to live; the
working tree may contain details of compromised keys and thus isn't
public.</p>

<p><em>What's with the whole replacement of 1024 bit keys?</em></p>

<p>2 things. Firstly 1024 bit keys tend to use SHA1 as a hash algorithm,
which has been shown to be weaker than expected. While we're not
aware of active exploits against this updating all of the keys Debian
uses is not a trivial process and it's wiser to get it done /before/
there's a known issue. Secondly computing power has moved on and we feel
that upgrading to larger key sizes is prudent.</p>

<p><em>Elliptic curve cryptography (ECC) keys look like the future. Can I use one for Debian?</em></p>

<p>No, not at present. When there are tools that are part of a Debian
stable release that support them we'll look into it, after discussion
with the major users of the keyring (DSA, ftpmaster, the secretary).</p></div>
    </content>
    <updated>2011-05-09T00:56:27Z</updated>
    <published>2011-05-09T00:44:12Z</published>
    <category label="Debian" scheme="http://www.sixapart.com/ns/types#tag" term="debian"/>
    <category label="PGP" scheme="http://www.sixapart.com/ns/types#tag" term="pgp"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.258</id>
    <link href="http://www.earth.li/~noodles/blog/2011/05/not-going-to-debconf11.html" rel="alternate" type="text/html"/>
    <title>Not going to DebConf11</title>
    <summary>I'm sad to report that I won't be attending DebConf11. I'd have loved to go, but unfortunately I couldn't get the time off work due to various schedule conflicts. I'll have to find another excuse to make it to Bosnia at some point....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><img alt="no-debconf11.png" class="mt-image-left" height="150" src="http://www.earth.li/%7Enoodles/blog/images/no-debconf11.png" style="margin: 0pt 20px 20px 0pt; float: left;" width="150"/>I'm sad to report that I won't be attending DebConf11. I'd have loved to go, but unfortunately I couldn't get the time off work due to various schedule conflicts. I'll have to find another excuse to make it to Bosnia at some point.<br/></div>
    </content>
    <updated>2011-05-07T04:43:11Z</updated>
    <published>2011-05-07T04:39:48Z</published>
    <category label="DebConf" scheme="http://www.sixapart.com/ns/types#tag" term="debconf"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://redbrain.co.uk/?p=635</id>
    <link href="http://redbrain.co.uk/index.php/update/gccpy-dynamic-typing/" rel="alternate" type="text/html"/>
    <title>GccPy – Dynamic Typing</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hey guys time for an overview of Gccpy,:</p>
Gccpy is a Python front-end to gcc from my last years GSOC (2010), I was mentored by Ian Lance Taylor
who continues to be a great inspiration to me with his work on gccgo and his help on gcc-help to the community
of users and developers.
An overview of what the [...]</div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hey guys time for an overview of <a href="http://gcc.gnu.org/wiki/PythonFrontEnd">Gccpy</a>,:</p>
<div id="_mcePaste" style="">Gccpy is a Python front-end to gcc from my last years GSOC (2010), I was mentored by Ian Lance Taylor</div>
<div id="_mcePaste" style="">who continues to be a great inspiration to me with his work on gccgo and his help on gcc-help to the community</div>
<div id="_mcePaste" style="">of users and developers.</div>
<div id="_mcePaste" style="">An overview of what the project aims to achive is creating an AOT compiled version of Python using GCC as a framework for</div>
<div id="_mcePaste" style="">middle-end, back-end optimization aswell as protable code-generation. Creating AOT languages has</div>
<div id="_mcePaste" style="">been generally aimed for more ‘low-level’ languages such as C/C++/Fortran where the language requires</div>
<div id="_mcePaste" style="">strong typing and other kinds declarative features; which gives rise to much less dynamic</div>
<div id="_mcePaste" style="">features which languages like Python/PHP/Perl take for granted. The reason these more ‘high-level’</div>
<div id="_mcePaste" style="">languages are able to do such things is due to the fact they are generaly implemented as interpreted</div>
<div id="_mcePaste" style="">languages and this allows for much of this dynamic logic to take place at runtime when a program is passed</div>
<div id="_mcePaste" style="">through their respective interpreters. But gccpy tackles this by generating code which allows for and efficient</div>
<div id="_mcePaste" style="">runtime as well as the dynamic features required.</div>
<div id="_mcePaste" style="">Personally I feel this is a very strong and important style of implementing dynamic languages; which needs to be shown</div>
<div id="_mcePaste" style="">and proven to be an effective and strong way of implementing new and up-comming languages and why GCC is the right platform</div>
<div id="_mcePaste" style="">to do so.</div>
<p>Gccpy is a Python front-end to gcc from my last years GSOC (2010), I was mentored by Ian Lance Taylor who continues to be a great inspiration to me with his work on gccgo and his help on gcc-help to the community of users and developers.</p>
<p>An overview of what the project aims to achieve is creating an AOT compiled version of Python using GCC as a framework for middle-end, back-end optimization as well as protable code-generation. Creating AOT languages has been generally aimed for more ‘low-level’ languages such as C/C++/Fortran where the language requires strong typing and other kinds declarative features; which gives rise to much less dynamic features which languages like Python/PHP/Perl take for granted. The reason these more ‘high-level’  languages are able to do such things is due to the fact they are generally implemented as interpreted languages and this allows for much of this dynamic logic to take place at runtime when a program is passed through their respective interpreters. But gccpy tackles this by generating code which allows for and efficient runtime as well as the dynamic features required.</p>
<p>Personally I feel this is a very strong and important style of implementing dynamic languages; which needs to be shown and proven to be an effective and strong way of implementing new and up-coming languages and why GCC is the right platform to do so.</p>
<p>So ok this was the overview of my Gsoc application, but i think its about the best i can word it. But first lets discuss how this actually works over several blog posts i will demonstrate some of the basic ideas which lets us compile python.  From the title of this post i will quickly demonstrate the ideas behind dynamic typing:</p>
<p>Lets look at how we can easily generate code for some C code for example:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">int</span> foobar <span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">int</span> x = <span class="nu0">1</span>, y = <span class="nu0">2</span>;</div>
</li>
<li class="li2">
<div class="de2">  <span class="kw1">return</span> x + y;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>We could generate an IR of:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">int</span> foobar <span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li2">
<div class="de2">  <span class="kw4">int</span> x, y, T<span class="nu0">.1</span>;</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">  x = <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">  y = <span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li2">
<div class="de2">  T<span class="nu0">.1</span> = x + y;</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">  <span class="kw1">return</span> T<span class="nu0">.1</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>And the i386 code of:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">.<span class="me1">globl</span> foobar</div>
</li>
<li class="li1">
<div class="de1">foobar:</div>
</li>
<li class="li1">
<div class="de1">  subl $<span class="nu0">12</span>, %esp            <span class="co2"># get some stack space</span></div>
</li>
<li class="li2">
<div class="de2">  mov $<span class="nu0">1</span>, %esp             <span class="co2"># x</span></div>
</li>
<li class="li1">
<div class="de1">  mov $<span class="nu0">2</span>, <span class="nu0">4</span><span class="br0">(</span>%esp<span class="br0">)</span>         <span class="co2"># y</span></div>
</li>
<li class="li1">
<div class="de1">  mov <span class="nu0">4</span><span class="br0">(</span>%esp<span class="br0">)</span>, <span class="nu0">8</span><span class="br0">(</span>%esp<span class="br0">)</span> <span class="co2"># setting up a very highlevel/*un-optimized* addition</span></div>
</li>
<li class="li1">
<div class="de1">  addl %esp, <span class="nu0">8</span><span class="br0">(</span>%esp<span class="br0">)</span>     <span class="co2"># T.1</span></div>
</li>
<li class="li1">
<div class="de1">  mov <span class="nu0">8</span><span class="br0">(</span>%esp<span class="br0">)</span>, %eax     <span class="co2"># the return</span></div>
</li>
<li class="li2">
<div class="de2">  addl $<span class="nu0">12</span>, %esp           <span class="co2"># fix the stack</span></div>
</li>
<li class="li1">
<div class="de1">  ret</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>This is where some interpreters/runtimes start to try and become much more like a ‘virtual machine’ like Java they implement their language by having a runtime which runs code that is in a virtual inscrution set. So when they parse their language with a front-end they generate this virtual instruction set for the given program but then they ‘compile/assemble’ this to bytecode which is a similar akin to C where we assemble the target code to an object code before linking into an executeable format. But really the byte code is nothing more than a binary form of the instruction set to optimize execution of the instruction set.</p>
<p>An example why many people belive generating efficient code for dynamic languages can be difficult is take for example:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">def foo <span class="br0">(</span>x<span class="br0">)</span>:</div>
</li>
<li class="li1">
<div class="de1">  x.<span class="me1">append</span> <span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw1">return</span> x + <span class="br0">[</span> <span class="nu0">1</span>, <span class="nu0">2</span>, <span class="nu0">3</span> <span class="br0">]</span></div>
</li>
<li class="li2">
<div class="de2"> </div>
</li>
</ol>
</div>
<p>So what happens here in an abstract point of view you can’t assume anything about this code due to dynamic typing compared to something like</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">def List foo <span class="br0">(</span>List x<span class="br0">)</span>:</div>
</li>
<li class="li1">
<div class="de1">  x.<span class="me1">append</span> <span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw1">return</span> x + <span class="br0">[</span> <span class="nu0">1</span>, <span class="nu0">2</span>, <span class="nu0">3</span> <span class="br0">]</span></div>
</li>
<li class="li2">
<div class="de2"> </div>
</li>
</ol>
</div>
<p>Having storage specifiers insantly makes this set of code much more declaritive and gives rise to many more assumptions able to be made; which in turn gives a compiler more ‘hints’ on what it can do to generate code. Of course in the example above this is just a hypothetical language just to demonstrate the idea. So to implement dynamic typing we have to analyse what it actually is.</p>
<p>Lets take a normal/regular python session:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">&gt;&gt;&gt; x = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&gt;&gt;&gt; x = <span class="st0">"string"</span></div>
</li>
<li class="li1">
<div class="de1">&gt;&gt;&gt; y = x</div>
</li>
<li class="li2">
<div class="de2">&gt;&gt;&gt; x = <span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>So what is actually happening now line by line by showing what each identifier is assigned to what data.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">&gt;&gt;&gt; x = <span class="nu0">1</span>                 <span class="co2"># x = 1        | y = NULL</span></div>
</li>
<li class="li1">
<div class="de1">&gt;&gt;&gt; x = <span class="st0">"string"</span>          <span class="co2"># x = "string" | y = NULL</span></div>
</li>
<li class="li1">
<div class="de1">&gt;&gt;&gt; y = x                 <span class="co2"># x = "string" | y = "string"</span></div>
</li>
<li class="li2">
<div class="de2">&gt;&gt;&gt;  x = <span class="nu0">2</span>                 <span class="co2"># x = 2        | y = "string"</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>So why is this actually a problem, traditionly take for example code like:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">int</span> x = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">x = <span class="nu0">1.5555</span></div>
</li>
<li class="li1">
<div class="de1">x = <span class="st0">"string"</span></div>
</li>
<li class="li2">
<div class="de2"> </div>
</li>
</ol>
</div>
<p>When a c-compiler would run over that code it would give all manar of warnings about type conversion and invalid types being assigned. But why is this since a compiler will want to generate efficient code it will reserve the space valid for an integer on the stack which on an i386 32bit processor would be 32 bits usualy and would asuse subl $4, %esp to have space on the stack for that integer, but the problem arises if we were to then want to put in data which is greater than the size previously allocated for the given initial data. So you will have overflow and corruption of data. So how can you combat that to make dynamic typing work, the method or approach i have taken for gccpy takes much inspiration in how object orientation works. Every piece of static data give in a program is wraped into a gpy_object_t structure at runtime so in turn every type in gccpy is implemented via a gpy_object_t type, so for example the previous python session could be represented in GIMPLE via something like:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">gpy_object_t * x = fold_integer <span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">incr_ref_count <span class="br0">(</span>x<span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li2">
<div class="de2">decr_ref_count <span class="br0">(</span>x<span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">x = fold_string <span class="br0">(</span><span class="st0">"string"</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">gpy_object_t * y = x</div>
</li>
<li class="li1">
<div class="de1">incr_ref_count <span class="br0">(</span>y<span class="br0">)</span></div>
</li>
<li class="li2">
<div class="de2"> </div>
</li>
<li class="li1">
<div class="de1">x = fold_integer <span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">incr_ref_count <span class="br0">(</span>x<span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>The basic idea how dynamic typing is not what an identifier with a specified storage specifier holds its what an identifier points to. So when `x = fold_integer (1)` we should look at what the gpy_object_t structure looks like currently its in many ways similar to how PY_object works in the cpython implemetation but is a little more specific and streamlined to gccpy’s needs.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">typedef</span> <span class="kw4">struct</span> gpy_object_t <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">enum</span> GPY_OBJECT_T T;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">union</span> <span class="br0">{</span></div>
</li>
<li class="li2">
<div class="de2">    gpy_object_state_t * object_state;</div>
</li>
<li class="li1">
<div class="de1">    <span class="kw4">struct</span> gpy_callable__t * call;</div>
</li>
<li class="li1">
<div class="de1">    gpy_literal_t * literal;</div>
</li>
<li class="li1">
<div class="de1">  <span class="br0">}</span> o ;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span> gpy_object_t ;</div>
</li>
<li class="li2">
<div class="de2"> </div>
</li>
</ol>
</div>
<p>This structure is quite open to be used in many areas of how gccpy works but what we are interested in is the:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">gpy_object_state_t * object_state;</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>This is the part where it stores the static data defined be it an integer or a class defined in the source code.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">typedef</span> <span class="kw4">struct</span> gpy_rr_object_state_t <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">char</span> * obj_t_ident;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">signed</span> <span class="kw4">long</span> ref_count;</div>
</li>
<li class="li2">
<div class="de2">  <span class="kw4">void</span> * self;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_typedef_t * definition;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span> gpy_object_state_t ;</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>This structure is whats used to hold the object_state it holds the object type identifier as a string the reference count for the garbage collector the pointer to a structure in memory which is the actual data for example int or FILE * etc, and also a pointer to the objects definition structure. Each object has its own definition and each definition requires several hooks:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">typedef</span> <span class="kw4">struct</span> gpy_typedef_t <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">char</span> * identifier;</div>
</li>
<li class="li1">
<div class="de1">  size_t builtin_type_size;</div>
</li>
<li class="li2">
<div class="de2">  gpy_object_t * <span class="br0">(</span>*init_hook<span class="br0">)</span><span class="br0">(</span><span class="kw4">struct</span> gpy_typedef_t *, gpy_object_t **<span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">void</span> <span class="br0">(</span>*destroy_hook<span class="br0">)</span><span class="br0">(</span>gpy_object_t *<span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">void</span> <span class="br0">(</span>*print_hook<span class="br0">)</span><span class="br0">(</span>gpy_object_t * , FILE *, bool<span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_number_prot_t * binary_protocol;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">struct</span> gpy_builtin_method_def_t * methods;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">}</span> gpy_typedef_t ;</div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>It has the identifier the size of the sturcture of which holds the actual data the initilization hook which returns the object state when you initialize an object the destroy hook for the garbage collector, a print hook for the print keyword to print the data. Now things get more interesting, the binary protocol is whats used to allow for dynamic binary operators so things like:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">x = <span class="nu0">2</span> + <span class="nu0">1.5</span></div>
</li>
<li class="li1">
<div class="de1">concat = <span class="st0">"foo"</span> + <span class="st0">"bar"</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>Can allow for mixed type binary operations, by having hooks for each type of binary operation be it addition subtraction etc. Finaly there is a table of member methods which allows for dot accesors like:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">list.<span class="me1">append</span> <span class="br0">(</span>…<span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">list.<span class="me1">index</span> <span class="br0">(</span>…<span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
</ol>
</div>
<p>As append and index are both member methods to the builtin type List.</p></div>
    </content>
    <updated>2011-05-01T04:25:45Z</updated>
    <category term="Update!"/>
    <author>
      <name>redbrain</name>
    </author>
    <source>
      <id>http://redbrain.co.uk</id>
      <link href="http://redbrain.co.uk/index.php/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://redbrain.co.uk" rel="alternate" type="text/html"/>
      <subtitle>Frustrated Software Developer</subtitle>
      <title>RedBrain @ $HOME : ~ $</title>
      <updated>2012-04-24T15:17:08Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://redbrain.co.uk/?p=633</id>
    <link href="http://redbrain.co.uk/index.php/update/quick-update/" rel="alternate" type="text/html"/>
    <title>Quick Update</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hey all i am sorry for the last post i have many posts drafted to be posted within the next 2-3 weeks where i am going to discuss my project GccPy as there has been alot happening with it recently, i am working on a paper which shows everything about it so far but i want to [...]</p></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hey all i am sorry for the last post i have many posts drafted to be posted within the next 2-3 weeks where i am going to discuss my project GccPy as there has been alot happening with it recently, i am working on a paper which shows everything about it so far but i want to have some posts demonstrating the basic principles of compilers and in deed creating an Ahead of Time version of Python on top of GCC and how this actually works. I personally find it a pretty cool topic but first i will am just in a bit of rant mood and its about whats happened since my last blog post:</p>
<p>Well anyway i’m currently in an awkward position i feel i may leave university but i will see because its simply causing me so much problems in my day to day life, I’ve got onto Google summer of code 2011 yet again to work on Gccpy with Ian lance Taylor but i may focus a little more on working on the Gcc middle-end to make some of my work a little easier. But the problem i am having at the moment with university is i actually failed all my modules last semester which may sound awful. Esp the one in compiler development i am writing a complaint about this at the moment due to the fact i actually took my own time to create a compiler specificity for this language they developed which works i cant emphasize this enough it actually works and demonstrates an IR properly designed and works well and doesn’t segv if you put in a syntax/grammar error i didnt even have to do this for the module.</p>
<p>I guess it was my own fault where i answered the exam using x86 code and more normal DAG graphs and IR’s to demonstrate things to answer the questions where they wanted this _FAKE_ code and _WIERD_ ideas to demonstrate Lexical Analysis. I failed my Math one but i kind of expected this one because i just didnt care anymore the lectureer just had a problem with me and wouldnt put any work online as i wasnt able to attend for a week or so and just gave me awkard looks when i went to class and was just sooo condecending the whole time to me i tried hard but it was just awful then the other exam concurrent programming where your forced to learn off all these Java constructs to implement monitors thats all fine 100% in all practicals but exam your just forced to learn off meaning less facts and stuff where it really means nothing and all the practicals are only worth 10% of the module.</p>
<p>So yeah didnt go well but i feel very strongly about my compiler development module so i am going to write a complaint about it and send it in, the problem being is i am just made to feel like one of the students who just goes out and doesnt do work. I am so far away from that statement its insane, i am 100x more dedicated and practical than anyone in my university thats why after Gsoc 2011 i have another interview with Google which will be interesting. I am just so increibly sick of feeling useless, i just feel like giving up at the moment. Its destroyed nearly all my confidence recently, if it wasnt for getting Gsoc 2011 for my own project i dont know what i would do sometimes.</p>
<p>Its not just those exams that annoyed me even a few years ago i remember studying months i mean months for an exam and lost by like 5% i was so gobsmacked. Its just got to this stage where absolutly everything i have done in university has just annoyed me so much i cant concentrate at all, when you consider absolutly everything is soooo niche and acedemic its insane in computer science esp in open-source and linux its such a hands on subject. It scares me that everyone in my university couldnt actually design a project and implement any kind of system level project even though they are meant to have studied it. Take the operating systems module is literately take a book and re-wrtie paragraphs of crap down in an exam the exact same went for networking.</p>
<p>Basically i found this comment on a website <a href="http://ihateuniversity.com/2004/03/why-i-hate-university-life/">http://ihateuniversity.com/2004/03/why-i-hate-university-life/</a>:</p>
<blockquote><p>University seems to suck all the life out of learning. The assignments are meaningless, the lectures are boring and the people are all mindless. I have no time anymore to read a book…a real book, worth reading. I’m too busy with my nose buried in a textbook learning meaningless facts to pass another meaningless test, to earn a meaningless number entitled “grade”.</p></blockquote>
<p>Sorry for the rant but i just have been made to feel very useless at the moment and personally i just feel if i was to just quit university to persue my gccpy project over summer and have this paper finished and apply to jobs based on this project as it demonstrates everything i know and understand and how i designed it all and implemented it. Also GCC hackers are a very scarce resource so i can even taylor alot of middle end trickery to pop up specific things for a project using plugins etc. Which i think could be a usefull thing for a company to have but i have literly no confidence in my self anymore i in the UK university has become this Class system and if you didnt pass your made to feel like a lesser person. But its kind of irritating i’ve tried to get help from my university but because i do Mathematics and Computer Science there are like zero people who do this course esp my set of modules i choose i get like no help or no one to talk to coupled with the fact my advisor of studies just retired and the new guy doesn’t really know.</p>
<p>The thing that has annoyed me the most i feel almost ashamed of myself to talk to my friends on identi.ca i just need to prove myself and i just dont know what to persue but i know right now i am pretty much miserable when i worked full time for SAP i was happy they offered me a PHd positions for goodness sake. I must be good at something when so few get that as well as Gsoc twice in a row on the same project which i started myself. I’ve set my self the goal of at Oggcamp comming up i will have the Linux outlaws testsuite for Gccpy working which it pretty much is and to demonstrate its awesomeness to everyone i care about. <img alt=":)" class="wp-smiley" src="http://redbrain.co.uk/wp-includes/images/smilies/icon_smile.gif"/> </p>
<p>Dont worry i will be posting up from now over the next few weeks much more frequently every time i write a blog post i feel much better about myself. I a lot to offer the world and its time for me to do it.</p>
<p>PS: Sorry for the mountains of spelling errors! xD and i prob wont leave uni its just how i feel i talked some stuff over and feel alot better i just need to stay calm and get though it all xD</p></div>
    </content>
    <updated>2011-05-01T03:00:26Z</updated>
    <category term="Update!"/>
    <author>
      <name>redbrain</name>
    </author>
    <source>
      <id>http://redbrain.co.uk</id>
      <link href="http://redbrain.co.uk/index.php/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://redbrain.co.uk" rel="alternate" type="text/html"/>
      <subtitle>Frustrated Software Developer</subtitle>
      <title>RedBrain @ $HOME : ~ $</title>
      <updated>2012-04-21T19:17:07Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.257</id>
    <link href="http://www.earth.li/~noodles/blog/2011/04/onak-040-released.html" rel="alternate" type="text/html"/>
    <title>onak 0.4.0 released</title>
    <summary>I don't normally mention the PGP keyserver I've been working on for the past 9 years, but there are a few keyserver related comments I've been meaning to make that prompt me to do so this time. onak is the keyserver powering the.earth.li (AKA wwwkeys.uk.pgp.net). Back in February I finally enabled hkps (HKP over SSL) access to it as I promised dkg I would do back at DebConf10. I also turned on IPv6. Most of the active keyservers out there are running SKS. I think there might be a few OpenPKSD instances as well. If you're running SKS please ensure that you have at least one address in your mailsync file, so that you send key updates to the non SKS keyservers out there - it seems that SKS requires the receiving keyserver to send out updates via email, rather than each server sending out any updates it processes to its mailsync peers. Feel free to add pgp-public-keys at earth.li - no need to contact me to do so (but you can drop me a line if you want me to send you mail updates back). Also in the past there was a pgp-keyserver-folk mailing list, originally on flame.org, then on alt.org. Both of these have been dead for a while. I created a local pgp-keyserver-folk some time ago, but never publicised it. I believe the SKS lists are fairly active, but limited to that community, so it would be nice to have somewhere that was keyserver agnostic that admins could talk to each other. Anyway. onak 0.4.0. Largely fixes to keyd, which is a backend daemon that handles talking to the key database. This is particularly useful for large/busy keyservers. Also a couple of fixes that make the db4 backend a lot more reliable (especially with queries that return lots of results). And various other minor cleanups. If you're one of the 3 people running it you probably want to upgrade; updated packages have already been uploaded to Debian unstable....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>I don't normally mention the PGP keyserver I've been working on for the
past 9 years, but there are a few keyserver related comments I've been
meaning to make that prompt me to do so this time.</p>

<p>onak is the keyserver powering <a href="http://the.earth.li/">the.earth.li</a> (AKA <code>wwwkeys.uk.pgp.net</code>).
Back in February I finally enabled hkps (HKP over SSL) access to it as I
promised <a href="http://www.fifthhorseman.net/">dkg</a> I would do back at
DebConf10. I also turned on IPv6.</p>

<p>Most of the active keyservers out there are running
<a href="http://code.google.com/p/sks-keyserver/">SKS</a>. I think there might be a few
<a href="http://www.openpksd.org/">OpenPKSD</a> instances as well. If you're
running SKS <em>please</em> ensure that you have at least one address in your
mailsync file, so that you send key updates to the non SKS keyservers
out there - it seems that SKS requires the receiving keyserver to send
out updates via email, rather than each server sending out any updates
it processes to its mailsync peers. Feel free to add <code>pgp-public-keys</code>
<em>at</em> <code>earth.li</code> - no need to contact me to do so (but you can drop me a
line if you want me to send you mail updates back).</p>

<p>Also in the past there was a <code>pgp-keyserver-folk</code> mailing list, originally
on flame.org, then on alt.org. Both of these have been dead for a while.
I created a local
<a href="http://www.earth.li/mailman/listinfo/pgp-keyserver-folk">pgp-keyserver-folk</a>
some time ago, but never publicised it. I believe the SKS lists are
fairly active, but limited to that community, so it would be nice to
have somewhere that was keyserver agnostic that admins could talk to
each other.</p>

<p>Anyway. onak 0.4.0. Largely fixes to <code>keyd</code>, which is a backend daemon
that handles talking to the key database. This is particularly useful
for large/busy keyservers. Also a couple of fixes that make the db4
backend a lot more reliable (especially with queries that return lots of
results). And various other minor cleanups. If you're one of the 3
people running it you probably want to upgrade; updated packages have
already been uploaded to Debian unstable.</p></div>
    </content>
    <updated>2011-04-24T06:56:30Z</updated>
    <published>2011-04-24T06:52:43Z</published>
    <category label="PGP" scheme="http://www.sixapart.com/ns/types#tag" term="pgp"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.256</id>
    <link href="http://www.earth.li/~noodles/blog/2011/04/why-linux-part-7-support.html" rel="alternate" type="text/html"/>
    <title>Why Linux? (Part 7: Support)</title>
    <summary>(This is part of a series of posts on Why Linux?) This is probably a non-obvious reason to run Linux to most people. One of the complaints I've heard in the past is the lack of support for Linux. It's not really relevant to running it on a work desktop (where support is presumably from some central IT organisation), but I believe it's a red herring. Support in the Free software world can exceed that in the proprietary by an impressive margin. And that can turn out to be useful at work, even if you do suppose the existence of central IT. The support I've received for Linux and applications under it has been, on numerous occasions, excellent in a way I feel I could never expect from the commercial software world. And when it isn't, I have the choice of whomever I want to try and fix my problems, rather than being stuck with no options. I have found that if I am polite, and provide useful information, and patient, I can talk directly to the developers who make the software I use. If I have a patch they will often take it from me, or use it as a basis for the final fix. If they are no longer available, or too busy, then because I have the source I can find someone else to look at the problem, or do so myself. The chances of most large proprietary software companies giving me the time of day is low. I don't understand why small businesses think that Windows is a safer choice due to being able to get support from Microsoft. Again using experience gained at Black Cat, at one point we had a problem with IPv6 routes being updated. Signs pointed to Quagga, Simon collected relevant information and got in contact with the Quagga devs. They investigated, realised it wasn't a problem with their code, and then proceeded to find the issue in the Linux kernel, produce the fix and pass it upstream. Within hours of us reporting the problem. I'll accept that's an exceptional response that can be matched within the proprietary software world, but not without a hefty support contract and I doubt you would have got a response other than "Not our fault, talk to the other supplier", or maybe a workaround at best. More recently, I had a conversation about Linux and discard support, with one of the people who'd worked on it. Very interesting from my PoV, useful to my work (I ended up fixing something in our code base that led to the Linux support Just Working with our product) and I believe was useful to that developer too, in terms of providing some insight to the other side of the problem. I don't get that kind of access to proprietary software developers - while it could be argued that I know a lot of Free software people, I also know a lot of other programmers and they're just not able to be so open about things, so both sides lose out. Or my new laptop's ethernet wasn't supported by the kernel in squeeze. I filed a bug requesting the driver be added (and pointing to the patch). The week I wrote the first draft of this article I saw confirmation that this had been done, and will be part of the final squeeze release. I think that's pretty impressive. (Thanks, Ben.)...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>(This is part of a series of posts on <a href="http://the.earth.li/~noodles/cgi-bin/mt/mt-search.cgi?blog_id=1&amp;tag=whylinux&amp;limit=20&amp;IncludeBlogs=1">Why Linux?</a>)</p>

<p>This is probably a non-obvious reason to run Linux to most people. One
of the complaints I've heard in the past is the lack of support for
Linux. It's not really relevant to running it on a work desktop (where
support is presumably from some central IT organisation), but I believe
it's a red herring. Support in the Free software world can exceed that
in the proprietary by an impressive margin. And that <em>can</em> turn out to
be useful at work, even if you do suppose the existence of central IT.</p>

<p>The support I've received for Linux and applications under it has been,
on numerous occasions, excellent in a way I feel I could never expect
from the commercial software world. And when it isn't, I have the choice
of whomever I want to try and fix my problems, rather than being stuck
with no options.</p>

<p>I have found that if I am polite, and provide useful information, and
patient, I can talk directly to the developers who make the software I
use. If I have a patch they will often take it from me, or use it as a
basis for the final fix. If they are no longer available, or too busy,
then because I have the source I can find someone else to look at the
problem, or do so myself.</p>

<p>The chances of most large proprietary software companies giving me the
time of day is low. I don't understand why small businesses think that
Windows is a safer choice due to being able to get support from
Microsoft.</p>

<p>Again using experience gained at Black Cat, at one point we had a
problem with IPv6 routes being updated. Signs pointed to Quagga, Simon
collected relevant information and got in contact with the Quagga devs.
They investigated, realised it wasn't a problem with their code, and
then proceeded to find the issue in the Linux kernel, produce the fix
and pass it upstream. Within hours of us reporting the problem. I'll
accept that's an exceptional response that can be matched within the
proprietary software world, but not without a hefty support contract and
I doubt you would have got a response other than "Not our fault, talk to
the other supplier", or maybe a workaround at best.</p>

<p>More recently, I had a conversation about Linux and discard support, with one of the people who'd worked on it. Very interesting from my PoV, useful to my work (I ended up fixing something in our code base that led to the Linux support Just Working with our product) and I believe was useful to that developer too, in terms of providing some insight to the other side of the problem. I don't get that kind of access to proprietary software developers - while it could be argued that I know a lot of Free software people, I also know a lot of other programmers and they're just not able to be so open about things, so both sides lose out.</p>

<p>Or my new laptop's ethernet wasn't supported by the kernel in squeeze. I filed a bug requesting the driver be added (and pointing to the patch). The week I wrote the first draft of this article I saw confirmation that this had been done, and will be part of the final squeeze release. I think that's pretty impressive. (Thanks, Ben.)</p></div>
    </content>
    <updated>2011-04-17T06:48:39Z</updated>
    <published>2011-04-17T06:46:17Z</published>
    <category label="whylinux" scheme="http://www.sixapart.com/ns/types#tag" term="whylinux"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:pgregg.com,2010:/blog//2.340</id>
    <link href="http://pgregg.com/blog/2010/04/the-o2-joggler---a-first-hack.html" rel="alternate" type="text/html"/>
    <title>The O2 Joggler - A first hack.</title>
    <summary>If you were not aware - O2 last week reduced the price of the O2 Joggler from £149.99 to £99.99 to £49.99.&amp;nbsp; Nothing remarkable in price reductions, however what is remarkable is what you actually get for your money.The O2 Joggler is a silent 7" touchscreen device with Intel Atom Z520 running at 1.3Ghz, 512Mb ram, 1GB internal flash storage with additional storage available via an external USB port. What makes the device really exciting is that it also has a 1GB ethernet (Realtec 8168) and Wifi.Looking at that - I know you're all thinking "linux box" - but conveniently,...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://pgregg.com/blog/assets_c/2010/04/devicev2-11.html"><img alt="devicev2.JPG" class="mt-image-right" height="149" src="http://pgregg.com/blog/assets_c/2010/04/devicev2-thumb-308x149-11.jpg" style="float: right; margin: 0pt 0pt 20px 20px;" width="308"/></a></span><br/>If you were not aware - O2 last week reduced the price of the O2 Joggler from <strike>£149.99 </strike>to <strike>£99.99</strike> to £49.99.  Nothing remarkable in price reductions, however what is remarkable is what you actually get for your money.<br/><br/>The O2 Joggler is a silent 7" touchscreen device with Intel Atom Z520 running at 1.3Ghz, 512Mb ram, 1GB internal flash storage with additional storage available via an external USB port. What makes the device really exciting is that it also has a 1GB ethernet (Realtec 8168) and Wifi.<br/><br/>Looking at that - I know you're all thinking "linux box" - but conveniently, the default operating system on it is based on Ubuntu 8.04 and busybox, The frontend is a custom flash driven UI developed by OpenPeak (makers of the Jogger which is rebadged by O2).<br/><br/>There are plenty of clever individuals over at <a href="http://hackthejoggler.freeforums.org/">http://hackthejoggler.freeforums.org/</a>and in the #mer channel on freenode who are working to allow the Joggler to run other Operating Systems such as Android, Ubuntu Netbook Edition, MID, even Windows and OSX.<br/><br/>However, the standard OS supplied is also pretty powerful and allows significant customisation.  You can <a href="http://jogglerwiki.info/index.php?title=Installing_Telnet">enable telnet</a> just by turning it on with a custom USB stick plugged in. To do some of the things I'll be describing here you will need to have started with that.<br/><br/>Once you can telnet in, the world opens up and you can do lots of things that you would expect* to be able to do in a linux system. (<i>* except run a web browser.... at this time - we don't have web access 
with the stock OS due to the custom flash GUI interface.</i>)<br/><br/>Lets install some useful utilities, how about perl, terminfo, irc clients, bit torrent, rsync, ssh/scp ?   Yes, I know what you're thinking - overnight silent downloads - no need to leave PC on... nice...<br/><br/>I've built several of these utilities with installation instructions and uploaded them over here:  <br/>  <a href="http://pgregg.com/projects/joggler/">http://pgregg.com/projects/joggler/</a><br/><br/>Feel free to download, examine, install etc.  Read the README on the download page - it explains how to do it. Most of the packs include an install.sh script that will provide an installation safety net - it won't overwrite existing files or libraries.<br/><br/>Usual disclaimers apply - you try these applications at your own risk. I accept no responsibility if you manage to brick, fry or otherwise trash your joggler.<br/><br/>Comments, suggestions for other applications are always welcome.<br/><br/><b>Update</b>: Thanks to NP - seems I was a little too brutal with the library stripping to keep the download sizes small and I missed some required libraries (that I mistakenly thought were in the standard Joggler distro).   I have rebuilt the following packages as they were missing some libs: rtorrent, rsync, sudo,ssh<br/>The screen package has been rebuilt too to add one final tweak (to the installer script) so it can be used by non-root users - the only difference you need to do is run the command: chmod 666 /dev/ptmp /dev/tty<br/><br/></div>
    </content>
    <updated>2011-04-16T16:05:25Z</updated>
    <published>2010-04-14T22:06:47Z</published>
    <category scheme="http://www.sixapart.com/ns/types#category" term="Joggler"/>
    <category scheme="http://www.sixapart.com/ns/types#category" term="Software"/>
    <category label="joggler" scheme="http://www.sixapart.com/ns/types#tag" term="joggler"/>
    <category label="o2 joggler" scheme="http://www.sixapart.com/ns/types#tag" term="o2joggler"/>
    <category label="rtorrent" scheme="http://www.sixapart.com/ns/types#tag" term="rtorrent"/>
    <author>
      <name>Paul Gregg</name>
      <uri>http://pgregg.com</uri>
    </author>
    <source>
      <id>tag:pgregg.com,2009-02-01:/blog//2</id>
      <link href="http://pgregg.com/blog/" rel="alternate" type="text/html"/>
      <link href="http://pgregg.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <title>Plop in the Ocean</title>
      <updated>2012-03-27T22:49:29Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:pgregg.com,2011:/blog//2.345</id>
    <link href="http://pgregg.com/blog/2011/04/what-16tb-raw-space-looks-like.html" rel="alternate" type="text/html"/>
    <title>What 16TB raw space looks like at home</title>
    <summary>I've been looking for some home backup solutions over the past couple of months. This has led me down both the do-it-yourself route and buying a ready-made solution.One of my requirements was that I wanted the solution to be more than just storage - otherwise I would have purchased a straight NAS box from the likes of Qnap, Netgear or if feeling rich Drobo. Most of these dedicated NAS boxes can be "rooted" to allow ssh access , however their CPUs are generally underpowered for general purpose use.Other requirements were that I wanted a reasonably small form factor and to...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">I've been looking for some home backup solutions over the past couple of months. This has led me down both the do-it-yourself route and buying a ready-made solution.<br/><br/>One of my requirements was that I wanted the solution to be more than just storage - otherwise I would have purchased a straight NAS box from the likes of Qnap, Netgear or if feeling rich Drobo. Most of these dedicated NAS boxes can be "rooted" to allow ssh access , however their CPUs are generally underpowered for general purpose use.<br/><br/>Other requirements were that I wanted a reasonably small form factor and to be able to use at least 4 SATA hard drives, preferably with hot swap ability. Hardware raid was not a requirement because I intended on using a Linux distribution with mdadm software raid.<br/><br/>In the end, I ended up building two boxes.<br/>The first, a home build, based on the <a href="http://linitx.com/viewproduct.php?prodid=12789&amp;sr=ts">CFI A7879 chassis</a> <a href="http://pgregg.com/blog/assets_c/2011/04/CFI_A7879_1-15.html"><img alt="CFI_A7879_1.jpg" class="mt-image-right" height="172" src="http://pgregg.com/blog/assets_c/2011/04/CFI_A7879_1-thumb-250x172-15.jpg" style="float: right; margin: 0pt 0pt 20px 20px;" width="250"/></a>with a <a href="http://www.mini-itx.com/store/?c=71#ga-d525tud">Gigabyte GA-D525TUD Dual Core Atom Mini-ITX Board</a>. <br/><a href="http://pgregg.com/blog/assets_c/2011/04/GA-D525TUD-18.html"><img alt="GA-D525TUD.jpg" class="mt-image-none" height="150" src="http://pgregg.com/blog/assets_c/2011/04/GA-D525TUD-thumb-200x150-18.jpg" style="" width="200"/></a><br/><br/><div>The second was a off-the-shelf <a href="http://h10010.www1.hp.com/wwpc/us/en/sm/WF05a/15351-15351-4237916-4237918-4237917-4248009.html">HP ProLiant Microserver</a> which, to be brutally honest, was because HP were offering <a href="http://h41112.www4.hp.com/promo/proliantmicroserver/pdf/PA0023-%C2%A350_off_Microserver_Offer_Apr_2011.pdf">£100 cashback</a> deal on it. This made the server much cheaper than you could possibly build yourself from components.<br/><a href="http://pgregg.com/blog/assets_c/2011/04/HP_Microserver-21.html"><img alt="HP_Microserver.jpg" class="mt-image-right" height="207" src="http://pgregg.com/blog/assets_c/2011/04/HP_Microserver-thumb-250x207-21.jpg" style="float: right; margin: 0pt 0pt 20px 20px;" width="250"/></a><br/></div><div>I added 4GB ram to each box (total 5GB in the HP box because it comes with 1GB).<br/><br/>The CFI boot drive is a 8GB (30MB/sec) CompactFlash card mounted as an 
IDE drive. The HP boot drive is a 16GB Sandisk Cruzer USB stick.<br/>
<br/>Finally added 4 x 2TB Samsung F4EG HD204UI drives to each box.<br/><br/>The CFI box has 8TB in RAID5 providing 5.4TB usable. The HP has 8TB in RAID6 providing 3.6TB usable space.<br/><br/>If there is more interest, I'll write up the build process is more detail with pictures.<br/><br/>For now - here are some shots of my utility shelf.<br/><br/><a href="http://pgregg.com/blog/assets_c/2011/04/IMG_20110411_173250-24.html"><img alt="IMG_20110411_173250.jpg" class="mt-image-none" height="320" src="http://pgregg.com/blog/assets_c/2011/04/IMG_20110411_173250-thumb-240x320-24.jpg" style="" width="240"/></a><a href="http://pgregg.com/blog/assets_c/2011/04/IMG_20110411_173740-27.html"><img alt="IMG_20110411_173740.jpg" class="mt-image-none" height="333" src="http://pgregg.com/blog/assets_c/2011/04/IMG_20110411_173740-thumb-250x333-27.jpg" style="" width="250"/></a><br/><br/><br/></div></div>
    </content>
    <updated>2011-04-11T18:44:39Z</updated>
    <published>2011-04-11T16:40:07Z</published>
    <category scheme="http://www.sixapart.com/ns/types#category" term="Systems"/>
    <category label="F4EG" scheme="http://www.sixapart.com/ns/types#tag" term="f4eg"/>
    <category label="HP Microserver" scheme="http://www.sixapart.com/ns/types#tag" term="hpmicroserver"/>
    <category label="Linux" scheme="http://www.sixapart.com/ns/types#tag" term="linux"/>
    <category label="NAS" scheme="http://www.sixapart.com/ns/types#tag" term="nas"/>
    <category label="Network-attached storage" scheme="http://www.sixapart.com/ns/types#tag" term="networkattachedstorage"/>
    <category label="RAID" scheme="http://www.sixapart.com/ns/types#tag" term="raid"/>
    <category label="Sandisk Cruzer" scheme="http://www.sixapart.com/ns/types#tag" term="sandiskcruzer"/>
    <category label="Serial ATA" scheme="http://www.sixapart.com/ns/types#tag" term="serialata"/>
    <category label="TB" scheme="http://www.sixapart.com/ns/types#tag" term="tb"/>
    <author>
      <name>Paul Gregg</name>
      <uri>http://pgregg.com</uri>
    </author>
    <source>
      <id>tag:pgregg.com,2009-02-01:/blog//2</id>
      <link href="http://pgregg.com/blog/" rel="alternate" type="text/html"/>
      <link href="http://pgregg.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <title>Plop in the Ocean</title>
      <updated>2012-03-27T22:49:29Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://martian.org/marty/?p=230</id>
    <link href="http://martian.org/marty/2011/03/12/my-room-after-the-quake/" rel="alternate" type="text/html"/>
    <link href="http://martian.org/marty/2011/03/12/my-room-after-the-quake/#comments" rel="replies" type="text/html"/>
    <link href="http://martian.org/marty/2011/03/12/my-room-after-the-quake/feed/atom/" rel="replies" type="application/atom+xml"/>
    <title xml:lang="en">My room, after the quake</title>
    <summary xml:lang="en">Thankfully, that is exactly how it looked before the quake. Nothing was damaged.</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://martian.org/marty/wp-content/uploads/2011/03/quake-room-2.jpg"><img alt="my room, after the quake" class="aligncenter wp-image-231" height="375" src="http://martian.org/marty/wp-content/uploads/2011/03/quake-room-2.jpg" title="quake-room-2" width="500"/></a></p>

<p>Thankfully, that is exactly how it looked before the quake.  Nothing was damaged.</p></div>
    </content>
    <updated>2011-03-17T14:41:04Z</updated>
    <published>2011-03-11T16:43:30Z</published>
    <category scheme="http://martian.org/marty" term="Uncategorized"/>
    <category scheme="http://martian.org/marty" term="quake"/>
    <author>
      <name>Marty</name>
      <uri>http://martian.org/marty/wp-atom.php</uri>
    </author>
    <source>
      <id>http://martian.org/marty/feed/atom/</id>
      <link href="http://martian.org/marty" rel="alternate" type="text/html"/>
      <link href="http://martian.org/marty/feed/atom/" rel="self" type="application/atom+xml"/>
      <subtitle xml:lang="en">Marty was here!</subtitle>
      <title xml:lang="en">バカな火星人</title>
      <updated>2012-01-11T13:16:06Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.255</id>
    <link href="http://www.earth.li/~noodles/blog/2011/03/another-2-wheels.html" rel="alternate" type="text/html"/>
    <title>Another 2 wheels</title>
    <summary>It's my birthday, so a week ago I bought myself a present: The office is 4.5 miles from the BART station, so up until now I've been taking a bus. Unfortunately the timings aren't that frequent (every 45-60 minutes). Plus I haven't been doing any exercise since I moved out here. Now it seems to be getting drier I figured it was time to sort out a bike. I wanted something flexible, and have heard nothing but good things from the Brompton owners I know, so that's what I ended up with. I'm very happy with it; despite my lack of recent exercise it's pretty easy to ride. I've actually found it doesn't take any longer than taking the bus, and is sometimes quicker, because I avoid having all of the waiting around for it. I bought it from Warm Planet Bikes, who were incredibly helpful. They had a selection in store that they let me try (and quite a few other models of folding bikes too) and when I made my decision it turned out they could do the customizations I wanted in shop. So rather than me having to order it and wait a month I was able to cycle away that same evening! Full marks to Matt for staying late to sort me out (plus he's a Brompton owner too)....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>It's my birthday, so a week ago I bought myself a present:</p>

<p><img alt="Red Brompton M3R folded" class="mt-image-center" height="480" src="http://www.earth.li/%7Enoodles/blog/2011/03/12/brompton-folded.jpg" style="text-align: center; display: block; margin: 0 auto 20px;" width="640"/></p>

<p>The office is 4.5 miles from the <a href="http://www.bart.gov/">BART</a> station, so up until now I've been taking a bus. Unfortunately the timings aren't that frequent (every 45-60 minutes). Plus I haven't been doing any exercise since I moved out here. Now it seems to be getting drier I figured it was time to sort out a bike. I wanted something flexible, and have heard nothing but good things from the <a href="http://www.brompton.co.uk/">Brompton</a> owners I know, so that's what I ended up with. I'm very happy with it; despite my lack of recent exercise it's pretty easy to ride. I've actually found it doesn't take any longer than taking the bus, and is sometimes quicker, because I avoid having all of the waiting around for it.</p>

<p>I bought it from <a href="http://www.warmplanetbikes.com/">Warm Planet Bikes</a>, who were incredibly helpful. They had a selection in store that they let me try (and quite a few other models of folding bikes too) and when I made my decision it turned out they could do the customizations I wanted in shop. So rather than me having to order it and wait a month I was able to cycle away that same evening! Full marks to Matt for staying late to sort me out (plus he's a Brompton owner too).</p>

<p><img alt="Red Brompton M3R" class="mt-image-center" height="480" src="http://www.earth.li/~noodles/blog/2011/03/12/brompton.jpg" style="text-align: center; display: block; margin: 0 auto 20px;" width="640"/></p></div>
    </content>
    <updated>2011-03-12T20:45:34Z</updated>
    <published>2011-03-12T20:23:36Z</published>
    <category label="101 things" scheme="http://www.sixapart.com/ns/types#tag" term="101things"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-05-12T15:50:36Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.254</id>
    <link href="http://www.earth.li/~noodles/blog/2011/02/notes-on-moving-to-america.html" rel="alternate" type="text/html"/>
    <title>Notes on moving to America</title>
    <summary>I've been out here for 6 months now. At the point in time I was coming out I was pointed at Andrew Pollock's On bootstrapping oneself in the US. I figure some extra data may be useful for anyone considering the same. I moved from the UK rather than Australia. Banking I sorted out my US banking long before I ever moved here; in fact I kicked the process off shortly after I accepted the move offer. Matthew had recommended the HSBC approach, so I did that. This meant when I arrived I had a credit card, debit card and check book. They also allow me to do really easy online transfers between my US and UK accounts. Mobile phone My mobile phone was something else that was dealt with before the move. I bought a Simple Mobile SIM off eBay. I thought I'd end up moving to a contract once I had a credit record here, but actually the $60/month unlimited tariff seems to be fairly reasonable. Their customer service leaves a lot to be desired, but I've sadly come to expect that from phone companies. I've got a Google Voice account which is the number I've been giving out, so it's easily for me to switch providers (or redirect things to a VOIP setup for when I'm back in the UK, but I've got a writeup to do for that at a later point in time). Finding somewhere to live One of my concerns was that it would be hard to find somewhere to live at short notice without any credit history or SSN. This turned out to be ill founded. Both of the managed apartment complexes I looked at were ok with the fact I'd just moved to the country and seemed used to such a setup. The place I went with is privately leased and was a bit more wary, but after a conversation with my US manager (who'd managed me even when I was in the UK) it was fine. Social Security Number AKA existing as an entity as far as the US is concern. I was told to wait at least 10 working days after entry before even applying for this, or I wouldn't be in the system and it could cause delays. I did so and the card turned up within about a week (I had been told up to 2 weeks). Which was good, because work were having problems figuring out how to pay me without one. You do seem to need the SSN for everything. The only times I can remember needing my National Insurance number in the UK is for new jobs and my E111 application. Driving licence I haven't ended up buying a car here; I pretty much don't need one most of the time and I've signed up to ZipCar for easy short term rentals - they're happy to take a UK licence for sign up. However I figured getting a licence here was a good idea in case I did decide to get a car, and even just for ID (I kept having to point people at the DOB on my UK licence - everywhere here seems to card). Applying for a licence ideally relies an SSN, so I did so a few days after I'd got that. I did the car + motorbike written tests and got my learner's permit. I applied for the car theory test the same day, but the first available slot was about 6 weeks later. During this period I did the CMSP basic RiderCourse, which meant that when I passed the car test I was also fully entitled to ride a motorbike here. Other useful notes As I live in the Bay Area I got myself a ClipperCard - it's like Oyster except without the clever discounts. Works on more agencies though and helps avoid having to sort out change. For broadband I went with Sonic.net - I'm in their ADSL2 coverage area so I'm getting a reasonable 17Mb/s connection. The other options were AT&amp;amp;T ADSL (slower) or Comcast cable (evil). I've had zero problems with Sonic; It Just Works. Also I sort of ended up with a trial run thanks to DebConf10 being in New York. Due to the way timings worked out this took place only a few weeks before my move to SF was scheduled. My banking and phone were already in place by this point, so it allowed me to check both were working ok. They were, and I didn't really expect them not to be, but it was a nice safety net to have for the move proper. Overall the main issue I had was that a lot of things were dependant on other things; get the SSN, get a learner's permit, apply for the practical test, wait for the licence to actually turn up etc. It probably took over 3 months for everything to actually happen and come through in the post. I can tell when I actually started to exist in the system because Capital One being junk mailing me about whether I want a credit card with them......</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>I've been out here for 6 months now. At the point in time I was coming
out I was pointed at Andrew Pollock's
<a href="http://blog.andrew.net.au/2006/01/01#bootstrapping">On bootstrapping oneself in the US</a>.
I figure some extra data may be useful for anyone considering the same.
I moved from the UK rather than Australia.</p>

<p><strong>Banking</strong></p>

<p>I sorted out my US banking long before I ever moved here; in fact I
kicked the process off shortly after I accepted the move offer.
<a href="http://mjg59.livejournal.com/">Matthew</a> had recommended the
<a href="http://www.hsbc.co.uk/">HSBC</a> approach, so I did that. This meant when
I arrived I had a credit card, debit card and check book. They also
allow me to do really easy online transfers between my US and UK
accounts.</p>

<p><strong>Mobile phone</strong></p>

<p>My mobile phone was something else that was dealt with before the move.
I bought a <a href="http://www.mysimplemobile.com/">Simple Mobile</a> SIM off
<a href="http://www.ebay.co.uk/">eBay</a>. I thought I'd end up moving to a
contract once I had a credit record here, but actually the $60/month
unlimited tariff seems to be fairly reasonable. Their customer service
leaves a lot to be desired, but I've sadly come to expect that from
phone companies. I've got a <a href="http://www.google.com/voice/">Google Voice</a>
account which is the number I've been giving out, so it's easily for me
to switch providers (or redirect things to a VOIP setup for when I'm
back in the UK, but I've got a writeup to do for that at a later point
in time).</p>

<p><strong>Finding somewhere to live</strong></p>

<p>One of my concerns was that it would be hard to find somewhere to live
at short notice without any credit history or SSN. This turned out to be
ill founded. Both of the managed apartment complexes I looked at were ok
with the fact I'd just moved to the country and seemed used to such a
setup. The place I went with is privately leased and was a bit more
wary, but after a conversation with my US manager (who'd managed me even
when I was in the UK) it was fine.</p>

<p><strong>Social Security Number</strong></p>

<p>AKA existing as an entity as far as the US is concern. I was told to
wait at least 10 working days after entry before even applying for this,
or I wouldn't be in the system and it could cause delays. I did so and
the card turned up within about a week (I had been told up to 2 weeks).
Which was good, because work were having problems figuring out how to
pay me without one.</p>

<p>You do seem to need the SSN for everything. The only times I can
remember needing my National Insurance number in the UK is for new jobs
and my E111 application.</p>

<p><strong>Driving licence</strong></p>

<p>I haven't ended up buying a car here; I pretty much don't need one most
of the time and I've signed up to <a href="http://www.zipcar.com/">ZipCar</a> for
easy short term rentals - they're happy to take a UK licence for sign
up. However I figured getting a licence here was a good idea in case I
did decide to get a car, and even just for ID (I kept having to point
people at the DOB on my UK licence - everywhere here seems to card).
Applying for a licence ideally relies an SSN, so I did so a few days
after I'd got that. I did the car + motorbike written tests and got my
learner's permit. I applied for the car theory test the same day, but
the first available slot was about 6 weeks later. During this period I
did the <a href="http://www.ca-msp.org/">CMSP</a> basic RiderCourse, which meant
that when I passed the car test I was also fully entitled to ride a
motorbike here.</p>

<p><strong>Other useful notes</strong></p>

<p>As I live in the Bay Area I got myself a
<a href="http://www.clippercard.com/">ClipperCard</a> - it's like
<a href="http://www.tfl.gov.uk/oyster">Oyster</a> except without the clever
discounts. Works on more agencies though and helps avoid having to sort
out change. For broadband I went with <a href="http://www.sonic.net/">Sonic.net</a>
- I'm in their ADSL2 coverage area so I'm getting a reasonable 17Mb/s
connection. The other options were AT&amp;T ADSL (slower) or Comcast cable
(<a href="http://gigaom.com/2010/11/29/forget-net-neutrality-comcast-might-break-the-web/">evil</a>).
I've had zero problems with Sonic; It Just Works.</p>

<p>Also I sort of ended up with a trial run thanks to
<a href="http://debconf10.debconf.org/">DebConf10</a> being in New York. Due to the
way timings worked out this took place only a few weeks before my move
to SF was scheduled. My banking and phone were already in place by this
point, so it allowed me to check both were working ok. They were, and I
didn't really expect them not to be, but it was a nice safety net to
have for the move proper.</p>

<p>Overall the main issue I had was that a lot of things were dependant on
other things; get the SSN, get a learner's permit, apply for the
practical test, wait for the licence to actually turn up etc. It
probably took over 3 months for everything to actually happen and come
through in the post. I can tell when I actually started to exist in the
system because Capital One being junk mailing me about whether I want a
credit card with them...</p></div>
    </content>
    <updated>2011-02-28T06:46:00Z</updated>
    <published>2011-02-28T06:42:01Z</published>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-04-24T06:00:34Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.253</id>
    <link href="http://www.earth.li/~noodles/blog/2011/02/my-squeeze-upgrade-notes.html" rel="alternate" type="text/html"/>
    <title>My Squeeze upgrade notes</title>
    <summary>I did my first upgrade of a lenny box to squeeze today; a test server in work. All went pretty smoothly but I had a handful of things I had to frob manually that I thought I'd write up here: collectd SNMP plugin needs MIBs or it won't start: installed snmp-mibs-downloader from non-free autofs starts before nis (#470573): added ypbind to the Required-Start: line in /etc/init.d/autofs and re-ran insserv NFS automounts now using NFSv4 instead of v3 and user/group mapping setting everything to nobody: Set NEED_IDMAPD=yes in /etc/default/nfs-common and ensure Domain in /etc/idmapd.conf is set to the correct domain name (look in /var/log/daemon.log for lines from rpc.idmapd saying "does not map into domain" to find out what this should be if you don't know). I think that's pretty smooth overall; kudos to all those involved. I've a few more boxes to upgrade, but they're all more likely to have people complaining at me if there are hiccups so they'll have to wait until I have a suitable block of time set aside....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>I did my first upgrade of a lenny box to squeeze today; a test server in work. All went pretty smoothly but I had a handful of things I had to frob manually that I thought I'd write up here:</p>

<ul>
<li>collectd SNMP plugin needs MIBs or it won't start: installed <code>snmp-mibs-downloader</code> from non-free</li>
<li><code>autofs</code> starts before <code>nis</code> (<a href="http://bugs.debian.org/470573">#470573</a>): added <code>ypbind</code> to the Required-Start: line in <code>/etc/init.d/autofs</code> and re-ran <code>insserv</code></li>
<li>NFS automounts now using NFSv4 instead of v3 and user/group mapping setting everything to nobody: Set <code>NEED_IDMAPD=yes</code> in <code>/etc/default/nfs-common</code> and ensure Domain in <code>/etc/idmapd.conf</code> is set to the correct domain name (look in <code>/var/log/daemon.log</code> for lines from rpc.idmapd saying "does not map into domain" to find out what this should be if you don't know).</li>
</ul>

<p>I think that's pretty smooth overall; kudos to all those involved. I've a few more boxes to upgrade, but they're all more likely to have people complaining at me if there are hiccups so they'll have to wait until I have a suitable block of time set aside.</p></div>
    </content>
    <updated>2011-02-08T06:00:45Z</updated>
    <published>2011-02-08T05:55:33Z</published>
    <category label="Debian" scheme="http://www.sixapart.com/ns/types#tag" term="debian"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-02-11T23:46:29Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.252</id>
    <link href="http://www.earth.li/~noodles/blog/2011/02/why-linux-part-6-freedom.html" rel="alternate" type="text/html"/>
    <title>Why Linux? (Part 6: Freedom)</title>
    <summary>(This is part of a series of posts on Why Linux?) I think of myself as reasonably pragmatic in my approach to Free/Open Source software. I don't get worked up over which set of language people want to use. I use devices that require binary firmware to be downloaded to them (because just because I can't see it doesn't mean it doesn't exist). I have non-free in my sources.list. And yet, talking to other Linux users these days, I realize I'm much more of a Freedom nut job than average. I want the source, be it for a driver, a minor widget, or a full app. I don't buy nVidia. I will sacrifice a degree of functionality in order to get Free. And while I think WINE is an excellent piece of software, I think the best end result is that it's no longer necessary, not that it's a perfect implementation of the ABI. How does any of this help justify my use of Linux in the work place? As previously mentioned, I'm a developer. Most developers don't operate in a vacuum; they have to inter-operate with other ecosystems. And usually somewhere along the line there's a failure to document exactly how something is handled, or an ambiguity about what exact choice might be taken. If I have access to the source then I can check that out for myself. If I don't, I have to guess. As an example, a long time ago I was involved in writing a serial console driver for QNX. There came a point where the behaviour wasn't quite as we'd expect. Although the organisation had a license for the source, I wasn't allowed to look at it. Instead I had to come up with a series of suitable questions that someone who could look at the source could answer without violating any NDAs. If I'd been able to look at the source directly we'd have all saved a lot of time. And that's an example where someone could look at the source, rather than having to make a bunch of guesses and instrument tests to see which was right. Access to the Linux source has helped me in other commercial contexts too. At Black Cat we were able to take advantage of patches like grsecurity in order to tighten up shell account boxes. I wrote the IPv6 support for l2tpns, because we had access to the source and could. I've been able to look at the source to understand exactly what SCSI responses are sent in certain circumstances too (or understand exactly what the error that a user land test program was getting back meant). Also I'm a big believe in Linus' Law. I do think that good Free software is much better than proprietary software (there's some really bad Free software out there though, I'm not disputing that). The fact that smart people can look at it and scratch whatever their itch is means that we get a gradual process of improvement that can't be ignored. Equally as long as someone has an interest in the software, end users can't be left high and dry by organisations abandoning still users applications. I think that should be a powerful driver to business to look towards Free software. (Before my more astute readers point it out; yes, I am employed writing non-free software. See the first sentence. One day I'll find a job working on Free software that ticks enough of the other boxes to be viable.)...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>(This is part of a series of posts on <a href="http://the.earth.li/~noodles/cgi-bin/mt/mt-search.cgi?blog_id=1&amp;tag=whylinux&amp;limit=20&amp;IncludeBlogs=1">Why Linux?</a>)</p>

<p>I think of myself as reasonably pragmatic in my approach to Free/Open Source software. I don't get worked up over which set of language people want to use. I use devices that require binary firmware to be downloaded to them (because just because I can't see it doesn't mean it doesn't exist). I have non-free in my <code>sources.list</code>.</p>

<p>And yet, talking to other Linux users these days, I realize I'm much more of a Freedom nut job than average. I want the source, be it for a driver, a minor widget, or a full app. I don't buy nVidia. I <strong>will</strong> sacrifice a degree of functionality in order to get Free. And while I think <a href="http://www.winehq.orq/">WINE</a> is an excellent piece of software, I think the best end result is that it's no longer necessary, not that it's a perfect implementation of the ABI.</p>

<p>How does any of this help justify my use of Linux in the work place? As previously mentioned, I'm a developer. Most developers don't operate in a vacuum; they have to inter-operate with other ecosystems. And usually somewhere along the line there's a failure to document exactly how something is handled, or an ambiguity about what exact choice might be taken. If I have access to the source then I can check that out for myself. If I don't, I have to guess. As an example, a long time ago I was involved in writing a serial console driver for QNX. There came a point where the behaviour wasn't quite as we'd expect. Although the organisation had a license for the source, I wasn't allowed to look at it. Instead I had to come up with a series of suitable questions that someone who <em>could</em> look at the source could answer without violating any NDAs. If I'd been able to look at the source directly we'd have all saved a lot of time. And that's an example where someone  <em>could</em> look at the source, rather than having to make a bunch of guesses and instrument tests to see which was right.</p>

<p>Access to the Linux source has helped me in other commercial contexts too. At Black Cat we were able to take advantage of patches like grsecurity in order to tighten up shell account boxes. I wrote the IPv6 support for l2tpns, because we had access to the source and could. I've been able to look at the source to understand exactly what SCSI responses are sent in certain circumstances too (or understand exactly what the error that a user land test program was getting back meant).</p>

<p>Also I'm a big believe in Linus' Law. I do think that good Free software is much better than proprietary software (there's some really bad Free software out there though, I'm not disputing that). The fact that smart people can look at it and scratch whatever their itch is means that we get a gradual process of improvement that can't be ignored. Equally as long as someone has an interest in the software, end users can't be left high and dry by organisations abandoning still users applications. I think that should be a powerful driver to business to look towards Free software.</p>

<p>(Before my more astute readers point it out; yes, I am employed writing non-free software. See the first sentence. One day I'll find a job working on Free software that ticks enough of the other boxes to be viable.)</p></div>
    </content>
    <updated>2011-02-07T01:50:30Z</updated>
    <published>2011-02-07T01:44:08Z</published>
    <category label="whylinux" scheme="http://www.sixapart.com/ns/types#tag" term="whylinux"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-01-23T00:01:03Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2011:/~noodles/blog//1.251</id>
    <link href="http://www.earth.li/~noodles/blog/2011/01/we-fear-undocumented-change.html" rel="alternate" type="text/html"/>
    <title>We fear undocumented change</title>
    <summary>I love revision control. I love the ability to track changes over time, whether that be to see why I changed something in the past, or to see why a particular thing has stopped working, or to see if a particular thing is fixed in a more recent version than the one I'm using. However I have a few opinions about the use of revision control that are obviously not shared by other people. Here are a few of them: One change per changeset. The only argument I can see against this is laziness. Changesets are cheap. Checking in multiple things in a single go makes it hard to work out exactly which piece of code fixes which problem. I'm fine with a big initial drops of code if logically it all needs to go together, but changesets that bundle up half a dozen different fixes piss me off. Descriptive changeset comments. Don't make me guess what you changed. Tell me. Bug numbers are not sufficient (though including them is really helpful). Comments in the changeset, not per file. I've only seen this with BitKeeper; you can have per file comments and then an overall changeset comment. At first I thought this was quite neat, because you can explain each part of a change. Now it just annoys me, because I want the relevant detail in one place rather than having to drill down to a per file level to figure out what's going on. The tree should always compile. There are people I respect who are all for checking in all the time throughout development no matter what the status. I have to disagree, at least for anything that's available to other people. The tree should always compile. This avoids pissing off your coworkers (especially if they're in a different timezone) and means you can do things like git bisect more easily. Plus it shows you've at least done minimal testing. Don't hide your tree. I like centralised locations for master trees. It means I can make an educated guess about where to look first for information about changes. Trees that live in obscure network shares or, worse, someone's home directory aren't helpful. While I may not always agree with the choice of VCS for the centralised service as long as it's actually fit for purpose I think it makes much more sense to use it than go off on a separate path that's less obvious for others to find....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>I love revision control. I love the ability to track changes over time,
whether that be to see why I changed something in the past, or to see
why a particular thing has stopped working, or to see if a particular
thing is fixed in a more recent version than the one I'm using.</p>

<p>However I have a few opinions about the use of revision control that are
obviously not shared by other people. Here are a few of them:</p>

<ul>
<li><p>One change per changeset.</p>

<p>The only argument I can see against this is laziness. Changesets are
cheap. Checking in multiple things in a single go makes it hard to
work out exactly which piece of code fixes which problem. I'm fine
with a big initial drops of code if logically it all needs to go
together, but changesets that bundle up half a dozen different fixes
piss me off.</p></li>
<li><p>Descriptive changeset comments.</p>

<p>Don't make me guess what you changed. Tell me. Bug numbers are not
sufficient (though including them is really helpful).</p></li>
<li><p>Comments in the changeset, not per file.</p>

<p>I've only seen this with BitKeeper; you can have per file comments
and then an overall changeset comment. At first I thought this was
quite neat, because you can explain each part of a change. Now it
just annoys me, because I want the relevant detail in one place
rather than having to drill down to a per file level to figure out
what's going on.</p></li>
<li><p>The tree should always compile.</p>

<p>There are people I respect who are all for checking in all the time
throughout development no matter what the status. I have to disagree,
at least for anything that's available to other people. The tree
should always compile. This avoids pissing off your coworkers
(especially if they're in a different timezone) and means you can do
things like git bisect more easily. Plus it shows you've at least
done <em>minimal</em> testing.</p></li>
<li><p>Don't hide your tree.</p>

<p>I like centralised locations for master trees. It means I can make an
educated guess about where to look first for information about
changes. Trees that live in obscure network shares or, worse,
someone's home directory aren't helpful. While I may not always agree
with the choice of VCS for the centralised service as long as it's
actually fit for purpose I think it makes much more sense to use it
than go off on a separate path that's less obvious for others to
find.</p></li>
</ul></div>
    </content>
    <updated>2011-01-28T05:42:54Z</updated>
    <published>2011-01-28T04:29:08Z</published>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2012-01-22T22:18:51Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:pgregg.com,2011:/blog//2.344</id>
    <link href="http://pgregg.com/blog/2011/01/experts-exchange-google-allfaqorg-dmca.html" rel="alternate" type="text/html"/>
    <title>Experts Exchange, Google, AllFAQ.org and misappropriation of copyright.</title>
    <summary>Opinion PieceI was googling (as a verb) and came across a rather peculiar message at the bottom of Google's search results:In response to a complaint we received under the US Digital Millennium Copyright Act, we have removed 1 result(s) from this page. If you wish, you may read the DMCA complaint that caused the removal(s) at ChillingEffects.org.Interesting - never saw that before!Following the link to Chilling Effects shows a copy of the complaint which has some interesting text in it.Experts-Exchange makes a detailed itemisation of their registered Copyrights, none of which I find objectionable, however, the complaint then goes on...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Opinion Piece<br/><br/>I was googling (as a verb) and came across a rather peculiar message at the bottom of Google's search results:<br/><br/><blockquote><span id="xjs" style=""><i>In response to a complaint we received under the <a href="http://www.google.co.uk/intl/en/dmca.html">US Digital Millennium Copyright Act</a>, we have removed 1 result(s) from this page. If you wish, you may <a href="http://www.chillingeffects.org/notice.cgi?sID=30399">read the DMCA complaint</a> that caused the removal(s) at ChillingEffects.org.</i></span><br/><span id="xjs" style=""/></blockquote><span id="xjs" style=""><i><br/></i></span>Interesting - never saw that before!<br/><br/>Following the link to <a href="http://www.chillingeffects.org/notice.cgi?sID=30399">Chilling Effects</a> shows a copy of the complaint which has some interesting text in it.<br/><br/>Experts-Exchange makes a detailed itemisation of their registered Copyrights, none of which I find objectionable, however, the complaint then goes on to list several issues against the Defendant, the first and most egregious of which is:<br/><br/><blockquote><i>a direct "copy and paste job" lifting the content of Plaintiff's question and answer forums and inserting them onto AllFAQ's website. AllFAQ's question and "Solutions" are verbatim to Experts-Exchange's questions and "Accepted Solutions;" </i><br/></blockquote><br/>From this <a href="http://experts-exchange.com/">Experts Exchange</a> is accusing <a href="http://allfaq.org/">allfaq.org</a> of Copyright infringement against Experts Exchange owned Copyright.<br/><br/>At first glance, this might seem fully justified - but look at what they are claiming copyright on.  Experts Exchange are assuming copyright ownership of content that you, and I, and all their users create by asking and answering questions on their web site.<br/><br/>I looked at Experts Exchange's <a href="http://www.experts-exchange.com/termsOfUse.jsp">Terms of Use</a> and could not find any agreement that users were assigning their rights and copyrights to Experts Exchange. The relevant paragraph is:<br/><br/><blockquote>"5. Content License<dl><dd>
         <p>
         EXPERTS EXCHANGE enables Members to post problems or questions, 
         proposed solutions or answers, information, comments and other content 
         ("Your Content") to its Site.  When you post Your Content to the Site, 
         you understand and agree that Your Content can be viewed and used by 
         other Members who visit the Site with or without attribution.
         </p>
         
         <p>
         You represent and warrant that you own or otherwise control all of the 
         rights to Your Content and that use of Your Content by EXPERTS 
         EXCHANGE and its affiliates will not infringe upon or violate the 
         rights of any third party. Before you use EXPERTS EXCHANGE Services to 
         post any information or content that is protected by intellectual 
         property laws, you shall have acquired the legal right to do so from 
         the owner or authorized licensee of such information or content.
         </p>
         
         <p>
         By registering with EXPERTS EXCHANGE and posting Your Content on the 
         Site, you hereby: (i) grant EXPERTS EXCHANGE a non-exclusive,
         perpetual, irrevocable, unrestricted, transferable, fully
         sub-licensable, worldwide, royalty-free license to use, distribute,
         display, reproduce, perform, modify, adapt, publish, translate and
         create derivative works from Your Content in any form, media or
         technology, whether now-known or hereafter developed; (ii) grant
         EXPERTS EXCHANGE and its affiliates and sub-licensees the right to use
         the Member Name that you submit with Your Content for purposes of
         attribution; (iii) authorize EXPERTS EXCHANGE to assert and prosecute
         claims against any third-party making any unauthorized use of Your
         Content, including any use that violates this User Agreement
         ("Third-Party Claims"); and (iv) appoint EXPERTS EXCHANGE as your
         attorney-in-fact for the purpose of asserting and prosecuting
         Third-Party Claims. If you do not wish to have Your Content attributed
         to you, then you must notify EXPERTS EXCHANGE at
            <a href="mailto:customer_service@experts-exchange.com">
            customer_service@experts-exchange.com</a>.
         </p>
      </dd></dl></blockquote><br/>Experts Exchange acknowledges that the copyright belongs to the author as "Your Content" and that by posting you are granting them extensive <b>licenses</b> to use that content. You are not assigning your copyright to Experts Exchange.<br/><br/>Now I am glad that their ToU does not attempt to wrest copyright ownership from its rightful owner, that is right and proper.<br/><br/>allfaq.org is demonstrably guilty of screen-scraping the Experts 
Exchange web site and I do not condone those actions at all. However, looking at what 
they copied - it was the Title, Question and Accepted Solution text - 
the copyright of 100% of that is with the original authors, and not 
Experts Exchange.<br/>
<br/>Thus, in my opinion, this complaint against allfaq.org is without merit and should be dismissed.<br/><br/>It would also appear that Experts Exchange has also abused the provisions of the DMCA in forcing Google to remove the content. Google should restore the links.<br/><br/>And finally, Experts Exchange should implement some technical measures to prevent automated scraping. Find better ways to improve your search ranking, and if your competition beats you don't <a href="http://www.experts-exchange.com/Web_Development/Internet_Marketing/Search_Engine_Optimization_SEO/Q_26271117.html">ask your own members how to do better SEO</a>; be told by them that you have no Copyright Claims on the content; and then proceed to file DMCA take down notices when you know you have no (copy)right.<br/><br/><br/><br/><br/></div>
    </content>
    <updated>2011-01-20T14:50:00Z</updated>
    <published>2011-01-19T21:50:45Z</published>
    <category scheme="http://www.sixapart.com/ns/types#category" term="General"/>
    <category scheme="http://www.sixapart.com/ns/types#category" term="Software"/>
    <category label="allfaq.org" scheme="http://www.sixapart.com/ns/types#tag" term="allfaqorg"/>
    <category label="copyright" scheme="http://www.sixapart.com/ns/types#tag" term="copyright"/>
    <category label="DMCA" scheme="http://www.sixapart.com/ns/types#tag" term="dmca"/>
    <category label="experts-exchange" scheme="http://www.sixapart.com/ns/types#tag" term="expertsexchange"/>
    <category label="google" scheme="http://www.sixapart.com/ns/types#tag" term="google"/>
    <author>
      <name>Paul Gregg</name>
      <uri>http://pgregg.com</uri>
    </author>
    <source>
      <id>tag:pgregg.com,2009-02-01:/blog//2</id>
      <link href="http://pgregg.com/blog/" rel="alternate" type="text/html"/>
      <link href="http://pgregg.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <title>Plop in the Ocean</title>
      <updated>2012-03-27T22:49:29Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.mccartney.ie/wordpress/?p=220</id>
    <link href="http://www.mccartney.ie/wordpress/2011/01/apple-mac-toolbox/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=apple-mac-toolbox" rel="alternate" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2011/01/apple-mac-toolbox/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=apple-mac-toolbox#comments" rel="replies" type="text/html"/>
    <link href="http://www.mccartney.ie/wordpress/2011/01/apple-mac-toolbox/feed/atom/" rel="replies" type="application/atom+xml"/>
    <title xml:lang="en">Apple Mac Toolbox</title>
    <summary xml:lang="en">Following up on my recent post on the engineers toobox, I’ve just rebuilt my Apple MacBook (newer, bigger hard disk was the perfect opportunity for a fresh Snow Leopard install and to fix some annoying iPhoto index &amp; thumbnail corruption), so here’s my list of essentials for my MacBook, in no particular order: Evernote SpanningSync [...]</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>Following up on my recent post on the <a href="http://www.mccartney.ie/wordpress/2010/06/15/the-new-toolbox/">engineers toobox</a>, I’ve just rebuilt my Apple MacBook (newer, bigger hard disk was the perfect opportunity for a fresh Snow Leopard install and to fix some annoying iPhoto index &amp; thumbnail corruption), so here’s my list of essentials for my MacBook, in no particular order:</p>
<ul>
<li>Evernote</li>
<li>SpanningSync</li>
<li><a href="http://www.dropbox.com">Dropbox</a></li>
<li>Last.fm</li>
<li>Xmarks for Safari</li>
<li>Xmarks for Firefox</li>
<li>Panic Coda</li>
<li>Thunderbird 3.x
<ul>
<li>British Dictionary</li>
<li>Enigmail</li>
<li>Google Contacts</li>
<li><a href="http://mailredirect.mozdev.org/">Mail Redirect</a></li>
<li><a href="https://addons.mozilla.org/af/thunderbird/addon/2487/">Nostalgy</a></li>
<li><a href="https://addons.mozilla.org/ja/thunderbird/addon/2516/">Mnenhy</a> (view a custom set of headers)</li>
<li><a href="http://www.groovypost.com/howto/geek-stuff/allow-thunderbird-3-to-download-and-display-images-automatically/">Display Remote Images automatically</a></li>
<li>Custom Archive folder (<a href="http://kb.mozillazine.org/Thunderbird_3.0_-_New_Features_and_Changes#New_.22Archives.22_Folder">one big bucket please</a>)</li>
</ul>
</li>
<li>Adium</li>
<li>VMWare Fusion</li>
<li>iPhoto</li>
<li>iMovie</li>
<li>QuickSilver</li>
<li>Microsoft Office</li>
<li>Google Chrome</li>
<li>Flickr Uploader</li>
<li>Skype</li>
<li>Google Picasa</li>
<li>Get iPlayer Automator</li>
<li>Cyberduck</li>
<li>MacVim</li>
<li>Spotify</li>
<li>iSquint</li>
<li>AudioHub</li>
<li>VisualHub</li>
<li>SuperSync</li>
<li>TweetDeck</li>
<li><a href="http://clicktoflash.com/">ClickToFlash</a></li>
<li>Growl</li>
</ul></div>
    </content>
    <updated>2011-01-17T13:09:54Z</updated>
    <published>2011-01-17T13:09:54Z</published>
    <category scheme="http://www.mccartney.ie/wordpress" term="Random Toad"/>
    <author>
      <name>simonm</name>
      <uri>http://www.mccartney.ie/blog</uri>
    </author>
    <source>
      <id>http://www.mccartney.ie/wordpress/feed/atom/</id>
      <link href="http://www.mccartney.ie/wordpress" rel="alternate" type="text/html"/>
      <link href="http://www.mccartney.ie/wordpress/feed/atom/" rel="self" type="application/atom+xml"/>
      <subtitle xml:lang="en">too boring to have a real blog</subtitle>
      <title xml:lang="en">ze blog of simon</title>
      <updated>2012-04-12T11:49:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://redbrain.co.uk/?p=628</id>
    <link href="http://redbrain.co.uk/index.php/update/frustration/" rel="alternate" type="text/html"/>
    <title>Frustration</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Happy new year everyone I hope your all well and having a nice fresh start. I am going through a bit of a rough patch this last few months its been fairly difficult to deal with things, and I’ve found myself going though some depression because of it all. Mainly because of University this is [...]</p></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Happy new year everyone I hope your all well and having a nice fresh start. I am going through a bit of a rough patch this last few months its been fairly difficult to deal with things, and I’ve found myself going though some depression because of it all. Mainly because of University this is my final year i just wanted to finish it so i can go out and work properly again but the sheer frustration i have  with my university is nearly destroying me. Its nothing to do with the cliché of Tuition fee’s or anything like that its with the Lectures the modules and content being taught and how its being taught.</p>
<p>So for example i thought i would go and take the Compiler Module there last  semester, found out the lecturer has absolutely no clue. I mean i now have <a href="mailto:redbrain@gcc.gnu.org">redbrain@gcc.gnu.org</a> i post _loads_ of help to   bison-help gcc-help comp.compilers am a project lead on the python front-end for gcc and am working in my own ideas for front and middle end interaction for gcc. I’d like to think i know how to build   compiler since i have write an  interpreter for a dynamic language I’ve designed i’ve write a compiler from scratch for a basic language called Mod that outputs i386 code has  code ready to handle  optimisations a well formed IR called mod-dot. Then i start this module we get given an absolutely terrible compiler for this Mod language written in Java that outputs some insane weird   instruction set  that cant be assembled or linked… And the laxer and parser code is unbelievably disgusting and is written clearly by someone who doesn’t know how to build a compiler along with the  fact our lecturer thinks you _need_ EBNF to handle this very basic dialect of modular we call mod. So i tough yeah i will write my own from scratch and i did its over at <a href="http://code.redbrain.co.uk/cgit.cgi/qub-mod-c/">code.redbrain.co.uk</a>. Its 10x  clearer cleaner and easier to understand, and remember this is a lecturer trying to teach compiler development not only was the parser code hard and very ugly they never go into anything like DFA or  LR or LALR or decent regular expressions for the lexer. Its this hugely protracted view of how a compiler could work and in the end teaches nothing but scares students. And then the backend to this  compiler was truly awful it has pretty much Zero IR structure in it using nothing but statics to in a hackish way get the job done. We had 3 assignments to extend this compiler i pretty much ignored  them and just worked at my own since it did the job 10x better and more clearly and easier and it output code you could run! Anyone onto my Mathematics module, all i can say is thank flip this is my  last mathematics module i will _ever_ do i my life i mean when i started my Degree in Mathematics and Computer Science i liked Math in high school it was the only subject i was good at i mean i  enjoyed solving the problems. But in University all i have done is work at pretty much utterly random topic after topic with little or no coherence between anything so you literal would learn off module  for the exam forget everything move onto the next one. And i will _never_ use anything have learned from it again, i was hoping with mathematics i would learn decent logic and problem solving skills but i have learnt nothing. all i want to do is erase the name Chebsev the Russian mathematician out of my brain for the utterly random crap of his i have had to learn. I mean i try going to lectures but i usually don’t bother any-more it depresses me so much i don’t sleep at all these days the its bothered me so much to the fact i struggle to get motivated to work on my personal gcc stuff.</p>
<p>I mean what do people want degree’s for. I mean i am not stupid far from it i just want a life and at the moment i don’t have one. I mean i have been contacted by Google and Cisco for interviews for which i didn’t even apply for!!! And all of that has been down to working in open source with Gcc and absolutely _nothing_ to do with my degree i seriously doubt i will _ever_ use anything of my degree ever again.</p>
<p>Then my 3rd module at the moment is concurrent programming it was ok but seriously the lecturers at my uni need to grow up absolutely everything in my uni in the computer science dept is 20% practical at max then 80% theory. So i mean wtf people come out not able to program or know how anything works.</p>
<p>I know people in my computer science classes don’t know what ram is what hard drives look like and how to even build a simple desktop computer… Then even worse everything is windows the word Unix doesn’t get edge way unless its MacOS then programming languages Jezz don’t get me started. Everyone has this knee jerk reaction to the word C and start arguing like a gaggle of geese. I mean C is my fav language its simple it forces people to understand their computer, but in uni is Java or nothing and to be honest Java is absolutly killing university graduates creating drones who have absolutly no idea how a computer works or how to build software.</p>
<p>If universities were to teach C along side a decent i386 assembler to learn an instruction set then into a project each year of university students would get experience and get a portfolio of work and abilities and could do a project in anything that would interest them and if they learn C they are _not_ limited into what they could do since if you learn Java you will find moving to something else a complete struggle for a long time since you learn so many bad habits.</p>
<p>Right now i have exams coming up which is what i hate we do out winter semester then have exams after Christmas it makes you not able to enjoy the holiday what so ever but the thing that kills me the most i know i am better at anyone in my compiler module there only are like 15 of us and not one of them barley handed in their assignment but i know some ass kisser will get like 90% in the module and i will come out with like %50 making me look like an ass since i am redbrain@gcc.gnu.org but the problem is if you look at the exam is nothing but these utterly random questions directly related to this Java compiler they produced that is just a mess. I mean the worst part is those people will be able to focus and revise for it but i cant i have always have to do 90% revision on my math modules and like 1 nights revision for computer science Math has just been so incredibly difficult simply because is incredibly random and pointless. Plus the lecture i had for my math module had his head so far up his ass its been insane he has not even once been remotly helpful to me putting assignments online or anything i have had so many assignments to do this semester i was stuggling to keep my head above water and because i do 2 subjects unlike most people i am the only person in my situation and i get absolutely no help and there is absolutely no standard across the board.</p>
<p>I really don’t understand why people put so much faith in degrees when i graduate i will come out with a plethora of open source experience and actual code people can look at an peruse which many people already do use my work as a reference in the real world.</p>
<p>And thing is i just want to be free of this degree its really killing me karma at the moment i just want to be able to rest properly. I am so on edge and i really don’t mix well with people in my class most really don’t care about a computers more into parting and just revising crap for exams and really have zero understanding of real world applications.</p>
<p>Yeah so that leads me into my concurrent programming module i mean it started off ok but i mean it was sooo java centric it was silly in how you can program monitors etc but i mean still it was so Java centric that to reuse what he was doing outside of it would be difficult to say the least so basically i was crap then the last part of the module which makes up one third of it was to do with some dudes PHD project this super niche idea of modelling concurrent processes which in the end was just finite state machines but just retarded let me find it <a href="http://www.doc.ic.ac.uk/~jnm/book/">http://www.doc.ic.ac.uk/~jnm/book/</a> i mean this book was just a heap of crap academics are ruining software i mean they absolutely have no clue outside of their super niche world absolutely nothing in there is helpful to anyone outside of Java land.</p>
<p>I mean at university you should be learning more general skills and abilities to be able to adapt and not be sand-boxed into these real niches where you cant escape.</p>
<p>I always said to myself i don’t want to blame university for everything that’s why i have done so much of my own work and projects and open source because then i actually have work people already use and can see and judge me based on that i just hope when i get out of here people will judge me based on that not my degree because at this stage i could have got a 1st but my marks are at 2:1 2:2 ish since the maths modules kill me so much since i do half a maths degree and half a computer science degree its not meshed into one thing. Right now all i want is to get a 3rd do min work on my degree to keep my self happy because right now i am just so depressed i cant sleep properly and it keeps making me sick.</p>
<p>I am just happy i have my friends and keeping things into perspective the odd time is nice since i have been out of routine not on identi.ca that much not keeping up with Linux outlaws which i really miss and i really miss my Linux outlaws friends. One of the happiest times of my life was in Liverpool with everyone i hope your all doing well sorry for this super rant i just really needed to get this down on paper to let it all out so i can go for a walk I’m feeling a lot better now.</p>
<p>PS: sorry for grammar and spelling mistakes i just needed to get this all off my chest i have some cool things to show in the next while after this few weeks are over me.</p></div>
    </content>
    <updated>2011-01-03T15:32:43Z</updated>
    <category term="Update!"/>
    <author>
      <name>redbrain</name>
    </author>
    <source>
      <id>http://redbrain.co.uk</id>
      <link href="http://redbrain.co.uk/index.php/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://redbrain.co.uk" rel="alternate" type="text/html"/>
      <subtitle>Frustrated Software Developer</subtitle>
      <title>RedBrain @ $HOME : ~ $</title>
      <updated>2011-11-16T18:17:06Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2010:/~noodles/blog//1.250</id>
    <link href="http://www.earth.li/~noodles/blog/2010/12/why-linux-part-5-flexibility.html" rel="alternate" type="text/html"/>
    <title>Why Linux? (Part 5: Flexibility)</title>
    <summary>(This is part of a series of posts on Why Linux?) I find Linux more flexible. Maybe that's the familiarity showing, maybe it's about the package management, but it's a powerful reason for me to use it. For example, a couple of years ago I wanted to try out some iSCSI stuff against a SAN. Of course I have test boxes available I can do this on, but this was just to try out a few bits and pieces rather than anything more concrete. So I installed open-iscsi on my desktop and was able to merrily do the tests I wanted with very little additional work. Or I wanted to try out some BitKeeper to git conversion work recently. I wasn't sure how much resource it would take on a build server, and didn't want to tie things up there. So I ran it on my desktop overnight, where I could easily setup the appropriate environment and wouldn't impact on anyone else's resources. Problems talking to dodgy hardware? Linux is much better about giving you some idea what's going on, without needing to install extra software. I had a workmate grappling with an old USB music player recently; hooking it up to her Windows laptop wasn't providing a lot of joy so I attached it to my Linux box and was able to see that it did identify ok, but was disconnecting randomly at times too. Want to script querying an AD server for the current employee list and displaying who's joined and who's left since the last time you did so? I found that easy enough with the common Linux LDAP tools. I'm sure it's doable under Windows too, but I'm not sure it would be quite so simple. For bonus points add graphviz into the mix for automatic organisation charts (modulo accuracy of the AD data). This flexibility is something that helps me do my job. Sure, as I mentioned above I do have access to test boxes that I can use for this, but being able to do it on my desktop can be useful - for example if I'm offline, or on a slow network connection, or just geographically distant from my test machines so network latency is higher than I'd like. (Also, it's something that makes a Linux box a really great test box. I'm lucky in that I have a mix of OSes available to me for testing, but the one that I use most often is the Debian box. Much easier to get and install decent diagnosis tools for it that can give me packet level dumps, or do really odd stuff that turns out to be really useful.)...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>(This is part of a series of posts on <a href="http://the.earth.li/~noodles/cgi-bin/mt/mt-search.cgi?blog_id=1&amp;tag=whylinux&amp;limit=20&amp;IncludeBlogs=1">Why Linux?</a>)</p>

<p>I find Linux more flexible. Maybe that's the familiarity showing, maybe
it's about the package management, but it's a powerful reason for me to
use it.</p>

<p>For example, a couple of years ago I wanted to try out some iSCSI stuff
against a SAN. Of course I have test boxes available I can do this on,
but this was just to try out a few bits and pieces rather than anything
more concrete. So I installed <a href="http://www.open-iscsi.org/">open-iscsi</a> on my desktop and was able to merrily do the tests I wanted with very little additional work.</p>

<p>Or I wanted to try out some BitKeeper to git conversion work recently. I
wasn't sure how much resource it would take on a build server, and
didn't want to tie things up there. So I ran it on my desktop overnight,
where I could easily setup the appropriate environment and wouldn't
impact on anyone else's resources.</p>

<p>Problems talking to dodgy hardware? Linux is much better about giving
you some idea what's going on, without needing to install extra
software. I had a workmate grappling with an old USB music player
recently; hooking it up to her Windows laptop wasn't providing a lot of
joy so I attached it to my Linux box and was able to see that it did
identify ok, but was disconnecting randomly at times too.</p>

<p>Want to script querying an AD server for the current employee list and
displaying who's joined and who's left since the last time you did so?
I found that easy enough with the common Linux LDAP tools. I'm sure it's
doable under Windows too, but I'm not sure it would be quite so simple.
For bonus points add graphviz into the mix for automatic organisation
charts (modulo accuracy of the AD data).</p>

<p>This flexibility is something that helps me do my job. Sure, as I
mentioned above I do have access to test boxes that I can use for
this, but being able to do it on my desktop can be useful - for example
if I'm offline, or on a slow network connection, or just geographically
distant from my test machines so network latency is higher than I'd
like.</p>

<p>(Also, it's something that makes a Linux box a really great test box.
I'm lucky in that I have a mix of OSes available to me for testing, but
the one that I use most often is the Debian box. Much easier to get and
install decent diagnosis tools for it that can give me packet level
dumps, or do really odd stuff that turns out to be really useful.)</p></div>
    </content>
    <updated>2010-12-30T11:20:45Z</updated>
    <published>2010-12-30T11:18:15Z</published>
    <category label="whylinux" scheme="http://www.sixapart.com/ns/types#tag" term="whylinux"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2011-11-26T00:32:16Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2010:/~noodles/blog//1.249</id>
    <link href="http://www.earth.li/~noodles/blog/2010/12/why-linux-part-4-package-manag.html" rel="alternate" type="text/html"/>
    <title>Why Linux? (Part 4: Package Management)</title>
    <summary>(This is part of a series of posts on Why Linux?) I've run a number of distros in my time. I ended up on Debian near the end of 1999, and part of the drive for that was the number of packages available in one centralised location. Decent package management is a definite strength of Linux (or FreeBSD) over proprietary operating systems. It derives from the freedom aspect, but means you can end up with one source for all (or most) of your software, that's compiled against the same set of libraries, with one way to track what owns what. This may not seem like a big thing, especially if you're a hobbyist or are coming from a Windows background. Reinstalling is often seen as a necessary regular requirement. Personally I've got better things to do with my time. If I want to try out a piece of software I want to be able to install it safe in the knowledge I know exactly what files it owns and where there are. And I want it to be able to tell me what other common components it needs that I might not already have. Then if I decide it's not for me I can cleanly remove it and anything else it pulled in that I no longer need. Don't underestimate this. This is useful on all of my machines. I can query the version number of everything installed. I can check for updates with one command (no need for every piece of installed software to have its own updater implementation). Software can share libraries correctly rather than stashing their own private copies, meaning I get bug fixes and security updates. (Yes, sometimes authors bundle even in the Linux world. Stop it.) I'm a developer. I tend to interact with a lot of different systems, of different types. It's really handy to have access to a wide range of tools to help me with that, know that there's legally no problem with me installing them, be able to do so with a single command and, should they turn out to be unsuitable, know I can cleanly remove them with another single command. This is a definite win in the work context. Equally I've been a sysadmin for multiple machines at once. Being able to login to each of them and check that everything is up to date is damn handy. Being able to easily install software for customers tends to make you popular too. And being able to rebuild boxes (or build additional boxes to share load) with the same setup is a lot easier with a decent package manager too. And, to pre-empt any responses about how a lot of this is possible under, say, Windows, yes, it is. I've spent some time in the past building packages for commercial deployment using Novadigm's Radia tool. I'm aware that Windows integral package management has also got better over time. I still think dpkg/apt (or rpm/yum) is far more powerful. And, for the end user, mostly easier as well - distros are building pre-prepared packages for you, rather than you having to do it yourself like with Radia....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>(This is part of a series of posts on <a href="http://the.earth.li/~noodles/cgi-bin/mt/mt-search.cgi?blog_id=1&amp;tag=whylinux&amp;limit=20&amp;IncludeBlogs=1">Why Linux?</a>)</p>

<p>I've run a number of distros in my time. I ended up on Debian near the
end of 1999, and part of the drive for that was the number of packages
available in one centralised location. Decent package management is a
definite strength of Linux (or FreeBSD) over proprietary operating
systems. It derives from the freedom aspect, but means you can end up
with one source for all (or most) of your software, that's compiled
against the same set of libraries, with one way to track what owns what.</p>

<p>This may not seem like a big thing, especially if you're a hobbyist or
are coming from a Windows background. Reinstalling is often seen as a
necessary regular requirement. Personally I've got better things to do
with my time. If I want to try out a piece of software I want to be able
to install it safe in the knowledge I know exactly what files it owns
and where there are. And I want it to be able to tell me what other
common components it needs that I might not already have. Then if I
decide it's not for me I can cleanly remove it and anything else it
pulled in that I no longer need.</p>

<p>Don't underestimate this. This is useful on all of my machines. I can
query the version number of everything installed. I can check for
updates with one command (no need for every piece of installed software
to have its own updater implementation). Software can share libraries
correctly rather than stashing their own private copies, meaning I get
bug fixes and security updates. (Yes, sometimes authors bundle even in
the Linux world. Stop it.)</p>

<p>I'm a developer. I tend to interact with a lot of different systems, of
different types. It's really handy to have access to a wide range of
tools to help me with that, know that there's legally no problem with me
installing them, be able to do so with a single command and, should they
turn out to be unsuitable, know I can cleanly remove them with another
single command. This is a definite win in the work context.</p>

<p>Equally I've been a sysadmin for multiple machines at once. Being able
to login to each of them and check that everything is up to date is damn
handy. Being able to easily install software for customers tends to make
you popular too. And being able to rebuild boxes (or build additional
boxes to share load) with the same setup is a lot easier with a decent
package manager too.</p>

<p>And, to pre-empt any responses about how a lot of this is possible
under, say, Windows, yes, it is. I've spent some time in the past
building packages for commercial deployment using Novadigm's Radia tool.
I'm aware that Windows integral package management has also got better
over time. I still think dpkg/apt (or rpm/yum) is far more powerful.
And, for the end user, mostly easier as well - distros are building
pre-prepared packages for you, rather than you having to do it yourself
like with Radia.</p></div>
    </content>
    <updated>2010-12-22T02:20:16Z</updated>
    <published>2010-12-22T02:12:55Z</published>
    <category label="whylinux" scheme="http://www.sixapart.com/ns/types#tag" term="whylinux"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2011-11-08T06:13:25Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2010:/~noodles/blog//1.248</id>
    <link href="http://www.earth.li/~noodles/blog/2010/12/contract-free-phones-are-the-w.html" rel="alternate" type="text/html"/>
    <title>Contract free phones are the way forward</title>
    <summary>Russell complains about locked down phones and horrible telcos, in particular about not getting a discount on your monthly contract if you don't get a phone with it. This hasn't been my experience, either in the UK or since I moved to the US. In the UK I ended up on an O2 Simplicity (month-by-month) plan which provided more minutes, SMSes and data allowance that I needed for £20/month (note that I only use the data for the phone, I didn't tether it to my laptop). Originally I chose this because I wasn't sure about coverage where I lived (that's why I was changing provider), but it turned out to be a pretty good deal, saving me at least £10/month over a contract that I'd have been tied into. When the G1 was launched I wasn't interested in moving to T-Mobile, who I knew had no 3G coverage outside of Belfast, so I ended up with one off eBay (received as a gift) and kept my O2 contract. When I moved to the US I signed up to Simple Mobile mainly because I could get a SIM from eBay before I left the UK, and it was PAYG (so the fact I'd no credit record didn't matter) but still included unlimited voice/SMS/data. Significantly more expensive at $60/month than I was used to paying in the UK, but seemed to be the going rate even for a contract. Then the G2 launched back in October. I resisted for 2 or 3 weeks, then decided it had to be mine. The G1's battery was even worse than it had been (to be fair it had lasted 2 years), and although Cyanogen provided Android 2.2 the hardware isn't really up to it. I decided to go with T-Mobile; Simple Mobile use their network, so I knew the coverage would be fine, and I figured a contract was probably a good way to help get a credit record here. Except, the pricing was a bit weird. $200 for the phone with a 2 year $80/month contract or $500 for the phone with an identical contract but no tie in and $60/month. Er, what? I pay up front and I save $180 and I can walk away whenever I want? Ok. As it turned out this was the smart choice. Firstly $60/month means $60/month plus taxes[0], so I was paying more than I paid Simple Mobile. I figured I could bear that for a few months to get the credit history, plus the free network unlock after 3 months. Except then it became clear that international SMS wasn't included in the unlimited SMS (it is with Simple). Most of my SMS is international. Now, T-Mobile have a $5/month bolt on to cover that, but not if you're on their flexpay scheme because they found themselves unable to verify your SSN. So I cancelled the contract after the first month and moved back to Simple. I didn't even need to unlock the phone due to the fact it's the same network (though I have now in preparation for my trip back to the UK over Christmas). Surprisingly T-Mobile didn't try and keep me by sorting out the international SMS bolt on. I guess US mobile customers are used to being screwed over (certainly the pricing suggests that). Er, sorry, that turned into a bit of a T-Mobile rant. My original point was that all of my recent mobile contracts have been month by month, not involved a subsidised phone, and saved me money over being tied in. And even if they hadn't my experiences with the flexibility offered by not being tied in (worries about coverage, discovering the deal isn't as good as you thought) mean that I'm pretty much convinced that contract-free is the way to go anyway. [0] Dear America, for all your complaints about VAT it's not really a lot different from sales tax and at least the prices in shops/online actually include it. Also it's the same everywhere in the country....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://etbe.coker.com.au/">Russell</a> complains about
<a href="http://etbe.coker.com.au/2010/12/19/locked-down-phones-and-horrible-telcos/">locked down phones and horrible telcos</a>,
in particular about not getting a discount on your monthly contract if
you don't get a phone with it.</p>

<p>This hasn't been my experience, either in the UK or since I moved to the
US. In the UK I ended up on an <a href="http://www.o2.co.uk/">O2</a> Simplicity
(month-by-month) plan which provided more minutes, SMSes and data
allowance that I needed for £20/month (note that I only use the data for
the phone, I didn't tether it to my laptop). Originally I chose this
because I wasn't sure about coverage where I lived (that's why I was
changing provider), but it turned out to be a pretty good deal, saving
me at least £10/month over a contract that I'd have been tied into. When
the G1 was launched I wasn't interested in moving to T-Mobile, who I
knew had no 3G coverage outside of Belfast, so I ended up with one
off eBay (received as a gift) and kept my O2 contract.</p>

<p>When I moved to the US I signed up to
<a href="http://www.mysimplemobile.com/">Simple Mobile</a> mainly because I could
get a SIM from eBay before I left the UK, and it was PAYG (so the
fact I'd no credit record didn't matter) but still included unlimited
voice/SMS/data. Significantly more expensive at $60/month than I was
used to paying in the UK, but seemed to be the going rate even for a
contract.</p>

<p>Then the G2 launched back in October. I resisted for 2 or 3 weeks, then
decided it had to be mine. The G1's battery was even worse than it had
been (to be fair it had lasted 2 years), and although
<a href="http://www.cyanogenmod.com/">Cyanogen</a> provided Android 2.2
the hardware isn't really up to it. I decided to go with T-Mobile;
Simple Mobile use their network, so I knew the coverage would be fine,
and I figured a contract was probably a good way to help get a credit
record here.</p>

<p>Except, the pricing was a bit weird. $200 for the phone with a 2 year
$80/month contract or $500 for the phone with an identical contract but
no tie in and $60/month. Er, what? I pay up front and I save $180 and I
can walk away whenever I want? Ok.</p>

<p>As it turned out this was the smart choice. Firstly $60/month means
$60/month plus taxes[0], so I was paying more than I paid Simple Mobile.
I figured I could bear that for a few months to get the credit history,
plus the free network unlock after 3 months. Except then it became clear
that international SMS wasn't included in the unlimited SMS (it is with
Simple). Most of my SMS is international. Now, T-Mobile have a $5/month
bolt on to cover that, but not if you're on their flexpay scheme because
they found themselves unable to verify your SSN. So I cancelled the
contract after the first month and moved back to Simple. I didn't even
need to unlock the phone due to the fact it's the same network (though I
have now in preparation for my trip back to the UK over Christmas).
Surprisingly T-Mobile didn't try and keep me by sorting out the
international SMS bolt on. I guess US mobile customers are used to being
screwed over (certainly the pricing suggests that).</p>

<p>Er, sorry, that turned into a bit of a T-Mobile rant. My original point
was that all of my recent mobile contracts have been month by month, not
involved a subsidised phone, and saved me money over being tied in. And
even if they hadn't my experiences with the flexibility offered by not
being tied in (worries about coverage, discovering the deal isn't as
good as you thought) mean that I'm pretty much convinced that
contract-free is the way to go anyway.</p>

<p>[0] Dear America, for all your complaints about VAT it's not really a
lot different from sales tax and at least the prices in shops/online
actually include it. Also it's the same everywhere in the country.</p></div>
    </content>
    <updated>2010-12-20T02:09:58Z</updated>
    <published>2010-12-20T02:08:29Z</published>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2011-10-05T06:02:36Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:www.earth.li,2010:/~noodles/blog//1.247</id>
    <link href="http://www.earth.li/~noodles/blog/2010/12/why-linux-part-3-its-cheap.html" rel="alternate" type="text/html"/>
    <title>Why Linux? (Part 3: It's cheap)</title>
    <summary>(This is part of a series of posts on Why Linux?) Linux, to me as an end user, is cheap. Even taking into account the fact most PCs come with a Windows licence included it's still cheaper for me to run Linux. I paid Steve minimal amounts for my first set of Debian install CDs. These days I can burn my own netinst CDs and pull the rest over the internet. I legally have access to a tremendous range of excellent software, for nothing. All the apps I need are available without having to shell out more. How is that not awesome? I get free updates, both for bugs and also for major features. I'm not left with the option of paying lots of money for the latest and greatest, or dealing with an unsupported old release with known bugs. The counter argument from my Windows using friends is often about how they didn't pay for their Windows updates nor their copy of Office. I'm unimpressed with anyone who tells me Windows is a better option, but is unprepared to pay for it. If you have to illegally obtain it in order for it to compete with Linux then you're not really comparing on equal terms, are you? Also don't tell me that Free software takes away jobs from software engineers and then pirate software, eh? Cost isn't just about the money though. I've put many hours into being involved in Debian. I've provided project resources when I was in a position to do so. I've contributed to the Linux kernel. Not quite the same as paying for it, but I think does indicate that I'm trying to give back a little too. I also accept that at an organisational level the basic cost of the software licences is often negligible compared to things like hardware, training and support. I still think cost is a compelling argument for the home user, and for decisions at an organisational level. As mentioned I realise there are issues with training and support, but I don't believe these costs are any higher than for alternative OSes. Linux also makes it remarkably easy to remotely administer machines, and perform common actions across an entire installed estate, without needing extra bolt ons from 3rd parties. Cost doesn't provide sufficient justification for an individual desktop in an organisation that has site licences for an alternative however (and in fact running Linux requires extra work on my part to do the install and maintenance compared to allowing central IT to manage my machine). So that's not a good enough reason....</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>(This is part of a series of posts on <a href="http://the.earth.li/~noodles/cgi-bin/mt/mt-search.cgi?blog_id=1&amp;tag=whylinux&amp;limit=20&amp;IncludeBlogs=1">Why Linux?</a>)</p>

<p>Linux, to me as an end user, is cheap. Even taking into account the fact
most PCs come with a Windows licence included it's still cheaper for me
to run Linux. I paid Steve minimal amounts for my first set of Debian
install CDs. These days I can burn my own netinst CDs and pull the rest
over the internet. I legally have access to a tremendous range of
excellent software, for nothing. All the apps I need are available
without having to shell out more. How is that not awesome? I get free
updates, both for bugs and also for major features. I'm not left with
the option of paying lots of money for the latest and greatest, or
dealing with an unsupported old release with known bugs.</p>

<p>The counter argument from my Windows using friends is often about how
they didn't pay for their Windows updates nor their copy of Office. I'm
unimpressed with anyone who tells me Windows is a better option, but is
unprepared to pay for it. If you have to illegally obtain it in order
for it to compete with Linux then you're not really comparing on equal
terms, are you? Also don't tell me that Free software takes away jobs
from software engineers and then pirate software, eh?</p>

<p>Cost isn't just about the money though. I've put many hours into being
involved in Debian. I've provided project resources when I was in a
position to do so. I've contributed to the Linux kernel. Not quite the
same as paying for it, but I think does indicate that I'm trying to give
back a little too. I also accept that at an organisational level the
basic cost of the software licences is often negligible compared to
things like hardware, training and support.</p>

<p>I still think cost is a compelling argument for the home user, and for
decisions at an organisational level. As mentioned I realise there are
issues with training and support, but I don't believe these costs are
any higher than for alternative OSes. Linux also makes it remarkably
easy to remotely administer machines, and perform common actions across
an entire installed estate, without needing extra bolt ons from 3rd
parties.</p>

<p>Cost doesn't provide sufficient justification for an individual desktop
in an organisation that has site licences for an alternative however
(and in fact running Linux requires extra work on my part to do the
install and maintenance compared to allowing central IT to manage my
machine).  So that's not a good enough reason.</p></div>
    </content>
    <updated>2010-12-18T21:12:32Z</updated>
    <published>2010-12-18T21:11:02Z</published>
    <category label="whylinux" scheme="http://www.sixapart.com/ns/types#tag" term="whylinux"/>
    <author>
      <name>Jonathan McDowell</name>
      <uri>http://www.earth.li/~noodles/blog/</uri>
    </author>
    <source>
      <id>tag:www.earth.li,2008-03-29:/~noodles/blog//1</id>
      <link href="http://www.earth.li/~noodles/blog/" rel="alternate" type="text/html"/>
      <link href="http://www.earth.li/~noodles/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <subtitle>Dude! Sweet!</subtitle>
      <title>Noodles' Emptiness</title>
      <updated>2011-07-02T03:16:06Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/117-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/117-The-Academic-Descent-to-Me.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>The Academic Descent to Me</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">How interesting, today I learned that Derek Burgess, the PhD supervisor of my PhD supervisor (Brian McMaster) was himself supervised by Frank Smithies. With a little help from the <a href="http://genealogy.math.ndsu.nodak.edu/index.php">Mathematical Genealogy Project</a> this has helped me work out my academic "parentage".

<ol>
<li>Colin Turner, Queen's University of Belfast, 1997</li>
<li>Brian McMaster, Queen's University of Belfast, 1972</li>
<li>Derek Burgess, University of Cambridge, 1951</li>
<li><a href="http://www-history.mcs.st-and.ac.uk/Biographies/Smithies.html">Frank Smithies</a>, University of Cambridge, 1937</li>
<li><a href="http://en.wikipedia.org/wiki/G_H_Hardy">G. H. Hardy</a>, University of Cambridge</li>
<li><a href="http://en.wikipedia.org/wiki/E._T._Whittaker">Edmund Whittaker</a>, University of Cambridge, 1895</li>
<li><a href="http://en.wikipedia.org/wiki/Andrew_Forsyth">Andrew Forsyth</a>, University of Cambridge, 1881</li>
<li><a href="http://en.wikipedia.org/wiki/Arthur_cayley">Arthur Cayley</a>, University of Oxford / University College Dublin / Universiteit Leiden, 1864,1865,1875</li>
<li><a href="http://en.wikipedia.org/wiki/William_hopkins">William Hopkins</a>, University of Cambridge, 1830 (Note his many famous students)</li>
<li><a href="http://en.wikipedia.org/wiki/Adam_Sedgwick">Adam Sedgwick</a>, University of Cambridge, 1811</li>
<li><a href="http://en.wikipedia.org/wiki/Thomas_Jones_%28mathematician%29">Thomas Jones</a>, University of Cambridge, 1782</li>
<li><a href="http://en.wikipedia.org/wiki/Thomas_Postlethwaite">Thomas Postlethwaite</a>, University of Cambridge, 1756</li>
<li><a href="http://en.wikipedia.org/wiki/Stephen_Whisson">Stephen Whisson</a>, University of Cambridge, 1742</li>
<li><a href="http://en.wikipedia.org/wiki/Walter_Taylor_%28mathematician%29">Walter Taylor</a>, University of Cambridge, 1723</li>
<li><a href="http://en.wikipedia.org/wiki/Robert_Smith_%28mathematician%29">Robert Smith</a>, University of Cambridge, 1715</li>
<li><a href="http://en.wikipedia.org/wiki/Roger_Cotes">Roger Cotes</a>, University of Cambridge, 1706</li>
<li><a href="http://en.wikipedia.org/wiki/Isaac_Newton">Isaac Newton</a>, University of Cambridge, 1668</li>
<li><a href="http://en.wikipedia.org/wiki/Isaac_barrow">Isaac Barrow</a>, University of Cambridge, 1652</li>
<li><a href="http://en.wikipedia.org/wiki/Vincenzio_Viviani">Vincenzio  Viviani</a></li>
<li><a href="http://en.wikipedia.org/wiki/Galileo_Galilei">Galileo Galilei</a>, University of Pisa</li>
</ol>

I think I'll stop there. I found this absolutely fascinating, many notable figures, and Hopkins supervised many famous figures. It's a shame I could never hope to live up to such a line!</div>
    </content>
    <updated>2010-12-17T16:29:17Z</updated>
    <category term="random musings"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-03-05T20:17:08Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/116-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/116-Heaven-gets-an-Audit.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>Heaven gets an Audit</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">This is a whimsical storyline I knocked out this morning. If you don't know much about HE (Higher Education) or the QAA it may not mean anything to you. Indeed, you might need to know a little bit about the <a href="http://en.wikipedia.org/wiki/Metatron">Metatron</a>. and some other Judeo/Christian <a href="http://answers.yahoo.com/question/index?qid=20080505050646AAPL0w0">theology</a> to follow this. Absolutely no offence is intended to anyone!<br/><br/>

<hr/>


There was a polite knock on the door. The Metatron looked up from his desk and bade the guest to enter. And so Michael, Field Marshal of the Heavenly Host entered the room, a troubled look on his normally serene face.<br/><br/>

“Peter says we have an unusual guest at the gates. He claims to be from something called the … QAA”, he said.<br/>
“The QAA?”<br/>
“Yes, some sort of Quality Assurance Agency.”<br/>
“And why are they here?”<br/>
“Apparently”, and here Michael paused for a moment, “they want to audit just how heavenly Heaven is...”<br/>
“What?”<br/>
“They say that there are some metrics which cast some doubt on the issue apparently.”<br/>
“But Heaven is the definition of perfection. How could anything be found wanting?”<br/><br/>

Michael looked wretched for a moment.<br/><br/>

“He's asking if this is so, how was it that we had... the Incident...?”<br/>
“What?”<br/>
“Well,... he's saying that if everything here is so great and perfect how come we have a … what were the words he used again? Oh yes.... a retention problem.”<br/>
“Retention?”<br/>
“Apparently yes, this is one of the metrics they use. They are apparently concerned that our “First Output” showed an “attrition rate” of a third”.<br/>
“Did you tell him about Free Will? That it's up to sentient creatures to choose their own path?”<br/>
“Yes”<br/>
“And?”<br/>
“He says everyone uses that excuse.”<br/><br/>

The Metatron paused while he considered this.<br/>
“OK, so what next?”<br/>
“Apparently they want to see the figures to see if this is a one time “blip”, they are asking for our “Academic Plan” for the next output.”<br/>
“Oh dear...”<br/>
“Is that a problem?”<br/><br/>

The Metatron thumbed through some documents on his desk.<br/><br/>

“Apparently we only intend to “retain” 144,000 of our second output”.<br/>
“Out of how many?”<br/>
“Well, sort of, um, 100 billion and counting so far”.<br/>
“Isn't that an attrition rate of over 99.999%.”<br/>
“Yes,... do you think that will present a problem?”<br/><br/>

The two angels considered for a moment, after a while, the Metatron cleared his throat again.<br/><br/>

“Do you think we could classify purgatory as an exit award?”<br/></div>
    </content>
    <updated>2010-12-15T11:27:39Z</updated>
    <category term="random musings"/>
    <category term="he"/>
    <category term="story"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-02-16T06:17:09Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:pgregg.com,2010:/blog//2.343</id>
    <link href="http://pgregg.com/blog/2010/12/stage-2-httpbl-with-apache2-mod-perl.html" rel="alternate" type="text/html"/>
    <title>Stage 2: http:BL with Apache2 mod_perl</title>
    <summary>After my earlier post Referrer and Comment spammers are a PITA I came up with two mod_perl plugins to Apache and an "apache level" firewall.The reason for the apache-level firewall is two-fold.&amp;nbsp; There is no direct way for the Apache user to manipulate an iptables chain (as it doesn't run as root), and second; I was not happy with suid root access or other forms of message passing to a daemon which would manipulate the firewall for me.Architecture is thus, in httpd.conf place the following two lines:PerlPreConnectionHandler PGREGG::httpBLBlockPerlLogHandler PGREGG::httpBLLogThe first tells apache to run the handler in my httpBLBlock.pm module...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">After my earlier post <a href="http://pgregg.com/blog/2010/11/referrer-and-comment-spammers-are-a-pita.html">Referrer and Comment spammers are a PITA</a> I came up with two mod_perl plugins to Apache and an "apache level" firewall.<br/><br/>The reason for the apache-level firewall is two-fold.  There is no direct way for the Apache user to manipulate an iptables chain (as it doesn't run as root), and second; I was not happy with suid root access or other forms of message passing to a daemon which would manipulate the firewall for me.<br/><br/>Architecture is thus, in httpd.conf place the following two lines:<br/><blockquote>PerlPreConnectionHandler PGREGG::httpBLBlock<br/>PerlLogHandler PGREGG::httpBLLog<br/></blockquote>The first tells apache to run the handler in my httpBLBlock.pm module when a connection is received (before the request has been sent by the client).  In this handler, I am simply looking for a filename matching that IP in a directory that is writable by the apache user.  The contents of the file are a SCORE:httpBL_answer:[LIST].  Based on this, the module checks the mtime of the filename is in the last SCORE days, then the firewall is in effect. If so, we simply tell apache to drop the connection.  If the file has expired, we delete the file.<br/><br/>The second line is more interesting, and what creates the firewall filenames. In order to not impede the general speed of request handling, processing is performed in the Logging section of the Apache process. Our module is called by apache after the response has been sent, but before the access_log entry has been written.  In our module we perform the <a href="http://www.projecthoneypot.org/httpbl_api.php">http:BL</a> API call and compute the above SCORE based upon the Threat* level and Age* of the API response. (* both Threat and Age are octets in the DNS lookup).  We merely discount the Threat down to zero based on the Age (0-255) where an entry 255 days old reduces the SCORE to zero.<br/>If the SCORE is larger than our trigger level (3) then we create the firewall filename, log the entry in our own httpbl.log and return Apache2::Const::FORBIDDEN.  This causes Apache to not log the entry in the normal access_log.  Otherwise, if all is ok, we return Apache2::Const::OK and Apache logs the hit as normal.<br/><br/>I have a bit of code tidy up, restructure the config/firewall directory and pull some common code out to a shared module before I can release to the world.<br/><br/>An interesting side effect to publishing the last story out through <a href="http://www.planet-php.net/">Planet PHP</a> and other news sources <i>along with the Project Honey Pot image</i> is that when browsers viewed those sources, they all asked for the image off my server. In several cases, these were known spammer, Comment spammer, and other abusers. My server then created the firewall entry blocking them before they were able to follow the links back to my server.<br/> <br/>I have been reading up more on <a href="http://perl.apache.org/docs/2.0/api/Apache2/Filter.html">Apache Bucket Brigades</a> in an attempt to allow the firewall filter to be placed immediately after the request has been received and allow a custom response to the browser. This may help an otherwise unsuspecting user if their machine had been trojaned. I don't mind admitting I'm thoroughly confused right now :)<br/><br/></div>
    </content>
    <updated>2010-12-02T12:31:11Z</updated>
    <published>2010-12-02T11:19:45Z</published>
    <category scheme="http://www.sixapart.com/ns/types#category" term="PHP"/>
    <category scheme="http://www.sixapart.com/ns/types#category" term="Perl"/>
    <category label="apache" scheme="http://www.sixapart.com/ns/types#tag" term="apache"/>
    <category label="firewall" scheme="http://www.sixapart.com/ns/types#tag" term="firewall"/>
    <category label="mod_perl" scheme="http://www.sixapart.com/ns/types#tag" term="mod_perl"/>
    <category label="perl" scheme="http://www.sixapart.com/ns/types#tag" term="perl"/>
    <category label="php" scheme="http://www.sixapart.com/ns/types#tag" term="php"/>
    <author>
      <name>Paul Gregg</name>
      <uri>http://pgregg.com</uri>
    </author>
    <source>
      <id>tag:pgregg.com,2009-02-01:/blog//2</id>
      <link href="http://pgregg.com/blog/" rel="alternate" type="text/html"/>
      <link href="http://pgregg.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <title>Plop in the Ocean</title>
      <updated>2012-03-27T22:49:29Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:pgregg.com,2010:/blog//2.342</id>
    <link href="http://pgregg.com/blog/2010/11/referrer-and-comment-spammers-are-a-pita.html" rel="alternate" type="text/html"/>
    <title>Referrer and Comment spammers are a PITA.</title>
    <summary>This shouldn't be news to anyone - but Referrer and Comment spammers are a real pain in the a*se.&amp;nbsp; Polluting my web logs and making any meaningful log analysis problematic.So, I now have an itch to scratch and I'm going to do something about it. I would encourage you, the reader, to do something about it too.Firstly, get yourself over to Project Honey Pot and read up on the project.&amp;nbsp; If you can, set up a Honey Pot or two yourself. Also be sure to read about the http:BL - this works along similar lines to the DNS blacklists used...</summary>
    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">This shouldn't be news to anyone - but Referrer and Comment spammers are a real pain in the a*se.  Polluting my web logs and making any meaningful log analysis problematic.<br/><br/>So, I now have an itch to scratch and I'm going to do something about it. I would encourage you, the reader, to do something about it too.<br/><br/>Firstly, get yourself over to <a href="http://www.projecthoneypot.org/?rf=73568">Project Honey Pot</a> and read up on the project.  If you can, set up a Honey Pot or two yourself. Also be sure to read about the <a href="http://www.projecthoneypot.org/faq.php#g">http:BL</a> - this works along similar lines to the DNS blacklists used for Email spammers.<br/><br/>Next, I'm going to write a general Apache mod_perl module which will provide integration (lookup) to the http:BL and allow the user to "action"* the abusers.  Minimally, it will prevent the normal apache log files from being polluted by diverting the log entries to a httpbl logfile.<br/><br/>* "action" - To provide flexibility, I'm thinking of running an external script with the IP of the abuser.  The script can then perform any action you wish. The one I'm going for is an iptables firewall block.<br/><br/>Comments and suggestions welcome.<br/><br/>Project Honey Pot has implementations for several languages, including <a href="http://www.php.net/">PHP</a> and <a href="http://www.perl.org/">Perl</a> (the languages that mean most to me).  There may be an implementation for your <a href="http://www.projecthoneypot.org/httpbl_implementations.php">Web application </a> so you might not be interested in what I'm doing at all :)<br/><br/><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="projhoneypot_banner.jpg" class="mt-image-none" height="60" src="http://pgregg.com/blog/images/projhoneypot_banner.jpg" style="" width="468"/></span><br/><br/><br/><div><br/></div></div>
    </content>
    <updated>2010-11-28T23:45:53Z</updated>
    <published>2010-11-28T23:18:54Z</published>
    <category scheme="http://www.sixapart.com/ns/types#category" term="PHP"/>
    <category scheme="http://www.sixapart.com/ns/types#category" term="Perl"/>
    <category label="http:BL" scheme="http://www.sixapart.com/ns/types#tag" term="httpbl"/>
    <category label="spam" scheme="http://www.sixapart.com/ns/types#tag" term="spam"/>
    <author>
      <name>Paul Gregg</name>
      <uri>http://pgregg.com</uri>
    </author>
    <source>
      <id>tag:pgregg.com,2009-02-01:/blog//2</id>
      <link href="http://pgregg.com/blog/" rel="alternate" type="text/html"/>
      <link href="http://pgregg.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
      <title>Plop in the Ocean</title>
      <updated>2012-03-27T22:49:29Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://www.piglets.org/serendipity/archives/115-guid.html</id>
    <link href="http://www.piglets.org/serendipity/archives/115-HTC-Desire-versus-Apple-iPhone-4.html" rel="alternate" type="text/html"/>
    <link href="http://creativecommons.org/licenses/by/3.0/" rel="license"/>
    <title>HTC Desire versus Apple iPhone 4</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I have both these phones. The HTC Desire is my personal phone, and runs Android (in this case Froyo, Android 2.2). I've been using Android for some time now, and regular readers will know I haven't been shy about commenting on its problems in the early releases. I also have, and have had for about the last month, an Apple iPhone 4, running iOS 4, for work. I've been promising some people a comparison.<br/><br/>

Disclosure: I'm not really an Apple fan. From the moment I started to play with some in QUB, I disliked the single button, the cotton wool interface that kept you from "harming yourself", or doing anything deep. But I know that has changed somewhat, the latest Apple computers, while still having that fluffy exterior now have a decent operating system underneath. So I'm going to try to be as fair as I can be.<br/><br/>

First a comment about the build quality. Both phones feel very similar both in the hand and in the pocket, the iPhone feels like it has a better build quality, but then you do expect solid hardware from Apple. Both phones have a button on the top to "wake" the device. Both have volume controls on the side. The iPhone has a nice feature of a slider button that mutes the device at one go; the Desire requires you to put the volume slider to zero (there are other ways, I know). The iPhone has one big button at the bottom, reminiscent of the one button mouse, and this is an area where the Desire wins hands down, with more physical buttons including the search, back button, the menu button, the home button and the optical trackball.<br/><br/>

A note on the intuitiveness of the interface. Apple claims that their interface is so intuitive you don't need any instructions. I must say I find the Android (Desire) interface more intuitive, and when you start that phone for the first time, it walks you through the basics. Very helpful for beginners.<br/><br/>

Anyway, time is short and some people are waiting on this review, so here's a potted comparison.<br/><br/>

<table border="1">
<tbody><tr><th>Feature</th><th>iPhone</th><th>Desire</th></tr>
<tr>
  <th>Basic Interface</th>
  <td>Uncluttered, but uninformative, no widgets, no live wall paper, no active folders. Dull, one size fits all. Switching between tasks and back again is inelegant. Notification of outstanding items is cleaner than standard Android.</td>
  <td>Very rich, combinations of apps on the desktop, widgets and all the things mentioned by their absence for the iPhone. Much more personalised. Task switching, particularly the back button, is much more elegant. HTC Sense is nicer.</td>
</tr>
<tr>
  <th>Phone</th>
  <td>Disastrous. Frequently won't connect calls when my Desire will. There seems to be something else at play here and I've reported it. Both phones are on the same network BTW. It's more awkward to change numbers on the fly and many other things. But it's very pretty.</td>
<td>Much improved in Android over the last few versions, the ease of dialling, changing numbers is much better. Finding contacts to dial is much easier and faster. Oh, did I mention it works?</td>
</tr>
<tr>
  <th>Voicemail</th>
  <td>Fancy. Asks me to set it up every single time I turn on the phone. Recently while travelling, I couldn't pick up a voicemail because of this for about an hour, by which time I was sitting with the caller.</td>
  <td>Not Fancy. Works all the time.</td>
</tr>
<tr>
  <th>Workplace</th>
  <td>The stock mail client is very pretty, and for example, links to appointments easily (but makes it hard to see if you are free). It has limited threading support which is really nice.</td>
  <td>The Android exchange support is, in my opinion, superior. It lacks threading, but does have follow up support, which I take to be vastly more important.
</td></tr>
<tr>
  <th>Apps</th>
  <td>Legendary, but there are relatively few free quality apps. For example, I struggled (still haven't) found a decent calculator (not the built in one) that is free. I find the market app rather clunky. Can't find any decent external exchange apps that work.</td>
  <td>Many problems with the Market were fixed in Froyo, the apps available seem to be broader in nature, and many more are free (my perception). Choice of several exchange apps, more fully featured than iOS.</td>
</tr>
<tr>
  <th>Software Keyboard</th>
  <td>Simple, elegant, but frustratingly difficult to type complex content, having to change layouts all the time.</td>
  <td>More cluttered, but actually as easy to use, better word prediction, less switching between layouts.</td>
</tr>
<tr>
  <th>Battery Life</th>
  <td>Initially winning hands down, but now hogging battery like no tomorrow, can't make it through an average day. I don't know what's causing the problem and so I'm just deleting apps all over the show.</td>
  <td>Vastly improved over other phones, still an issue, but actually appreciating it more after the iPhone</td>
</tr>
<tr>
  <th>Music</th>
  <td>Very pretty. iTunes integration. This is also the problem. A cheap player I bought for my Daughter allows me to just dump music on it and it works. What I had to go through to get Music onto the iPhone because of my unusual setup, well, it wasn't easy. Oh, and by the way. iTunes sucks. I mean really... disastrous, but with no alternative.</td>
  <td>Bulk device, you can just copy the music on and it works. Plays music just as well as the iPhone, in fact better because the former occaisionally and inexplicably stops. Wide variety of music players.</td>
</tr>
<tr>
  <th>Video</th>
  <td/>
  <td>Flash.</td>
</tr>
<tr>
  <th>Web</th>
  <td>Browser is probably prettier than Android's and allows more Tabs, seems to be slower though.</td>
  <td>Native Flash is an advantage here too.</td>
</tr>
<tr>
  <th>Notifications</th>
  <td>Really dreadful, and a well known problem in the Apple community. Poorly handled, and when they pop up, and you go to use the phone the notification is just gone.</td>
  <td>Elegant system that allows multiple notifications each of which take you straight to the issue. Persist, unobtrusively, until dismissed.</td>
</tr>
<tr>
  <th>Calendaring / Time</th>
  <td>Automatically setting the time to the wrong time since the clocks changed. Manually fixing this makes calender entries wrong. Setting it back to automatic makes the time wrong again.</td>
  <td>Google Calendar back end more open than Exchange. Exchange functionality built in too. Minor quibble, cannot change the colour of the Exchange calendar. Date / Time works. Minor quibble, on a non rooted device you can't use ntp for ultra correct times. Can't on the iPhone either as far as I know.</td>
</tr>
<tr>
  <th>Oddities</th>
  <td>My laptop supplies power out of USB while it's off. I use this to charge my Desire if need be. The iPhone requires the whole machine to be on for it to charge the phone.</td>
  <td>The power connector on my Desire seems to be a bit stretched, so if I'm not careful, it's not being charged. The Desire asks, when plugged in, whether it should charge, act as a disk, do internet tethering etc..</td>
</tr>
</tbody></table><br/><br/>

I'm honestly struggling to find an area where the iPhone wins hands down against its competitor. I can't think of one. I imagine if the iPhone is the only smart phone you are used to, it seems miraculous. It probably seemed that way against Android 1.1. But Android has grown up now, and it makes the iPhone look just stupid by comparison. I couldn't recommend an iPhone to anyone. Sorry.<br/><br/>

By the way, I fully accept that perhaps when I get used to the iPhone I might come to love it more, but I'll be surprised.</div>
    </content>
    <updated>2010-11-05T08:29:13Z</updated>
    <category term="hardware"/>
    <category term="review"/>
    <author>
      <name>Colin Turner</name>
      <email>nospam@example.com</email>
    </author>
    <source>
      <id>http://www.piglets.org/serendipity/</id>
      <link href="http://www.piglets.org/serendipity/" rel="alternate" type="text/html"/>
      <link href="http://www.piglets.org/serendipity/index.php?/feeds/" rel="self" type="application/rss+xml"/>
      <subtitle>Maths, Software, Hardware, Martial Arts and more</subtitle>
      <title>Proving the Obviously Untrue</title>
      <updated>2012-02-04T16:17:09Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://stuarthacking.com/wordpress/?p=285</id>
    <link href="http://stuarthacking.com/wordpress/?p=285" rel="alternate" type="text/html"/>
    <title>Wii Cheat Code to fix HD TV</title>
    <summary>One of the things I love about the Wii is the Virtual Console. It lets me play a lot of the games I grew up with without the need to sacrifice several power sockets, or swap out all the RF connectors when I want to switch console. So over the weekend I played a bit [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>One of the things I love about the Wii is the Virtual Console. It lets me play a lot of the games I grew up with without the need to sacrifice several power sockets, or swap out all the RF connectors when I want to switch console. So over the weekend I played a bit of Mario World and Zelda: Link to the Past. Awesome!</p>
<p>But then I downloaded Super Castlevania IV and tried to play it… “Mode not supported.”</p>
<p>“Uh, oh!” I guess it doesn’t like my TV, or perhaps the connector – even though I’m already using the Nintendo Composite cable. Surely the console should do the necessary work to send the correct signal?</p>
<p>I looked online and found a fix – but here’s the strange thing: The fix isn’t something like “Try using an old Co-ax cable,” or, “Change the Wii’s ratio to 4:3.” The <em>actual </em>fix is much better:</p>
<blockquote><p>Start the game and wait for the ‘Mode not supported’ message.<br/>
Press the Wii’s home button.<br/>
Open the game’s Operation Manual.<br/>
Press the following keys together: “Z-A-2″<br/>
A chime will sound if you entered it correctly.<br/>
The game will now display on your HDTV.</p></blockquote>
<p>…</p>
<p>Really?… I mean, that’s awesome! It worked, but this felt more like putting in a cheat code than solving a hardware issue. If you decide in the end that you don’t really like ‘being able to see the game’ you can go back in and disable the fix with the combo ‘Z-A-1′.</p></div>
    </content>
    <updated>2010-10-11T09:19:16Z</updated>
    <category term="Self"/>
    <category term="Console"/>
    <category term="fix"/>
    <category term="Gaming"/>
    <category term="HD"/>
    <category term="retro"/>
    <category term="TV"/>
    <category term="wii"/>
    <author>
      <name>smh</name>
    </author>
    <source>
      <id>http://stuarthacking.com/wordpress</id>
      <link href="http://stuarthacking.com/?feed=rss2" rel="self" type="application/atom+xml"/>
      <link href="http://stuarthacking.com/wordpress" rel="alternate" type="text/html"/>
      <title>Stuart Hacking</title>
      <updated>2011-07-04T22:35:33Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://stuarthacking.com/wordpress/?p=276</id>
    <link href="http://stuarthacking.com/wordpress/?p=276" rel="alternate" type="text/html"/>
    <title>Update</title>
    <summary>Today I read some really crufty code. The whole application is a mess of String conversions. This is because every class in the model only contains String members. Regardless of whether the data is a number, a boolean, a currency value or a date. *Everything* is a String. This makes it very hard to visually [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Today I read some really crufty code. The whole application is a mess of String conversions. This is because every class in the model only contains String members. Regardless of whether the data is a number, a boolean, a currency value or a date. *Everything* is a String. This makes it very hard to visually (or programmatically) parse what is happening in a piece of logical code because:</p>
<p>1) A lot of methods take Strings as Arguments.<br/>
2) The compiler can’t do any useful type checking. Everything is a String.<br/>
3) Things like dates and currencies can have multiple representations. Strings provide no abstraction.<br/>
4) Logic is shrouded in conversion and other housekeeping.</p>
<p>I don’t which moron had the bright idea of storing everything as a String. They’ve probably been promoted to principle engineer or technologist now and don’t have to deal with the stink they created a decade ago.</p>
<p>Of course, bad code exists. Sometimes it’s a kludge to get round a language limitation, or maybe it’s a speed hack.</p>
<p>This is just depressingly bad design. There was never a time when Java only supported Strings. I won’t even accept serialisation as an excuse because a) Java has been doing that for years and b) If it’s done manually then it should be done once, not peppered thoughout the business logic.</p>
<p>It feels as though someone read a bunch of Design Pattern books, rushed through an example implementation as quickly as possible, and released it as a polished framework.</p>
<p>And people just accept it like it’s no big deal. Worse, some people seem to consider it flexible design.</p></div>
    </content>
    <updated>2010-09-29T10:45:09Z</updated>
    <category term="Uncategorized"/>
    <category term="Rant"/>
    <category term="Software"/>
    <author>
      <name>smh</name>
    </author>
    <source>
      <id>http://stuarthacking.com/wordpress</id>
      <link href="http://stuarthacking.com/?feed=rss2" rel="self" type="application/atom+xml"/>
      <link href="http://stuarthacking.com/wordpress" rel="alternate" type="text/html"/>
      <title>Stuart Hacking</title>
      <updated>2011-07-04T22:35:33Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://stuarthacking.com/wordpress/?p=280</id>
    <link href="http://stuarthacking.com/wordpress/?p=280" rel="alternate" type="text/html"/>
    <title>Ideal Outlook Features</title>
    <summary>At a certain point on the Bureaucratic scale, you may start using Outlook for more than simply the exchange of messages: Tasks/Todo lists, Appointments/Calendar, Notes. Too bad Outlook isn’t very good at anything it does. Here are a couple of things I’d like to say Outlook provides to make life easier (I use Outlook 2003, [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>At a certain point on the Bureaucratic scale, you may start using Outlook for more than simply the exchange of messages: Tasks/Todo lists, Appointments/Calendar, Notes.</p>
<p>Too bad Outlook isn’t very good at anything it does.</p>
<p>Here are a couple of things I’d like to say Outlook provides to make life easier (I use Outlook 2003, not by choice):</p>
<ul>
<li>I flag messages and categorize them quite often. One would imagine that when a message  is flagged that it becomes a ToDo item and is added to the task list. If a flagged email has a follow up date, shouldn’t it appear in the calendar? I guess integration of different services was never a primary goal.</li>
<li>I’d like folders to be able to tell me the number of flagged emails. Currently they only show total or unread (but not both). I often use folders to store actionable bulk mail. It would be nice to see how many tasks I’ve woken up to.</li>
<li>When you flag email in a personal folder it does not show up un the ‘Follow Up’ search folder. I guess this is just a bug?</li>
</ul></div>
    </content>
    <updated>2010-09-07T10:59:53Z</updated>
    <category term="Self"/>
    <category term="email"/>
    <category term="integration"/>
    <category term="Rant"/>
    <category term="Software"/>
    <author>
      <name>smh</name>
    </author>
    <source>
      <id>http://stuarthacking.com/wordpress</id>
      <link href="http://stuarthacking.com/?feed=rss2" rel="self" type="application/atom+xml"/>
      <link href="http://stuarthacking.com/wordpress" rel="alternate" type="text/html"/>
      <title>Stuart Hacking</title>
      <updated>2011-07-04T22:35:33Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://stuarthacking.com/wordpress/?p=274</id>
    <link href="http://stuarthacking.com/wordpress/?p=274" rel="alternate" type="text/html"/>
    <title>Rest in peace, ClickWheel</title>
    <summary>Apple have unveiled the shiny new iPod Nano range and they are sexy! Half the size of the previous model and sporting the same screen technology as the touch devices. Wonderful! What I find surprising, though, is how many of my technically adept colleagues seem to be disgusted (or at least perturbed) at the disappearance [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p style="text-align: center;">Apple have unveiled the shiny new iPod Nano range and they are sexy! Half the size of the previous model and sporting the same screen technology as the touch devices. Wonderful!</p>
<p><a href="http://www.apple.com/uk/ipodnano/"><img alt="New iPod Nano" height="203" src="http://images.apple.com/euro/ipodnano/images/design_hero20100901.jpg" title="New iPod Nano" width="474"/></a></p>
<p>What I find surprising, though, is how many of my technically adept colleagues seem to be disgusted (or at least perturbed) at the disappearance of the ClickWheel.</p>
<p>Don’t get me wrong: The ClickWheel was a marvellous idea and worked really well… five years ago. It was a solution to the problem of providing a sleek touch based scrolling interface in the days before cheap multi-touch screens. This was also the time when the big iPods needed to fit a mechanical hard disk in the back – so there was this area on the face that needed to be filled with something eye-catching. Yes, the ClickWheel was great- I’ll continue to use one until my 30GB iPod Video decides to die.</p>
<p>But it’s 2010 now. We have solid state drives that can cram tons of information into a really tiny space. We have multi-touch interfaces that are just really beautiful and slick to use. Let’s enjoy the memories we shared with the ClickWheel as we lay it to rest and look forward to new innovations to come. Live in the now.</p></div>
    </content>
    <updated>2010-09-03T14:24:11Z</updated>
    <category term="Self"/>
    <category term="Apple"/>
    <category term="clickwheel"/>
    <category term="ipod"/>
    <category term="music"/>
    <category term="progress"/>
    <category term="screen"/>
    <category term="touch"/>
    <author>
      <name>smh</name>
    </author>
    <source>
      <id>http://stuarthacking.com/wordpress</id>
      <link href="http://stuarthacking.com/?feed=rss2" rel="self" type="application/atom+xml"/>
      <link href="http://stuarthacking.com/wordpress" rel="alternate" type="text/html"/>
      <title>Stuart Hacking</title>
      <updated>2011-07-04T22:35:33Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://stuarthacking.com/wordpress/?p=271</id>
    <link href="http://stuarthacking.com/wordpress/?p=271" rel="alternate" type="text/html"/>
    <title>Outlook not so good.</title>
    <summary>An important person in the company (all praise the company!) has just attempted to send me an updated security certificate by email. Oh, no, no, no, my friend! Surely you know that I’m running Micros~1 Outlook as my office mail client? You see: Outlook knows what’s good for you, and apparently, security certificates are not. [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>An important person in the company (all praise the company!) has just attempted to send me an updated security certificate by email.</p>
<p><em>Oh, no, no, no, my friend! Surely you know that I’m running Micros~1 Outlook as my office mail client?</em></p>
<p>You see: Outlook knows what’s good for you, and apparently, security certificates are not. Indeed, Outlook will not allow me to access this file, or even give me the option of “Don’t worry, I know what I’m doing.”</p>
<p>[Here's a fun fact: The certificate was *sent* *using* *Outlook*. So, Outlook will happily send files that it deems to be unsafe, but the poor sap on the other end won't get to use it.]</p>
<p>Now, I tend to place a degree of value on others’ time. So it pains me to have to reply to someone saying “Hi, Outlook won’t let me open your attachment. Can you jump through hoops X, Y, Z to get it to me?”</p>
<p>Outlook used to simply be a poor email client. Now it has become actively counterproductive.</p></div>
    </content>
    <updated>2010-08-16T12:25:00Z</updated>
    <category term="Self"/>
    <category term="email"/>
    <category term="Rant"/>
    <category term="Software"/>
    <author>
      <name>smh</name>
    </author>
    <source>
      <id>http://stuarthacking.com/wordpress</id>
      <link href="http://stuarthacking.com/?feed=rss2" rel="self" type="application/atom+xml"/>
      <link href="http://stuarthacking.com/wordpress" rel="alternate" type="text/html"/>
      <title>Stuart Hacking</title>
      <updated>2011-07-04T22:35:33Z</updated>
    </source>
  </entry>
</feed>

