<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Neil&#039;s Weblog</title>
	<atom:link href="http://neilmadden.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://neilmadden.wordpress.com</link>
	<description>Thoughts about computing, logic and language</description>
	<lastBuildDate>Thu, 08 Dec 2011 22:01:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='neilmadden.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Neil&#039;s Weblog</title>
		<link>http://neilmadden.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://neilmadden.wordpress.com/osd.xml" title="Neil&#039;s Weblog" />
	<atom:link rel='hub' href='http://neilmadden.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Relations ain&#8217;t &#8220;flat&#8221;</title>
		<link>http://neilmadden.wordpress.com/2010/08/31/relations-aint-flat/</link>
		<comments>http://neilmadden.wordpress.com/2010/08/31/relations-aint-flat/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 10:57:39 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=53</guid>
		<description><![CDATA[A new month a new job. I&#8217;m now working as a Java Application Developer for a large software consultancy. I&#8217;ll be developing Java EE applications for this job, which will be an interesting experience. I&#8217;m keen to really get my hands dirty with what is currently the de facto standard for building large business apps. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=53&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A new month a new job. I&#8217;m now working as a Java Application Developer for a large software consultancy. I&#8217;ll be developing Java EE applications for this job, which will be an interesting experience. I&#8217;m keen to really get my hands dirty with what is currently the de facto standard for building large business apps.</p>
<p>My first challenge is to get to grips with the Java Persistence API (JPA), which provides a standardised object-relational mapping (ORM) for Java applications. Basically, it takes a bunch of annotated Java classes and determines how best to map these to a relational database, taking care of foreign key constraints, inheritance, joins, and so forth. On the surface, this is all very good. Current best practice in developing these kinds of apps is to separate out the data model of the domain into a layer of simple Java beans (i.e., objects with properties and little custom behaviour), so something like JPA makes this much easier to knock together than using JDBC directly. (Although, it&#8217;s not <em>that</em> hard to use JDBC).<span id="more-53"></span></p>
<p>My beef is not with JPA, then, which does a reasonable job. My beef is with some of the documentation that surrounds it. In particular, most of the docs seem to be written by people with a strong OO background, but a weak logic/relational background. For example, I&#8217;m currently working through <em>Java EE 6: From Novice to Professional</em> by Antonio Goncalves. This is largely an excellent book, but even this author makes the same basic mistakes that are common to this literature, and indicate a lack of understanding of basic relational concepts. For example, here is a representative quote from page 105 (discussing inheritance mapping in JPA):</p>
<blockquote><p>&#8220;How do you organize a hierarchical model into a flat relational one?&#8221;</p></blockquote>
<p>The mistake here is in believing that relational models are in any way &#8220;flat&#8221;. I can only assume this comes from a rather literal interpretation of the usual representation as relations as tables on a page, which are (given the 2D nature of paper) naturally flat. However, any high school student will have had experience of drawing graphs and charts from data in tables, and so will know that the relations they describe are often anything but flat.</p>
<p>In mathematical terms, a relational database describes a <em>hypergraph</em>. This is a very general structure that very much subsumes simple hierarchies. If you imagine any collection of nodes in an N-dimensional space, and then connect them up with edges in almost any way you want, such a model can be described relationally in a straight-forward fashion. The same is true for hierarchies. Of course, OO models don&#8217;t just model hierarchies, but are also capable of modelling general graphs. The difference with OO is that it can only directly describe normal graphs, where each edge connects only at most two vertices (entities) &#8211; in other words, OO is limited to describing at most binary relations, much like RDF. Of course, this is not a problem as you can always <em>reify</em> N-ary relations into a separate entity and a bunch of binary relations.</p>
<p>So, neither description is correct: relations aren&#8217;t flat, and OO models are rarely strictly hierarhical. But let&#8217;s get back to the issue of inheritance. The problems, as far as I can see, of mapping inheritance hierarchies to relations come ultimately from an initial mis-design of how to map classes to relations. The common approach is to map each object to a row of a database table. Each property of the object then maps to a column in the table. This seems natural enough, but soon runs into problems. Firstly, it is difficult to represent collection-valued attributes this way. Secondly, missing attributes lead to NULL entries in the table (with all the problems they bring). Thirdly, it becomes difficult to know how best to incorporate attributes from super classes &#8211; do you collapse them all into one table, or distribute the data across multiple tables. To my mind, this mapping is just plain wrong from a logical point of view. Fixing the logical view should be the first step. After that, then you can worry about optimising access.</p>
<p>So, what is the correct logical view of OO and inheritance? Here, I believe OWL (the Web Ontology Language) has shown the correct interpretation. Each attribute of an OO class describes a binary relation, and so each <em>attribute</em> should be a separate relation (table). That may initially seem like madness, but it is the correct logical way of viewing the situation. Consider an Order class like the following:</p>
<pre>class Order {
    Customer customer;
    Set&lt;Product&gt; productsOrdered;
    Address shippingAddress;
}
</pre>
<p>In the logical view I am recommending, you would have 4 relations to describe each order:</p>
<ol>
<li><em>order</em>: a unary relation containing the IDs (primary keys) of all orders. Thus <em>order(x)</em> is true if <em>x</em> is an order.</li>
<li><em>customer</em>: a binary many-t0-one (functional) relation mapping order ids to customer ids.</li>
<li><em>productsOrdered</em>: a binary many-to-many relation mapping order ids to product ids.</li>
<li><em>shippingAddress</em>: a binary many-to-one relation mapping order ids to address ids.</li>
</ol>
<p>The customer, address, and product descriptions would be similarly broken down into multiple relations.</p>
<p>So, how do we represent inheritance in this scenario? The answer is very simple: we simply add more relations. For example, suppose we add a new class of customers who are eligible for a discount on their orders. In Java, we might describe this as follows:</p>
<pre>class VipCustomer extends Customer {
    double discountPercentage;
}
</pre>
<p>If the customer is a VIP customer, then we can discount their order according to the discount they are eligible for. To add this extended class, we merely have to add two new relations: VipCustomer (unary) to record the IDs of those eligible for discounts, and discountPercentage to record the discount allowed. We can then further constrain the database to ensure that all VIP customers are also customers (using a foreign key constraint). Alternatively, we can in fact infer this information using view definitions. In Datalog, we would write this as follows:</p>
<pre>VipCustomer(X) :- discountPercentage(X,_).
</pre>
<p>This states that a VipCustomer is someone who has an associated discount percentage recorded. We can go further and infer that all VipCustomers are also customers:</p>
<pre>Customer(X) :- VipCustomer(X).
</pre>
<p>In SQL terms, these can be written as view queries:</p>
<pre>CREATE VIEW VipCustomer(ID) AS SELECT CustID AS ID FROM discountPercentage;
CREATE VIEW Customer(ID) AS SELECT ID FROM VipCustomer UNION ...;
</pre>
<p>Here you can start to leverage the power of the relational database to infer information for you. I recommend anyone wanting to learn about relational database design to spend some time playing with Prolog/Datalog and OWL to learn about logical modelling. Relational databases are more than just simple persistent stores: they are essentially inference engines for a restricted form of first-order logic, and you can really leverage them much better once you understand the implications of that.</p>
<p>Of course, you are probably screaming at me that this is terribly inefficient due to the number of joins that are required, and you are probably correct (although you should alway measure first). Once you have the logical model correct, you can then consider de-normalising the model to avoid common joins. Typically, you&#8217;d do this by finding functional dependencies, as described in most database textbooks. For example, there is only one customer and one delivery address in our order, so we can merge these columns directly into the base Order relation. However, I&#8217;d still leave the original logical design around as a set of views that map onto this base relation: the query optimiser should be able to eliminate them:</p>
<pre>CREATE TABLE BaseOrder(Id ..., CustID ..., AddressID ...);
CREATE VIEW Order AS SELECT Id FROM BaseOrder;
CREATE VIEW customer AS SELECT Id, CustID FROM BaseOrder;
CREATE VIEW shippingAddress AS SELECT Id, AddressID FROM BaseOrder;
...
SELECT c.CustID, a.AddressID FROM customer c, shippingAddress a where c.id = a.id;
</pre>
<p>This last query should be optimised into the following by any decent query optimiser:</p>
<pre>SELECT CustID, AddressID FROM BaseOrder;
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=53&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2010/08/31/relations-aint-flat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
		<item>
		<title>The right defaults</title>
		<link>http://neilmadden.wordpress.com/2010/03/15/the-right-defaults/</link>
		<comments>http://neilmadden.wordpress.com/2010/03/15/the-right-defaults/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 11:49:51 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=48</guid>
		<description><![CDATA[A pair of fascinating links from LtU on choosing the right defaults. First, an entertaining TED talk by Dan Ariely, which I highly recommend. Second, a very promising looking IDE concept, CodeBubbles, which certainly seems to be providing some good defaults.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=48&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A pair of <em>fascinating</em> links from <a title="Lambda the Ultimate" href="http://www.lambda-the-ultimate.org/">LtU</a> on choosing the right defaults. First, an entertaining TED <a href="http://www.ted.com/talks/dan_ariely_asks_are_we_in_control_of_our_own_decisions.html">talk by Dan Ariely</a>, which I highly recommend. Second, a very promising looking IDE concept, <a href="http://www.cs.brown.edu/people/acb/codebubbles_site.htm">CodeBubbles</a>, which certainly seems to be providing some good defaults.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/48/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=48&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2010/03/15/the-right-defaults/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
		<item>
		<title>Are cells a good analogy for software?</title>
		<link>http://neilmadden.wordpress.com/2010/01/08/are-cells-a-good-analogy-for-software/</link>
		<comments>http://neilmadden.wordpress.com/2010/01/08/are-cells-a-good-analogy-for-software/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 15:37:00 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=43</guid>
		<description><![CDATA[I have some sympathy for Alan Kay&#8217;s &#8220;biological analogy&#8221; that software could be constructed to resemble biological cells, with each component having a clearly defined barrier (cell membrane) and ability to act autonomously as well as collaboratively. This is, after all, how agent-oriented languages should work too. However, the analogy can clearly only be taken [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=43&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have some sympathy for Alan Kay&#8217;s <a href="http://www.encuentro.org.mx/recursos/internet/Alan%20Kay.pdf">&#8220;biological analogy&#8221;</a> that software could be constructed to resemble biological cells, with each component having a clearly defined barrier (cell membrane) and ability to act autonomously as well as collaboratively. This is, after all, how agent-oriented languages should work too. However, the analogy can clearly only be taken so far. A human cell contains around 6 billion base pairs of DNA, each of which can store a maximum equivalent of 2 bits of information. This gives a total theoretical storage capacity of 12e9 bits or 1.5e9 bytes — roughly 1.4GB, or slightly less than an iPod shuffle. In computational terms, that&#8217;s quite a lot. Furthermore, this information is redundantly duplicated on a massive scale within every single cell of your body, and largely duplicated between individuals even of separate species. If this were a computer system, it would be a hugely inefficient and anti-modular one. By modern software engineering standards, a cellular organism is a jumble of duplicate components, each of which is a monolithic mess of spaghetti code!</p>
<p>Nevertheless, I do believe there is still much value in this analogy. After all, as Kay would point out, biological systems are much more sophisticated* than anything we can yet build, and generally much more resilient too. But we must be careful in pursuing such analogies, as the design goals of evolution are different to our own. While evolution can dispense with the intelligent designer, we cannot! And those intelligent designers have their limits. They need to be able to revisit design decisions and update running systems to correct flaws, optimise performance, adjust to new challenges, etc. Modularity is crucial to these tasks. If there is a God, He is not a software engineer.</p>
<p>PS &#8211; I recognise that Kay himself is well aware of these limitations of the analogy, as is abundantly evident in the wonderful design of Smalltalk.</p>
<p>* NB: I much prefer the term &#8220;sophisticated&#8221; to &#8220;complex&#8221;: the former is perhaps a goal worth pursuing, the latter should be minimised or eliminated.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=43&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2010/01/08/are-cells-a-good-analogy-for-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
		<item>
		<title>First class and higher-order</title>
		<link>http://neilmadden.wordpress.com/2009/12/17/first-class-and-higher-order/</link>
		<comments>http://neilmadden.wordpress.com/2009/12/17/first-class-and-higher-order/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 15:58:21 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=40</guid>
		<description><![CDATA[The terms first-class and higher-order can be confusing to people first encountering them in relation to programming languages (usually through exposure to some functional programming language). At first glance it can seem that they mean sort-of the same thing, but this isn&#8217;t really the case. Both refer to the ability to pass functions around like [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=40&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The terms <em>first-class</em> and <em>higher-order</em> can be confusing to people first encountering them in relation to programming languages (usually through exposure to some functional programming language). At first glance it can seem that they mean sort-of the same thing, but this isn&#8217;t really the case. Both refer to the ability to pass functions around like other values, but they relate to different aspects. The term <em>higher-order</em> is a statement about the interface of a function. It means that the function is able to accept other functions as arguments (or even the same function) and/or return functions as its value. It originates in logic, where a <em>first-order</em> logic is able to make statements only about objects in the domain of discourse (e.g., &#8220;all men are tall&#8221;) , whereas a <em>second-order</em> logic is also able to make statements about first-order relations over those objects (e.g., &#8220;all properties of men are also properties of women&#8221;). A <em>higher-order</em> logic is then able to make statements about any lower-order relation. On the other hand, the term <em>first-order</em> is a statement about how a <em>language</em> handles certain kinds of values. In particular, it usually means that a certain kind of value (such as functions) can be treated on an equal level with all other kinds of value (such as strings or integers), and can be passed to/returned from functions, stored in data structures, and so on. These are distinct concepts: a language might permit higher-order functions that are not first-class, and vice-versa.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=40&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2009/12/17/first-class-and-higher-order/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
		<item>
		<title>Where is the Web going?</title>
		<link>http://neilmadden.wordpress.com/2009/08/24/where-is-the-web-going/</link>
		<comments>http://neilmadden.wordpress.com/2009/08/24/where-is-the-web-going/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 01:46:46 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=24</guid>
		<description><![CDATA[I&#8217;m becoming increasingly confused about what direction the Web is heading in. More precisely, I&#8217;m slightly concerned that the direction the Web is heading in is completely different to the direction in which various researchers believe it is heading in. In my field of research, I often run into material on the “Semantic Web”. This [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=24&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m becoming increasingly confused about what direction the Web is heading in. More precisely, I&#8217;m slightly concerned that the direction the Web is heading in is completely different to the direction in which various researchers believe it is heading in.</p>
<p><span id="more-24"></span>In my field of research, I often run into material on the <a href="http://en.wikipedia.org/wiki/Semantic_Web">“Semantic Web”</a>. This is supposed to be the vision of where the Web is going: more structured mark-up of information using tags from well-defined, domain-specific vocabularies (so-called “ontologies”). On top of this, we can then build intelligent applications (“agents”) that can draw together information from diverse sources, integrate it, make inferences from it, and generally use this <em>knowledge</em> to act on our behalf. This is a vision I have some sympathy with, although there are clearly huge obstacles to overcome before it becomes anything like a reality. We&#8217;re still not sure what logic dialect(s) to base it all on, and that&#8217;s just the first step!</p>
<p>But the problems I see with the Semantic Web are not primarily technical. The main problem I see is that the Web is actively evolving in the opposite direction. Just take a look at the <a href="http://dev.w3.org/html5/spec/Overview.html">HTML 5 (draft) specification</a>. While some lip-service is paid to “semantics” in the introduction, in actual fact the spec moves further away from a declarative, logical language, and instead embraces vacuous tags such as <code>&lt;canvas&gt;</code>. This tag exists solely to provide a context into which to render, procedurally in JavaScript, arbitrary 2D graphics (or 3D graphics with the emerging <em>WebGL</em> standards). While I welcome the attempt to provide an open alternative to technologies such as Flash, I&#8217;m not sure that <code>&lt;canvas&gt;</code> really delivers. Indeed, it seems that it suffers many of the same drawbacks of Flash. If the goal was to continue to evolve the more meaningful distinction between different tags, why didn&#8217;t they develop a set of specific-purpose tags rather than developing another procedural API? For general graphics, the <a href="http://www.w3.org/Graphics/SVG/">SVG</a> standard already exists. For charts and graphs, why not introduce a more meaningful <code>chart</code> element, with declarative descriptions of axes, data points, formulae, etc? For example, suppose we wish to plot a 2D chart of the formula <em>y = x<sup>2</sup></em>. In the current HTML 5 specification we could “mark-up” this formula as follows:</p>
<pre>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;&lt;title&gt;Test of HTML 5 Canvas Tag&lt;/title&gt;
&lt;script&gt;
function point(x, y) { this.x = x; this.y = y; }
function axis(min, max, scale) {
    this.min = min; this.max = max; this.scale = scale;
    this.start = min * scale;
    this.end   = max * scale;
}
function xSquaredChart() {
    var chart = {
        origin:     new point(100, 0),
        xAxis:      new axis(-10, 10, 10),
        yAxis:      new axis(0, 100, 1),
        interval:   0.1
    };
    chart.f = function(x) { return Math.pow(x,2); }
    return chart;
}
function drawChart(ctx, chart) {
    var H = 100;
    var o = chart.origin;

    // Draw the axes
    ctx.fillStyle = "rgb(0,0,200)";
    ctx.fillRect(chart.xAxis.start+o.x, H-o.y, chart.xAxis.end+o.x, -1);
    ctx.fillRect(o.x, chart.yAxis.start, 1, chart.yAxis.end);

    // Plot the data
    ctx.fillStyle = "rgb(200,0,0)";

    for (x = chart.xAxis.min; x &lt;= chart.xAxis.max; x += chart.interval) {
        var y = chart.f(x);
        ctx.fillRect(x * chart.xAxis.scale + chart.origin.x,
                     H - (y * chart.yAxis.scale + chart.origin.y),
                     1, 1);
    }
}
function draw() {
    var chart = xSquaredChart();
    var canvas = document.getElementById("canvas");
    if (canvas.getContext) {
        var ctx = canvas.getContext('2d');
        drawChart(ctx, chart);
    }
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body onload="draw();"&gt;
    &lt;canvas id="canvas" width="200" height="100"&gt;A canvas should be here.&lt;/canvas&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>If you try this out in a modern browser such as Firefox or Safari, that supports the canvas tag, you should indeed see a plot of the formula for values of <em>x</em> between -10 and 10. My point is not so much about the length of code needed to plot this simple function—indeed, I have deliberately made the code longer than it needs to be for generality—but more the total opacity of its purpose or meaning. The best we can hope for is that libraries become available for such common tasks, and that authors take the time to also supply marked-up comments and captions that identify that it is a chart and what it is a chart of. Consider a hypothetical alternative if HTML 5 directly supported tags for marking up charts:</p>
<pre>&lt;chart id="x-squared" type="line"&gt;
  &lt;axis id="x"&gt;
    &lt;range from="-10" to="10" step="0.1"/&gt;
    &lt;legend&gt;x&lt;/legend&gt;
  &lt;/axis&gt;
  &lt;axis id="y"&gt;
    &lt;formula&gt;y = x^2&lt;/formula&gt;
    &lt;legend&gt;x&lt;sup&gt;2&lt;/sup&gt;&lt;/legend&gt;
  &lt;/axis&gt;
  &lt;caption&gt;Plot of x&lt;sup&gt;2&lt;/sup&gt;.&lt;/caption&gt;
&lt;/chart&gt;</pre>
<p>The <code>formula</code> element could be specified in MathML content tags or even in JavaScript. Explicit data points could be given with a <code>datum</code> tag supporting error bars and other features. The browser can add all kinds of nifty features, such as the ability to edit data or change ranges on the chart and automatically display the new values, like a spreadsheet. However, the main point is that the mark-up is much clearer, and more importantly, its purpose is easily extracted by automated tools. Other uses of the canvas tag could also be handled by special-purpose tags, such as animation, presentation slides, logos, simulations and even games.</p>
<p>At this point you may be thinking to yourself: OK, but surely you can&#8217;t cover <em>every</em> possible use of the canvas tag with special purpose tags? Indeed, you probably can&#8217;t. That doesn&#8217;t mean that we should try, though. By including special-purpose tags alongside the canvas tag we can encourage people to use them when they fit, and only resort to procedural APIs when all else fails. After all, custom tags should be much simpler to use, more maintainable and readable, and offer the possibility of much more efficient implementations within the browser rather than in JavaScript. Another much more powerful alternative also exists: an ability to define your own custom tags and tag-views. A further post will expand on this topic soon!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=24&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2009/08/24/where-is-the-web-going/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
		<item>
		<title>SecureCode, ClickSafe etc</title>
		<link>http://neilmadden.wordpress.com/2009/06/21/securecode-clicksafe-etc/</link>
		<comments>http://neilmadden.wordpress.com/2009/06/21/securecode-clicksafe-etc/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 15:42:26 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=20</guid>
		<description><![CDATA[What is the point of MasterCard SecureCode and friends (Lloyds TSB ClickSafe as I see it)? What extra security does having to remember yet another password actually bring? As far as I can tell, very little, as I continually forget my password (made worse as I am then forbidden from using a previous password) and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=20&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>What is the point of MasterCard SecureCode and friends (Lloyds TSB ClickSafe as I see it)? What extra security does having to remember yet another password actually bring? As far as I can tell, very little, as I continually forget my password (made worse as I am then forbidden from using a previous password) and then answer a few basic &#8220;security questions&#8221; (all of which you could probably answer within 5 minutes of Googling my name), and am allowed to make the payment anyway. I&#8217;ve gone through about 10 passwords in the last year, and now simply enter random gibberish, &#8220;secure&#8221; in the knowledge that I will just have to remember my date of birth next time. Utter useless rubbish foisted on us by the incompetent banking companies to give a slight appearance of added security but in fact just making online shopping more cumbersome.</p>
<p>Does anyone know how to disable it? The &#8220;FAQ&#8221; says nothing about opting-out.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=20&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2009/06/21/securecode-clicksafe-etc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
		<item>
		<title>Aeroplanes and Treadmills</title>
		<link>http://neilmadden.wordpress.com/2008/09/08/aeroplanes-and-treadmills/</link>
		<comments>http://neilmadden.wordpress.com/2008/09/08/aeroplanes-and-treadmills/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 14:49:17 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=16</guid>
		<description><![CDATA[I came across this ridiculous Internet argument today, via xkcd. I find it both amusing, and worrying, the number of people who insist that the plane will not take off. This is a classic example of what philosophers call a thought experiment, and demonstrates only what most thought experiments demonstrate: that our intuitions about even [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=16&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I came across <a href="http://pogue.blogs.nytimes.com/2006/12/11/the-airplane-treadmill-conundrum/">this ridiculous Internet argument</a> today, via <a href="http://xkcd.com/473/">xkcd</a>. I find it both amusing, and worrying, the number of people who insist that the plane will not take off. This is a classic example of what philosophers call a thought experiment, and demonstrates only what most thought experiments demonstrate: that our intuitions about even quite simple phenomena are often very wide of the mark. In this case, the intuition is that a vehicle on a treadmill will not move if the treadmill matches the speed of its wheels. While this is true for vehicles (and people) that get their forward thrust from pushing against the ground, an aeroplane certainly doesn&#8217;t. The thrust here comes from the propellers or jet turbines that push against the air. These generate an enormous force backwards, which, as per Newton, generates an equal and opposite force pushing the plane forward. If you draw a diagram and label the force arrows (as in school physics lessons), you will see an enormous forward arrow with the only opposing forces being air resistance and a tiny amount of friction from the wheels. It is a basic law of mechanics that when there is a net force acting on an object in a certain direction, then that object <em>will</em> accelerate in that direction. No amount of fast spinning treadmills can reverse the laws of physics. As others mentioned, the wheels will simply spin faster, as they are acted on by forces both from the aeroplane and the treadmill. The wheels decouple the rest of the plane from this treadmill force, and thus the transferred force is negligible. This is, after all, the entire point of having wheels on a plane, and not for instance just having skis.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/neilmadden.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/neilmadden.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=16&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2008/09/08/aeroplanes-and-treadmills/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
		<item>
		<title>Computers and numbers</title>
		<link>http://neilmadden.wordpress.com/2008/08/07/computers-and-numbers/</link>
		<comments>http://neilmadden.wordpress.com/2008/08/07/computers-and-numbers/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 11:42:50 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=11</guid>
		<description><![CDATA[A pet peeve of mine is the ongoing public misperception that computers are really all about numbers. This is constantly reinforced by the mainstream (and even IT) media. Take, for instance, this quote from a BBC News story today: The DNS acts as the internet&#8217;s address books and helps computers translate the website names people [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=11&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A pet peeve of mine is the ongoing public misperception that computers are really all about numbers. This is constantly reinforced by the mainstream (and even IT) media. Take, for instance, this quote from a <a href="http://news.bbc.co.uk/1/hi/technology/7546557.stm">BBC News story</a> today:</p>
<blockquote><p>
The DNS acts as the internet&#8217;s address books and helps computers translate the website names people prefer (such as bbc.co.uk) into the numbers computers use (212.58.224.131).
</p></blockquote>
<p>What this quote means to say is <em>&ldquo;DNS transforms textual domain names (such as bbc.co.uk) into the numeric dotted-form (212.58.224.131) that is used by the Internet Protocol (IP)&rdquo;</em>. To the actual computer, both of these are just patterns of bits that represent symbols. A numeric interpretation is no more or less convenient for the computer than any other symbolic representation: it&#8217;s all just patterns of electrical charge as far as the machine is concerned. The inventors of IP could just as easily have chosen to use a DNS-style address representation. It happens that the sort of symbol shifting that computers do is very good for numerical tasks, and it also happens that we know a lot about how to do things with numbers, and so numbers are useful in a lot of applications of computers. In this case, the numeric form can be compactly represented, and efficiently manipulated. That was an engineering decision, not a fundamental limitation of computers.</p>
<p>My love of computers stems from a fascination with language, logic, and fundamental notions of representation and interpretation. Diving into computing has brought me into contact with all sorts of ideas from philosophy, physics, mathematics, linguistics, psychology, cognitive science, and AI. It saddens me that people miss out on these extraordinarily beautiful ideas because of a persistent belief that its all really about numbers, which puts a lot of people off.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/neilmadden.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/neilmadden.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=11&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2008/08/07/computers-and-numbers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
		<item>
		<title>The Decline of Violence</title>
		<link>http://neilmadden.wordpress.com/2008/08/06/the-decline-of-violence/</link>
		<comments>http://neilmadden.wordpress.com/2008/08/06/the-decline-of-violence/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 16:30:00 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=8</guid>
		<description><![CDATA[Steven Pinker has an interesting talk on the TED conference website, debunking the idea that we are living in an increasingly violent society. As Pinker shows, over pretty much any timescale you care to look at, violent death rates have been dropped considerably, and we now live in the safest time ever. Fascinating and cheering.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=8&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Steven Pinker has an interesting <a href="http://www.ted.com/index.php/talks/steven_pinker_on_the_myth_of_violence.html">talk</a> on the TED conference website, debunking the idea that we are living in an increasingly violent society. As Pinker shows, over pretty much any timescale you care to look at, violent death rates have been dropped considerably, and we now live in the safest time ever. Fascinating and cheering.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/neilmadden.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/neilmadden.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=8&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2008/08/06/the-decline-of-violence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
		<item>
		<title>60 Years since The Baby</title>
		<link>http://neilmadden.wordpress.com/2008/06/21/60-years-since-the-baby/</link>
		<comments>http://neilmadden.wordpress.com/2008/06/21/60-years-since-the-baby/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 12:48:29 +0000</pubDate>
		<dc:creator>Neil Madden</dc:creator>
				<category><![CDATA[Computing]]></category>

		<guid isPermaLink="false">http://neilmadden.wordpress.com/?p=6</guid>
		<description><![CDATA[Manchester is celebrating the 60th anniversary of the first stored program computer, &#8220;The Baby&#8221;. A link to this was circulated around the Comp Sci email at Nottingham. A fascinating website. It&#8217;s amazing to see how far we&#8217;ve come in 60 years, but also how sophisticated those early machines already were.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=6&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Manchester is celebrating the <a href="http://www.digital60.org/">60th anniversary of the first stored program computer</a>, &#8220;The Baby&#8221;. A link to this was circulated around the Comp Sci email at Nottingham. A fascinating website. It&#8217;s amazing to see how far we&#8217;ve come in 60 years, but also how sophisticated those early machines already were.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/neilmadden.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/neilmadden.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/neilmadden.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/neilmadden.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/neilmadden.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/neilmadden.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/neilmadden.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/neilmadden.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/neilmadden.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/neilmadden.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/neilmadden.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/neilmadden.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/neilmadden.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/neilmadden.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/neilmadden.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/neilmadden.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilmadden.wordpress.com&amp;blog=3754709&amp;post=6&amp;subd=neilmadden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilmadden.wordpress.com/2008/06/21/60-years-since-the-baby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">neilmadden</media:title>
		</media:content>
	</item>
	</channel>
</rss>
