<?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>It&#039;s all about me</title>
	<atom:link href="http://supersoftcafe.com/feed" rel="self" type="application/rss+xml" />
	<link>http://supersoftcafe.com</link>
	<description>Michael Brown on technology</description>
	<lastBuildDate>Wed, 16 May 2012 20:17:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>File age in python</title>
		<link>http://supersoftcafe.com/2012/05/file-age-in-python</link>
		<comments>http://supersoftcafe.com/2012/05/file-age-in-python#comments</comments>
		<pubDate>Wed, 16 May 2012 20:17:46 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/?p=137</guid>
		<description><![CDATA[For file cache algorithms it would be useful to have a function that gives you a simple True/False answer to the question, is this an old file? The following provides just that. import os from datetime import datetime from datetime &#8230; <a href="http://supersoftcafe.com/2012/05/file-age-in-python">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For file cache algorithms it would be useful to have a function that gives you a simple True/False answer to the question, is this an old file? The following provides just that.</p>
<pre>import os
from datetime import datetime
from datetime import timedelta

MAX_AGE = timedelta(minutes=5)
def is_old_file(filename):
    current_time = datetime.now()
    file_time = datetime.fromtimestamp(os.stat(filename).st_atime)
    return current_time &lt; file_time or (current_time - file_time) &gt; MAX_AGE</pre>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2012/05/file-age-in-python/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terminal on Lion</title>
		<link>http://supersoftcafe.com/2011/11/terminal-on-lion</link>
		<comments>http://supersoftcafe.com/2011/11/terminal-on-lion#comments</comments>
		<pubDate>Thu, 24 Nov 2011 22:54:23 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/?p=126</guid>
		<description><![CDATA[Open up terminal. Click the fullscreen button (top right) and it takes up all screen space. It&#8217;s like a programmers wet dream .]]></description>
			<content:encoded><![CDATA[<p>Open up terminal. Click the fullscreen button (top right) and it takes up all screen space. It&#8217;s like a programmers wet dream <img src='http://supersoftcafe.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2011/11/terminal-on-lion/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seriously!!!!</title>
		<link>http://supersoftcafe.com/2011/11/seriously</link>
		<comments>http://supersoftcafe.com/2011/11/seriously#comments</comments>
		<pubDate>Thu, 24 Nov 2011 12:00:55 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Lifestyle]]></category>
		<category><![CDATA[chopping board]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/?p=127</guid>
		<description><![CDATA[It&#8217;s a chopping board. It&#8217;s so that you don&#8217;t mix up your meat and veg!&#8230;   He calls it &#8220;The Big Chopper&#8221;. Frankly, seeing this at the ideal home show was a surreal experience. And, begs the question, where does he &#8230; <a href="http://supersoftcafe.com/2011/11/seriously">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://supersoftcafe.com/wp-content/uploads/2011/11/big_chopper.jpg"><img class="alignright size-medium wp-image-128" title="big chopper" src="http://supersoftcafe.com/wp-content/uploads/2011/11/big_chopper-225x300.jpg" alt="" width="225" height="300" /></a>It&#8217;s a chopping board. It&#8217;s so that you don&#8217;t mix up your meat and veg!&#8230;   He calls it &#8220;The Big Chopper&#8221;.</p>
<p>Frankly, seeing this at the ideal home show was a surreal experience. And, begs the question, where does he store it?</p>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2011/11/seriously/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Barcamp</title>
		<link>http://supersoftcafe.com/2011/10/barcamp</link>
		<comments>http://supersoftcafe.com/2011/10/barcamp#comments</comments>
		<pubDate>Sat, 08 Oct 2011 10:58:38 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Lifestyle]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/2011/10/barcamp</guid>
		<description><![CDATA[I&#8217;m off to Barcamp at the end of this month. So, what do I have to talk about? Business process? New languages and environments? Trends in the set top box market? Hmm.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m off to Barcamp at the end of this month. So, what do I have to talk about? Business process? New languages and environments? Trends in the set top box market? Hmm.</p>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2011/10/barcamp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zip line</title>
		<link>http://supersoftcafe.com/2011/08/zip-line</link>
		<comments>http://supersoftcafe.com/2011/08/zip-line#comments</comments>
		<pubDate>Thu, 04 Aug 2011 09:03:47 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Lifestyle]]></category>
		<category><![CDATA[zip line]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/?p=116</guid>
		<description><![CDATA[Fun. No, really!]]></description>
			<content:encoded><![CDATA[<p><a href="http://supersoftcafe.com/wp-content/uploads/2011/08/ZipLine.jpg"><img class="size-medium wp-image-117 alignleft" title="ZipLine" src="http://supersoftcafe.com/wp-content/uploads/2011/08/ZipLine-300x249.jpg" alt="" width="300" height="249" /></a>Fun. No, really!</p>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2011/08/zip-line/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chinese version of Countdown</title>
		<link>http://supersoftcafe.com/2011/07/chinese-version-of-countdown</link>
		<comments>http://supersoftcafe.com/2011/07/chinese-version-of-countdown#comments</comments>
		<pubDate>Fri, 22 Jul 2011 07:39:01 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Observations]]></category>
		<category><![CDATA[countdown]]></category>
		<category><![CDATA[joke]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/?p=113</guid>
		<description><![CDATA[May I have a vowel please. Another vowel. Can I have a vowel please. I think I&#8217;ll have another vowel. Hmm, vowel please. &#8230;. (you get the idea)]]></description>
			<content:encoded><![CDATA[<p>May I have a vowel please.</p>
<p>Another vowel.</p>
<p>Can I have a vowel please.</p>
<p>I think I&#8217;ll have another vowel.</p>
<p>Hmm, vowel please.</p>
<p>&#8230;.</p>
<p>(you get the idea)</p>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2011/07/chinese-version-of-countdown/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vala Generics</title>
		<link>http://supersoftcafe.com/2011/07/vala-generics</link>
		<comments>http://supersoftcafe.com/2011/07/vala-generics#comments</comments>
		<pubDate>Mon, 18 Jul 2011 21:06:27 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[generics]]></category>
		<category><![CDATA[vala]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/?p=109</guid>
		<description><![CDATA[Vala supports a limited form of generics. It&#8217;s a shame, coming from a Java background not to see the thorough implementation that I am used to. Vala coming from a C# background might have inherited it&#8217;s form of generics, but &#8230; <a href="http://supersoftcafe.com/2011/07/vala-generics">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vala supports a limited form of generics. It&#8217;s a shame, coming from a Java background not to see the thorough implementation that I am used to. Vala coming from a C# background might have inherited it&#8217;s form of generics, but that sadly was not possible, and with good reason. Vala maps onto an existing type system, whereas C# generics was a revolution in the underlying type system.</p>
<p>What&#8217;s the point? Well, it&#8217;s easy to break. Not that you should be trying, mind, but you should be aware of some gotchas in the polymorphism.</p>
<pre>class AContainer {
    string value;
}

class A1Container : AContainer {
    string value1;
}

class A2Container : AContainer {
    string value2;
}

void add_something(List&lt;AContainer&gt; list) {
    list.add(new A1Container());
}

void main() {
    add_something(new List&lt;AContainer&gt;());  // Good
    add_something(new List&lt;A1Container&gt;()); // Good
    add_something(new List&lt;A2Container&gt;()); // Bad!
}</pre>
<p>I have typed this from memory, so please forgive the odd mistake, but it gets the idea across. It is perfectly possible to, within the rules of the language, put the wrong type of object into the container.</p>
<p>If some other peice of code that depends on a List&lt;A1Container&gt; having exactly the expected types, with the expected visible fields, is executed, we can very easily corrupt memory and/or crash the program.</p>
<p>Like I say, this is just something to look out for. After all, we&#8217;re real programmers aren&#8217;t we!</p>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2011/07/vala-generics/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A2DP on Ubuntu 11.04</title>
		<link>http://supersoftcafe.com/2011/06/a2dp-on-ubuntu-11-04</link>
		<comments>http://supersoftcafe.com/2011/06/a2dp-on-ubuntu-11-04#comments</comments>
		<pubDate>Wed, 08 Jun 2011 10:43:42 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Equipment]]></category>
		<category><![CDATA[a2dp]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/?p=103</guid>
		<description><![CDATA[I have purchased a lovely new Bluetooth stereo headset for me, well, everything. It works so well with the iPhone, no problem with my MacBook, and with the Ubuntu Linux laptop?..   It works, but I couldn&#8217;t find the advanced profile. &#8230; <a href="http://supersoftcafe.com/2011/06/a2dp-on-ubuntu-11-04">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have purchased a lovely new Bluetooth stereo headset for me, well, everything. It works so well with the iPhone, no problem with my MacBook, and with the Ubuntu Linux laptop?..   It works, but I couldn&#8217;t find the advanced profile. For others like me, here&#8217;s how to find it.</p>
<ul>
<li>Click the Bluetooth icon on your task bar and select &#8220;Set up new device&#8221;. Put your headset into discovery mode, in my case by pressing and holding the on button for a while.</li>
<li>Select the device from the list and continue.</li>
<li>Click the Bluetooth icon on your task bar, and look for your device name under the menu. It should appear as a sub menu, with Connect/Disconnect/Open Sound Preferences. Select the latter.</li>
<li>In the sound preferences dialog click Hardware, and select the device. At the bottom of this window should be a drop down box called &#8220;Profile:&#8221;. Here you can select &#8220;High Fidelity Playback (A2DP)&#8221;.</li>
<li>Click the Output tab, and make sure your device is checked.</li>
</ul>
<p>Well, in theory that&#8217;s job done! <img src='http://supersoftcafe.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2011/06/a2dp-on-ubuntu-11-04/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SEO and IE</title>
		<link>http://supersoftcafe.com/2011/05/seo-and-ie</link>
		<comments>http://supersoftcafe.com/2011/05/seo-and-ie#comments</comments>
		<pubDate>Sun, 22 May 2011 22:33:53 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[nofollow]]></category>
		<category><![CDATA[noindex]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/?p=101</guid>
		<description><![CDATA[I am trying my hand at SEO (Search Engine Optimization) at the moment on my wifes site. It goes, averagely. One technique is to restrict access to excessively verbose parts of your site. Anything that is basically generated, and where &#8230; <a href="http://supersoftcafe.com/2011/05/seo-and-ie">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I am trying my hand at SEO (Search Engine Optimization) at the moment on my wifes site. It goes, averagely.</p>
<p>One technique is to restrict access to excessively verbose parts of your site. Anything that is basically generated, and where the number of pages can be huge, might look to a search engine like an attempt to spam their indexes. Well, actually, her site had a robots.txt file to prevent access to those pages. Guess which major search engine ignores that!..   Oh well.</p>
<p>Next attempt is to add &#8220;rel=&#8217;nofollow&#8217;&#8221; to every href into those generated pages. One quick bit of research later, I discover that our favourite major search engine will follow those links anyway. It may or may not index, but will follow.</p>
<p>Moving on to the &lt;meta name=&#8221;robots&#8221; content=&#8221;noindex&#8221;/&gt; header tag for every generated page. This should do the trick, however search engine no. 1 has one last irritating trick up its sleeve. It has a long memory. If it has previously indexed a page, all these measures will not make it forget the page. So&#8230;.</p>
<p>Last trick, rename all the generated pages, so that the old links generate 404 and major search engines forget them!.</p>
<p>I&#8217;ll report back later. Wish me luck.</p>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2011/05/seo-and-ie/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running hurts</title>
		<link>http://supersoftcafe.com/2011/05/running-hurts</link>
		<comments>http://supersoftcafe.com/2011/05/running-hurts#comments</comments>
		<pubDate>Sat, 21 May 2011 07:36:45 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Lifestyle]]></category>
		<category><![CDATA[running]]></category>
		<category><![CDATA[shin splints]]></category>

		<guid isPermaLink="false">http://supersoftcafe.com/?p=97</guid>
		<description><![CDATA[I&#8217;m 37 and generally not fit. Next to me is a field that has a diameter of 1.7 miles. So, recently I decided to run around it! Being of little experience, I put on the cheapest trainers I could buy, &#8230; <a href="http://supersoftcafe.com/2011/05/running-hurts">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m 37 and generally not fit. Next to me is a field that has a diameter of 1.7 miles. So, recently I decided to run around it! Being of little experience, I put on the cheapest trainers I could buy, and tortured my self every other day around that field. But after two weeks, my shins started to hurt.</p>
<p>It turns out that this is a common complaint amongst runners, especially inexperienced ones. Shin splints are tiny fractures (so I hear) in the bone, and frankly, I don&#8217;t like the sound of that.</p>
]]></content:encoded>
			<wfw:commentRss>http://supersoftcafe.com/2011/05/running-hurts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

