<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.3" -->
<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/"
	>

<channel>
	<title>Codentropy</title>
	<link>http://www.codentropy.com/blog</link>
	<description>When was the last time you did something for the first time?</description>
	<pubDate>Fri, 13 Jun 2008 20:21:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.3</generator>
	<language>en</language>
			<item>
		<title>Excel and Language Workbenches</title>
		<link>http://www.codentropy.com/blog/?p=69&amp;language=en</link>
		<comments>http://www.codentropy.com/blog/?p=69&amp;language=en#comments</comments>
		<pubDate>Mon, 14 May 2007 21:47:16 +0000</pubDate>
		<dc:creator>Paolo Rainone</dc:creator>
		
	<category>Generale</category>
	<category>L'Orso Maurone</category>
		<guid isPermaLink="false">http://www.codentropy.com/blog/?p=69&amp;language=en</guid>
		<description><![CDATA[CyberViper pointed me to another great testimony of Excel power: a site dedicated to videogames realized with Microsoft notorious metaspreadsheet (?!).
Inspired by Excel great versatility, Maurone took the ball and ran realizing his personal Language Workbench.
 

 
�

]]></description>
			<content:encoded><![CDATA[<div lang="en"><p>CyberViper pointed me to another great testimony of Excel power: a <a title="Excel Videgames (Italian site)" href="http://www.excelling.it/giochi_excel.asp">site</a> dedicated to videogames realized with Microsoft notorious metaspreadsheet (?!).</p>
<p>Inspired by Excel great versatility, Maurone took the ball and ran realizing his personal <a title="Language Workbenches" href="http://www.martinfowler.com/articles/languageWorkbench.html">Language Workbench</a>.</p>
<p> </p>
<p><a title="Click to Enlarge" href="http://www.codentropy.com/blog/images/maurone_01_C_vs2017_en_large.JPG"><img title="Click to enlarge" alt="Click to enlarge" src="http://www.codentropy.com/blog/images/maurone_01_C_vs2017_en_small.JPG" align="middle" /></a></p>
<p> </p>
<p>�
</p>
</div>]]></content:encoded>
			<wfw:commentRSS>http://www.codentropy.com/blog/?feed=rss2&amp;p=69&amp;language=en</wfw:commentRSS>
		</item>
		<item>
		<title>NLP - Natural Language Processing</title>
		<link>http://www.codentropy.com/blog/?p=66&amp;language=en</link>
		<comments>http://www.codentropy.com/blog/?p=66&amp;language=en#comments</comments>
		<pubDate>Wed, 25 Apr 2007 19:33:40 +0000</pubDate>
		<dc:creator>Paolo Rainone</dc:creator>
		
	<category>Generale</category>
	<category>L'Orso Maurone</category>
		<guid isPermaLink="false">http://www.codentropy.com/blog/?p=66&amp;language=en</guid>
		<description><![CDATA[This Dave Inman&#8217;s article inspired me a new Maurone Bear&#8217;s comic strip. This episode introduces AI, a new character, an improbable artifical intelligence that tries to comprehend human natural language nuissances&#8230;

 
 
�

]]></description>
			<content:encoded><![CDATA[<div lang="en"><p><a title="Natural Language Processing by Computer" href="http://www.scism.sbu.ac.uk/inmandw/tutorials/nlp/intro/intro.html" target="_blank">This Dave Inman&#8217;s article</a> inspired me a new Maurone Bear&#8217;s comic strip. This episode introduces AI, a new character, an improbable artifical intelligence that tries to comprehend human natural language nuissances&#8230;</p>
<p><a title="Click to enlarge" href="http://www.codentropy.com/blog/images/maurone_03_naturalLanguage.JPG"><img title="Click to enlarge" alt="Click to enlarge" src="http://www.codentropy.com/blog/images/maurone_03_naturalLanguage_small.JPG" align="middle" /></a></p>
<p> </p>
<p> </p>
<p>�
</p>
</div>]]></content:encoded>
			<wfw:commentRSS>http://www.codentropy.com/blog/?feed=rss2&amp;p=66&amp;language=en</wfw:commentRSS>
		</item>
		<item>
		<title>Entropy and Tests</title>
		<link>http://www.codentropy.com/blog/?p=45&amp;language=en</link>
		<comments>http://www.codentropy.com/blog/?p=45&amp;language=en#comments</comments>
		<pubDate>Sun, 18 Jun 2006 14:19:51 +0000</pubDate>
		<dc:creator>Paolo Rainone</dc:creator>
		
	<category>1 - Codentropy</category>
	<category>Il progetto infinito</category>
	<category>4 - Definizione di Entropia del Codice</category>
		<guid isPermaLink="false">http://www.codentropy.com/blog/?p=45&amp;language=en</guid>
		<description><![CDATA[Today reasoning kickstart was given by a simple observation that anyone accustomed to Test Driven Development (TDD) has met, sooner or later.
Just for a moment, we won’t consider the otherwise mandatory refactoring patterns.
 
Day 1
We define the function A test;
The test passes (green bar).
 
Day 10
Our growing code is filled with A function calls. We notice that A needs [...]]]></description>
			<content:encoded><![CDATA[<div lang="en"><p>Today reasoning kickstart was given by a simple observation that anyone accustomed to Test Driven Development (TDD) has met, sooner or later.<br />
Just for a moment, we won’t consider the otherwise mandatory refactoring patterns.<br />
 </p>
<p><strong>Day 1</strong></p>
<p>We define the function A test;<br />
The test passes (green bar).</p>
<p> </p>
<p><strong>Day 10</strong></p>
<p>Our growing code is filled with A function calls. We notice that A needs a somewhat slight variation, for example a new input parameter opportunely referenced by its new code.</p>
<p>We modify A function consequently, together with all of its callers.</p>
<p>As gently asked before for the sake of this insane reckoning, that code modification is applied without following any strict refactoring pattern.</p>
<p>The reason why we ask no strict-refactoring divine intervention is that coding typing errors, or mnemonic oversights, may occur quite easily (even with manually applied refactoring).</p>
<p>Actually we are focused on estimating those errors induced from distraction, bounded by blood with the natural inaccuracy of a human being. Yes, programmers are human beings, trust me.</p>
<p> </p>
<p align="center"><em>A Refactoring applied badly is worse than a refactoring not applied not at all.</em></p>
<p> </p>
<p>The A function test passes again, another green bar (GB).<br />
 </p>
<p><strong>Day 20</strong></p>
<p>We need another function, named B (yes, we are imaginative human beings, indeed), that internally references our previous A function.<br />
We test B and A together, ending the day with a positive outcome (GB).</p>
<p> </p>
<p><strong>Day 180</strong></p>
<p>During the development of our beautiful application, filled with hundreds of perfect classes and useful methods, it happens that we notice that B needs a new parameter (or a new if-statement, as you wish).</p>
<p>We eventually modify B and all the code that calls that function; afterall, we need to compile.</p>
<p>However, it’s the end of a sad day: sure we get a red bar (RB), but it&#8217;s the A test that doesn’t pass.</p>
<p> </p>
<p><strong>The Aftermath</strong></p>
<p>Sounds Odd?</p>
<p>In a real production environment, this behavior is possible and quite recurring.</p>
<p>Even if A doesn’t call directly B (as we may infer by its static definition), the former can depend indirectly on the latter, through technologies related to other architectural domains, like a shared DBMS.</p>
<p>Omitting the meager complexity of the example, such behaviors may lead to some questions:</p>
<p>1. What changed the A test behavior?</p>
<p>2. If I had not used a test, could I have timely recognized the repercussions that a faulty B might have on A and its callers, in spite the apparently independence of A from B?</p>
<p>3. If I had applied the refactoring correctly, would I have to expect another green at the end of the day 180?</p>
<p>4. Without any tests, would I perceived “timely” or “too much late” the chaos injection made by a simple, stupid, pesky, <em>natural </em>oversight?</p>
<p>5. If the “chaotic” modification had been introduced by a careless colleague (or unaware of the context, because I had forgotten to document of the code, deuce!), would I have the same “luck” trying to discover the error/mistake without a (battery of) test(s)?</p>
<p> </p>
<p>(Bad) Luck, (pesky) oversights, careless teammates (yes I know them…), tiredness, badly applied refactorings…are indeed <em>lamer</em>-only things, or <em>cutting-edge senior developers</em> too are doomed to sail in these muddy waters?
</p>
</div>]]></content:encoded>
			<wfw:commentRSS>http://www.codentropy.com/blog/?feed=rss2&amp;p=45&amp;language=en</wfw:commentRSS>
		</item>
	</channel>
</rss>
