<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:rawvoice="http://www.rawvoice.com/rawvoiceRssModule/"
	>
<channel>
	<title>Comments on: Exercising Dynamic Web Frameworks, or, How Do I Test These Friggin&#8217; Controllers Anyway?</title>
	<atom:link href="http://enfranchisedmind.com/blog/posts/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/feed/" rel="self" type="application/rss+xml" />
	<link>http://enfranchisedmind.com/blog/posts/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/</link>
	<description>programming, politics, &#38; other religious issues</description>
	<lastBuildDate>Wed, 08 Feb 2012 14:16:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>By: Upped The Recent Post/Popular Post Widget Count &#124; Enfranchised Mind</title>
		<link>http://enfranchisedmind.com/blog/posts/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-33669</link>
		<dc:creator>Upped The Recent Post/Popular Post Widget Count &#124; Enfranchised Mind</dc:creator>
		<pubDate>Tue, 12 Aug 2008 19:33:41 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/2008/03/14/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-33669</guid>
		<description>[...] Exercising Dynamic Web Frameworks, or, How Do I Test These Friggin&#8217; Controllers Anyway? [...]</description>
		<content:encoded><![CDATA[<p>[...] Exercising Dynamic Web Frameworks, or, How Do I Test These Friggin&#8217; Controllers Anyway? [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Hamlet D'Arcy</title>
		<link>http://enfranchisedmind.com/blog/posts/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-32836</link>
		<dc:creator>Hamlet D'Arcy</dc:creator>
		<pubDate>Wed, 19 Mar 2008 02:18:53 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/2008/03/14/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-32836</guid>
		<description>I can appreciate the argument that an open language encourages BBoMs. But, in a weird way, I think closed languages may also actively promote BBoMs. One of the benefits of a statically typed languages is that tool support is much easier to add because it&#039;s easier to reason about the structure of the code. Java has given rise to amazing tools like Eclipse and IDEA, which makes traversing large, dependency riddled code bases simple. In Java, a minor BBoM isn&#039;t that tough to work with. But at some point your tool may lull you into creating a big mess. So when you say &quot;Culture X&quot; may promote BBoMs, I read that to say both &quot;the culture of Java+Eclipse&quot; or &quot;the culture of Ruby+Open Classes&quot;. In the end it seems that some person has to be fanatical about dependency management to divert the disaster, regardless of the platform.</description>
		<content:encoded><![CDATA[<p>I can appreciate the argument that an open language encourages BBoMs. But, in a weird way, I think closed languages may also actively promote BBoMs. One of the benefits of a statically typed languages is that tool support is much easier to add because it&#8217;s easier to reason about the structure of the code. Java has given rise to amazing tools like Eclipse and IDEA, which makes traversing large, dependency riddled code bases simple. In Java, a minor BBoM isn&#8217;t that tough to work with. But at some point your tool may lull you into creating a big mess. So when you say &#8220;Culture X&#8221; may promote BBoMs, I read that to say both &#8220;the culture of Java+Eclipse&#8221; or &#8220;the culture of Ruby+Open Classes&#8221;. In the end it seems that some person has to be fanatical about dependency management to divert the disaster, regardless of the platform.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robert Fischer</title>
		<link>http://enfranchisedmind.com/blog/posts/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-32830</link>
		<dc:creator>Robert Fischer</dc:creator>
		<pubDate>Mon, 17 Mar 2008 21:34:43 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/2008/03/14/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-32830</guid>
		<description>I actually had that problem with my first attempt at an open source piece of software.  I implemented BigInteger and BigDecimal using &lt;a href=&quot;http://gmplib.org/&quot; rel=&quot;nofollow&quot;&gt;GMP&lt;/a&gt;, but there was no concept of &quot;structurally equivalent, but not inheriting from&quot;.

As far as I can tell, the whole nominal typing thing is a failure.  Inheritance is simply fraught with problems which make it extremely subtly wrong in many, many cases.  There&#039;s still a lot to be said for the correctness guaranties of static typing, but making all of that nominal and not structural is just wrong.

BTW, String isn&#039;t too far from an interface these days -- check out CharSequence that came in with 1.5.  Of course, people still accept &quot;String&quot;s all the time when they could perfectly well expect &quot;CharSequence&quot;s, so the kind of thing where Sun is paddling upstream.  But, if you hit a small piece of code or are working on a library and you want to be really nice to future maintainers, there you go.</description>
		<content:encoded><![CDATA[<p>I actually had that problem with my first attempt at an open source piece of software.  I implemented BigInteger and BigDecimal using <a href="http://gmplib.org/" rel="nofollow">GMP</a>, but there was no concept of &#8220;structurally equivalent, but not inheriting from&#8221;.</p>
<p>As far as I can tell, the whole nominal typing thing is a failure.  Inheritance is simply fraught with problems which make it extremely subtly wrong in many, many cases.  There&#8217;s still a lot to be said for the correctness guaranties of static typing, but making all of that nominal and not structural is just wrong.</p>
<p>BTW, String isn&#8217;t too far from an interface these days &#8212; check out CharSequence that came in with 1.5.  Of course, people still accept &#8220;String&#8221;s all the time when they could perfectly well expect &#8220;CharSequence&#8221;s, so the kind of thing where Sun is paddling upstream.  But, if you hit a small piece of code or are working on a library and you want to be really nice to future maintainers, there you go.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reg Braithwaite</title>
		<link>http://enfranchisedmind.com/blog/posts/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-32828</link>
		<dc:creator>Reg Braithwaite</dc:creator>
		<pubDate>Mon, 17 Mar 2008 18:41:07 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/2008/03/14/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-32828</guid>
		<description>p.s. Of course, if I could rewrite Java history, String would be an interface. But then again, most Java programmers are class-oriented, not interface-oriented.</description>
		<content:encoded><![CDATA[<p>p.s. Of course, if I could rewrite Java history, String would be an interface. But then again, most Java programmers are class-oriented, not interface-oriented.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reg Braithwaite</title>
		<link>http://enfranchisedmind.com/blog/posts/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-32827</link>
		<dc:creator>Reg Braithwaite</dc:creator>
		<pubDate>Mon, 17 Mar 2008 18:39:47 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/2008/03/14/exercising-dynamic-web-frameworks-or-how-do-i-test-these-friggin-controllers-anyway/#comment-32827</guid>
		<description>&quot;Can you describe situations when this is enormously frustrating in the earlier case? I’ve never bumped into a problem and went, &#039;Boy, y’know what I need to do? I need to globally mess with the way this class works.&#039;&quot;

In Java, not open a class but subclass a class. For example, it would be nice to use the type checking system to enforce certain encoding issues. Let&#039;s use a trivial case: to have two kinds of String, HTMLString where HTML entities are already converted and PlainString where they are not.

if you can subclass String, you can use Java&#039;s strong, static type checking to ensure that you do not accidentally pass a PlainString to a method expecting an HTMLString. But since you cannot subclass String, nor is it an interface you can implement, you must write a container class and constantly reference and dereference an instance member.

Some folks argue this is a good thing, because if they write a method expecting a String, they want a guarantee it is a String and not something else I have deemed to have Liskov equivalence to a String.</description>
		<content:encoded><![CDATA[<p>&#8220;Can you describe situations when this is enormously frustrating in the earlier case? I’ve never bumped into a problem and went, &#8216;Boy, y’know what I need to do? I need to globally mess with the way this class works.&#8217;&#8221;</p>
<p>In Java, not open a class but subclass a class. For example, it would be nice to use the type checking system to enforce certain encoding issues. Let&#8217;s use a trivial case: to have two kinds of String, HTMLString where HTML entities are already converted and PlainString where they are not.</p>
<p>if you can subclass String, you can use Java&#8217;s strong, static type checking to ensure that you do not accidentally pass a PlainString to a method expecting an HTMLString. But since you cannot subclass String, nor is it an interface you can implement, you must write a container class and constantly reference and dereference an instance member.</p>
<p>Some folks argue this is a good thing, because if they write a method expecting a String, they want a guarantee it is a String and not something else I have deemed to have Liskov equivalence to a String.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

