<?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>OliverBrown.me.uk &#187; Programming</title>
	<atom:link href="http://www.oliverbrown.me.uk/category/technology/computers/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.oliverbrown.me.uk</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 26 Jun 2010 09:39:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Open Graph protocol seems pretty cool</title>
		<link>http://www.oliverbrown.me.uk/2010/04/29/open-graph-protocol-seems-pretty-cool/</link>
		<comments>http://www.oliverbrown.me.uk/2010/04/29/open-graph-protocol-seems-pretty-cool/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 15:20:18 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Open Graph]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/?p=760</guid>
		<description><![CDATA[A few days ago Facebook announced their new Open Graph Protocol. It&#8217;s basically a way for people to interact with pages on the internet (in theory pages representing real world items, but it will be hard to moderate) in basically the same way as they do with existing Facebook pages.
For a page to be eligible [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago Facebook announced their new <a href="http://developers.facebook.com/docs/opengraph">Open Graph Protocol</a>. It&#8217;s basically a way for people to interact with pages on the internet (in theory pages representing real world items, but it will be hard to moderate) in basically the same way as they do with existing Facebook pages.</p>
<p>For a page to be eligible all you need to do is add a few meta tags to it specifying it&#8217;s  name and type (film, book, actor, product, game etc.). To actually do anything useful, you then add a Facebook &#8220;like&#8221; button. Once some people have liked it, it appears in their Facebook news feed like any other item (with the data you added in the meta tags). One of the optional meta tags you can add specifies user IDs of Facebook users who can administrate the page. If you do, you can get access to the same sort of admin page you get with any traditional Facebook page.</p>
<p>Conveniently I just developed a use for this sort of thing so I added support to my blog. A few edits to the theme and cunning use of Wordpress&#8217;s custom fields and now any page or post on my site can support Open Graph. Currently the only support is on the <a title="Gravitas" href="http://www.oliverbrown.me.uk/gravitas/">Gravitas</a> page.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2010/04/29/open-graph-protocol-seems-pretty-cool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Wave update is live &#8211; still invite only</title>
		<link>http://www.oliverbrown.me.uk/2009/09/30/google-wave-update-is-live-still-invite-only/</link>
		<comments>http://www.oliverbrown.me.uk/2009/09/30/google-wave-update-is-live-still-invite-only/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 12:38:37 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[Google Wave]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/?p=695</guid>
		<description><![CDATA[Google Wave went live yesterday but it still invite only. It seems the people with access are the people who previously had sandbox access (everyone who went to Google I/O and a few others), another 100,000 people who applied early on and select paying Google Apps users.
That number will grow slowly however as they also [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Google Wave" src="https://www.google.com/accounts/wave/wave-logo.gif" alt="" width="227" height="41" /><a href="http://www.oliverbrown.me.uk/2009/09/23/paving-the-way-for-wave/">Google Wave</a> <a href="http://googleblog.blogspot.com/2009/09/surfs-up-wednesday-google-wave-update.html">went live</a> yesterday but it still invite only. It seems the people with access are the people who previously had sandbox access (everyone who went to Google I/O and a few others), another 100,000 people who applied early on and select paying Google Apps users.</p>
<p>That number will grow slowly however as they also revealed that existing users will be able to invite others (similar to when GMail launched).</p>
<p>So if anyone has an <a href="mailto:galaxiaguy@googlemail.com">invite</a>&#8230; :P</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2009/09/30/google-wave-update-is-live-still-invite-only/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paving the way for Wave</title>
		<link>http://www.oliverbrown.me.uk/2009/09/23/paving-the-way-for-wave/</link>
		<comments>http://www.oliverbrown.me.uk/2009/09/23/paving-the-way-for-wave/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 09:21:27 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Google Wave]]></category>
		<category><![CDATA[Goolge Chrome]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[Webkit]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/?p=672</guid>
		<description><![CDATA[Google released a new plugin for Internet Explorer today called Google Chrome Frame. It&#8217;s a simple but clever idea to bring the latest HTML 5 technologies to IE by simply embedding the Webkit based Google Chrome rendering engine.
It&#8217;s opt-in per site. You have to add a specific meta tag to your pages to make it [...]]]></description>
			<content:encoded><![CDATA[<p>Google released a new plugin for Internet Explorer today called <a title="Google Chrome Frame" href="http://blog.chromium.org/2009/09/introducing-google-chrome-frame.html">Google Chrome Frame</a>. It&#8217;s a simple but clever idea to bring the latest HTML 5 technologies to IE by simply embedding the Webkit based Google Chrome rendering engine.</p>
<p>It&#8217;s opt-in per site. You have to add a specific meta tag to your pages to make it take advantage of the plugin if it&#8217;s installed. There is also a Javascript way of detecting if the plugin is installed and inviting users to install it if isn&#8217;t.</p>
<p>They aren&#8217;t just doing this to help IE users out however. <a title="Google Wave" href="http://wave.google.com/">Google Wave</a> makes use of HTML 5 stuff that doesn&#8217;t work in IE and the beta will go public on September 30th. And however good Google Wave may be, if IE users can&#8217;t use it, it won&#8217;t be a success&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2009/09/23/paving-the-way-for-wave/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silverlight is pretty cool</title>
		<link>http://www.oliverbrown.me.uk/2008/04/06/silverlight-is-pretty-cool/</link>
		<comments>http://www.oliverbrown.me.uk/2008/04/06/silverlight-is-pretty-cool/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 14:28:51 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 2.0]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2008/04/06/silverlight-is-pretty-cool/</guid>
		<description><![CDATA[More than two months since my last post. Which means I suddenly have a lot to say. Beware, rambling may follow&#8230;
Nearly five months ago I claimed to be making &#8220;rapid progress with language learning&#8221;. Well obviously not rapid enough to actually reveal anything. Well that might be at an end soon.
One of the problems of [...]]]></description>
			<content:encoded><![CDATA[<p>More than two months since my last post. Which means I suddenly have a lot to say. Beware, rambling may follow&#8230;</p>
<p>Nearly five months ago I claimed to be making <a href="http://www.oliverbrown.me.uk.nyud.net/2007/11/20/rapid-progress-with-language-learning/">&#8220;rapid progress with language learning&#8221;</a>. Well obviously not rapid enough to actually reveal anything. Well that might be at an end soon.</p>
<p>One of the problems of writing the app using things like <a href="http://www.oliverbrown.me.uk.nyud.net/2007/09/09/linq-is-magical/">LINQ</a> means most people will have other things to install to use the app (.NET 3.5 specifically &#8211; and possibly .NET 3.0 for non Vista users) and even then it&#8217;s limited to Windows users as Mono support for Windows Presentation Foundation will be a long way off (if they do it all). Since Silverlight 2.0 is supposed to be really cool and now supports a big chunk of the widgets from standard WPF (and has has quickly developing Moonlight support), why not write the app in that?</p>
<p>So that&#8217;s what I&#8217;ve been doing.</p>
<p>And it was a lot easier than I thought. The first piece of easiness I found was that I oly had to make like three changes to my non-UI code to make it compile as a Silverlight DLL. Unfortunately I can&#8217;t persuade Visual Studio to compile it as a Silverlight DLL and a normal DLL in one go, so I&#8217;ve currently got the same code added as two different projects and I copy the code between them (not ideal). The only real work I had to do was reimplement my data provider. When I started, I cunningly made sure that all resources (lessons, media, user progress) was grabbed from a data class. I wrote a new class that fetches it from a RESTful server (more on that in another post).</p>
<p>So hopefully, a nice Silverlight version of the app will be public soon&#8230;</p>
<p><strong>About Silverlight</strong><br />
For those that don&#8217;t know, Silverlight is Microsofts answer to Flash. Apparently. I&#8217;m not sure if it&#8217;s that a good analogy really. Silverlight 1.0 basically gave you access to a nice environment to draw things in the browser and then manipulate it with Javascript. Or something. To be honest I didn&#8217;t really care about version 1.0 since writing complicated things in Javascript doesn&#8217;t sound like fun. Silverlight 2.0 (formerly Silverlight 1.1) on the other hand gives you that same environment but the ability to manipulate the things with compiled .NET assemblies written in any CLR language and comes with implementations of a lot of the widgets in the WPF.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2008/04/06/silverlight-is-pretty-cool/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Docs rule &#8211; if you use them right</title>
		<link>http://www.oliverbrown.me.uk/2008/01/04/google-docs-rule-if-you-use-them-right/</link>
		<comments>http://www.oliverbrown.me.uk/2008/01/04/google-docs-rule-if-you-use-them-right/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 23:29:00 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Google Docs]]></category>
		<category><![CDATA[Google Spreadsheets]]></category>
		<category><![CDATA[language learning]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[LINQ to XML]]></category>
		<category><![CDATA[online office]]></category>
		<category><![CDATA[XLINQ]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2008/01/04/google-docs-rule-if-you-use-them-right/</guid>
		<description><![CDATA[I&#8217;ve been vaguely using Google Docs (specifically Spreadsheets) since it came out but never to do anything actually important. Most of the time I just had a list I need sorting, or if I was feeling sophisticated I&#8217;d use it to decide on what was best value for money (how much £/GB a range of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been vaguely using <a href="http://docs.google.com">Google Docs</a> (specifically Spreadsheets) since it came out but never to do anything actually important. Most of the time I just had a list I need sorting, or if I was feeling sophisticated I&#8217;d use it to decide on what was best value for money (how much £/GB a range of hard drives were for instance).</p>
<p>Recently I started using it to plan lessons for the <a href="http://www.oliverbrown.me.uk/2007/11/20/rapid-progress-with-language-learning/">language learning app</a>. The ability to use it from work (or any other computer I might be on &#8211; including viewing it on my <a href="http://www.oliverbrown.me.uk/2007/06/14/n73-770-and-the-internet/">Nokia 770</a>) was useful, but in the end I was only really writing a list with it. Until now.</p>
<p>I now have a nifty little C# app that generates modules directly from a Google Spreadsheet which is definitely a Good Thing. I&#8217;ve been thinking of writing an app for module editing for a while since writing them by hand is tiresome and error prone. Google Spreadsheets does half the work for me by providing the user interface for generating a table and then provides access as simple XML.</p>
<p>Which brings me to the matter of actually accessing the data. Google provide a client library in C# for accessing quite a lot of their API. I tried using it but found it a little confusing. Luckily since I was just wanting to query data, I discovered that raw access was actually easier. You simply make a <code>GET</code> request to<br />
<code>http://spreadsheets.google.com/feeds/worksheets/<em>key</em>/public/values</code> (where <em>key</em> is provided to you when you &#8220;publish&#8221; a spreadsheet &#8211; access to unpublished spreadsheets requires authorization which is more complicated). This gives you an Atom feed of URLs to the individual worksheets which them contain Atom feeds of either rows or columns (your choice).</p>
<p>The query power of <a href="http://www.oliverbrown.me.uk.nyud.net/2007/09/09/linq-is-magical/">LINQ</a> (along with XElement, XAttribute etc.) make transforming the feeds into modules really easy. In fact the code that does the hard work (takes a spreadsheet key and generates the XML) is only 102 lines long, and that&#8217;s including unnecessary spacing to make the LINQ more readable (the main LINQ query is 35 lines).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2008/01/04/google-docs-rule-if-you-use-them-right/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rapid progress with language learning</title>
		<link>http://www.oliverbrown.me.uk/2007/11/20/rapid-progress-with-language-learning/</link>
		<comments>http://www.oliverbrown.me.uk/2007/11/20/rapid-progress-with-language-learning/#comments</comments>
		<pubDate>Tue, 20 Nov 2007 19:20:33 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Finnish]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[language learning]]></category>
		<category><![CDATA[MP3]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/09/14/rapid-progress-with-language-learning/</guid>
		<description><![CDATA[Thought I&#8217;d offer a quick status update regarding the language learning app. After a short break I&#8217;m back at it. Appart from enough Finnish content to generate ten 15-minute lessons the biggest progress is outputting MP3 files. My original plan was just to output M3U playlists but it seems iTunes and therefore iPods don&#8217;t support [...]]]></description>
			<content:encoded><![CDATA[<p>Thought I&#8217;d offer a quick status update regarding the language learning app. After a short break I&#8217;m back at it. Appart from enough Finnish content to generate ten 15-minute lessons the biggest progress is outputting MP3 files. My original plan was just to output M3U playlists but it seems iTunes and therefore iPods don&#8217;t support M3U files (as far as I can tell iTunes can only create playlists of files in it&#8217;s library &#8211; who wants hundres of files in their library consisting of a few words each?).</p>
<p>The sample MP3s should be available &#8220;soon&#8221;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/11/20/rapid-progress-with-language-learning/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LINQ is magical</title>
		<link>http://www.oliverbrown.me.uk/2007/09/09/linq-is-magical/</link>
		<comments>http://www.oliverbrown.me.uk/2007/09/09/linq-is-magical/#comments</comments>
		<pubDate>Sun, 09 Sep 2007 22:24:53 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Pimsleur]]></category>
		<category><![CDATA[Wine]]></category>
		<category><![CDATA[winmm.dll]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/09/09/linq-is-magical/</guid>
		<description><![CDATA[The secretly named language learning app has been revamped to use LINQ for most of the XML handling. For those that don&#8217;t know, LINQ is a new technology that provides querying functionality in the .NET world.
In my case I&#8217;m using LINQ to XML and it has seriously cut down on the size of the heaviest [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.oliverbrown.me.uk/2007/04/17/language-learning-app-is-back-on/">secretly named language learning app</a> has been revamped to use <a href="http://msdn2.microsoft.com/netframework/aa904594.aspx">LINQ</a> for most of the XML handling. For those that don&#8217;t know, LINQ is a new technology that provides querying functionality in the .NET world.</p>
<p>In my case I&#8217;m using LINQ to XML and it has seriously cut down on the size of the heaviest methods. Also, the part of LINQ to XML that I found least interesting when I read about it is actually the part I&#8217;ve found the best &#8211; the new <code>XDocument</code> API.</p>
<p>Anyway, LINQ combined with a new USB headset that provides some actually quite good audio means that the important fundamental features have been implemented and work. At the moment it can:</p>
<ul>
<li>Generate lessons based on vocabulary<sup>1</sup> modules</li>
<li>Generate lessons containing past content with the correct repetition timing.</li>
<li>Actually play the lessons (but only on Windows<sup>2</sup>)</li>
</ul>
<p>There are a few more things I want to add before I release any of it (like more audio for a start). But I thought I&#8217;d at least point out development is still happening :o)</p>
<p><sup>1</sup>Instead of the Conversation &gt; Phrase &gt; Term style of Pimsleur I&#8217;ve decided to go for a more freeform approach to start with (inspired by me listening to Michel Thomas again). A vocabulary module just contains list of words and phrases that are processed in order.<br />
<sup>2</sup>I still need a cross platform way to play audio. At the moment I use MCI which is part of <code>winmm.dll</code> which is obviously Windows only. Although <a href="http://www.oliverbrown.me.uk/2006/10/21/wine-is-not-an-emulator/">Wine</a> has apparently implemented it almost completely but I&#8217;m not sure how I&#8217;d go about making that help me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/09/09/linq-is-magical/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeNAS</title>
		<link>http://www.oliverbrown.me.uk/2007/07/15/freenas/</link>
		<comments>http://www.oliverbrown.me.uk/2007/07/15/freenas/#comments</comments>
		<pubDate>Sun, 15 Jul 2007 17:32:13 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[FreeNAS]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[NASLite]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/07/15/freenas/</guid>
		<description><![CDATA[In an effort to get more storage to share between the three computers at home (two Windows and one MythTV) I setup yet another machine running FreeNAS.
FreeNAS is a small (about 30MB) operating system based on FreeBSD designed just to be a NAS (Network Attached Storage). You add hard drives to it and it makes [...]]]></description>
			<content:encoded><![CDATA[<p>In an effort to get more storage to share between the three computers at home (two Windows and one MythTV) I setup yet another machine running <a href="http://www.freenas.org/">FreeNAS</a>.</p>
<p>FreeNAS is a small (about 30MB) operating system based on FreeBSD designed just to be a NAS (Network Attached Storage). You add hard drives to it and it makes them (optionally) available in several different ways, including:</p>
<ul>
<li>CIFS/Samba</li>
<li>NFS</li>
<li>rsync</li>
<li>HTTP</li>
<li>FTP</li>
</ul>
<p>After a few minor problems setting it up (like a power cable breaking and installing from an old CD-ROM drive that didn&#8217;t work) it works great. Copying a large (~40GB) chunk of files to it at once took a while but writing to and reading from it at more sensible levels isn&#8217;t noticeably slower than using local files (on a gigabit network).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/07/15/freenas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Handling regional variations in language learning</title>
		<link>http://www.oliverbrown.me.uk/2007/04/27/handling-regional-variations-in-language-learning/</link>
		<comments>http://www.oliverbrown.me.uk/2007/04/27/handling-regional-variations-in-language-learning/#comments</comments>
		<pubDate>Fri, 27 Apr 2007 17:13:24 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Cantonese]]></category>
		<category><![CDATA[Chinese]]></category>
		<category><![CDATA[French]]></category>
		<category><![CDATA[Mandarin]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/04/27/handling-regional-variations-in-language-learning/</guid>
		<description><![CDATA[Warning, this post is long and rambling. You have been warned! :P
Part of the design philosophy of my language learning app is to reuse as much as possible. This brings up an interesting issue regarding regional variations of languages (I&#8217;m talking mainly about somewhat standardised variations) and how much should be shared between them.
For example [...]]]></description>
			<content:encoded><![CDATA[<p>Warning, this post is long and rambling. You have been warned! :P</p>
<p>Part of the design philosophy of my language learning app is to reuse as much as possible. This brings up an interesting issue regarding regional variations of languages (I&#8217;m talking mainly about somewhat standardised variations) and how much should be shared between them.</p>
<p>For example in Belgium, French is an official language. This is almost the same as French as spoken in France but with a few important differences. Firstly there are minor vocabulary variations (Belgian French has specific words for 70 and 90 for instance). There is also a lot of Flemish and Walloon vocabulary used in addition to the French vocabulary. Finally there are pronunciation differences but these seem no greater than differences in accent.</p>
<p>So, a course on Belgian French should be almost identical to a course on Standard French. The question is how to notate that in the <a href="http://www.oliverbrown.me.uk/2006/07/26/almost-ready-for-a-public-viewing/">script files</a> the language app uses.</p>
<p>There are basically three ways I&#8217;ve come up with to cope with the situation, and I think I&#8217;ll support all of them since they have different advantages in different situations.</p>
<p>The first is to allow in line region specific phrases. So for the numbers in Belgian French, the standard French files would be used but any Belgian French sections would take priority.</p>
<p>The second is to have whole region specific files. Extra Belgian phrases not appearing in standard French would be in these and be loaded in addition to the standard French files. This is really an extension of the first.</p>
<p>The final case is no link at all. This would be needed for Chinese. The language code for Mandarin is &#8220;zh-guoyu&#8221; and the code for Cantonese &#8220;zh-yue&#8221;. In this case however there is no such spoken language with the code &#8220;zh&#8221; and therefore nothing to inherit from. This is an specific case of the first two where no parent language exists.</p>
<p>So far this has just been considering audio. The app already supports text and will eventually support text only lessons of some sort. The first method above could be using for spelling variations (when learning English &#8220;color&#8221; and &#8220;colour&#8221; could use the same audio while appearing differently on the screen).  As more dramatic example Serbian could be taught using either the Cyrillic alphabet or the Latin alphabet with the codes &#8220;sr-cyrl&#8221; and &#8220;sr-latn&#8221; respectively. Or perhaps even both&#8230;</p>
<p>The final point I want to make regards the actual audio files themselves. Although it is true than most of spoken French is almost the same in Belgium and France, the accents are different and generally identifiable to French speakers. Therefore regional specific audio is desirable where possible. Since the script files and the audio are kept separate this is is possible with the language app. If the Belgian French audio exists that will be used, if not the standard French is used. That means that if a standard French course is created, an adequate Belgian French course can then be created with little effort but with the possibility of improving it later</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/04/27/handling-regional-variations-in-language-learning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So much for Gtk#&#8230;</title>
		<link>http://www.oliverbrown.me.uk/2007/04/24/so-much-for-gtk/</link>
		<comments>http://www.oliverbrown.me.uk/2007/04/24/so-much-for-gtk/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 17:55:12 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Gtk]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Visual C# Express]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/04/24/so-much-for-gtk/</guid>
		<description><![CDATA[Well I&#8217;ve abandoned my plans to use Gtk# in the language app (which actually secretly has a name now).
The main reason for changing is simplicity. I had a look at the TreeView control in Gtk and decided it was too much work. Although the theory of good MVC separation is good, the user interface is [...]]]></description>
			<content:encoded><![CDATA[<p>Well I&#8217;ve abandoned my plans to use Gtk# in the <a href="http://www.oliverbrown.me.uk/2007/04/17/language-learning-app-is-back-on">language app</a> (which actually secretly has a name now).</p>
<p>The main reason for changing is simplicity. I had a look at the TreeView control in Gtk and decided it was too much work. Although the theory of good MVC separation is good, the user interface is such a small, simple part of my app it wasn&#8217;t worth it. The stuff I need from <code>System.Windows.Forms</code> should work in Mono (and .NET 1.1 and hopefully even the Compact Framework).</p>
<p>I still prefer the way Gtk handles layout of controls in general, but I console myself with the Windows form designer in Visual C# Express&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/04/24/so-much-for-gtk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Language learning app is back on</title>
		<link>http://www.oliverbrown.me.uk/2007/04/17/language-learning-app-is-back-on/</link>
		<comments>http://www.oliverbrown.me.uk/2007/04/17/language-learning-app-is-back-on/#comments</comments>
		<pubDate>Tue, 17 Apr 2007 21:43:17 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Macs]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/04/17/language-learning-app-is-back-on/</guid>
		<description><![CDATA[The language learning app which I went on and on about a while ago is now under development again. When I say again I mean I started again in a completely different way (at least from a technical implementation point of view &#8211; the user experience is intended to be the same).
You see I recently [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.oliverbrown.me.uk/2006/07/26/almost-ready-for-a-public-viewing/">language learning app</a> which I went on and on about a while ago is now under development again. When I say again I mean I started again in a completely different way (at least from a technical implementation point of view &#8211; the user experience is intended to be the same).</p>
<p>You see I recently started a large project in C# at <a href="http://www.oliverbrown.me.uk/2006/03/27/distinctive-developments/">work</a> (a desktop app by the way, not <a href="http://www.oliverbrown.me.uk/2006/04/27/aspnet-sucks/">ASP.NET</a>) after saying I was somewhat familiar with it and it should be easy to learn. The good news is after two days I realise it actually is really easy to learn, providing you let it do the work for you. (To any programmers intending to learn it, you&#8217;ll spend most of your time at first not actually writing code but finding whereabouts in the huge class library the functionality already exists is. Once you get used to it and get the hang of how it works it is surprisingly relaxing.)</p>
<p>Despite all that I decided I still needed some practice in it so I came up with the idea of doing the language learning app as a fully fledged desktop application &#8211; although at work I&#8217;m using <code>System.Windows.Forms</code> I&#8217;m using <code>Gtk#</code> so it can hopefully run on <a href="http://www.oliverbrown.me.uk/2006/03/29/got-mono/">Mono</a> (and therefore Linux, Mac OS etc). The biggest problem I have is actually playing the audio. A quick search for &#8220;C# MP3&#8243; comes up with a solution based on MCI, some clever thing embedded in a Windows DLL that obviously won&#8217;t be cross platform. My workaround at the moment is just use an external program via the command line that I suppress the window of. If anybody knows of a better way that would work on .NET and Mono, let me know&#8230;</p>
<p><tags>Mono, C#, .NET, language learning, Linux, Gtk, winforms, MP3, dot net</tags></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/04/17/language-learning-app-is-back-on/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>LinuxMCE</title>
		<link>http://www.oliverbrown.me.uk/2007/04/01/linuxmce/</link>
		<comments>http://www.oliverbrown.me.uk/2007/04/01/linuxmce/#comments</comments>
		<pubDate>Sun, 01 Apr 2007 21:46:32 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/04/01/linuxmce/</guid>
		<description><![CDATA[Could this be the ultimate home entertainment system? There&#8217;s a video dotted around the Internet that firmly says yes but I strongly suggest that video is not your first source of information about LinuxMCE since its uber-fanboy nature will just annoy you.
It&#8217;s basically a wrapper for MythTV, Asterisk and a few other things brought together [...]]]></description>
			<content:encoded><![CDATA[<p>Could this be the ultimate home entertainment system? There&#8217;s a <a href="http://video.google.com/url?docid=-4422887272477313460&#038;esrc=sr1&#038;ev=v&#038;q=linuxmce&#038;vidurl=http://video.google.com/videoplay%3Fdocid%3D-4422887272477313460%26q%3Dlinuxmce&#038;usg=AL29H20sbcMLXrbMpl4A---K28-3qOP74w">video</a> dotted around the Internet that firmly says yes but I strongly suggest that video is not your first source of information about <a href="http://www.linuxmce.com/">LinuxMCE</a> since its uber-fanboy nature will just annoy you.</p>
<p>It&#8217;s basically a wrapper for MythTV, Asterisk and a few other things brought together with a snazzy interface and user accounts. The third party reports I&#8217;ve read suggest it&#8217;s not as easy to setup as the website suggests, nor perfectly stable. But the list of features it claims to support (and hopefully will completely support soon) is quite amazing.</p>
<p>For more info, visit the <a href="http://www.linuxmce.com/">LinuxMCE website</a>.</p>
<p><tags>LinuxMCE, PlutoHome, MythTV, Asterisk, HTPC, MCE, home entertainment, TV, DVR</tags></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/04/01/linuxmce/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>More Maemo Mono</title>
		<link>http://www.oliverbrown.me.uk/2007/03/13/more-maemo-mono/</link>
		<comments>http://www.oliverbrown.me.uk/2007/03/13/more-maemo-mono/#comments</comments>
		<pubDate>Tue, 13 Mar 2007 12:41:58 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Maemo]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Nokia 770]]></category>
		<category><![CDATA[Nokia N800 Nokia N900]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/03/13/more-maemo-mono/</guid>
		<description><![CDATA[There is now a single click installation route for getting Mono on the Nokia 770 and Nokia N800. Basically it sets up installation repositories and installs the runtime. From that any apps you install will install only the components they need. Whether there are any really cool Mono apps for Maemo yet is something I [...]]]></description>
			<content:encoded><![CDATA[<p>There is now a <a href="http://www.mono-project.com/Maemo">single click installation route</a> for getting <a href="http://www.oliverbrown.me.uk/2006/03/29/got-mono/">Mono</a> on the <a href="http://www.oliverbrown.me.uk/2006/11/12/nokia-770/">Nokia 770 and Nokia N800</a>. Basically it sets up installation repositories and installs the runtime. From that any apps you install will install only the components they need. Whether there are any really cool Mono apps for Maemo yet is something I don&#8217;t know. But I&#8217;m sure there will be :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/03/13/more-maemo-mono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Play Supremacy</title>
		<link>http://www.oliverbrown.me.uk/2007/01/20/play-supremacy/</link>
		<comments>http://www.oliverbrown.me.uk/2007/01/20/play-supremacy/#comments</comments>
		<pubDate>Sat, 20 Jan 2007 13:00:59 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Director]]></category>
		<category><![CDATA[Macromedia]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[Shockwave]]></category>
		<category><![CDATA[Supremacy]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/01/20/play-supremacy/</guid>
		<description><![CDATA[The first game I ever did in Shockwave is now available on my site! It&#8217;s basically a Risk clone but with a fewer features and reasonable AI.
Play Supremacy
]]></description>
			<content:encoded><![CDATA[<p>The first game I ever did in Shockwave is now available on my site! It&#8217;s basically a Risk clone but with a fewer features and reasonable AI.</p>
<p><a style="text-decoration: none;" href="http://www.oliverbrown.me.uk/supremacy/">Play Supremacy</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/01/20/play-supremacy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transcoding DVDs</title>
		<link>http://www.oliverbrown.me.uk/2007/01/17/transcoding-dvds/</link>
		<comments>http://www.oliverbrown.me.uk/2007/01/17/transcoding-dvds/#comments</comments>
		<pubDate>Wed, 17 Jan 2007 22:02:33 +0000</pubDate>
		<dc:creator>Oliver</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[5.1]]></category>
		<category><![CDATA[AVI]]></category>
		<category><![CDATA[DivX]]></category>
		<category><![CDATA[DVD]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[MP3]]></category>
		<category><![CDATA[ripping]]></category>
		<category><![CDATA[transcoding]]></category>
		<category><![CDATA[Xvid]]></category>

		<guid isPermaLink="false">http://www.oliverbrown.me.uk/2007/01/16/transcoding-dvds/</guid>
		<description><![CDATA[Following my post about ripping DVDs, here is a method for transcoding the DVDs into something more manageable. I should point out that is probably for the more technical amongst you &#8211; there are certainly easier ways to do it but this has the advantage of being very automatable.
Since MythTV (and Linux in general) seems [...]]]></description>
			<content:encoded><![CDATA[<p>Following my post about <a href="http://www.oliverbrown.me.uk/2007/01/14/ripping-dvds-part-1/">ripping DVDs</a>, here is a method for transcoding the DVDs into something more manageable. I should point out that is probably for the more technical amongst you &#8211; there are certainly easier ways to do it but this has the advantage of being very automatable.</p>
<p>Since <a href="http://www.oliverbrown.me.uk/2007/01/03/some-progress-with-mythtv/">MythTV</a> (and Linux in general) seems to like ffmpeg for video encoding/decoding, I figured I&#8217;d use that. You can get a <a href="http://ffdshow.faireal.net/mirror/ffmpeg/">binary version for Windows</a> and <a href="http://www.paulbeard.org/docs/ffmpeg/ffmpeg-doc.html">read the documentation</a>.</p>
<p>The actual command line I use to transcode is:<br />
<code>ffmpeg -i $in_file -vcodec xvid -qscale 5 -acodec copy $out_file</code></p>
<p>That means to use <code>$in_file</code> as input (a VOB file in my case), use the Xvid codec for the video, set the &#8220;quality&#8221; to 5, copy the audio straight from the original and save as <code>$out_file</code>. The quality in this case is just simplification of lots of other settings that are available. 1 is perfect and 31 is the worst. 5 results in files that are about 500MB per hour with MPEG artifacts that are visible when I&#8217;m sat at y desk but not when I sit on my bed six feet away which is where I normally watch video from. It may be worth transcoding a short clip with a few different settings to see which your happy with.</p>
<p>I made the whole process semi-automatic by writing a CLI PHP script that checks for VOB files in a specifc folder and transcodes the ones it finds. That way I can have the transcoding going on in the background while I <a href="http://www.oliverbrown.me.uk/2007/01/14/ripping-dvds-part-1/">rip the DVDs</a> (and then leave it running it overnight to finish). I could make it available to anyone who wants it, but a batch files doing the same thing would probably be more useful for people&#8230;</p>
<p>There is one last caveat. I originally encoded the movies with MP3 audio and then half way though decided I want to keep the 5.1 audio (which the above method does). However the version of ffmpeg I used at first had a problem such that AVIs with AC3 audio played back with no sound. If you have a similar problem make sure you have the latest version of ffmpeg you can get.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oliverbrown.me.uk/2007/01/17/transcoding-dvds/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
