<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Noldorin's Blog</title>
	
	<link>http://blog.noldorin.com</link>
	<description>Musings on science, technology, philosophy, and the many wonders of life</description>
	<lastBuildDate>Mon, 30 Aug 2010 23:10:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/noldorin-blog" /><feedburner:info uri="noldorin-blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Musical Gem of the Week #13</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/FHcFMTA1Hmo/</link>
		<comments>http://blog.noldorin.com/2010/08/musical-gem-of-the-week-13/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 22:38:22 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Humanities]]></category>
		<category><![CDATA[20th century composers]]></category>
		<category><![CDATA[classical music]]></category>
		<category><![CDATA[common practice era]]></category>
		<category><![CDATA[concerto]]></category>
		<category><![CDATA[imperial russia]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[musical composition]]></category>
		<category><![CDATA[piano]]></category>
		<category><![CDATA[piano concerto]]></category>
		<category><![CDATA[piano virtuosos]]></category>
		<category><![CDATA[post-romantic music]]></category>
		<category><![CDATA[post-romanticism]]></category>
		<category><![CDATA[Pyotr Ilyich Tchaikovsky]]></category>
		<category><![CDATA[rachmaninoff]]></category>
		<category><![CDATA[rachmaninov]]></category>
		<category><![CDATA[recordings]]></category>
		<category><![CDATA[romantic era]]></category>
		<category><![CDATA[romantic period]]></category>
		<category><![CDATA[romanticism]]></category>
		<category><![CDATA[russia]]></category>
		<category><![CDATA[russian]]></category>
		<category><![CDATA[russian composers]]></category>
		<category><![CDATA[russian empire]]></category>
		<category><![CDATA[russian music]]></category>
		<category><![CDATA[russian nationalism]]></category>
		<category><![CDATA[Sergei Rachmaninov]]></category>
		<category><![CDATA[slavic]]></category>
		<category><![CDATA[tchaikovsky]]></category>
		<category><![CDATA[tsardom]]></category>

		<guid isPermaLink="false">http://blog.noldorin.com/?p=793</guid>
		<description><![CDATA[After something of a hiatus from this ongoing series, I am glad to resume with a truly wondrous piece. In the footsteps of Tchaikovsky followed another greater Russian composer, Sergei Rachmaninov (who was briefly his apprentice). Arguably the greatest of the post-Romantic composers, he is best known for his piano compositions and virtuoso playing. Not [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Cadenza from Piano Concerto No. 3, showing abundant large chords" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Piano_Concerto_3_Cadenza.png/350px-Piano_Concerto_3_Cadenza.png" alt="Score of Cadenza from Piano Concerto No. 3" width="350" height="123" />After something of a hiatus from this ongoing series, I am glad to resume with a truly wondrous piece. In the footsteps of Tchaikovsky followed another greater Russian composer, <a href="http://en.wikipedia.org/wiki/Sergei_Rachmaninoff" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Sergei_Rachmaninoff?referer=');">Sergei Rachmaninov</a> (who was briefly his apprentice). Arguably the greatest of the post-Romantic composers, he is best known for his piano compositions and virtuoso playing. Not unlike so many of the Romantic composers, he had a greatly troubled life, not least because he was forced to leave Russia upon the downfall of the Tsardom; still, the quality of his works has ensured his long-lasting reputation.</p>
<p>Rachmaninov&#8217;s <a href="http://en.wikipedia.org/wiki/Piano_Concerto_No._3_%28Rachmaninoff%29" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Piano_Concerto_No._3_28Rachmaninoff_29?referer=');">third piano concerto</a> stands out not only for the huge technical challenge it poses to the performer, but moreover for its enchanting nature. The piece has a particularly complex texture and varies in style such that you are constantly surprised by its development. Whatever you make of it, it is surely one of the most complex (master)pieces in the piano repertoire.</p>
<p><strong>Listen or Download:</strong></p>
<p><strong><a href="http://www.joshry.com/Recordings/Jonathan-Oshry-MP3/Rachmaninov-Piano-Concerto-3-D-Minor-Allegro-ma-non-troppo-Jonathan-Oshry.mp3" onclick="pageTracker._trackPageview('/outgoing/www.joshry.com/Recordings/Jonathan-Oshry-MP3/Rachmaninov-Piano-Concerto-3-D-Minor-Allegro-ma-non-troppo-Jonathan-Oshry.mp3?referer=');">1st Movement, Allegro ma non troppo</a></strong></p>
<p><strong><a href="http://www.joshry.com/Recordings/Jonathan-Oshry-MP3/Rachmaninov-Piano-Concerto-3-D-Minor-Intermezzo-Adagio-Jonathan-Oshry.mp3" onclick="pageTracker._trackPageview('/outgoing/www.joshry.com/Recordings/Jonathan-Oshry-MP3/Rachmaninov-Piano-Concerto-3-D-Minor-Intermezzo-Adagio-Jonathan-Oshry.mp3?referer=');">2nd Movement, Intermezzo: Adagio<br />
</a></strong></p>
<p><strong><a href="http://www.joshry.com/Recordings/Jonathan-Oshry-MP3/Rachmaninov-Piano-Concerto-3-D-Minor-Finale-Alla-Breve-Jonathan-Oshry.mp3" onclick="pageTracker._trackPageview('/outgoing/www.joshry.com/Recordings/Jonathan-Oshry-MP3/Rachmaninov-Piano-Concerto-3-D-Minor-Finale-Alla-Breve-Jonathan-Oshry.mp3?referer=');">3rd Movement, Finale: Alla breve<br />
</a></strong></p>
<p>(Performed by <a href="http://www.joshry.com/Recordings1.html" onclick="pageTracker._trackPageview('/outgoing/www.joshry.com/Recordings1.html?referer=');">Jonathan Oshry</a>, piano.)</p>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/FHcFMTA1Hmo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/08/musical-gem-of-the-week-13/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.joshry.com/Recordings/Jonathan-Oshry-MP3/Rachmaninov-Piano-Concerto-3-D-Minor-Allegro-ma-non-troppo-Jonathan-Oshry.mp3" length="24042178" type="audio/mpeg" />
<enclosure url="http://www.joshry.com/Recordings/Jonathan-Oshry-MP3/Rachmaninov-Piano-Concerto-3-D-Minor-Intermezzo-Adagio-Jonathan-Oshry.mp3" length="14461928" type="audio/mpeg" />
<enclosure url="http://www.joshry.com/Recordings/Jonathan-Oshry-MP3/Rachmaninov-Piano-Concerto-3-D-Minor-Finale-Alla-Breve-Jonathan-Oshry.mp3" length="20595271" type="audio/mpeg" />
		<feedburner:origLink>http://blog.noldorin.com/2010/08/musical-gem-of-the-week-13/</feedburner:origLink></item>
		<item>
		<title>IRC.NET Released</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/rfHiFYRe-VA/</link>
		<comments>http://blog.noldorin.com/2010/08/irc-net-released/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 16:52:55 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[.net 4.0]]></category>
		<category><![CDATA[.net framework]]></category>
		<category><![CDATA[.net framework 4.0]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[bzr]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# 4.0]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[client library]]></category>
		<category><![CDATA[client-to-client protocol]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[ctcp]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[instant messaging]]></category>
		<category><![CDATA[internet relay chat]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[irc client]]></category>
		<category><![CDATA[irc library]]></category>
		<category><![CDATA[irc.net]]></category>
		<category><![CDATA[ircdotnet]]></category>
		<category><![CDATA[ircsil]]></category>
		<category><![CDATA[launchpad]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[messaging]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[mono 2.6]]></category>
		<category><![CDATA[protocols]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[windows 7]]></category>
		<category><![CDATA[wpf]]></category>
		<category><![CDATA[xml comments]]></category>
		<category><![CDATA[xml documentation]]></category>

		<guid isPermaLink="false">http://noldorin.com/blog/?p=464</guid>
		<description><![CDATA[IRC.NET is here. Yes, after months of (arduous) labour I have finally created a stable and usable release of my IRC client library for .NET 4.0 (and Mono 2.6). You may find the project hosted over at Launchpad, where you can currently download source, binaries, and documentation for all releases up to 0.3. As you [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="IRC.NET" src="https://launchpadlibrarian.net/38103097/Launchpad_Logo.png" alt="IRC.NET logo" width="64" height="64" />IRC.NET is here. Yes, after months of (arduous) labour I have finally created a stable and usable release of my IRC client library for .NET 4.0 (and Mono 2.6). You may find the project hosted over at <a href="https://launchpad.net/ircdotnet" onclick="pageTracker._trackPageview('/outgoing/launchpad.net/ircdotnet?referer=');">Launchpad</a>, where you can currently <strong><a href="https://launchpad.net/ircdotnet/+download" onclick="pageTracker._trackPageview('/outgoing/launchpad.net/ircdotnet/+download?referer=');">download source, binaries, and documentation</a></strong> for all releases up to 0.3. As you might guess, the project is still in beta stage, though with active interest in the project over the past months, I have had but a handful of minor bug reports. The 0.4 version is shortly upcoming, and is mainly intended to provide extra samples and documentation before the 1.0 release candidate.</p>
<p>If you want an overview of the goal of the project, the Launchpad page probably explains it best:</p>
<blockquote><p>IRC.NET is a fully-featured IRC (Internet Relay Chat) client library for  the .NET Framework 4.0. It aims to provide a complete and accurate  implementation of the protocol as described in RFC 2812 (Internet Relay  Chat: Client Protocol) as well as supporting de-facto modern features of  the protocol, such as ISUPPORT commands and CTCP (Client To Client  Protocol).</p></blockquote>
<p>Oh, and it would hardly be appropriate for an IRC-related project not to have its own IRC channel; feel free to drop by <a href="irc://irc.freenode.net/##ircdotnet">##ircdotnet</a> over on Freenode. We&#8217;re always happy to help.</p>
<h4>Overview of Features</h4>
<ul>
<li>Modern and systematically designed API. Easily integrable into UI/WPF scenarios.</li>
<li>Full suite of unit tests that interact with live server.</li>
<li>Detailed error messages provided by the library.</li>
<li>Comprehensive API documentation (MS HTML Help and MS Help Viewer formats).</li>
<li>A basic sample with full documentation.</li>
<li>Connect to and register with multiple IRC servers on arbitrary ports, as either a user or service. SSL support is coming with v0.4.</li>
<li>Change the user mode and nick name.</li>
<li>Query the server for information about itself, the network, users, channels, and various other things.</li>
<li>Track all known users on the server, and store information about them. Receive instant update notifications.</li>
<li>Join and leave channels, including channels with keys.</li>
<li>Track the list of users that are currently members of a channel.</li>
<li>Set and retrieve channel modes (e.g. m, I) as well as channel modes that apply to users (e.g. o, v).</li>
<li>Kick or ban a user from a channel.</li>
<li>Send and receive messages and notices to/from other users, channels, and the server.</li>
<li>Perform WHO/WHOIS/WHOWAS queries on any user and store all received information.</li>
<li>Configurable rate throttling; a queue of outgoing messages is maintained so as to not flood the server.</li>
<li>Client-to-client protocol (CTCP) support as a separate layer on top of IRC. Support for all common commands and messages.</li>
<li>Various non-RFC features in widespread usage, such as ISUPPORT.</li>
</ul>
<h4>The Official Client Application</h4>
<p>As a side-note, I am al<img class="alignright" title="Ircsil" src="https://launchpadlibrarian.net/39034004/LaunchpadLogo.png" alt="Ircsil logo" width="64" height="64" />so running a project to create a modern and user-friendly IRC client for Windows 7, under the (temporary) name of <strong><a href="http://launchpad.net/ircsil" onclick="pageTracker._trackPageview('/outgoing/launchpad.net/ircsil?referer=');">Ircsil</a></strong>. The project is still in its early stages, but feel free to check out the work done so far, and even better, show your support. You&#8217;re also welcome to visit our IRC channel, <a href="irc://irc.freenode.net/#ircsil">#ircsil</a> on Freenode; it&#8217;s always full of discussion.</p>
<p>Here&#8217;s an screenshot from a recent build, in the hope of garnering a bit of enthusiasm!</p>
<p><img class="alignnone" title="Screenshot of Ircsil client" src="http://noldorin.com/dump/ircsil/screen10.png" alt="Screenshot of user interface of recent Ircsil build." /></p>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/rfHiFYRe-VA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/08/irc-net-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.noldorin.com/2010/08/irc-net-released/</feedburner:origLink></item>
		<item>
		<title>Teaching a machine to read</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/fzmp9Z124sA/</link>
		<comments>http://blog.noldorin.com/2010/08/teaching-a-machine-to-read/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 16:25:41 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Maths & Science]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[2001: a space odyssey]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[ambiguity]]></category>
		<category><![CDATA[arthur c. clarke]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[computational linguistics]]></category>
		<category><![CDATA[computer age]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[english language]]></category>
		<category><![CDATA[grammar]]></category>
		<category><![CDATA[hal 9000]]></category>
		<category><![CDATA[hidden markov model]]></category>
		<category><![CDATA[holism]]></category>
		<category><![CDATA[human languages]]></category>
		<category><![CDATA[human speech]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[linguistics]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[markov]]></category>
		<category><![CDATA[markov chain]]></category>
		<category><![CDATA[markov model]]></category>
		<category><![CDATA[markov process]]></category>
		<category><![CDATA[natural language]]></category>
		<category><![CDATA[natural language processing]]></category>
		<category><![CDATA[natural language understanding]]></category>
		<category><![CDATA[neuropsychology]]></category>
		<category><![CDATA[nlp]]></category>
		<category><![CDATA[parse tree]]></category>
		<category><![CDATA[psychology]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[reductionism]]></category>
		<category><![CDATA[semantics]]></category>
		<category><![CDATA[sentences]]></category>
		<category><![CDATA[shrdlu]]></category>
		<category><![CDATA[space oddysey]]></category>
		<category><![CDATA[space odyssey]]></category>
		<category><![CDATA[speech]]></category>
		<category><![CDATA[speech recognition]]></category>
		<category><![CDATA[speech-to-text]]></category>
		<category><![CDATA[stochastic natural language processing]]></category>
		<category><![CDATA[stochastic nlp]]></category>
		<category><![CDATA[strong ai]]></category>
		<category><![CDATA[syntax]]></category>
		<category><![CDATA[syntax tree]]></category>
		<category><![CDATA[text-to-speech]]></category>
		<category><![CDATA[vocabulary]]></category>
		<category><![CDATA[words]]></category>

		<guid isPermaLink="false">http://noldorin.com/blog/?p=494</guid>
		<description><![CDATA[Since the birth of the age of computers, we have often imagined what it may be like to interact with machines as we do with other humans. That is, to talk to and instruct devices merely by the use of our voices (or at least words typed on a keyboard). Of course, it is but [...]]]></description>
			<content:encoded><![CDATA[<p>Since the birth of the age of computers, we have often imagined what it may be like to interact with machines as we do with other humans. That is, to talk to and instruct devices merely by the use of our voices (or at least words typed on a keyboard). Of course, it is but a small part of the dream of creating <a href="http://en.wikipedia.org/wiki/Strong_ai" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Strong_ai?referer=');">true AI</a>, yet one of great present interest for obvious reasons. Speaking, listening, and reading language, while generally clear signs of intelligence, do not necessarily require a conscious being to perform them &#8211; so long as you are prepared to accept limited context.</p>
<div class="wp-caption alignright" style="width: 145px"><img class=" " title="Camera eye of the fictional HAL 9000 computer" src="http://upload.wikimedia.org/wikipedia/en/1/1f/Hal-9000.jpg" alt="HAL 9000" width="135" height="135" /><p class="wp-caption-text">Camera eye of HAL 9000 from 2001: A Space Odyssey</p></div>
<p>The <a href="http://en.wikipedia.org/wiki/HAL_9000" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/HAL_9000?referer=');">HAL 9000</a> computer from Arthur C. Clarke&#8217;s landmark <a href="http://en.wikipedia.org/wiki/2001:_A_Space_Odyssey" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/2001_A_Space_Odyssey?referer=');">2001: A Space Oddyssey</a> film and novel is an early and notable case of a fictional machine that can interpret (and produce) human language, among other abilities. Indeed, it is a machine responsible for one of the most memorable quotes in science fiction film:</p>
<blockquote><p>David Bowman: Open the pod bay doors, HAL.</p>
<p>HAL 9000: I&#8217;m sorry, Dave. I&#8217;m afraid I can&#8217;t do that.</p></blockquote>
<p>There is however no need to start worrying about villainous machines eavesdropping on everything we say (or write) yet! A machine capable of understanding natural language need not have any higher-level reasoning capabilities, as I will attempt to show in this article. Still, the association of language ability  with that of independent thought is a curious one; something I will perhaps explore in time.</p>
<p>On a more serious note, the reality of machines actually reading human language, in speech or text form, is very likely one of the closest to success of the major goals of artificial intelligence. The field of <a href="http://en.wikipedia.org/wiki/Natural_language_processing" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Natural_language_processing?referer=');">natural language processing</a> is a surprisingly mature one, dating back as far as the the 1950s, yet the holy grail is still just beyond touching distance (or far beyond even, depending how you look at it). Indeed, speech recognition and text-to-speech has come a long way too, such that reasonably sophisticated and effective algorithms are commonplace on home computers today. Clearly, the processing and interpretation of language is the largest obstacle to &#8220;natural&#8221; communication with machines. More specifically, the problem lies predominantly in mapping a sentence or phrase, on the surface a string of letters and punctuation, to an abstract concept; something that contains abstract meaning, and that a computer can relate to known information.</p>
<h4>The process of &#8220;reading&#8221;</h4>
<p>To begin, we should really define what fundamentally constitutes reading, and the processes it involves. Let&#8217;s consider a very simple and straightforward process first, and develop the concept from there. Simply iterating over each word (or group of words) in a sentence and looking them up in a dictionary would be a naive way to consider reading. Immediately though, we see that this completely ignores the structure of the sentence &#8211; how the parts of speech fit together. So what about constructing some sort of abstract syntax tree and tagging each word (or possibly group of words) with information about the type and relevance of the word? (Let&#8217;s put aside the significant issue of the ambiguity of language for now.) Now we at least have a representation of the grammar/structure of the sentence as well as the definitions of its components, yet something is clearly still lacking. This model has no <em>concept</em> associated with the sentence. What does a perfect knowledge of English grammar and vocabulary tell us without the context in which it is used, be that context the entire Universe? <em>Context</em> is what I define as a set of (complex) mappings between a fragment of language and the underlying concepts, abstract or concrete. Proper interpretation of the grammar and structure of a given language, combined with <em>context</em>, is what is required for <a href="http://en.wikipedia.org/wiki/Natural_language_understanding" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Natural_language_understanding?referer=');">natural language understanding</a>, in its most general (loosest) definition. Each is a difficult task in itself, and it may be that a certain degree of overlap is required for things to work.</p>
<h4>How humans comprehend speech and text</h4>
<p>I shall not delve into this area too deeply, for I&#8217;m not a psychologist, and certainly not even psychologists understand properly how we comprehend language. It is however important we get a feel for how the mind processes language and where/how machines might adopt a similar approach, at some level of abstraction. Quite evidently, human listening and reading are very much holistic affairs, so trying to break down the process into parts or stages won&#8217;t get us far.</p>
<p>For a start, we must notice that the recognition of words is done in a very approximate way. Tests have shown that we fixate on key words when we read, and that most words are often determined from a few key letters. Changing a high proportion of the letters in text, if done in a certain way, barely impedes our ability to read. Indeed, the mind seems to pick out the structure and regularities in language (and even words) and often fills in the gaps for us. Evidence suggests that we do not interpret words in a dictionary-style fashion, but rather use the context (of varying scope) as well as our familiarity with a word from previous encounters, to give meaning. In this sense, reading is prone to significant errors in humans, as I&#8217;m sure we&#8217;ve all experienced. There is no reason machines should generally be any more precise in this respect, as we will see later. Do not let the fact that machines are incredibly precise at the &#8220;mechanical&#8221; level fool you &#8211; so are our brains&#8217; neurons!</p>
<p>What allows us to read quickly and effectively more than anything else seems to be the ability to recognise familiar patterns and constructs within text. In fact, I would argue that previous familiarity with words and grammatical constructs plays a crucial role in interpretation of language by evoking certain points or areas of memory. Only when this process is done in a recursive (iterated) fashion does the meaning of some text truly take on form. In a loose sense, perhaps the process of reading can be described as the triggering of a web of interconnected ideas and memories.</p>
<p>Without going to deep here, I believe this holistic interpretation of reading is greatly important to keep in mind for guiding an approach to machine reading. To me, the neuro-psychological specifics are to a large degree irrelevant, whereas if we try to mimic the global picture, and consider implementation secondary &#8211; a &#8220;top down&#8221; creation of sorts &#8211; we are more likely to succeed.</p>
<h4>How humans learn to read</h4>
<p>The continuous process of learning to speak and later to read essentially comes down to a good deal of trial and error. I refer to speaking in addition because it is invariably the first step people take to understanding/producing language. Reading follows much more naturally after it, and indeed begins as a largely verbal/aural skill &#8211; never ceases to be in fact, though it may become more subliminal. It is a curious point to note that in ancient times (at least during the Dark Ages), reading silently was a very rare talent that amazed even many educated folk.</p>
<p>Although the way our minds learn to read is largely a hidden affair, it is clear that there is some hardwired ability for language in our brains. When our brains rapidly develop in the early years of our lives, interaction and familiarity with the external world is done largely through feel and sight. This gradually forms a core basis of knowledge/familiarity around which further development can occur. While at first only superficial understanding of the world is gained, it crucially allows the mind to build relationships between and around what is already familiar. It is apparent that, while the mind has a latent ability for reasoning and abstract thought, we are truly shaped by our environment. We ultimately learn advanced (human) skills only through a combination of evolutionary/genetic memory and interaction with the external world.</p>
<h4>Can a machine read as we do?</h4>
<p>What I have described so far in terms of the process of reading (and its learning) is a complex and many-layered system, though one with a surprisingly small number of core principles.</p>
<p>At the end of the day, natural language and its comprehension is an inherently human endeavour. For this reason, it is belief that true NLP (or rather understanding) ultimately requires strong AI. As I have already stated however, we can achieve much without requiring a full human-level intelligence. It should be no surprise then that some level of compromise is needed to achieve effective NLP at present. While I have stressed that the process of reading is an overwhelmingly holistic affair (though there is some internal structure to the understanding of language), we can not implement AI purely so. Striking a balance between a mechanical algorithm and a level of holism that allows for the manipulation of sufficiently abstract concepts is the key. It is a key, though, well hidden.</p>
<h4>A practical solution</h4>
<p><em>A note</em>:<em> It would seem my dedication to writing such megalithic articles as this has worn off over recent times. (This post has been in draft stage since February!) I hope readers will permit me to publish in the current state, so that I may gradually work towards the completion of this last section.</em></p>
<p>Here are a few notes on where I next intend to explore:</p>
<ul>
<li>Human learning. Requires evolutionary/genetic memory to start? Based on general intelligence and experience?</li>
<li>Machine learning. Can be instilled with knowledge/basic rules by programmer? Based on statistical rules and large corpus of text?</li>
<li>Mechanical versus &#8220;free&#8221; (informal) reasoning?</li>
<li>How much of the process should be instilled before-hand, or learnt cumulatively &#8211; what trade off?</li>
</ul>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/fzmp9Z124sA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/08/teaching-a-machine-to-read/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.noldorin.com/2010/08/teaching-a-machine-to-read/</feedburner:origLink></item>
		<item>
		<title>On Sayings and Life</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/Crf7fenIlIc/</link>
		<comments>http://blog.noldorin.com/2010/08/on-sayings-and-life/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 21:39:05 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[addages]]></category>
		<category><![CDATA[albert einstein]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[author]]></category>
		<category><![CDATA[ayn rand]]></category>
		<category><![CDATA[beethoven]]></category>
		<category><![CDATA[benjamin franklin]]></category>
		<category><![CDATA[carl gustav jung]]></category>
		<category><![CDATA[carl jung]]></category>
		<category><![CDATA[churchill]]></category>
		<category><![CDATA[composer]]></category>
		<category><![CDATA[dramatist]]></category>
		<category><![CDATA[edmund burke]]></category>
		<category><![CDATA[einstein]]></category>
		<category><![CDATA[enemies]]></category>
		<category><![CDATA[evelyn waugh]]></category>
		<category><![CDATA[george bernard shaw]]></category>
		<category><![CDATA[happiness]]></category>
		<category><![CDATA[history]]></category>
		<category><![CDATA[humour]]></category>
		<category><![CDATA[imagination]]></category>
		<category><![CDATA[john stuart mill]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[love]]></category>
		<category><![CDATA[ludwig van beethoven]]></category>
		<category><![CDATA[madness]]></category>
		<category><![CDATA[mark twain]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[mathematics]]></category>
		<category><![CDATA[Maths & Science]]></category>
		<category><![CDATA[mozart]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[novelist]]></category>
		<category><![CDATA[oscar wilde]]></category>
		<category><![CDATA[physicist]]></category>
		<category><![CDATA[pianist]]></category>
		<category><![CDATA[playwright]]></category>
		<category><![CDATA[poet]]></category>
		<category><![CDATA[politician]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[polymath]]></category>
		<category><![CDATA[proverbs]]></category>
		<category><![CDATA[psychiatrist]]></category>
		<category><![CDATA[punctuality]]></category>
		<category><![CDATA[quotations]]></category>
		<category><![CDATA[quotes]]></category>
		<category><![CDATA[reson]]></category>
		<category><![CDATA[sayings]]></category>
		<category><![CDATA[scientist]]></category>
		<category><![CDATA[seneca]]></category>
		<category><![CDATA[statesman]]></category>
		<category><![CDATA[truth]]></category>
		<category><![CDATA[winston churchill]]></category>
		<category><![CDATA[wisdom]]></category>
		<category><![CDATA[wolfgang amadeus mozart]]></category>
		<category><![CDATA[writer]]></category>

		<guid isPermaLink="false">http://blog.noldorin.com/?p=751</guid>
		<description><![CDATA[The great Winston Churchill, who lead nothing but an extraordinary life, once said, &#8220;It is a good thing for an uneducated man to read a book of quotations&#8221;. And while no saying should be taken at face value, I cannot but agree with the sentiment of this statement. We are all in some sense &#8216;uneducated [...]]]></description>
			<content:encoded><![CDATA[<p>The great Winston Churchill, who lead nothing but an extraordinary life, once said, &#8220;It is a good thing for an uneducated man to read a book of quotations&#8221;.</p>
<p>And while no saying should be taken at face value, I cannot but agree with the sentiment of this statement. We are all in some sense &#8216;uneducated men&#8217;, whether or not we admit it to ourselves. Just sometimes, thoughts of wisdom expressed in succinct and memorable ways can help us through the journey of life. If they do nothing else, they have the ability to free the mind, which so often imposes its own shackles.</p>
<p>Some time ago <a href="http://noldorin.com/blog/2009/12/a-witty-saying-proves-nothing/">I blogged about the meaning of quotations and shared some of my favourites</a>. Of course, my collection is hardly static, and by now I&#8217;ve jotted down more than a few others worthy of record. Read, digest, and (I hope) enjoy!</p>
<p><strong><a href="http://en.wikipedia.org/wiki/Oscar_wilde" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Oscar_wilde?referer=');">Oscar Wilde</a> (1854 – 1900 AD)</strong> – Irish poet and playwright</p>
<blockquote><p>The moment you think you understand a great work of art, it&#8217;s dead for you.</p></blockquote>
<blockquote><p>Always forgive your enemies; nothing annoys them so much.</p></blockquote>
<blockquote><p>I can stand brute force, but brute reason is quite unbearable. There is something unfair about its use. It is hitting below the intellect.</p></blockquote>
<blockquote><p>Anyone who lives within their means suffers from a lack of imagination.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Winston_Churchill" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Winston_Churchill?referer=');">Winston Churchill</a> (1874 &#8211; 1965 AD)</strong> &#8211; British politician, historian, and writer</p>
<blockquote><p>The power of man has grown in every sphere, except over himself.</p></blockquote>
<blockquote><p>He has all the virtues I dislike and none of the vices I admire.</p></blockquote>
<blockquote><p>You have enemies? Good. That means you&#8217;ve stood up for something, sometime in your life.</p></blockquote>
<blockquote><p>To build may have to be the slow and laborious task of years. To destroy can be the thoughtless act of a single day.</p></blockquote>
<blockquote><p>History will be kind to me for I intend to write it.</p></blockquote>
<blockquote><p>It is a mistake to look too far ahead. Only one link in the chain of destiny can be handled at a time.</p></blockquote>
<blockquote><p><em>Bessie Braddock:</em> Winston, you are drunk!<br />
<em>Winston Churchill:</em> And Madam, you are ugly. And tomorrow, I’ll be sober, and you will still be ugly.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Seneca_the_Younger" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Seneca_the_Younger?referer=');">Lucius Annaeus Seneca</a> (3 BC &#8211; 65 AD)</strong> &#8211; Roman philosopher, statesman, and dramatist</p>
<blockquote><p>There is no great genius without some touch of madness.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/John_Stuart_Mill" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/John_Stuart_Mill?referer=');">John Stuart Mill</a> (1806 &#8211; 1873 AD)</strong> &#8211; British philosopher</p>
<blockquote><p>Conservatives are not necessarily stupid, but most stupid people are conservative.</p></blockquote>
<blockquote><p><span>The worth of the state, in the long run, is the worth of the individuals composing it.</span></p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Mark_twain" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Mark_twain?referer=');">Mark Twain</a> (1835 – 1910 AD)</strong> – American author</p>
<blockquote><p>When we remember we are all mad, the mysteries disappear and life stands explained.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Carl_Jung" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Carl_Jung?referer=');">Carl Gustav Jung</a> (1875-1961 AD)</strong> &#8211; Swiss psychiatrist</p>
<blockquote><p>Show me a sane man and I will cure him for you.</p></blockquote>
<p><strong><a href="http://" onclick="pageTracker._trackPageview('/outgoing/?referer=');">Edmund Burke</a> (1729 &#8211; 1797 AD)</strong> &#8211; Irish politician and philosopher</p>
<blockquote><p>The only thing necessary for the triumph of evil is for good men to do nothing.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Benjamin_franklin" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Benjamin_franklin?referer=');">Benjamin Franklin</a> (1706 &#8211; 1790 AD) &#8211; </strong>American polymath (politician, scientist, inventor)</p>
<blockquote><p>Would you persuade, speak of interest, not of reason.</p></blockquote>
<blockquote><p><span>Content makes poor men rich; discontent makes rich men poor.</span></p></blockquote>
<blockquote><p><span>Being ignorant is not so much a shame, as being unwilling to learn.</span></p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Albert_einstein" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Albert_einstein?referer=');">Albert Einstein</a> (1879 – 1955 AD)</strong> – German theoretical physicist</p>
<blockquote><p>If you want to live a happy life, tie it to a goal, not to people or things.</p></blockquote>
<blockquote><p>God does not care about our mathematical difficulties — He integrates empirically.</p></blockquote>
<p><a href="http://en.wikipedia.org/wiki/Ludwig_van_Beethoven" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Ludwig_van_Beethoven?referer=');"><strong>Ludwig van Beethoven</strong></a><strong> (1770 &#8211; 1827 AD)</strong> &#8211; German composer and pianist</p>
<blockquote><p>What you are, you are by accident of birth; what I am, I am by myself. There are and will be a thousand princes; there is only one Beethoven.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Wolfgang_Amadeus_Mozart" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Wolfgang_Amadeus_Mozart?referer=');">Wolfgang Amadeus Mozart</a> (1756 &#8211; 1791 AD)</strong> &#8211; Austrian composer</p>
<blockquote><p>Neither a lofty degree of intelligence nor imagination nor both together go to the making of genius. Love, love, love, that is the soul of genius.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/George_Bernard_Shaw" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/George_Bernard_Shaw?referer=');">George Bernard Shaw</a> (1856 &#8211; 1950 AD)</strong> &#8211; Irish playwright</p>
<blockquote><p>Without art, the crudeness of reality would make the world unbearable.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Gian_Carlo_Menotti" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Gian_Carlo_Menotti?referer=');">Gian Carlo Menotti</a> (1911 &#8211; 2007 AD)</strong> &#8211; Italian/American composer</p>
<blockquote><p>A man only becomes wise when he begins to calculate the approximate depth of his ignorance.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Ayn_Rand" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Ayn_Rand?referer=');">Ayn Rand</a> (1905 &#8211; 1982 AD)</strong> &#8211; Russian/American novelist, philosopher, and playwright</p>
<blockquote><p>The truth is not for all men, but only for those who seek it.</p></blockquote>
<p><strong><a href="http://en.wikipedia.org/wiki/Evelyn_Waugh" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Evelyn_Waugh?referer=');">Evelyn Waugh</a> (1903 &#8211; 1966 AD)</strong> &#8211; English writer</p>
<blockquote><p>Punctuality is the virtue of the bored.</p></blockquote>
<p><strong>Miscellaneous</strong></p>
<blockquote><p>If you love somebody, let them go. If they return, they were always yours. If they don&#8217;t, they never were. <em>(Unknown)</em></p></blockquote>
<blockquote><p>Those that will not hear must be made to feel. <em>(German proverb)</em></p></blockquote>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/Crf7fenIlIc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/08/on-sayings-and-life/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.noldorin.com/2010/08/on-sayings-and-life/</feedburner:origLink></item>
		<item>
		<title>“Blogging and the Blogosphere”</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/_FSERdoaaIw/</link>
		<comments>http://blog.noldorin.com/2010/07/blogging-and-the-blogosphere/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 11:00:40 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Humanities]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[answers site]]></category>
		<category><![CDATA[area 51]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[blogging community]]></category>
		<category><![CDATA[blogosphere]]></category>
		<category><![CDATA[discussion forums]]></category>
		<category><![CDATA[forums]]></category>
		<category><![CDATA[online community]]></category>
		<category><![CDATA[physics]]></category>
		<category><![CDATA[question site]]></category>
		<category><![CDATA[stack exchange]]></category>
		<category><![CDATA[stack overflow]]></category>
		<category><![CDATA[stackexchange]]></category>
		<category><![CDATA[stackoverflow]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://blog.noldorin.com/?p=761</guid>
		<description><![CDATA[In the mood of my previous post about the Physics community growing up on StackExchange, I have been somewhat inspired to create my own proposal for a new community over on Area 51. Being a long-time amateur blogger, I&#8217;ve realised the many challenges posed by starting, maintaining, and above all popularising your own blog. My [...]]]></description>
			<content:encoded><![CDATA[<p>In the mood of <a href="/2010/07/physics-community-on-stack-exchange/">my previous post</a> about <a href="http://area51.stackexchange.com/proposals/1908/physics" onclick="pageTracker._trackPageview('/outgoing/area51.stackexchange.com/proposals/1908/physics?referer=');">the Physics community growing up on StackExchange</a>, I have been somewhat inspired to create my own proposal for a new community over on <a href="http://area51.stackexchange.com/" onclick="pageTracker._trackPageview('/outgoing/area51.stackexchange.com/?referer=');">Area 51</a>. Being a long-time amateur blogger, I&#8217;ve realised the many challenges posed by starting, maintaining, and above all popularising your own blog. My proposal for a community site on the subject of <strong><a href="http://area51.stackexchange.com/proposals/15215/blogging-and-the-blogosphere" onclick="pageTracker._trackPageview('/outgoing/area51.stackexchange.com/proposals/15215/blogging-and-the-blogosphere?referer=');">Blogging and the Blogosphere</a></strong> should hopefully help resolve this difficulty! I was surprised to see that nothing quite of the sort had yet been created on the StackExchange staging ground, and a quick take-off in support is suggesting that there is much demand for such a community. For those who aren&#8217;t familiar, the process of creating a StackExchange community is <a href="http://area51.stackexchange.com/faq" onclick="pageTracker._trackPageview('/outgoing/area51.stackexchange.com/faq?referer=');">explained very plainly on the website</a>.</p>
<p>You can go visit the proposal right now to get an idea of some of the questions and topics. Or even better, comment and contribute some of your own! If the idea of creating such a community appeals to you as it does to me, please take (literally) a few seconds to log in and <a href="http://area51.stackexchange.com/proposals/15215/blogging-and-the-blogosphere?referrer=j3oha8oIHIkVva7N7UbKDA2" onclick="pageTracker._trackPageview('/outgoing/area51.stackexchange.com/proposals/15215/blogging-and-the-blogosphere?referrer=j3oha8oIHIkVva7N7UbKDA2&amp;referer=');">follow the fledgling community</a>. By doing this you show support for the idea and are speeding up the process of it becoming a full online community site.</p>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/_FSERdoaaIw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/07/blogging-and-the-blogosphere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.noldorin.com/2010/07/blogging-and-the-blogosphere/</feedburner:origLink></item>
		<item>
		<title>Physics Community on Stack Exchange</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/mzrjyvwNbO4/</link>
		<comments>http://blog.noldorin.com/2010/07/physics-community-on-stack-exchange/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 16:27:11 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Maths & Science]]></category>
		<category><![CDATA[answers site]]></category>
		<category><![CDATA[area 51]]></category>
		<category><![CDATA[discussion forums]]></category>
		<category><![CDATA[forums]]></category>
		<category><![CDATA[math overflow]]></category>
		<category><![CDATA[mathoverflow]]></category>
		<category><![CDATA[online community]]></category>
		<category><![CDATA[physics]]></category>
		<category><![CDATA[physics community]]></category>
		<category><![CDATA[question site]]></category>
		<category><![CDATA[stack exchange]]></category>
		<category><![CDATA[stack overflow]]></category>
		<category><![CDATA[stackexchange]]></category>
		<category><![CDATA[stackoverflow]]></category>

		<guid isPermaLink="false">http://blog.noldorin.com/?p=755</guid>
		<description><![CDATA[For those of you familiar with the wonderful Stack Overflow site for questions and discussing relating to programming, you will know how astoundingly successful this sort of website/online community model has been. No surprise that the number of questions on the site, only about a year and a half in, is already approaching 1 million, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Stack Overflow logo" src="http://upload.wikimedia.org/wikipedia/en/9/95/Stack_Overflow_website_logo.png" alt="Stack Overflow" width="257" height="84" />For those of you familiar with the wonderful <a href="http://blog.stackexchange.com/" onclick="pageTracker._trackPageview('/outgoing/blog.stackexchange.com/?referer=');">Stack Overflow</a> site for questions and discussing relating to programming, you will know how astoundingly successful this sort of website/online community model has been. No surprise that the number of questions on the site, only about a year and a half in, is already approaching 1 million, and <a href="http://blog.stackexchange.com/" onclick="pageTracker._trackPageview('/outgoing/blog.stackexchange.com/?referer=');">various sister sites have been spawned</a>.</p>
<p>Many unofficial sites that use the Stack Overflow software (the so-called Stack Exchange) system have also sprung up over the past months, perhaps the most active and well-known of these being <a href="http://mathoverflow.net/" onclick="pageTracker._trackPageview('/outgoing/mathoverflow.net/?referer=');">Math Overflow</a>. (Beware, however, the content is more than a bit scary unless you&#8217;re a post-graduate level mathematician!) This surge in popularity has even led to the creation of the <a href="http://area51.stackexchange.com/" onclick="pageTracker._trackPageview('/outgoing/area51.stackexchange.com/?referer=');">Area 51 Stack Exchange</a> site, which is a sort of officially-run staging ground for new Stack Exchange sites. (It does however require a strict process of definition, commitment, and beta testing before such communities are created as websites of there own.) Several communities are already on there way to becoming fully-fledged communities in the theme of Stack Overflow, for topics such as Web Applications, Cooking, Mathematics, and English Language.</p>
<p>What is more, a <a href="http://area51.stackexchange.com/proposals/1908/physics" onclick="pageTracker._trackPageview('/outgoing/area51.stackexchange.com/proposals/1908/physics?referer=');">Physics proposal</a> has been made for a Stack Exchange community, but is still only in its middle stages of creation. What it needs at the moment is what the creators of Area 51 term <em>commitment</em> (users stating that they intend to be active in the new community). No surprise then, that I&#8217;m advertising to the physics enthusiasts out there to go and <a href="http://area51.stackexchange.com/proposals/1908/physics?referrer=j3oha8oIHIkVva7N7UbKDA2" onclick="pageTracker._trackPageview('/outgoing/area51.stackexchange.com/proposals/1908/physics?referrer=j3oha8oIHIkVva7N7UbKDA2&amp;referer=');"><strong>sign up for the new community</strong></a> by committing. It takes no more time than signing in with your Google Account and clicking a button, but will give this community a real chance to develop into something great.</p>
<p>The popularity and sheer visitor count of the Stack Exchange and now the Area 51 websites should indicate that this could potentially be a very active and hugely useful community for physicists and physics students assisting each other in problems and sharing knowledge across the world. Unfortunately the existing attempt at a Stack Exchange community for physics over at <a href="http://physicsoverflow.net/" onclick="pageTracker._trackPageview('/outgoing/physicsoverflow.net/?referer=');">physicsoverflow.net</a> has shown little sign of taking off. Let us hope the two sites merge once things take off on the staging ground. Certainly, the process that Area 51 forces such sites to go through does however give every sign of success!</p>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/mzrjyvwNbO4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/07/physics-community-on-stack-exchange/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.noldorin.com/2010/07/physics-community-on-stack-exchange/</feedburner:origLink></item>
		<item>
		<title>Handy iPhone Apps and Websites</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/KGjM91sHqGQ/</link>
		<comments>http://blog.noldorin.com/2010/06/handy-iphone-apps-and-websites/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 23:01:27 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Apple store]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[bbc]]></category>
		<category><![CDATA[bonds]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[calculator]]></category>
		<category><![CDATA[currencies]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[file storage]]></category>
		<category><![CDATA[films]]></category>
		<category><![CDATA[finance]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[google earth]]></category>
		<category><![CDATA[google talk]]></category>
		<category><![CDATA[graphing]]></category>
		<category><![CDATA[gtalk]]></category>
		<category><![CDATA[ibooks]]></category>
		<category><![CDATA[imdb]]></category>
		<category><![CDATA[iOS 3]]></category>
		<category><![CDATA[iOS 4]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone 3g]]></category>
		<category><![CDATA[iphone 3gs]]></category>
		<category><![CDATA[iphone 4]]></category>
		<category><![CDATA[iphone apps]]></category>
		<category><![CDATA[iphone os 3]]></category>
		<category><![CDATA[iphone os 4]]></category>
		<category><![CDATA[iplayer]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[ipod touch]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[multitasking]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[nytimes]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[programs]]></category>
		<category><![CDATA[recommendations]]></category>
		<category><![CDATA[skype]]></category>
		<category><![CDATA[stocks]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[websites]]></category>
		<category><![CDATA[wikipedia]]></category>
		<category><![CDATA[wolfram]]></category>

		<guid isPermaLink="false">http://blog.noldorin.com/?p=745</guid>
		<description><![CDATA[With the recent release iOS 4 (the new operating system for the iPhone), I&#8217;ve been slightly encouraged about the future of Apple &#8211; though some of this has been tempered by the lack of impressiveness of the iPhone 4G. In particular, the addition of real multitasking is a winner, along with several subtle but effective [...]]]></description>
			<content:encoded><![CDATA[<p>With the recent release <a href="http://www.apple.com/iphone/softwareupdate/" onclick="pageTracker._trackPageview('/outgoing/www.apple.com/iphone/softwareupdate/?referer=');">iOS 4</a> (the new operating system for the iPhone), I&#8217;ve been slightly encouraged about the future of Apple &#8211; though some of this has been tempered by the lack of impressiveness of the iPhone 4G. In particular, the addition of real multitasking is a winner, along with several subtle but effective improvements in the user interface.</p>
<p>So, I thought I&#8217;d take this opportunity to share a brief list of some of the most clever/entertaining/useful apps I have on my iPhone at the moment. Not that anyone with an iPhone doesn&#8217;t already have enough, but it&#8217;s a handy reference list if you&#8217;re being picky about what to install, or browsing through streams of ratings! I&#8217;ve also thrown in a few iPhone/mobile-specific websites that are worth noting.</p>
<p><strong>Information and Utilities<br />
</strong></p>
<ul>
<li>Wikipedia/Wikipanion &#8211; pretty similar, but the former is a new official app, and the latter a slightly more established one</li>
<li>Wolfram &#8211; great native interface for accessing Wolfram Alpha</li>
<li>Google Earth &#8211; touch interface for Google Earth</li>
<li>Tube Map &#8211; map and other utilities for London Underground</li>
<li>Bloomberg &#8211; live updates and news for stocks, bonds, and currencies</li>
<li>GraphCalc &#8211; advanced graphing and calculator for mathematical functions</li>
<li>RedLaser &#8211; scans any bar code using camera and looks up best prices online</li>
<li>iBooks &#8211; official app for downloading and reading books from the Apple store</li>
<li>Stanza &#8211; download and read books, with interfaces for websites like Project Gutenburg</li>
<li>IMDB &#8211; browse and view information about films</li>
<li>Google Translate (website) &#8211; instantaneously translate text between any two languages</li>
</ul>
<p><strong>Media</strong></p>
<ul>
<li>BBC iPlayer (website) &#8211; watch recent BBC shows anywhere for free</li>
<li>TVCatchup Mobile (website) &#8211; watch UK FreeView channels anywhere for free</li>
<li>NYTimes &#8211; best news app around, though it doesn&#8217;t cover local UK news of course</li>
<li>BBC News &#8211; pretty useful app for UK and World news, though could do with a few usability improvements</li>
<li>Remote &#8211; control iTunes on any computer within the local network</li>
<li>Files (lite) &#8211; local file system for viewing images, Microsoft Office, and other files, can upload from anywhere in local network</li>
<li>Dropbox &#8211; upload and download files from/to your space on the Dropbox.com service</li>
</ul>
<p><strong>Social</strong></p>
<ul>
<li>Facebook &#8211; a great (and pretty complete) app for accessing Facebook, also an effective time sink!</li>
<li>Skype &#8211; official Skype app, works alomost exactly like the normal phone app, and completely free</li>
<li>Messenger &#8211; official MSN messenger app</li>
<li>Google Talk &#8211; web app, accessible via the GTalk site</li>
<li>Colloquy &#8211; IRC client</li>
</ul>
<p><strong>Fun and Games</strong></p>
<ul>
<li>DoodleJump</li>
<li>Angry Birds</li>
<li>iChess</li>
<li>Scrabble</li>
<li>Physics Free</li>
</ul>
<p>Note that most of these apps (and all of the websites) are completely free, though a few cost a small amount of money, typically no more than £1 (or $1 in the US, I presume).</p>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/KGjM91sHqGQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/06/handy-iphone-apps-and-websites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.noldorin.com/2010/06/handy-iphone-apps-and-websites/</feedburner:origLink></item>
		<item>
		<title>Musical Gem of the Week #12</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/eWTIPmui8Mk/</link>
		<comments>http://blog.noldorin.com/2010/06/musical-gem-of-the-week-12/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 22:55:40 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Humanities]]></category>
		<category><![CDATA[classical music]]></category>
		<category><![CDATA[common practice era]]></category>
		<category><![CDATA[imperial russia]]></category>
		<category><![CDATA[marche slave]]></category>
		<category><![CDATA[marches]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[musical composition]]></category>
		<category><![CDATA[nationalism]]></category>
		<category><![CDATA[orchestral compositions]]></category>
		<category><![CDATA[ottoman empire]]></category>
		<category><![CDATA[ottomans]]></category>
		<category><![CDATA[Pyotr Ilyich Tchaikovsky]]></category>
		<category><![CDATA[recordings]]></category>
		<category><![CDATA[romantic era]]></category>
		<category><![CDATA[romantic period]]></category>
		<category><![CDATA[romanticism]]></category>
		<category><![CDATA[russia]]></category>
		<category><![CDATA[russian]]></category>
		<category><![CDATA[russian composers]]></category>
		<category><![CDATA[russian empire]]></category>
		<category><![CDATA[russian music]]></category>
		<category><![CDATA[russian nationalism]]></category>
		<category><![CDATA[russo-turkish war]]></category>
		<category><![CDATA[serbia]]></category>
		<category><![CDATA[slavic]]></category>
		<category><![CDATA[slavonic march]]></category>
		<category><![CDATA[tchaikovsky]]></category>
		<category><![CDATA[the five]]></category>
		<category><![CDATA[the mighty handful]]></category>
		<category><![CDATA[the nutcracker]]></category>
		<category><![CDATA[turks]]></category>

		<guid isPermaLink="false">http://blog.noldorin.com/?p=727</guid>
		<description><![CDATA[The genius of Pyotr Ilyich Tchaikovsky is beyond doubt, yet the life and reputation of the man were often greatly troubled. (For that matter, it is hard to think of any great Romantic composer, from Beethoven to Schumann to Chopin, who did not have their fair share of life&#8217;s pains.) Not only was he constantly [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 250px"><img title="Portrait of Pyotr Ilyich Tchaikovsky" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Portr%C3%A4t_des_Komponisten_Pjotr_I._Tschaikowski_%281840-1893%29.jpg/240px-Portr%C3%A4t_des_Komponisten_Pjotr_I._Tschaikowski_%281840-1893%29.jpg" alt="Pyotr Ilyich Tchaikovsky" width="240" height="308" /><p class="wp-caption-text">Pyotr Ilyich Tchaikovsky, by Nikolay Kuznetsov, 1893</p></div>
<p>The genius of Pyotr Ilyich Tchaikovsky is beyond doubt, yet the life and reputation of the man were often greatly troubled. (For that matter, it is hard to think of any great Romantic composer, from Beethoven to Schumann to Chopin, who did not have their fair share of life&#8217;s pains.) Not only was he constantly under attack for his homosexuality (which he tried constantly to hide), but his compositions were given a tough time even in his own country. It is not surprising that the portrait taken in his final year shows such a grave expression. His unique yet essentially Western European style was much resented by the the so-called <a href="http://en.wikipedia.org/wiki/Mighty_Handful" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Mighty_Handful?referer=');">Mighty Handful</a> of contemporary Russian composers, who had different ideals (largely nationalistic). Later in the 20th century, his music was considered somewhat superficial and trivial, yet this view has since disappeared for the most part. His creative talents probably deserve more merit than the layman&#8217;s recognition of a few parts from <a href="http://en.wikipedia.org/wiki/The_Nutcracker" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/The_Nutcracker?referer=');">The Nutcracker</a> suite!</p>
<p>Tchaikovsky&#8217;s <a href="http://en.wikipedia.org/wiki/Slavonic_March" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Slavonic_March?referer=');">Slavonic March</a> in B-flat minor (often given its French name, <em>Marche Slave</em>) is one of his minor works, but one that stands out for me. Emotionally charged, its mood varies from the sombre (reflecting the <a href="http://en.wikipedia.org/wiki/Russo-Turkish_War_%281877%E2%80%931878%29" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Russo-Turkish_War_281877_E2_80_931878_29?referer=');">Russo-Turkish war</a> of the time) to the hopeful, even cheerful. For sure, there is hardly a piece more evocative of Imperial Russia!</p>
<p><a href="http://media.vad1.com/temporary_url_20070929kldcg/tchaikovsky-marche-slave-op31-orchestre_symphonique_de_montreal-charles_dutoit-11.mp3" onclick="pageTracker._trackPageview('/outgoing/media.vad1.com/temporary_url_20070929kldcg/tchaikovsky-marche-slave-op31-orchestre_symphonique_de_montreal-charles_dutoit-11.mp3?referer=');"><strong>Download and Listen Here</strong></a></p>
<p>(Performed by the Montreal Symphony Orchestra, 1999.)</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 142px; width: 1px; height: 1px; overflow: hidden;">http://en.wikipedia.org/wiki/Slavonic_March</div>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/eWTIPmui8Mk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/06/musical-gem-of-the-week-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://media.vad1.com/temporary_url_20070929kldcg/tchaikovsky-marche-slave-op31-orchestre_symphonique_de_montreal-charles_dutoit-11.mp3" length="20709376" type="audio/mpeg" />
		<feedburner:origLink>http://blog.noldorin.com/2010/06/musical-gem-of-the-week-12/</feedburner:origLink></item>
		<item>
		<title>Musical Gem of the Week #11</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/TFNMW92fJNM/</link>
		<comments>http://blog.noldorin.com/2010/05/musical-gem-of-the-week-11/#comments</comments>
		<pubDate>Sat, 22 May 2010 23:50:49 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Humanities]]></category>
		<category><![CDATA[bach]]></category>
		<category><![CDATA[christian converts]]></category>
		<category><![CDATA[classical era]]></category>
		<category><![CDATA[classical music]]></category>
		<category><![CDATA[classical period]]></category>
		<category><![CDATA[common practice era]]></category>
		<category><![CDATA[concert overture]]></category>
		<category><![CDATA[felix mendelssohn]]></category>
		<category><![CDATA[fingal's cave]]></category>
		<category><![CDATA[german composers]]></category>
		<category><![CDATA[hebrides]]></category>
		<category><![CDATA[hebrides overture]]></category>
		<category><![CDATA[inner hebrides]]></category>
		<category><![CDATA[j. s. bach]]></category>
		<category><![CDATA[jewish composers]]></category>
		<category><![CDATA[johann sebastian bach]]></category>
		<category><![CDATA[mendelssohn]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[musical composition]]></category>
		<category><![CDATA[nature]]></category>
		<category><![CDATA[overture]]></category>
		<category><![CDATA[recordings]]></category>
		<category><![CDATA[richard wagner]]></category>
		<category><![CDATA[romantic era]]></category>
		<category><![CDATA[romantic period]]></category>
		<category><![CDATA[romanticism]]></category>
		<category><![CDATA[scotland]]></category>
		<category><![CDATA[staffa]]></category>
		<category><![CDATA[wagner]]></category>

		<guid isPermaLink="false">http://blog.noldorin.com/?p=710</guid>
		<description><![CDATA[Felix Mendelssohn was a prolific composer of symphonies, concerti, operas, piano music, and songs, yet the Hebrides Overture stands out among all his works as one of the most beautiful and enchanting compositions of the era. Although you might classify it as a &#8220;concert overture&#8221;, its lyrical and emotive nature truly makes it unique among [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Felix_Mendelssohn" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Felix_Mendelssohn?referer=');"></a></p>
<div class="wp-caption alignright" style="width: 250px"><a><img title="Fingal's Cave, Staffa, Inner Hebrides, Scotland" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Staffa04.jpg/240px-Staffa04.jpg" alt="Photo of Fingal's Cave" width="240" /></a><p class="wp-caption-text">View near the entrance of Fingal&#39;s Cave on Staffa in the Hebrides isles off Scotland</p></div>
<p>Felix Mendelssohn was a prolific composer of symphonies, concerti, operas, piano music, and songs, yet the <a href="http://en.wikipedia.org/wiki/Hebrides_Overture" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Hebrides_Overture?referer=');">Hebrides Overture</a> stands out among all his works as one of the most beautiful and enchanting compositions of the era. Although you might classify it as a &#8220;concert overture&#8221;, its lyrical and emotive nature truly makes it unique among all pieces.</p>
<p>The style of Mendelssohn&#8217;s music was often criticised within his own lifetime as being too traditional and unadventurous (or even lacking in depth). Fortunately, the composer and his style has found much greater appreciation in recent decades. A curious fact, considering that he did so much to revive the works of J. S. Bach, himself a monumental composer whose music went out of favour for many years following his death. Undoubtedly, the predominance of his contemporary on the German music scene, Richard Wagner, who strongly voiced his antisemitism (Mendelssohn was born of Jewish heritage, despite later becoming a Christian), did nothing to help his popularity. Indeed, it strikes me as a great shame that himself and his music were disparaged so greatly during the 19th century, while arguably lesser composers such as Wagner were promoted. He did however find much popularity in Britain, hence his numerous visits to the island including Fingal&#8217;s Cave, situated in the Inner Hebrides, inspiring the piece that is the subject of this post.</p>
<p><a href="http://www.musikkollegium.ch/de/musik-download/komponisten.html?tx_abdownloads_pi1%5Baction%5D=getviewclickeddownload&amp;tx_abdownloads_pi1%5Buid%5D=134&amp;cHash=43c86a26c5" onclick="pageTracker._trackPageview('/outgoing/www.musikkollegium.ch/de/musik-download/komponisten.html?tx_abdownloads_pi1_5Baction_5D=getviewclickeddownload_amp_tx_abdownloads_pi1_5Buid_5D=134_amp_cHash=43c86a26c5&amp;referer=');"><strong>Download or Listen Here</strong></a></p>
<p>(Performed by the <a href="http://www.musikkollegium.ch/" onclick="pageTracker._trackPageview('/outgoing/www.musikkollegium.ch/?referer=');">Musikkollegium Winterthur</a> orchestra.)</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 184px; width: 1px; height: 1px; overflow: hidden;">
<h3 class="r"><a class="l" onmousedown="return  rwt(this,'spellmeleon_result','','result','1','AFQjCNFJQY-TdKDj7MZYwPXS5ZHD81cxlA','&amp;sig2=bOPj7WvoZn9vOLCCHQCeCw','0CBQQhgIwAA')" href="http://www.musikkollegium.ch/" onclick="pageTracker._trackPageview('/outgoing/www.musikkollegium.ch/?referer=');"><em>Musikkollegium</em> Winterthur</a></h3>
</div>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/TFNMW92fJNM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/05/musical-gem-of-the-week-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.noldorin.com/2010/05/musical-gem-of-the-week-11/</feedburner:origLink></item>
		<item>
		<title>Combinatorics in C#</title>
		<link>http://feedproxy.google.com/~r/noldorin-blog/~3/X4wOWLLS4YU/</link>
		<comments>http://blog.noldorin.com/2010/05/combinatorics-in-csharp/#comments</comments>
		<pubDate>Sat, 22 May 2010 17:20:29 +0000</pubDate>
		<dc:creator>Noldorin</dc:creator>
				<category><![CDATA[Maths & Science]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[.net 4.0]]></category>
		<category><![CDATA[.net framework]]></category>
		<category><![CDATA[.net framework 4.0]]></category>
		<category><![CDATA[algorithms]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# 4.0]]></category>
		<category><![CDATA[combinations]]></category>
		<category><![CDATA[combinations with repetition]]></category>
		<category><![CDATA[combinations without repetition]]></category>
		<category><![CDATA[combinatorics]]></category>
		<category><![CDATA[helper class]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[maths]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[permutations]]></category>
		<category><![CDATA[permutations with repetition]]></category>
		<category><![CDATA[permutations without repetition]]></category>
		<category><![CDATA[permute]]></category>
		<category><![CDATA[space complexity]]></category>
		<category><![CDATA[time complexity]]></category>
		<category><![CDATA[utility class]]></category>
		<category><![CDATA[utility methods]]></category>

		<guid isPermaLink="false">http://blog.noldorin.com/?p=703</guid>
		<description><![CDATA[Partly encouraged by this year&#8217;s Google Code Jam contest, but likely more so by the lack of any combinatorics functionality in the .NET Framework (still missing in most recent version 4.0), I thought I would put a bit of effort into writing efficient implementations of algorithms in C#. The following algorithms are implemented (between the [...]]]></description>
			<content:encoded><![CDATA[<p>Partly encouraged by this year&#8217;s <a href="http://code.google.com/codejam" onclick="pageTracker._trackPageview('/outgoing/code.google.com/codejam?referer=');">Google Code Jam</a> contest, but likely more so by the lack of any combinatorics functionality in the .NET Framework (still missing in most recent version 4.0), I thought I would put a bit of effort into writing efficient implementations of algorithms in C#. The following algorithms are implemented (between the <em>GetPermutations</em> and <em>GetCombinations</em> methods).</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Permutation" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Permutation?referer=');">Permutations</a> with repetition</li>
<li>Permutations without repetition</li>
<li><a href="http://en.wikipedia.org/wiki/Combination" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Combination?referer=');">Combinations</a> with repetition</li>
<li>Combinations without repetition</li>
</ul>
<p>Worth noting is that the algorithms run purely in-place on the list, and involve no recursion (only a single while loop). While memory usage is minimal, they do of course still run in factorial (or equivalently exponential) time complexity, though it&#8217;s well known you can&#8217;t do any better than that if you require <em>all</em> permutations/combinations of a given size.</p>
<p><strong><a href="http://noldorin.com/programming/CombinatoricsUtilities.cs.txt"><strong>Download  the full (documented) code for the utility class here.</strong></a></strong></p>
<p>All four algorithms have been sufficiently tested and verified for small lists, running on .NET 4.0 (Windows). I would be inclined to bet everything runs perfectly well on Mono too. Needless to say, bug reports and feedback are welcome.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">using System;<br />
using System.Collections.Generic;<br />
using System.Diagnostics;</p>
<p>// Copyright (c) 2010 Alex Regueiro<br />
// Licensed under MIT license, available at &lt;http://www.opensource.org/licenses/mit-license.php&gt;.<br />
// Published originally at &lt;http://blog.noldorin.com/2010/05/combinatorics-in-csharp/&gt;.<br />
// Version 1.0, released 22nd May 2010.<br />
public static class CombinatoricsUtilities<br />
{<br />
// Error messages<br />
private const string errorMessageValueLessThanZero = &#8220;Value must be greater than zero, if specified.&#8221;;<br />
private const string errorMessagesIndicesListInvalidSize = &#8220;List of indices must have same size as list of elements.&#8221;;</p>
<p>/// &lt;summary&gt;<br />
/// Gets all permutations (of a given size) of a given list, either with or without reptitions.<br />
/// &lt;/summary&gt;<br />
/// &lt;typeparam name=&#8221;T&#8221;&gt;The type of the elements in the list.&lt;/typeparam&gt;<br />
/// &lt;param name=&#8221;list&#8221;&gt;The list of which to get permutations.&lt;/param&gt;<br />
/// &lt;param name=&#8221;action&#8221;&gt;The action to perform on each permutation of the list.&lt;/param&gt;<br />
/// &lt;param name=&#8221;resultSize&#8221;&gt;The number of elements in each resulting permutation; or &lt;see langword=&#8221;null&#8221;/&gt; to get<br />
/// premutations of the same size as &lt;paramref name=&#8221;list&#8221;/&gt;.&lt;/param&gt;<br />
/// &lt;param name=&#8221;withRepetition&#8221;&gt;&lt;see langword=&#8221;true&#8221;/&gt; to get permutations with reptition of elements;<br />
/// &lt;see langword=&#8221;false&#8221;/&gt; to get permutations without reptition of elements.&lt;/param&gt;<br />
/// &lt;exception cref=&#8221;ArgumentNullException&#8221;&gt;&lt;paramref name=&#8221;list&#8221;/&gt; is &lt;see langword=&#8221;null&#8221;/&gt;. -or-<br />
/// &lt;paramref name=&#8221;action&#8221;/&gt; is &lt;see langword=&#8221;null&#8221;/&gt;.&lt;/exception&gt;<br />
/// &lt;exception cref=&#8221;ArgumentException&#8221;&gt;&lt;paramref name=&#8221;resultSize&#8221;/&gt; is less than zero.&lt;/exception&gt;<br />
/// &lt;remarks&gt;<br />
/// The algorithm performs permutations in-place. &lt;paramref name=&#8221;list&#8221;/&gt; is however not changed.<br />
/// &lt;/remarks&gt;<br />
public static void GetPermutations&lt;T&gt;(this IList&lt;T&gt; list, Action&lt;IList&lt;T&gt;&gt; action, int? resultSize = null,<br />
bool withRepetition = false)<br />
{<br />
if (list == null)<br />
throw new ArgumentNullException(&#8220;list&#8221;);<br />
if (action == null)<br />
throw new ArgumentNullException(&#8220;action&#8221;);<br />
if (resultSize.HasValue &amp;&amp; resultSize.Value &lt;= 0)<br />
throw new ArgumentException(errorMessageValueLessThanZero, &#8220;resultSize&#8221;);</p>
<p>var result = new T[resultSize.HasValue ? resultSize.Value : list.Count];<br />
var indices = new int[result.Length];<br />
for (int i = 0; i &lt; indices.Length; i++)<br />
indices[i] = withRepetition ? -1 : i &#8211; 1;</p>
<p>int curIndex = 0;<br />
while (curIndex != -1)<br />
{<br />
indices[curIndex]++;<br />
if (indices[curIndex] == list.Count)<br />
{<br />
indices[curIndex] = withRepetition ? -1 : curIndex &#8211; 1;<br />
curIndex&#8211;;<br />
}<br />
else<br />
{<br />
result[curIndex] = list[indices[curIndex]];<br />
if (curIndex &lt; indices.Length &#8211; 1)<br />
curIndex++;<br />
else<br />
action(result);<br />
}<br />
}<br />
}</p>
<p>/// &lt;summary&gt;<br />
/// Gets all combinations (of a given size) of a given list, either with or without reptitions.<br />
/// &lt;/summary&gt;<br />
/// &lt;typeparam name=&#8221;T&#8221;&gt;The type of the elements in the list.&lt;/typeparam&gt;<br />
/// &lt;param name=&#8221;list&#8221;&gt;The list of which to get combinations.&lt;/param&gt;<br />
/// &lt;param name=&#8221;action&#8221;&gt;The action to perform on each combination of the list.&lt;/param&gt;<br />
/// &lt;param name=&#8221;resultSize&#8221;&gt;The number of elements in each resulting combination; or &lt;see langword=&#8221;null&#8221;/&gt; to get<br />
/// premutations of the same size as &lt;paramref name=&#8221;list&#8221;/&gt;.&lt;/param&gt;<br />
/// &lt;param name=&#8221;withRepetition&#8221;&gt;&lt;see langword=&#8221;true&#8221;/&gt; to get combinations with reptition of elements;<br />
/// &lt;see langword=&#8221;false&#8221;/&gt; to get combinations without reptition of elements.&lt;/param&gt;<br />
/// &lt;exception cref=&#8221;ArgumentNullException&#8221;&gt;&lt;paramref name=&#8221;list&#8221;/&gt; is &lt;see langword=&#8221;null&#8221;/&gt;. -or-<br />
/// &lt;paramref name=&#8221;action&#8221;/&gt; is &lt;see langword=&#8221;null&#8221;/&gt;.&lt;/exception&gt;<br />
/// &lt;exception cref=&#8221;ArgumentException&#8221;&gt;&lt;paramref name=&#8221;resultSize&#8221;/&gt; is less than zero.&lt;/exception&gt;<br />
/// &lt;remarks&gt;<br />
/// The algorithm performs combinations in-place. &lt;paramref name=&#8221;list&#8221;/&gt; is however not changed.<br />
/// &lt;/remarks&gt;<br />
public static void GetCombinations&lt;T&gt;(this IList&lt;T&gt; list, Action&lt;IList&lt;T&gt;&gt; action, int? resultSize = null,<br />
bool withRepetition = false)<br />
{<br />
if (list == null)<br />
throw new ArgumentNullException(&#8220;list&#8221;);<br />
if (action == null)<br />
throw new ArgumentNullException(&#8220;action&#8221;);<br />
if (resultSize.HasValue &amp;&amp; resultSize.Value &lt;= 0)<br />
throw new ArgumentException(errorMessageValueLessThanZero, &#8220;resultSize&#8221;);</p>
<p>var result = new T[resultSize.HasValue ? resultSize.Value : list.Count];<br />
var indices = new int[result.Length];<br />
for (int i = 0; i &lt; indices.Length; i++)<br />
indices[i] = withRepetition ? -1 : indices.Length &#8211; i &#8211; 2;</p>
<p>int curIndex = 0;<br />
while (curIndex != -1)<br />
{<br />
indices[curIndex]++;<br />
if (indices[curIndex] == (curIndex == 0 ? list.Count : indices[curIndex - 1] + (withRepetition ? 1 : 0)))<br />
{<br />
indices[curIndex] = withRepetition ? -1 : indices.Length &#8211; curIndex &#8211; 2;<br />
curIndex&#8211;;<br />
}<br />
else<br />
{<br />
result[curIndex] = list[indices[curIndex]];<br />
if (curIndex &lt; indices.Length &#8211; 1)<br />
curIndex++;<br />
else<br />
action(result);<br />
}<br />
}<br />
}</p>
<p>/// &lt;summary&gt;<br />
/// Gets a specific permutation of a given list.<br />
/// &lt;/summary&gt;<br />
/// &lt;typeparam name=&#8221;T&#8221;&gt;The type of the elements in the list.&lt;/typeparam&gt;<br />
/// &lt;param name=&#8221;list&#8221;&gt;The list to permute.&lt;/param&gt;<br />
/// &lt;param name=&#8221;indices&#8221;&gt;The indices of the elements in the original list at each index in the permuted list.<br />
/// &lt;/param&gt;<br />
/// &lt;returns&gt;The specified permutation of the given list.&lt;/returns&gt;<br />
/// &lt;exception cref=&#8221;ArgumentNullException&#8221;&gt;&lt;paramref name=&#8221;list&#8221;/&gt; is &lt;see langword=&#8221;null&#8221;/&gt;. -or-<br />
/// &lt;paramref name=&#8221;indices&#8221;/&gt; is &lt;see langword=&#8221;null&#8221;/&gt;.&lt;/exception&gt;<br />
/// &lt;exception cref=&#8221;ArgumentException&#8221;&gt;&lt;paramref name=&#8221;indices&#8221;/&gt; does not have the same size as<br />
/// &lt;paramref name=&#8221;list&#8221;/&gt;.&lt;/exception&gt;<br />
public static IList&lt;T&gt; Permute&lt;T&gt;(this IList&lt;T&gt; list, IList&lt;int&gt; indices)<br />
{<br />
if (list == null)<br />
throw new ArgumentNullException(&#8220;list&#8221;);<br />
if (indices == null)<br />
throw new ArgumentNullException(&#8220;indices&#8221;);<br />
if (list.Count != indices.Count)<br />
throw new ArgumentException(errorMessagesIndicesListInvalidSize, &#8220;indices&#8221;);</p>
<p>var result = new T[list.Count];<br />
for (int i = 0; i &lt; result.Length; i++)<br />
result[i] = list[indices[i]];<br />
return result;<br />
}<br />
}</p>
</div>
<img src="http://feeds.feedburner.com/~r/noldorin-blog/~4/X4wOWLLS4YU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.noldorin.com/2010/05/combinatorics-in-csharp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.noldorin.com/2010/05/combinatorics-in-csharp/</feedburner:origLink></item>
	</channel>
</rss>
