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

<channel>
	<title>Differential Progression</title>
	<atom:link href="http://alex.kavanagh.name/feed/" rel="self" type="application/rss+xml" />
	<link>http://alex.kavanagh.name</link>
	<description>Random thoughts, differential progress ...</description>
	<lastBuildDate>Fri, 02 Mar 2012 15:35:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Linting coffee-script in Emacs</title>
		<link>http://alex.kavanagh.name/2012/03/linting-coffee-script-in-emacs/</link>
		<comments>http://alex.kavanagh.name/2012/03/linting-coffee-script-in-emacs/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 15:35:11 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=326</guid>
		<description><![CDATA[I&#8217;ve been doing a lot of node.js recently, and I started editing coffee-script in my favourite editor which is Emacs. Now one thing I use regularly in Emacs is flymake-mode which essentially provides a set of hooks that are activated &#8230; <a href="http://alex.kavanagh.name/2012/03/linting-coffee-script-in-emacs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been doing a lot of node.js recently, and I started editing coffee-script in my favourite editor which is Emacs. Now one thing I use regularly in Emacs is flymake-mode which essentially provides a set of hooks that are activated when you type into a buffer in Emacs.</p>
<p>So, I did a bit of investigation and discovered <a title="Coffeelint" href="http://www.coffeelint.org/" target="_blank">coffeelint</a>. Then, all I needed to do was adapt <a title="Lintnode" href="https://github.com/clutchski/coffeelint" target="_blank">lintnode</a> (or rather the <a title="David Miller's lintnode fork" href="https://github.com/davidmiller/lintnode" target="_blank">fork I use</a>) and make it work with coffeeline. And <a title="coffeelintnode - coffeelint in Emacs using flymake-mode" href="https://github.com/ajkavanagh/coffeelintnode" target="_blank">coffeelintnode</a> is the result.</p>
<p>You need a bit of emacs configuration to make it work. I use:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; make coffeelinenode work nicely!</span>
<span style="color: #66cc66;">&#40;</span>add-to-<span style="color: #b1b100;">list</span> 'load-path <span style="color: #ff0000;">&quot;path-to-coffeelintnode&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>require 'flymake-coffeelint<span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">;; Make sure we can find the lintnode executable</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> coffeelintnode-location <span style="color: #ff0000;">&quot;path-to-coffeelintnode&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> coffeelintnode-node-program <span style="color: #ff0000;">&quot;path-to-node-executable&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> coffeelintnode-coffeelint-excludes <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> 'max_line_length<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> coffeelintnode-coffeelint-includes '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> coffeelintnode-coffeelint-<span style="color: #b1b100;">set</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">;; Start the server when we first open a coffee file and start checking</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> coffeelintnode-autostart 'true<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>add-hook 'coffee-mode-hook
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>coffeelintnode-hook<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>unless <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq</span> buffer-file-<span style="color: #b1b100;">name</span> <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>flymake-mode <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">;dont invoke flymake on temporary buffers for the interpreter</span>
    <span style="color: #66cc66;">&#40;</span>local-set-key <span style="color: #66cc66;">&#91;</span>f2<span style="color: #66cc66;">&#93;</span> 'flymake-goto-prev-<span style="color: #b1b100;">error</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>local-set-key <span style="color: #66cc66;">&#91;</span>f3<span style="color: #66cc66;">&#93;</span> 'flymake-goto-next-<span style="color: #b1b100;">error</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2012%2F03%2Flinting-coffee-script-in-emacs%2F&amp;title=Linting%20coffee-script%20in%20Emacs" id="wpa2a_2"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2012/03/linting-coffee-script-in-emacs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploring Python @decorators</title>
		<link>http://alex.kavanagh.name/2011/05/exploring-python-decorators/</link>
		<comments>http://alex.kavanagh.name/2011/05/exploring-python-decorators/#comments</comments>
		<pubDate>Sat, 28 May 2011 17:02:27 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=294</guid>
		<description><![CDATA[Today I&#8217;ve been using Python decorators to factor out common functionality in test cases. I ran into the slightly (!) interesting problem of how to define a @decorator(like_this). That is, a decorator that takes a parameter. It&#8217;s fairly trivial to &#8230; <a href="http://alex.kavanagh.name/2011/05/exploring-python-decorators/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Today I&#8217;ve been using Python decorators to factor out common functionality in test cases. I ran into the <em>slightly (!)</em> interesting problem of how to define a <code>@decorator(like_this)</code>. That is, a decorator that takes a parameter.</p>
<p>It&#8217;s fairly trivial to define a decorator that doesn&#8217;t take a parameter:</p>
<pre class="brush: python; gutter: true; title: ; notranslate">from functools import wraps

def decorator(f):
    @wraps(f)
    def dec(*args, **kwargs):
        # do something useful
        return f(*args, **kwargs)
    return dec

@decorator
def hello(string):
    print string</pre>
<p>Okay, it doesn&#8217;t do much! <code>@wraps(f)</code> from <code>functools</code> does the magic. The end effect is that the function <code>hello</code> ends up pointing to the <code>dec</code>function that is dynamically created when the file or module is loaded.  That is, <code>@decorator</code> runs when the file is loaded, creates a <code>dec</code> instance and then <code>@wraps</code> &#8216;renames&#8217; things so that <code>hello</code> points to <code>dec</code> and the <code>f</code> in <code>dec</code> points to the original <code>hello</code> definition (the one with the <code>print string</code>)!</p>
<p>But, what if we want to have a decorator that takes a parameter.  i.e. we want to do this:</p>
<pre class="brush: python; title: ; notranslate">@pdecorator('hello')
def hello2(string, string2='optional'):
    &quot;&quot;&quot;
    hello2 doc string.
    &quot;&quot;&quot;
    print string, string2</pre>
<p>So, as usual, one goes off and does some research. My answer was found <a title="Python: Decorators With Arguments (with bonus Django goodness)" href="http://www.elfsternberg.com/2009/11/20/python-decorators-with-arguments-with-bonus-django-goodness/" target="_blank">here</a> in a very useful post by Elf Sternberg. The example on the <a title="Python: Decorators With Arguments (with bonus Django goodness)" href="http://www.elfsternberg.com/2009/11/20/python-decorators-with-arguments-with-bonus-django-goodness/" target="_blank">linked page</a> has a bit more detail than I needed to understand so I simplified it as:</p>
<pre class="brush: python; title: ; notranslate">def pdecorator(name):
    def inner(f):
        def wrapped(*args, **kwargs):
            return f(name, *args, **kwargs)
        return wraps(f)(wrapped)
    return inner

@pdecorator('hello')
def hello2(string, string2='optional'):
    &quot;&quot;&quot;
    My doc string.
    &quot;&quot;&quot;
    print string, string2</pre>
<p>So, what&#8217;s going on here? <a title="PEP 318 -- Decorators for Functions and Methods " href="http://www.python.org/dev/peps/pep-0318/#current-syntax">PEP-318</a> explains what&#8217;s going on. Essentially, the syntax of a decorator with arguments like this:</p>
<pre class="brush: python; title: ; notranslate">@decorator(arg1, arg2, arg3)
def func(*args):
    pass</pre>
<p>is actually transformed into:</p>
<pre class="brush: python; light: true; title: ; notranslate">func = decorator(arg1, arg2, arg3)(func)</pre>
<p>That is, <code>decorator</code> has to return a function that can decorate <code>func</code>. So in the above example, <code>wrapped</code> is the function we want to wrap around <code>f</code>. So what does</p>
<pre class="brush: python; light: true; title: ; notranslate">return wraps(f)(wrapped)</pre>
<p>actually do?  For that we have to look at <code>wraps</code> from <code>functools</code>.</p>
<p><code>wraps(f)</code> returns a <code>functools.partial</code> object. A <em>partial</em> object is sort of like a function that is partially called, i.e. it isn&#8217;t &#8216;finished&#8217; yet.  e.g. Take the complete function <code>f(a,b) -&gt; a+b</code>.  <code>f(2,3) -&gt; 5</code>. However, now imagine that <code>g(f,2)</code> returns a function <code>h(b)</code> which takes a single parameter <code>b</code> such that <code>h(3) -&gt; 5</code>. Effectively <code>h(b)</code> (as we designed it) has <em>partially completed</em> or <em>frozen</em> <code>f()</code> such that the first parameter <code>a</code> is now 2 in the add. In Python it looks like this:</p>
<pre class="brush: python; title: ; notranslate">from functools import partial
add2 = partial(lambda x,y: x+y, 2)
add2(3)
5</pre>
<p>i.e. the 2 was captured in the in the <code>x</code> position in the function.  Cool, huh!</p>
<p>Anyway, what <code>wraps(...)</code> returns is a partially applied <code>functools.update_wrapper(...)</code> function which has captured the __name__, __doc__ and __dict__ of the function passed as an argument.  i.e. <code>wraps(f)</code> returns a partially applied <code>update_wrapper</code> function with <code>f.__name__</code>, <code>f.__doc__</code> and <code>f.__dict__</code> frozen into it.  However, the <em>wrap</em> hasn&#8217;t yet been applied to a function.  In our example above, <code>wraps(f)(wrapped)</code> thus then wraps <code>f.__name__</code>, <code>f.__doc__</code> and <code>f.__dict__</code> on to the <code>wrapped</code> function.</p>
<p>So coming back to the example (repeated again to stop you scrolling up and down!):</p>
<pre class="brush: python; title: ; notranslate">def pdecorator(name):
    def inner(f):
        def wrapped(*args, **kwargs):
            return f(name, *args, **kwargs)
        return wraps(f)(wrapped)
    return inner

@pdecorator('hello')
def hello2(string, string2='optional'):
    &quot;&quot;&quot;
    My doc string.
    &quot;&quot;&quot;
    print string, string2</pre>
<p><code>inner(f)</code> returns a function which is basically wrapped(f(&#8230;)) but has the <code>__name__</code>, <code>__doc__</code> and <code>__dict__</code> of <code>f</code>.</p>
<p>i.e. the nice equivalent of</p>
<pre class="brush: python; gutter: false; title: ; notranslate">
def hello2(...): pass
hello2 = wrapped(hello2)</pre>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2011%2F05%2Fexploring-python-decorators%2F&amp;title=Exploring%20Python%20%40decorators" id="wpa2a_4"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2011/05/exploring-python-decorators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 10.04 LTS &#8211; experimenting with overcommit</title>
		<link>http://alex.kavanagh.name/2011/05/ubuntu-10-04-lts-experimenting-with-overcommit/</link>
		<comments>http://alex.kavanagh.name/2011/05/ubuntu-10-04-lts-experimenting-with-overcommit/#comments</comments>
		<pubDate>Sat, 14 May 2011 16:56:48 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=283</guid>
		<description><![CDATA[I currently running Ubuntu 10.04 LTS as my desktop. Neither Unity nor GNOME Shell (in GNOME 3) really interest me, but that&#8217;s for another post! This one is about the exasperation I feel when Linux overcommits too much memory and &#8230; <a href="http://alex.kavanagh.name/2011/05/ubuntu-10-04-lts-experimenting-with-overcommit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I currently running Ubuntu 10.04 LTS as my desktop. Neither Unity nor GNOME Shell (in GNOME 3) really interest me, but that&#8217;s for another post! This one is about the exasperation I feel when Linux overcommits too much memory and then goes into disk-thrashing hell.</p>
<p>It happens when I open just &#8216;one-too-many&#8217; tabs in Chrome. The desktop becomes unresponsive as the memory manager in Linux tries to find pages for Chrome to use for the new tab. Unfortunately, it&#8217;s so overcommitted the pages that it can&#8217;t find any. Every process wants to run and Linux essentially runs out of pages. Hence disk-thrashing starts, the desktop slows to a crawl or simply becomes unresponsive, and I try to Ctrl-Alt-F1 to get to a TTY so I can kill something (usually &#8216;killall chrome&#8217;).</p>
<p>I&#8217;d rather the box just didn&#8217;t allocate the memory if it doesn&#8217;t have it &#8211; i.e. <em>don&#8217;t open the new tab if there isn&#8217;t memory for it</em>.</p>
<p>My experiment is going to be to run for a few weeks using some sysctls of:</p>
<ul>
<li>vm.overcommit_memory = 2</li>
<li>vm.overcommit_ratio = 120</li>
</ul>
<p>This should give me a maximum commit of 8GB (4Gb swap and 4GB of memory). I wonder how it will go?</p>
<p>Useful information from:</p>
<ul>
<li><a href="http://opsmonkey.blogspot.com/2007/01/linux-memory-overcommit.html">Linux Memory Overcommit</a></li>
<li><a href="http://utcc.utoronto.ca/~cks/space/blog/linux/LinuxVMOvercommit">How Linux handles virtual memory overcommit</a></li>
</ul>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2011%2F05%2Fubuntu-10-04-lts-experimenting-with-overcommit%2F&amp;title=Ubuntu%2010.04%20LTS%20%E2%80%93%20experimenting%20with%20overcommit" id="wpa2a_6"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2011/05/ubuntu-10-04-lts-experimenting-with-overcommit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So Microsoft is buying Skype &#8230;</title>
		<link>http://alex.kavanagh.name/2011/05/so-microsoft-is-buying-skype/</link>
		<comments>http://alex.kavanagh.name/2011/05/so-microsoft-is-buying-skype/#comments</comments>
		<pubDate>Wed, 11 May 2011 09:38:18 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=280</guid>
		<description><![CDATA[Yesterday (10 May 2011), news broke that Microsoft is paying $8.5B for Skype (or roughly £5.2B in English).  Skype is a rather good, if proprietary, telephony/conferencing app that is multi-platform. It currently works on Windows, of course, but also on &#8230; <a href="http://alex.kavanagh.name/2011/05/so-microsoft-is-buying-skype/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Yesterday (10 May 2011), <a href="http://www.bbc.co.uk/news/business-13343600">news </a>broke that Microsoft is paying $8.5B for <a href="http://www.skype.com/intl/en-gb/home">Skype</a> (or roughly £5.2B in English).  Skype is a rather good, if proprietary, telephony/conferencing app that is <em><a href="http://www.skype.com/intl/en-gb/get-skype/">multi-platform</a></em>. It currently works on Windows, of course, but also on Macs, Linux, iThings (iPhones, iPads and iPods), and on Android devices. And there&#8217;s the potential problem.</p>
<p><span id="more-280"></span>Microsoft isn&#8217;t exactly known for it&#8217;s love affair with cross-platform technologies. If anything, they are the most <em>anti-</em>cross-platform technology provider there is. Windows and its eco-system is all that Microsoft is interested in; it&#8217;s where the bulk (<em>nay</em> all?) of its revenue is derived from.</p>
<p>Buying Skype for $8.5B is an interesting move. It&#8217;s roughly double what Google or Facebook <em>were</em> going to pay, if the <a href="http://www.computerworld.com/s/article/9216598/With_Skype_buy_Microsoft_plays_keep_away_with_Google_">rumours</a> were true. Thus, Microsoft must believe that it will gain synergies (that <em>horrible</em> management/marketing word &#8230;) from integrating Skype technology (and brand?) into Windows in the Desktop, Server, Xbox and Windows Mobile world. It&#8217;s got a <a href="https://partner.microsoft.com/40092187">large fight on its hand</a>s with Cisco in the conferencing space and has been looking to make its Unified Communications solution really, really compelling. And maybe by adding Skype to the mix it will be compelling? But $8.5B compelling?</p>
<p>It&#8217;s hard to see how Microsoft is going to get its investment back. There could be some useful patents in the mix, and Microsoft is showing that it likes to throw patents around to interfere with markets and use legal tactics as competition rather that, say, just innovating and competing. However, keeping the technology away from Google <em>et al.</em> may also be part of there competitive strategy.</p>
<p>So there&#8217;s lots of interesting stuff in there. But for those of us who use Skype on Macs, Linux, Android, or anything that <em>isn&#8217;t</em> Windows, yesterday marks a turning point. Previous acquisitions by Microsoft that <em>were</em> cross-platform eventually became Windows only, with the other platforms left swinging in the breeze. What are we going to use instead? SIP, Google Voice, <em>something else</em>? Come on Google, sort out your <a href="http://en.wikipedia.org/wiki/Google_Voice">Google Voice</a> offering for the rest of the world &#8230;</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2011%2F05%2Fso-microsoft-is-buying-skype%2F&amp;title=So%20Microsoft%20is%20buying%20Skype%20%E2%80%A6" id="wpa2a_8"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2011/05/so-microsoft-is-buying-skype/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rant: Just because something is hard &#8230;</title>
		<link>http://alex.kavanagh.name/2011/03/rant-just-because-something-is-hard/</link>
		<comments>http://alex.kavanagh.name/2011/03/rant-just-because-something-is-hard/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 15:05:23 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=272</guid>
		<description><![CDATA[&#60;rant&#62;I&#8217;m doing a beginner&#8217;s French course at the Open University. It&#8217;s great. It&#8217;s also hard work and takes lots of time. However, the forums seem to attract many posts about how it is &#8220;suitable for beginner&#8217;s&#8221; or that &#8220;it&#8217;s not &#8230; <a href="http://alex.kavanagh.name/2011/03/rant-just-because-something-is-hard/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>&lt;rant&gt;I&#8217;m doing a <em>beginner&#8217;s</em> <a href="http://www3.open.ac.uk/study/undergraduate/course/l192.htm" target="_blank">French course at the Open University</a>. It&#8217;s great. It&#8217;s also <strong>hard work</strong> and takes <strong>lots of time</strong>.</p>
<p>However, the forums seem to attract many posts about how it is &#8220;suitable for beginner&#8217;s&#8221; or that &#8220;it&#8217;s not a beginner&#8217;s course&#8221;. Apart from being annoying, they are simply incorrect.</p>
<p>Fact: the course, L192, assumes <em>no previous knowledge of French</em> before starting on the <a title="Entry requirements for the course" href="http://www3.open.ac.uk/study/undergraduate/course/l192.htm#entry" target="_blank">course</a>:</p>
<blockquote><p><strong>Entry</strong></p>
<p>No prior knowledge of French is required to study this course.</p>
<p>This is a Level 1 course. Level 1 courses provide core subject knowledge and study skills needed for both higher education and distance learning. If you have any doubt about the suitability of the course, please contact our Student Registration &amp; Enquiry Service.</p></blockquote>
<p>The course <strong>is</strong> for beginner&#8217;s; it just isn&#8217;t <strong>easy</strong>.&lt;/rant&gt;</p>
<p>The problem, of course, is that when something is <strong>hard</strong> or takes a little bit of <strong>work</strong> or <strong>time</strong>, some people instantly assume that the problem lies outside of themselves, and therefore, <em>surely the problem is with the course/person/situation</em>. Work harder and/or smarter; stop complaining.</p>
<p>&nbsp;</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2011%2F03%2Frant-just-because-something-is-hard%2F&amp;title=Rant%3A%20Just%20because%20something%20is%20hard%20%E2%80%A6" id="wpa2a_10"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2011/03/rant-just-because-something-is-hard/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The facebook problem</title>
		<link>http://alex.kavanagh.name/2011/02/the-facebook-problem/</link>
		<comments>http://alex.kavanagh.name/2011/02/the-facebook-problem/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 18:03:33 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[Open Data]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=227</guid>
		<description><![CDATA[When a for-profit company gives you something for free, with little chance of ever charging, you have to ask, &#8220;who is the customer and what is the product?&#8221; Facebook has (reputedly) 500 million users, none of whom pay a penny &#8230; <a href="http://alex.kavanagh.name/2011/02/the-facebook-problem/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><span style="font-size: 15.9722px;">When a for-profit company gives you something for free, with little chance of ever charging, you have to ask, &#8220;<em>who is the customer and what is the product?</em>&#8221; Facebook has (reputedly) 500 million users, none of whom pay a penny for the service. Twitter has (possibly)  175 million users, again, none of whom pay anything for the service.</span></p>
<p>Who is the product? Who is the customer? Do you even care?</p>
<p><span id="more-227"></span></p>
<h2>Facebook, how big?</h2>
<p><a href="http://facebook.com">Facebook</a> has obtained <a href="http://news.yahoo.com/s/ap/20110103/ap_on_hi_te/us_facebook_investors">more than $500M</a> from investors to grow facebook.com to the size it is today, and has not taken a single penny from any of its users. In order to pay back the investors for their extraordinary risky investment, the investors must be looking for something like 10x cash back.  That&#8217;s more than $5 billion! Of course it&#8217;s currently valued at over $50B. Just hold that thought for a second.</p>
<p>Now a second thought: billions of people can use email and not have to be part of one, single, organisation. How can that be?</p>
<p>Email is essentially a protocol. It&#8217;s called <a href="http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol">SMTP and is described by various RFCs</a>. Any server that supports the SMTP protocol can advertise its <a href="http://en.wikipedia.org/wiki/MX_record">MX record</a> via DNS and receive email for that domain. Any client that &#8216;talks&#8217; SMTP can send email to any SMTP server (it can reach). In fact, the SMTP client (or email client) can talk to its local SMTP server which will then forward on the email to its final destination.</p>
<p>This is, of course, a distributed system.  Due to an <em><a href="http://en.wikipedia.org/wiki/Open_standard">open protocol</a></em> anybody can set up an email server and play in the big email ecosystem. Of course, the original inventors of the SMTP protocol didn&#8217;t envisage SPAM as we know it, and thus it was designed for a naive, friendly, co-operative world, where email users wouldn&#8217;t spam each other. i.e. academia.</p>
<p>Facebook is set up as a business. It has its customers&#8217; interests to serve so that it can be a profitable company and return its investors money and provide a return for its financial stakeholders. The <em>problem</em> is, is that Facebook users are <strong>not</strong> the customer. They are the product that is sold to the <em>actual</em> customers who (I suspect) are advertisers. Thus, Facebook&#8217;s values aren&#8217;t necessarily aligned with their users, which means, almost inevitably, <em>privacy is not Facebook&#8217;s key concern</em>.</p>
<p>So if with Facebook, the users <em>are</em> the product, what are they actually selling? The social graphs its users create, along with the logged minutiae of the their lives, could just be the product that Facebook is, and will continue, to sell to advertisers. Your <strong>privacy</strong> is Facebook&#8217;s product. <a href="http://socialgraphproject.org/blog/category/privacy/">Your social graph <em>(in theory) has</em> value to advertisers</a>. Do you want to <em>exchange</em> your privacy to multitudinous corporations for free access to, well, Facebook?</p>
<p>But the <em>main problem</em> with Facebook is that, in order to <em>do</em> Facebook with somebody else, you have to have an account <em>at Facebook.com</em>. It&#8217;s a closed system. Notice the difference to email? I don&#8217;t have to have an account at (the fictitious) email.com to send emails to other people. That would be absurd!</p>
<p>History has a habit of repeating itself. Remember CompuServe? AOL? MSN (pre-internet)? CIX? These were all silos. CompuServe had special pages only subscribers could see. Of course, they all went the way of the dinosaur, or were heavily modified, because the <em>Internet was more useful</em>. And Facebook is simply a better CompuServe or AOL.</p>
<p>Still, you may ask, &#8220;what&#8217;s wrong with a better AOL or CompuServe?&#8221;</p>
<h2>Proprietary Silo vs Open Data and Open Protocols</h2>
<p>Before answering that question, let&#8217;s consider what the alternative to Facebook or <a href="http://twitter.com">Twitter</a> would be like. By way of analogy let&#8217;s look at Twitter vs <a href="http://status.net/">status.net</a>.</p>
<p>Twitter and status.net basically do the same thing: they are broadcast micro-blogging systems that let you send the equivalent of an SMS over the Internet to your followers. The best known example of status.net is <a href="http://identi.ca/">identi.ca</a>.</p>
<p>If you want to be part of the Twitter-verse you have to get an account at the sole provider of twitter-ness: twitter.com. Every tweet you send goes <em>through</em> twitter.com, is stored there, <em>analysed</em> and also provided to other (rich) organizations via the <a href="http://dev.twitter.com/pages/streaming_api">Twitter fire-hose</a>. Not a great deal of privacy there, apart from the notional privacy that you can &#8216;protect&#8217; your account. It&#8217;s still going through twitter.com.</p>
<p>status.net is <em>like</em> Twitter except that it is both an Open Source project and a Open set of Protocols. The difference is that status.net is like email; it&#8217;s a protocol that anybody can implement. You could subscribe to <em>any</em> status.net server and still be followed by any other status.net user in the world. Therefore, your tweets, or rather <em><a href="http://jonathancarter.org/2009/05/11/what-is-dented/">dents</a></em> would only go through the distributed servers, the same as email today.</p>
<p>Another advantage of a <em>distributed</em> network is that it&#8217;s more resilient to failure. Twitter went down on Christmas day because <em>every</em> tweet goes through twitter. Email didn&#8217;t go down, except maybe a few distributed nodes did &#8211; but email didn&#8217;t fail <em>en masse</em>.</p>
<p>So back to Facebook and silos? I definitely want to put an <a href="http://activitystrea.ms/">activity stream</a> (or <a href="http://en.wikipedia.org/wiki/Lifestreaming">lifestream</a>) on the web. I currently use twitter for that because so many of my friends do. I also want to be able to put the odd photo up, publish a free/busy calendar, and enable old friends and new ones to find me and get in contact. But I don&#8217;t want Facebook to <em>own</em> that information. I want to own it. I want it under my own control, possibly in my own appliance running somewhere on the net. A distributed system that talks to other systems to exchange the data all under <em>my </em>control, with my privacy settings which won&#8217;t suddenly change because an over-arching corporation needs to sell more of my privacy.</p>
<p>Of course, it <em>is</em> coming, and there&#8217;s even some competition in the space. <a href="http://onesocialweb.org/">onesocialweb</a> and <a href="https://joindiaspora.com/">Diaspora</a> are both trying to <span style="text-decoration: underline;"><em>solve</em></span> the Facebook problem. The <a href="http://wiki.debian.org/FreedomBox">Freedom Box</a> project, inspired by <a href="http://en.wikipedia.org/wiki/Eben_Moglen">Eben Moglen</a>, is also trying to work in that space. These will be tools that work in a distributed fashion.</p>
<p>When will it displace Facebook and Twitter? I think the jury is <em>definitely</em> out on that one; AOL, MSN, Compuserve, MySpace: the Internet is littered with the corpses of previously all-mighty corporations that owned the space.</p>
<p>Personally, I want Facebook to fail. I want a future where people control their own information. I want the <a href="http://thepowerofpull.com/pull/blog">semantic web and the power of pull</a>, not the push-web. I want my appliance with my data and my control and I&#8217;m prepared to pay for it. I guess I&#8217;m going to have to wait a bit!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2011%2F02%2Fthe-facebook-problem%2F&amp;title=The%20facebook%20problem" id="wpa2a_12"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2011/02/the-facebook-problem/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Call Centre PIN Codes</title>
		<link>http://alex.kavanagh.name/2011/02/call-centre-pin-codes/</link>
		<comments>http://alex.kavanagh.name/2011/02/call-centre-pin-codes/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 20:45:06 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=252</guid>
		<description><![CDATA[With the recent snowy weather in December, my roof sustained a fair amount of damage. Enough damage, in fact, to require a claim on the insurance. All well and good. In fact the insurance company have been very good and &#8230; <a href="http://alex.kavanagh.name/2011/02/call-centre-pin-codes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>With the recent snowy weather in December, my roof sustained a fair amount of damage. Enough damage, in fact, to require a claim on the insurance. All well and good. In fact the insurance company have been very good and all is proceeding to plan.</p>
<p>However, they called me today, somewhat randomly, to inform me that the claim was proceeding normally. They called me and then asked me to provide details to &#8216;prove&#8217; who I was. I said, before I do that, can you prove who you are? And they couldn&#8217;t. There&#8217;s no information they could give me over the phone to demonstrate that they were who they said they were.</p>
<p>Why am I so cautious? Well, why not. It&#8217;s trivially easy to spoof a phone number on ID, and this was &#8216;withheld&#8217; anyway. I ended the call, looked up their number on my policy document and rang back in &#8211; it was the only way to (mostly) ensure that I was talking to who I thought I would be.</p>
<p>So it made me think: if we need to prove who we are when we call them, why <em>shouldn&#8217;t</em> they prove who they are when they call us. And the easiest way to do that is to give a piece of information that only they could know, essentially, something that you&#8217;ve given them as a password <em>only</em> to be given back to you &#8211; not for you to access the account.</p>
<p>Of course, it will never happen &#8230; <em>(sigh)</em>.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2011%2F02%2Fcall-centre-pin-codes%2F&amp;title=Call%20Centre%20PIN%20Codes" id="wpa2a_14"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2011/02/call-centre-pin-codes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MyIET &#8211; not another networking silo, please</title>
		<link>http://alex.kavanagh.name/2010/11/myiet-not-another-networking-silo-please/</link>
		<comments>http://alex.kavanagh.name/2010/11/myiet-not-another-networking-silo-please/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 22:07:40 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Semantic Web]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=231</guid>
		<description><![CDATA[The  IET, or Institution of Engineering and Technology, is introducing &#8216;MyIET&#8217;, which is a member&#8217;s personal portal on the IET website. However, it&#8217;s also got status updates like twitter, a discussions and comments forum, etc. It looks like they have &#8230; <a href="http://alex.kavanagh.name/2010/11/myiet-not-another-networking-silo-please/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The  <a title="The Professional Home for Engineers and Technologists" href="http://www.theiet.or">IET</a>, or Institution of Engineering and Technology, is introducing &#8216;MyIET&#8217;, which is a member&#8217;s personal portal on the IET website. However, it&#8217;s also got status updates like twitter, a discussions and comments forum, etc. It looks like they have tagged some social networking <em>stuff</em> onto the standard account type <em>stuff.</em></p>
<p>Some context is probably required: The IET is a relatively large professional organisations serving mostly electrical and electronics engineers with a smattering of other technology people. There will, of course, be some networking that takes place within the confines of the Institution.</p>
<p>However, do I really want my <a style="font-style: italic;" title="Activity Stream definition at Wikipedia" href="http://en.wikipedia.org/wiki/Activity_stream">activity stream</a> to be confined in MyIET, rather than at identi.ca or twitter? No, is the honest answer, but I also think that what the IET have added to MyIET is symptomatic of a wider issue. Actually, I don&#8217;t really want it in twitter either, except that it has the network effect. I&#8217;d rather it was in identi.ca.</p>
<p>The issue is silos. MyIET is yet another social networking silo. If you put your data into the MyIET silo can you easily get it out? In this case, the answer is a resounding &#8216;no&#8217;. There doesn&#8217;t appear to be any options to export your status feed, comments or other data that you put into the site.</p>
<p>My ideal would be that my activity stream (or status updates) are held at a location of my choosing. They would probably be split into a number of categories, one of which might be IET related or business/professional related. And then I would configure the IET portal to pull my activity stream to it. Then, I would control the activity stream and what I do with it.</p>
<p>This is, of course, a federated social network. Oh, and <a title="OneSocialWeb - Creating a free, open, and decentralized social networking platform." href="http://onesocialweb.org/">OneSocialWeb</a> are doing just that.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2010%2F11%2Fmyiet-not-another-networking-silo-please%2F&amp;title=MyIET%20%E2%80%93%20not%20another%20networking%20silo%2C%20please" id="wpa2a_16"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2010/11/myiet-not-another-networking-silo-please/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Putting CM6 (Android 2.2 Froyo) on a UK Vodafone HTC Magic</title>
		<link>http://alex.kavanagh.name/2010/09/putting-cm6-on-a-uk-vodafone-magic/</link>
		<comments>http://alex.kavanagh.name/2010/09/putting-cm6-on-a-uk-vodafone-magic/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 17:00:22 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=200</guid>
		<description><![CDATA[I&#8217;ve got an HTC Magic by Vodafone in the UK. It&#8217;s a very nice phone. Unfortunately, it is also abandonware. It is now virtually out of contract. And before I rooted it and put CM6 on it, it was stuck &#8230; <a href="http://alex.kavanagh.name/2010/09/putting-cm6-on-a-uk-vodafone-magic/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve got an <a title="HTC Magic at Wikipedia" href="http://en.wikipedia.org/wiki/Htc_magic">HTC Magic</a> by Vodafone in the UK. It&#8217;s a very nice phone. Unfortunately, it is also <a title="Abandonware at wikipedia" href="http://en.wikipedia.org/wiki/Abandonware">abandonware</a>. It is now virtually out of contract. And before I rooted it and put <a title="What is Cyanogenmod" href="http://wiki.cyanogenmod.com/index.php?title=What_is_CyanogenMod">CM6</a> on it, it was stuck at Android 1.6 which was released on the 15 September 2009. That is over a year ago. Android 2.2 was released on the 20 May 2010 over <em>4 months ago</em> (<a title="Wikipedia Android" href="http://en.wikipedia.org/wiki/Android_(operating_system)">source</a>). This is the story of how I got CM6 on to my HTC Magic.</p>
<p><span id="more-200"></span></p>
<p>I&#8217;d like a new phone. Unfortunately, virtually every phone released these days running Android 2.2 (Froyo) also runs some kind of customised interface. Motorola has Motoblur, HTC has Sense, and who knows what Samsung has, but it isn&#8217;t stock Android. Is it so much to ask to have the stock Android experience? Apparently, it is.</p>
<p>I&#8217;ve seen rumours that Google is pushing handset makers to use stock Android 3.0 rather than put their own interface on it. Here&#8217;s hoping. So, since my phone is almost out of contract, I thought I&#8217;d root it (which <strong><em>voids</em></strong> the warranty), and put CyanogenMod 6 (CM6) on it, which is basically Android 2.2 (Froyo) with a few enhancements. CyanogenMod has done some incredible work and it is well worth checking out whether your Android phone is <a title="Main wikipage of Cyanogenmod" href="http://wiki.cyanogenmod.com/index.php?title=Main_Page">supported</a>.</p>
<p>Now I was quite nervous about messing with my phone. It has some paid apps on it and I&#8217;ve spent 18 months with it, customising it to my requirements. However, I&#8217;d heard such great things about CM6 that I was really looking forward to it. And, I must say, it is <em>so</em> much better that 1.6. Seriously, if you have an HTC Magic, then just read through this post, read the linked sites, and go for it!</p>
<p>Now the following is specific to UK HTC Magic devices, but the links indicate what to do for other phones. The steps are:</p>
<ol>
<li>Check your phone really is a HTC Magic Sapphire PVT32B</li>
<li>Root your phone</li>
<li>Backup your applications/data (although I could&#8217;ve missed out this step)</li>
<li>Backup your entire 1.6 stock ROM</li>
<li>Backup your whole SD Card</li>
<li>Install CM6</li>
<li>Install Google Apps (so you can get Market, GMail, etc.)</li>
<li>Re-configure the device for UK Vodafone</li>
<li>Re-install your Apps from Market (and restore your data if you need to).</li>
</ol>
<p>Now, I don&#8217;t really keep any data on my phone that isn&#8217;t in the <em>Cloud</em> somewhere. It is either on Google, Dropbox, or I copy it off the SD Card and stick it on my laptop. However, you may need to do Step 9. &#8220;restore data&#8221; if you have kept a lot of data on the phone. I didn&#8217;t have to because I use Google for my mail, contacts, calendar, etc. which simplifies the process. This was a conscious decision about 6 months ago to simplify my life. But I do have automated backups of all my data on Google.</p>
<h2>Assumptions</h2>
<ul>
<li>You know how to mount/read your SD Card in your phone in your OS</li>
<li>You don&#8217;t panic if things don&#8217;t go exactly according to plan. You might need to search forums if your experience doesn&#8217;t exactly match mine. I certainly had to because mine didn&#8217;t exactly match some of the other tutorials.</li>
<li>This is <strong>not</strong> a tutorial; it is a summary of what <strong>I</strong> did to get my phone running CM6.</li>
<li>It&#8217;ll be useful if you do this where you have WiFi because when you wipe the phone it will (temporarily) <em>not</em> have the settings to access data over 3G on the Vodafone network.  It&#8217;ll also be quicker!</li>
<li>I may have forgotten a few items whilst writing this. I had the following unusual options enabled on the phone:</li>
</ul>
<ol>
<li>Settings-&gt;Applications: &#8220;Unknown Sources&#8221;: ticked</li>
<li>Settings-&gt;Applications-&gt;Development: &#8220;USB Debugging&#8221;: ticked</li>
</ol>
<h2>Step 1: Check your phone is the same as mine!</h2>
<p>My phone is a UK spec Vodafone HTC Magic 32B with 192MB RAM. I verified this! In the USA this phone is also called a MyTouch 3G/ION.</p>
<p>To check your phone is the same as mine you need to reboot your phone into fastboot. Shut your phone down and then hold down the &#8216;Back&#8217; button whilst switching the phone on. You&#8217;ll then get a display which has this on it:</p>
<p><code>SAPPHIRE PVT <strong>32B</strong> SHIP S-ON G<br />
HBOOT-1.33.0004 (SAPP10000)<br />
CPLD-10<br />
RADIO-2.22.19.26I<br />
Apr 9 2009, 23:30:40</code></p>
<p>The key part is the &#8217;32B&#8217; above which I&#8217;ve highlighted. If you don&#8217;t have the same as mine then you&#8217;ll need to follow a &#8217;32A&#8217; or other set of instructions. (Thanks to <a title="axllent.org" href="http://www.axllent.org/docs/android/android_rooting">Ralph Slooten</a> for the idea on showing the fastboot).</p>
<h2>Step 2: Root your phone</h2>
<p>This is really simple.  Search market for <em><a title="Universal Androot and Cyanogenmod wiki" href="http://wiki.cyanogenmod.com/index.php?title=Universal_Androot">Universal Androot</a></em>. Install it and launch it. Press &#8220;Root <img src='http://alex.kavanagh.name/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> &#8221;.  After a short while your phone will be &#8216;rooted&#8217;, which means that applications can (with permission) access anything on the phone&#8217;s filesystem. This is important as you can&#8217;t install the other tools without.</p>
<p>Note that you will <em>void</em> your warranty on the phone by doing this. Mine&#8217;s so close to being out of contract (5 days), and I&#8217;ve had it 18 months, that this didn&#8217;t worry me. It might worry you though!</p>
<h2>Step 3: Backup your applications/data</h2>
<p>Now you&#8217;ve rooted your phone you can back everything up on it. Search for &#8216;<a title="Titanium Backup official site" href="http://matrixrewriter.com/android/">Titanium backup</a>&#8216; on the Market. Install it, and run it. It will ask for root privileges which you should allow and tick the box to always allow Titanium to have root privileges.</p>
<p>Then you need to click on the &#8216;<strong>Problems?</strong>&#8216; button and do the upgrade for BusyBox. If you don&#8217;t then Titanium Backup won&#8217;t work.</p>
<p>After that, use the &#8216;<strong>menu</strong>&#8216; button, select &#8216;<span style="color: #000000;"><strong>Batch</strong>&#8216; and click the &#8216;<strong>Run</strong>&#8216; button next to &#8220;<em>Backup all user apps + system data</em>&#8220;. This will make a full backup of all your <em>user</em> applications (but <em>not</em> the current stock 1.6 ROM) and all the data on the phone to the SD Card.</span></p>
<p><span style="color: #000000;">Now <em>mount</em> your phone to your computer: plug in a USB cable, connect it to your handy laptop, wait a few seconds for your phone to recognise the link, pull down on the status bar and select the little USB symbol and connect it to your computer.  Then copy the <strong>TitaniumBackup</strong> folder off the SD Card onto your computer.</span></p>
<h2><span style="color: #000000;">Step 4: Backup your entire 1.6 stock ROM</span></h2>
<p><span style="color: #000000;">Next we make a complete backup of your current Stock 1.6 ROM, data, apps &#8230; basically <em>everything</em>. Get this right and you&#8217;ll be able to return your phone to its current state.</span></p>
<p><span style="color: #000000;">So why do <em>Step 3</em> at all? Mostly because:</span></p>
<ul>
<li>I&#8217;m paranoid</li>
<li>It&#8217;s a useful thing to do for the future too.</li>
</ul>
<p>To do this step we will be using <a title="ROM Manager by @koush" href="http://www.koushikdutta.com/2010/02/clockwork-recovery-image.html">ROM Manager</a> by the <a title="Koush Dutta, Android programmer extroidinaire" href="http://twitter.com/#!/koush">@koush</a>. This really is an amazing piece of software and makes it very easy to try out custom ROMs.</p>
<p>I used this <a title="How To Fully Back Up And Restore Your Android Phone Using Nandroid Backup" href="http://www.androidpolice.com/2010/04/16/complete-guide-how-to-fully-back-up-and-restore-your-android-phone-using-nandroid-backup-and-clockworkmod-rom-manager/">guide</a> to perform the backup. Please go and <em>read it</em> for background information and to familiarise yourself with the screens. The essential steps are:</p>
<ol>
<li>Install ROM Manager &#8211; search for it in Market.</li>
<li><strong>IMPORTANT</strong>: Work with a fully charged phone.</li>
<li><strong>Unplug</strong> the USB cable.</li>
<li>Install the Recovery Image using the top option in ROM Manager. The PVT 32B (i.e. the Vodafone UK HTC Magic) is known as a <strong>MyTouch 3G/ION</strong> to ROM Manager.  Do <strong><em>not</em><span style="font-weight: normal;"> select the &#8220;HTC Magic&#8221; option or you will flash the wrong recovery image.</span></strong></li>
<li><strong><span style="font-weight: normal;">Then select &#8220;Backup Current ROM&#8221;.</span></strong></li>
<li><strong><span style="font-weight: normal;">After the phone has rebooted and backed up the ROM, it will boot back into your normal stock Android 1.6.</span></strong></li>
</ol>
<p>Okay, now your current ROM is backed up to the SD Card.</p>
<h2>Step 5: Backup your whole SD Card</h2>
<p>I said I was paranoid didn&#8217;t I? There is a <em>small</em> chance that the SD Card will get corrupted when flashing a ROM so it&#8217;s prudent to back-up the SD Card:</p>
<ol>
<li>Mount it on your laptop/computer.</li>
<li>Copy everything on the card.  I put it into a ZIP file.</li>
</ol>
<p>This copies the current ROM you backed up in Step 4 onto your laptop/computer as well.</p>
<h2>Step 6: Install CyanogenMod 6</h2>
<p>Okay, finally you are reaching the exciting part, but I just want to make something clear:</p>
<p><strong>This step involves wiping <em>everything</em> from your phone, just like a factory reset.</strong> The SD Card <em>should</em> be okay, but all your applications and data are going to be wiped from the phone. You <em>will</em> be able to restore your paid for apps from Market, but there won&#8217;t be a record of what you have installed.</p>
<p>I would (and did) at this point make a note of what apps I had installed so I could re-install them afterwards.</p>
<p>Next I read <a href="http://www.androidpolice.com/2010/05/08/complete-guide-how-to-flash-a-custom-rom-to-your-android-phone-with-rom-manager-full-backup-restore/">[Complete Guide] How To Flash A Custom ROM To Your Android Phone With ROM Manager + Full Backup &amp; Restore</a>.</p>
<p><strong>Note</strong>: The stock Vodafone 1.6 Android seems to re-flash the recovery image to a stock image after each re-boot. This one caught me out. So you need to re-flash the recovery image after <em>each</em> reboot into the stock OS. The CyanogenMod ROMs (and other&#8217;s apparently) don&#8217;t do this.</p>
<p>Therefore, as we have already rebooted into 1.6 Android (to do the ROM back-up) we need to convince ROM Manager to re-flash the <em>Clockworkmod recovery image</em>. Unfortunately, at the time of writing the ROM Manager incorrectly reports that it <em>is</em> flashed: it isn&#8217;t and you can prove it by trying to reboot &#8211; you&#8217;ll end up with a large &#8216;!&#8217; warning triangle on recovery boot (hold &#8216;home&#8217; button when powering on).</p>
<p>To convince ROM Manager to reflash the clockworkmod recovery image, just scroll to the bottom of the ROM Manager app and install the aron_RA image. After that is installed, <em>re-install</em> the clockworkmod recovery image, but using the option at the top again. <em>Now</em> you are ready to flash the CM6.  (Thanks to <a title="Can't Reboot into Recovery on MT3G w/ ClockworkMod 2.5.0.1" href="http://www.clockworkmod.com/forum/viewtopic.php?f=4&amp;t=104">this thread</a> at <a title="Clockworkmod forum" href="http://www.clockworkmod.com/forum/">clockworkmod forum</a>.)</p>
<p>Now we pick up on the instructions at <em><a title="Upgrade to CM5/6 at the cyanogenmod wiki" href="http://wiki.cyanogenmod.com/index.php?title=Upgrading_from_CyanogenMod_4.2_to_CyanogenMod_5/6">Upgrading from CyanogenMod 4.2 to CyanogenMod 5/6</a></em>. We&#8217;re not really upgrading, but it works well.</p>
<p>If you bought the ROM Manager application you can probably browse for the ROM. I didn&#8217;t because I wasn&#8217;t sure if it was going to work. I <em>am</em> going to buy it now because it does such a great job and I want to support its development.</p>
<p>So this is how it is done manually:</p>
<ol>
<li>On your laptop, download the latest (in my case CM6) ROM. This is the CM6 ROM in the section &#8220;<a href="#CyanogenMod_for_the_HTC_Dream_.26_Magic">CyanogenMod for the HTC Dream &amp; Magic</a>&#8221; on this <a title="Latest version of Cyanogenmod ROM page at the Cyanogenmod wiki" href="http://wiki.cyanogenmod.com/index.php?title=Latest_version">page</a>. The MD5SUM for the ROM I downloaded is: <strong>35b6603227aea922c28284ef8d269015</strong> and the filename is: <strong>update-cm-6.0.0-DS-signed.zip</strong></li>
<li>Also download the <em>tiny</em> MDPI version of the Google Apps for CyanogenMod 6. Again the MD5SUM is <strong>d21e9a3597b7f03f9e623c8e5b9a9caf</strong> and the filename: <strong>gapps-mdpi-tiny-20100917-signed.zip</strong></li>
<li>Next copy these two zip files over to your phone&#8217;s SD Card. Anywhere is fine, but I placed them in the top-level directory in the SD Card.</li>
<li><strong>Ensure the phone is fully charged</strong>.</li>
<li>Disconnect it from the laptop &#8211; i.e. unplug the USB.</li>
<li>Run ROM Manager and select &#8220;Install ROM from SD Card&#8221; (see images on <a title="[Complete Guide] How To Flash A Custom ROM To Your Android Phone With ROM Manager + Full Backup &amp; Restore" href="http://www.androidpolice.com/2010/05/08/complete-guide-how-to-flash-a-custom-rom-to-your-android-phone-with-rom-manager-full-backup-restore/">this helpful page</a>!).  Select the update-cm-6.0.0-DS-signed.zip file.</li>
<li>Ensure you <strong><em>tick</em></strong> the &#8220;Wipe Data and Cache&#8221;.  There is no need to select/tick the &#8220;Backup Existing ROM&#8221; as you have already completed that step above.  Incidentally, the reason I split it was so that I could copy the backed up ROM <em>off</em> the device <em>before</em> flashing the new ROM.</li>
<li>Click &#8220;ok&#8221; and it should flash the ROM.</li>
</ol>
<p>The phone will reboot into the recovery image, flash the new ROM, and then reboot again. It should now be running CM6.</p>
<p>Okay, now you have CM6, we still need to put the Google Apps on the device and get it back onto Vodafone.</p>
<h2>Step 7: Install Google Apps</h2>
<p>This is so you get Gmail, Market and the other Google Apps.</p>
<ol>
<li>Run ROM Manager and select &#8220;Install ROM from SD Card&#8221;. This time select the gapps-mdpi-tiny-20100917-signed.zip file.</li>
<li>Ensure that <em><strong>neither</strong></em> of the two tick boxes are selected (&#8220;Wipe Data and Cache&#8221; nor &#8220;Backup Existing ROM&#8221;)</li>
<li>Click OK.</li>
<li>The phone will reboot and install Google Apps.</li>
</ol>
<p>When the phone reboots this time it will go through the Google Apps set-up.</p>
<p>I have two Google Accounts that I wanted to use with the Phone. One is a Google Apps account (i.e. a paid for hosted account on Google for my domains), and the other is a typical googlemail/gmail account. As Market can only be used with your &#8216;regular&#8217; Google account, I did the set-up with my regular account. This means that Market will recognise your paid apps.</p>
<p>The Froyo 2.2 Gmail, Calendar and Contacts programs are multi-account aware and can be configured with both the regular account and the Google Apps account. This essentially solved my problem with 1.6 (single accounts only).</p>
<p>So my recommendation is to set the phone up with your regular Google account and add the Google Apps account in the Accounts section. <em>Note that Reader isn&#8217;t multi-account aware and will only work with the <strong>primary</strong> account on the device.</em></p>
<h2>Step 8: Re-configure the device for UK Vodafone</h2>
<p>Navigate to Settings-&gt;Wireless &amp; networks-&gt;Mobile Networks-&gt;Network operators and select &#8220;vodafone UK&#8221;.</p>
<p>Then go back to Settings-&gt;Wireless &amp; networks-&gt;Mobile Networks-&gt;Access Point Names and select &#8220;Vodafone UK Contract I&#8230;&#8221; (Internet).  i.e. ensure that it has the green dot next to it.</p>
<p>Your phone should now be able to go back onto 3G.</p>
<h2>Step 9: Re-install your Apps</h2>
<p>If you now go to Market, it should synchronise and show you your paid apps that you have previously bought on your primary Google Account.</p>
<p>As you have wiped all of the data on the phone (not the SD Card), you&#8217;ll either need to re-sync the data (all the Google Stuff), or restore it using Titanium. I&#8217;m just progressing through this now.</p>
<h2>Other things I had to do</h2>
<p>Some final, hopefully useful, things I had to do:</p>
<ul>
<li>I used ROM Managers &#8216;Fix Permissions&#8217;. It didn&#8217;t do any harm and I thought it would fix the next problem.</li>
<li>My Google search widget on the home screen failed.  After Googling it, I discovered that it is a fairly common problem after reflashing a device.  Just delete it and put it on again and it should work.</li>
</ul>
<h2>And Finally &#8230;</h2>
<p>Well that&#8217;s it. The recovery image being replaced on Stock 1.6 held me up for a bit and I had to do a load of reading to get it right. So far everything seems good on CM6; it&#8217;s <em>seems</em> faster, it is smoother and it has multi-account support.</p>
<p><strong>I also must thank that amazing work of the CyanogenMod team, ROM Manager and all of the people testing these ROMs.  Without them we would be stuck on carrier or manufacturer ROMs with no hope of upgrade.</strong></p>
<p>The following is a list of links that may prove useful to you:</p>
<ul>
<li><a href="http://wiki.cyanogenmod.com/index.php?title=Full_Update_Guide_-_HTC_Magic_%2832B%29">Full Update Guide &#8211; HTC Magic (32B)</a></li>
<li><a href="http://wiki.cyanogenmod.com/index.php?title=Universal_Androot">Universal Androot</a></li>
<li><a href="http://www.androidpolice.com/2010/05/08/complete-guide-how-to-flash-a-custom-rom-to-your-android-phone-with-rom-manager-full-backup-restore/">[Complete Guide] How To Flash A Custom ROM To Your Android Phone With ROM Manager + Full Backup &amp; Restore</a></li>
<li><a href="http://www.androidpolice.com/2010/04/16/complete-guide-how-to-fully-back-up-and-restore-your-android-phone-using-nandroid-backup-and-clockworkmod-rom-manager/">[Complete Guide] How To Fully Back Up And Restore Your Android Phone Using Nandroid Backup</a></li>
<li><a href="http://www.koushikdutta.com/2010/02/clockwork-recovery-image.html">ROM Manager</a></li>
<li><a href="http://www.clockworkmod.com/forum/viewtopic.php?f=4&amp;t=104">Can&#8217;t Reboot into Recovery on MT3G w/ ClockworkMod 2.5.0.1</a></li>
<li><a href="http://wiki.cyanogenmod.com/index.php?title=Fastboot">Fastboot</a> (a description)</li>
<li><a href="http://http://www.axllent.org/docs/android/android_rooting">Rooting your HTC Magic Android Phone with CyanogenMod</a></li>
<li><a href="http://matrixrewriter.com/android/">Titanium Backup</a></li>
<li><a href="http://en.wikipedia.org/wiki/Htc_magic">HTC Magic</a> page at Wikipedia</li>
<li><a href="http://wiki.cyanogenmod.com/index.php?title=Main_Page">CyanogenMod Wiki</a></li>
<li><a href="http://en.wikipedia.org/wiki/Android_(operating_system)">Android</a> at Wikipedia</li>
</ul>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2010%2F09%2Fputting-cm6-on-a-uk-vodafone-magic%2F&amp;title=Putting%20CM6%20%28Android%202.2%20Froyo%29%20on%20a%20UK%20Vodafone%20HTC%20Magic" id="wpa2a_18"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2010/09/putting-cm6-on-a-uk-vodafone-magic/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Banks: the problem with &#8216;too big to fail&#8217;</title>
		<link>http://alex.kavanagh.name/2010/09/banks-the-problem-with-too-big-to-fail/</link>
		<comments>http://alex.kavanagh.name/2010/09/banks-the-problem-with-too-big-to-fail/#comments</comments>
		<pubDate>Sat, 25 Sep 2010 17:00:16 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[banks markets failure learning]]></category>

		<guid isPermaLink="false">http://alex.kavanagh.name/?p=195</guid>
		<description><![CDATA[We hear it time and again.  Such-and-such bank is too big to fail. To me, that simply means too big. A bank failing needs to be like a ripple in a pond not like a tsunami crashing all before it &#8230; <a href="http://alex.kavanagh.name/2010/09/banks-the-problem-with-too-big-to-fail/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>We hear it time and again.  <em>Such-and-such bank is too big to fail</em>. To me, that simply means <em>too big</em>. A bank failing needs to be like a ripple in a pond not like a tsunami crashing all before it and leaving a wasteland behind it.</p>
<p>There&#8217;s just something very <em>wrong</em> with the banking industry. In virtually every other industry corporate failure (or basically <em>going bust</em>) is the market punishing poor decision making by that organisation&#8217;s management. It&#8217;s a good thing. A company makes some bad decisions and the people in charge get <em>feedback</em> about those decisions in their company losing customers, money, both or even just going bust. A company making good decisions is rewarded in the market and keeps going.</p>
<p>And a company going bust is actually good feedback; it&#8217;s doing something wrong in the market. The people working in it <em>should</em> be released back into the labour pool where they can be employed by other companies that are making the right decisions in the market. This, of course, requires a <em>near-perfect</em> market where lots of little companies are providing services in the market.</p>
<p>However, in the UK, Northern Rock, RBS, Lloyds <em>et al.</em> made incredibly poor decisions about how to invest their money.  The lost staggering amounts of money on their little pyramid scheme when over-inflated property prices crashed and mortgages were defaulted on by people who should <em>never</em> have been given the mortgage in the first place.  Pure Greed.  But it would&#8217;ve been okay if their gambling had paid off.  They didn&#8217;t, and the banks didn&#8217;t get to feel the <em>pain<span style="font-style: normal;"> of their mistakes.  And that&#8217;s because, we, the tax payer bailed every-last-one-of-them out.</span></em></p>
<p>So they&#8217;ve learnt nothing. In fact they&#8217;ve been <em>rewarded</em> for their incompetence. Not only do the banks get to lose bigger-than-telephone-number amounts of money, but they now know, if they do, they&#8217;ll simply get their customers to bail them out <em>one way or another</em>.</p>
<p>What&#8217;s the solution? I don&#8217;t know, but one method might be to make them small enough so that when they fail, we get a ripple and not a tsunami. And maybe regulate them so that the gamblers don&#8217;t get to take down the mortgage providers, day-to-day business providers, and the consumer/retail banks. Obviously, it&#8217;s more complex than this, but it might be a step in the right direction.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Falex.kavanagh.name%2F2010%2F09%2Fbanks-the-problem-with-too-big-to-fail%2F&amp;title=Banks%3A%20the%20problem%20with%20%E2%80%98too%20big%20to%20fail%E2%80%99" id="wpa2a_20"><img src="http://alex.kavanagh.name/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://alex.kavanagh.name/2010/09/banks-the-problem-with-too-big-to-fail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
