<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

 <title>Néstor Salceda</title>
 
 <link href="http://nestor.babuine.net/" />
 <updated>2012-01-18T23:20:24+01:00</updated>
 <id>http://nestor.babuine.net.com</id>
 <author>
   <name>Néstor Salceda</name>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/nestorsalceda" /><feedburner:info uri="nestorsalceda" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Dependency Injection with Tornado</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/wjcTmfET750/" />
   <updated>2011-11-30T00:00:00+01:00</updated>
   <id>http://nestor.babuine.net/2011/11/30/dependency-injection-with-tornado</id>
   <content type="html">&lt;p&gt;One of the most powerful patterns I use is Dependency Injection.&lt;/p&gt;

&lt;p&gt;The main idea behind Dependency Injection is collaboration.  Collaboration among
objects for solving a problem.  Do you remember divide and conquer algorithms?
These algorithms works breaking down a big and complex problem into several
sub-problems which become simpler and simpler and can be solved easily, then the
solutions to the sub-problems must be combined to give a solution for the original
problem.  This is the goal of Dependency Injection, defining the way our objects
are going to be combined for collaborating.&lt;/p&gt;

&lt;p&gt;Let&amp;rsquo;s go with an example.  We are going to write a web handler for
inserting some data into a database.&lt;/p&gt;

&lt;h1&gt;The Code&lt;/h1&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tornado&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;web&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InsertInDatabaseRequestHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RequestHandler&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mapper&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mapper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mapper&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;entity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_create_object_from_arguments&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mapper&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_create_object_from_arguments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c"&gt;#...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;This is the web handler.  It receives a POST request with some arguments, builds
an object and pass it to the insert method of mapper instance variable.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tornado&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;web&lt;/span&gt;

&lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;connection_to_database&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;application&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;/element&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;InsertInDatabaseRequestHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;mapper&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EntityMapper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;
&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;This is the application creation.  It maps a URL with a piece of code.&lt;/p&gt;

&lt;p&gt;With this code &lt;a href="http://www.tornadoweb.org"&gt;Tornado&lt;/a&gt; is going to give us a nice way for performing
Dependency Injection.&lt;/p&gt;

&lt;h1&gt;The magic&lt;/h1&gt;

&lt;p&gt;So we start our cool application and we receive a POST request, next the post method in
InsertInDatabaseRequestHandler is executed, then an entity object is built and passed
to insert method in self.mapper and &amp;hellip; CRASH!!&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="pytb"&gt;&lt;span class="gt"&gt;Traceback (most recent call last):&lt;/span&gt;
  File &lt;span class="nb"&gt;&amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;&lt;/span&gt;, line &lt;span class="m"&gt;2&lt;/span&gt;, in &lt;span class="n"&gt;post&lt;/span&gt;
&lt;span class="gr"&gt;AttributeError&lt;/span&gt;: &lt;span class="n"&gt;&amp;#39;InsertInDatabaseRequestHandler&amp;#39; object has no attribute &amp;#39;mapper&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Why does this never happen?&lt;/p&gt;

&lt;p&gt;This is because every &lt;a href="http://www.tornadoweb.org/documentation/web.html#request-handlers"&gt;web.RequestHandler&lt;/a&gt; in &lt;a href="http://www.tornadoweb.org"&gt;Tornado&lt;/a&gt; has an &lt;a href="http://www.tornadoweb.org/documentation/web.html#tornado.web.RequestHandler.initialize"&gt;initialize&lt;/a&gt;
method that is executed as &lt;a href="http://www.tornadoweb.org/documentation/_modules/tornado/web.html#RequestHandler"&gt;last step&lt;/a&gt; in &lt;a href="http://www.tornadoweb.org/documentation/web.html#request-handlers"&gt;web.RequestHandler&lt;/a&gt;
constructor and receives the kwargs dictionary sent to &lt;a href="http://www.tornadoweb.org/documentation/web.html#tornado.web.URLSpec"&gt;web.url&lt;/a&gt; constructor
as keyed arguments.&lt;/p&gt;

&lt;p&gt;In other words, we are able to inject the dependencies of each &lt;a href="http://www.tornadoweb.org/documentation/web.html#request-handlers"&gt;web.RequestHandler&lt;/a&gt; subclass
through its &lt;a href="http://www.tornadoweb.org/documentation/web.html#tornado.web.RequestHandler.initialize"&gt;initialize&lt;/a&gt; method.&lt;/p&gt;

&lt;p&gt;Quite simple, isn&amp;rsquo;t it?  Were you expecting arcane magic or complex techniques?&lt;/p&gt;

&lt;h1&gt;How can this pattern help us to write clean code?&lt;/h1&gt;

&lt;p&gt;In first place, every class has an unique responsibility, a unique reason to
change.  We are talking about cohesion and orthogonality, because all work related with database
is in the EntityMapper class and the responsibility for dealing with HTTP is in
the RequestHandler.  Perhaps some of you are thinking about the S in
&lt;a href="http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)"&gt;SOLID&lt;/a&gt; (Single Responsibility Principle).&lt;/p&gt;

&lt;p&gt;In second place, I&amp;rsquo;m able to choose among multiple implementations of a given
dependency at runtime.  If we are a bit smart, we will see the D in
&lt;a href="http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)"&gt;SOLID&lt;/a&gt; (Dependency Inversion).&lt;/p&gt;

&lt;p&gt;Dependency Inversion states that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High-level modules should not depend on low-level modules. Both should depend on abstractions.&lt;/li&gt;
&lt;li&gt;Abstractions should not depend upon details. Details should depend upon abstractions.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Do you see the abstraction?  Yes, the &lt;a href="http://martinfowler.com/eaaCatalog/dataMapper.html"&gt;EntityMapper class&lt;/a&gt;, and perhaps some of
you remember from &lt;a href="http://martinfowler.com/books.html#eaa"&gt;P of EAA book&lt;/a&gt;.  The main advantage is that I didn&amp;rsquo;t write anything
about the database, I could choose among various strategies: Plain Files, &lt;a href="http://sqlalchemy.org"&gt;SQLAlchemy&lt;/a&gt;, &lt;a href="http://redis.io"&gt;Redis&lt;/a&gt;,
&lt;a href="http://mongodb.org"&gt;MongoDB&lt;/a&gt; or some mix, have you heard about &lt;a href="http://martinfowler.com/bliki/PolyglotPersistence.html"&gt;Polyglot Persistence&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Consequently, I can write testable code. But this a topic for another post :)&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/wjcTmfET750" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2011/11/30/dependency-injection-with-tornado/</feedburner:origLink></entry>
 
 <entry>
   <title>Trying Twitter</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/NRrJG6B52jk/" />
   <updated>2009-09-13T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2009/09/13/trying-twitter</id>
   <content type="html">&lt;p&gt;Although I'm not a fan of this stuff, I decided to give it a try:  &lt;a href="http://twitter.com/nestorsalceda"&gt;My twitter account&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; See you there ! :D&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/NRrJG6B52jk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2009/09/13/trying-twitter/</feedburner:origLink></entry>
 
 <entry>
   <title>Several updates.</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/v8cHjHPHdvM/" />
   <updated>2009-09-02T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2009/09/02/several-updates</id>
   <content type="html">&lt;p&gt;Well, the 8th of January looks so far.  That was the last time I wrote!&lt;/p&gt;

&lt;p&gt;In fact, I hadn't a lot of spare time, and I'm getting involved in some
uba-spiff stuff.  In the work, I'm improving my C/C++ skills, and I spend some
time writting some Ruby and Python (and looking a bit to IronPython too) code
too :)  I'm also getting involved with &lt;a href="http://www.agile-spain.com"&gt;Agile Spain Community&lt;/a&gt; where I've found some cool colleagues.&lt;/p&gt;

&lt;p&gt;Sadly, I haven't enough spare time to spend with my contributions to &lt;a href="http://www.mono-project.com"&gt;Mono Project&lt;/a&gt;, but I'd like to show some stuff.  I started a &lt;a href="http://gitorious.org/gendarme-templates-for-monodevelop"&gt;repo&lt;/a&gt; in &lt;a href="http://www.gitorious.org"&gt;Gitorious&lt;/a&gt; with some MonoDevelop templates for developing rules for Gendarme (it's in a really alpha state
!!).&lt;/p&gt;

&lt;p&gt; I hope find more spare time in order to continue contributing, and writting
several new posts :P  And I'm thinking about creating a twitter account &lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/v8cHjHPHdvM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2009/09/02/several-updates/</feedburner:origLink></entry>
 
 <entry>
   <title>Wind of change</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/uHvxhr4nCss/" />
   <updated>2009-01-08T00:00:00+01:00</updated>
   <id>http://nestor.babuine.net/2009/01/08/wind-of-change</id>
   <content type="html">&lt;p&gt;I'm not used to write about me in my blog, but this time is different.&lt;/p&gt;

&lt;p&gt;My life is gonna to change now.  Several months ago, I decided to decrease my
study time, and start working, perhaps change the place where I used to live in.
Now it's the time.&lt;/p&gt;

&lt;p&gt;After looking for a job quietly, I've found a job in a &lt;a href="http://www.taric.es"&gt;company&lt;/a&gt; (or &lt;a href="http://www.abstra.cc"&gt;two&lt;/a&gt;) which looks really nice, and today
I've received the last instructions.  I will start the 19th of January.  I never
am scared about the changes, nor this time that accept the job implies move my
living place to Madrid.&lt;/p&gt;

&lt;p&gt;I feel I'm going to start a new chapter in my own book, a new life, new
challenges, new colleagues, new place, new job...  But I'm proud of myself,
because I was a bit disgusted with my studies (be careful, I'll continue
studying in the university, although it's a bit boring :P) and I decided change
that; and I can say (in this moment) I have achieved it, and I'm excited and
really happy.&lt;/p&gt;

&lt;p&gt;However, I start a new chapter; it will contain a lot of references to the
previous one.  I will continue my university studies (my second degree), I will
continue contributing with &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt;,  I
will come back to visit my famliy and I continue keeping the relationships with
my dear friends and colleagues.&lt;/p&gt;

&lt;p&gt;Perhaps a bit philosophical phrase could be:&lt;/p&gt;

&lt;blockquote&gt;
The past escaped you can't do anything for that, it reflects your present.  But won't exist the future if you are walking backwards.
&lt;/blockquote&gt;
&lt;p&gt;
Just listen to the wind ...
&lt;/p&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/57CzNqgm8Fc&amp;hl=es&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/57CzNqgm8Fc&amp;hl=es&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/uHvxhr4nCss" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2009/01/08/wind-of-change/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme and NAnt integration.</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/ArJViy1oQCA/" />
   <updated>2008-10-23T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2008/10/23/gendarme-and-nant-integration</id>
   <content type="html">&lt;p&gt; Yesterday afternoon I was working in &lt;a href="http://nant.sourceforge.net"&gt;NAnt&lt;/a&gt; and &lt;a href="http://www.mono-project.com/Gendarme"&gt;Gendarme&lt;/a&gt;, and I published a piece of code that allows run &lt;a href="http://www.mono-project.com/Gendarme"&gt;Gendarme&lt;/a&gt; in &lt;a href="http://nant.sourceforge.net"&gt;NAnt&lt;/a&gt;, with a more sophisticated syntax than using exec tag.  You can find it in the &lt;a href="http://groups.google.com/group/Gendarme"&gt;Gendarme Google Group&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt; I would like to share with you a little screencast.&lt;/p&gt;

&lt;div class='video'&gt;
&lt;iframe src="http://player.vimeo.com/video/31873824?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="800" height="600" frameborder="0" webkitAllowFullScreen allowFullScreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;I've done showing how  &lt;a href="http://nant.sourceforge.net"&gt;NAnt&lt;/a&gt; executes &lt;a href="http://www.mono-project.com/Gendarme"&gt;Gendarme&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;p&gt;PS.- Thanks to &lt;a href="http://garuma.wordpress.com"&gt;Garuma&lt;/a&gt; for his post about Quick and Dirty solution for the wordpress posts!!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/ArJViy1oQCA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/10/23/gendarme-and-nant-integration/</feedburner:origLink></entry>
 
 <entry>
   <title>Do you imagine Gendarme documentation in Monodoc?</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/aXNVKTFoXBk/" />
   <updated>2008-10-16T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2008/10/16/do-you-imagine-gendarme-documentation-in-monodoc</id>
   <content type="html">&lt;p&gt;As all people loves screenshots (me too) I would like to share the stuff I'm
cooking now :)&lt;/p&gt;

&lt;a href='/images/gendarme_and_monodoc.png' title='Monodoc showing Gendarme Rules'&gt;&lt;img src='/images/gendarme_and_monodoc.png' alt='Monodoc showing Gendarme Rules' width="100%"/&gt;&lt;/a&gt;

&lt;p&gt;It still needs a bit of autotools love, but enjoy the screenshot :)&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/aXNVKTFoXBk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/10/16/do-you-imagine-gendarme-documentation-in-monodoc/</feedburner:origLink></entry>
 
 <entry>
   <title>debug_mode=ON, social network for developers</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/BYySoywp1_I/" />
   <updated>2008-09-30T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2008/09/30/debug_modeon-social-network-for-developers</id>
   <content type="html">&lt;p&gt;Several days ago, we and some old colleagues created the debug_mode=ON
project.  Please, let me post the announcement:&lt;/p&gt;

&lt;p&gt;I’m happy to announce the creation of a social network in Spanish for
developers, the web is &lt;a href="http://www.debugmodeon.com"&gt;http://debugmodeon.com&lt;/a&gt;. For the
moment you can write articles, rate them, comment an article and create groups,
each group has a forum and the articles can be associated with the groups.&lt;/p&gt;

&lt;p&gt;The user is the most important in our portal, for this reason a user can &lt;a
	href="http://debugmodeon.com/item/5674/como-anadir-adsense-a-tus-articulos"&gt;&lt;strong&gt;earn
		money&lt;/strong&gt;&lt;/a&gt; publishing articles, you only need your
Google Adsense id.&lt;/p&gt;

&lt;p&gt;We have created &lt;a href="http://www.debugmodeon.com"&gt;debug_mode=ON&lt;/a&gt; based on the idea of the ton of different technologies that a developer can learn today. So, a user can creates articles about &lt;a href="http://debugmodeon.com/group/mono"&gt;Mono&lt;/a&gt; or Cobol, about &lt;a href="http://debugmodeon.com/group/metodologias-agiles"&gt;Agile methodologies&lt;/a&gt;, SEO, design patterns, or how to do anything. The groups were created with the idea of debate around a concrete subject or a general one (depending the group) all around the them of computers.&lt;/p&gt;

&lt;p&gt;To do the site we used Python, it’s running on the service &lt;a href="http://appengine.google.com/"&gt;Google App Engine&lt;/a&gt;. We licensed our code under &lt;a href="http://en.wikipedia.org/wiki/Affero_General_Public_License"&gt;Affero GPL&lt;/a&gt;, so our code is Open Source.&lt;/p&gt;

&lt;p&gt;debug_mode=ON is a beta version, we’ve opened a thread to get your feedback, ¡all the opinions are welcome!.&lt;/p&gt;

&lt;p&gt;You can read the offical announce &lt;a href="http://debugmodeon.com/item/16489/que-es-debug-mode-on"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/BYySoywp1_I" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/09/30/debug_modeon-social-network-for-developers/</feedburner:origLink></entry>
 
 <entry>
   <title>GSoC ended!</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/2neCadYXmgQ/" />
   <updated>2008-08-26T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2008/08/26/gsoc-ended</id>
   <content type="html">&lt;p&gt;
Well, a week has passed since the Summer of Code 2008 finished and I haven't
wrote anything yet mainly because I took some holidays :)  Now, with my fully
charged batteries I can write a little summary and show some stuff I've
done.&lt;/p&gt;

&lt;p&gt;I will start by the beginning :P&lt;/p&gt;

&lt;p&gt;There are new rules:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Avoid Calling Problematic Methods [IN TRUNK]&lt;/li&gt;
	&lt;li&gt;Attribute String Literals Should Parse Correctly [IN TRUNK]&lt;/li&gt;
	&lt;li&gt;Provide Correct Arguments To Formatting Methods [IN TRUNK]&lt;/li&gt;
	&lt;li&gt;Declare Event Handlers Correctly&lt;/li&gt;
	&lt;li&gt;Instantiate Argument Exception Correctly [IN TRUNK]&lt;/li&gt;
	&lt;li&gt;Call Base Methods On ISerializable Types [IN TRUNK]&lt;/li&gt;
	&lt;li&gt;Implement ISerializable Correctly [IN TRUNK]&lt;/li&gt;
	&lt;li&gt;Mark All NonSerializable Fields [IN TRUNK]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; There are 7 new rules in the SVN and the other is in the mono-soc-2008 svn,
because I want review it in order to avoid false positives and commit code that
works :) Almost of them, are rules which deals with the implementation and I
think they are more useful to the other mono developers.&lt;/p&gt;

&lt;p&gt;In the second place, I should say something about the reporter.&lt;/p&gt;

&lt;p&gt;The reporter is a tool which takes the gendarme reports, in xml format.  The
report is passed to a pipeline (you can write your own!) and the pipeline
applies some actions (you can write your owns too!) to the input and the input
is transformed to other documents.  Let me show you an example:&lt;/p&gt;

&lt;p&gt;You runs gendarme against the corlib, then a report file is generated.  You
take the reporter and can generate a master index report or you can filter the
defects per severity or ...&lt;/p&gt;

&lt;p&gt;And in the third place, I automated the report generation and publication with a little bash script (which needs a bit more of love).  The script runs gendarme, and pass the output to the report and I publish the results (more or less) frequently, and you can see a little example in: &lt;a href="http://www.babuine.net/gendarme-reports/2.0-reports/08-18-2008/classlib/master-index.xml"&gt;The classlib&lt;/a&gt; and &lt;a href="http://www.babuine.net/gendarme-reports/2.0-reports/08-18-2008/tools/master-index.xml"&gt;the tools&lt;/a&gt;.  It's a great chance for the newcomers for getting involved in the mono development :)&lt;/p&gt;

&lt;p&gt;And this week is the Novell's Hack Week, and I hope get some time in order to talk and code with &lt;a href="http://pages.infinit.net/ctech/poupou.html"&gt;Sebastien&lt;/a&gt;, and I'm sure we will have more cool news :)&lt;/p&gt;

&lt;p&gt;Hope you like all the news!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/2neCadYXmgQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/08/26/gsoc-ended/</feedburner:origLink></entry>
 
 <entry>
   <title>GSoC and Gendarme progress</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/QVQbdNN7vaw/" />
   <updated>2008-07-23T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2008/07/23/gsoc-and-gendarme-progress</id>
   <content type="html">&lt;p&gt; It was a lot of time since I blogged for the last time, and I should write some
news:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gendarme has reached the 0.2 release.  You can read the &lt;a href="http://pages.infinit.net/ctech/20080716-1115.html"&gt;release notes&lt;/a&gt; if you want more information.&lt;/li&gt;
&lt;li&gt;I have passed the mid-term evaluation and I will continue adding rules, fixes, trimming down false positives ... &lt;/li&gt;
&lt;li&gt;I'm generating with more or less frequence, some gendarme reports applied to the base class library and for other mono tools.  This help me (I hope others too) for write new rules and for trimming down false positives.  When I start to publish them daily I will put the link here :)&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/QVQbdNN7vaw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/07/23/gsoc-and-gendarme-progress/</feedburner:origLink></entry>
 
 <entry>
   <title>Summer of Code and Gendarme</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/7umaGANG4eE/" />
   <updated>2008-06-04T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2008/06/04/summer-of-code-and-gendarme</id>
   <content type="html">&lt;p&gt;Google Summer of Code started the previous week, I can't believe I haven't
blogged anything yet about the topic.&lt;/p&gt;

&lt;p&gt;Let me talk a little about me,  my name is Néstor Salceda and I'm studying
Computer Science and, perhaps, someone will known me yet because this is my
second year as student in the Summer of Code, the first year was wonderful and I
decided apply other time :)&lt;/p&gt;

&lt;p&gt;This year, my goal is to enhace &lt;a href="http://www.mono-project.com/Gendarme"&gt;Gendarme&lt;/a&gt; in order to be more useful to the &lt;a href="http://www.mono-project.com"&gt;Mono Project&lt;/a&gt; itself.  For achieving this goal I have identified 4 key tasks:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Apply the existing rules.&lt;/li&gt;
	&lt;li&gt;Write new rules, putting special effort in write useful rules for implementing the class libraries.&lt;/li&gt;
	&lt;li&gt;Apply the new rules to the class libraries.&lt;/li&gt;
	&lt;li&gt;Automated Gendarme Reports generation and publication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And finally, good luck for all students, and thanks to Mono Project for the opportunity :)&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/7umaGANG4eE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/06/04/summer-of-code-and-gendarme/</feedburner:origLink></entry>
 
 <entry>
   <title>Random thoughts about the Gendarme Rule Day</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/ptAVi2W2X_Y/" />
   <updated>2008-04-27T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2008/04/27/random-thoughts-about-the-gendarme-rule-day</id>
   <content type="html">&lt;p&gt;Well, I'm proud to say that the first edition of the Gendarme Rule Day has
been a great experience and it ended successfully.&lt;/p&gt;

&lt;p&gt;Also give a &lt;strong&gt;big thank&lt;/strong&gt; to all people that was yesterday in
the IRC with us (you rocks dudes!).  Thanks for your time, thanks for your
ideas, thanks for your presence, thanks for the thanks, thanks for the laughings
... thanks for all.&lt;/p&gt;

&lt;h3&gt;Numbers:&lt;/h3&gt;

&lt;p&gt;In this edition, if my review doesn't fail, we have 10 more rules and 3 nice enhacements to existing rules.  And a lot of new ideas for great features.  And also we have new friends and 2 new rule makers: Cedric Vivier and &lt;a href="http://knocte.blogspot.com/"&gt;Andrés&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Next steps:&lt;/h3&gt;

&lt;p&gt; Well, by myself, I should start finishing several tasks I had started in the past:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gendarme and NAnt integration&lt;/li&gt;
&lt;li&gt;Message Chains Smell &lt;/li&gt;
&lt;li&gt;A new way to express custom parameters to the rules in the XML file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And for finishing, I'm proud of being part of the &lt;a href="http://www.mono-project.com/Gendarme"&gt;Gendarme&lt;/a&gt; Team, thanks mates for the &lt;a href="http://pages.infinit.net/ctech/20080425-0920.html"&gt;reminders&lt;/a&gt;, thanks for your help planning, giving nice tips, staying there and writting &lt;a href="http://anonsvn.mono-project.com/viewcvs/trunk/mono-tools/gendarme/rules/Gendarme.Rules.Performance/UseTypeEmptyTypesRule.cs?view=markup"&gt; new&lt;/a&gt; rules.  All I can to say is that we can't stop rocking ;)&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/ptAVi2W2X_Y" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/04/27/random-thoughts-about-the-gendarme-rule-day/</feedburner:origLink></entry>
 
 <entry>
   <title>April 26th: You Rule Day!</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/goMucQ2xl24/" />
   <updated>2008-04-16T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2008/04/16/april-26th-you-rule-day</id>
   <content type="html">&lt;p&gt;The Gendarme team is proud to announce the first edition of the Gendarme Rule Day.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you have a nice idea for a rule which you'd like to &lt;a href="http://groups.google.com/group/gendarme/web/how-to-write-cool-rules"&gt;write&lt;/a&gt; or discuss.&lt;/li&gt;
&lt;li&gt;Or if you &lt;a href="http://groups.google.com/group/gendarme/web/rules"&gt;don't have a specific idea&lt;/a&gt; but you'd like to try Gendarme and write a new rule.&lt;/li&gt;
&lt;li&gt;Or if you'd like improve an existing rule.&lt;/li&gt;
&lt;li&gt;Or if you want to learn more about Gendarme ecosystem or Gendarme developer's and fans ... &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please join us April 26th in the #gendarme IRC channel (in irc.gimp.org) for
an interactive, collaborative and intense rule writing effort.&lt;/p&gt;

&lt;p&gt;We will be there with you!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/goMucQ2xl24" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/04/16/april-26th-you-rule-day/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme and NAnt</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/j4FX-c_cHWk/" />
   <updated>2008-03-01T00:00:00+01:00</updated>
   <id>http://nestor.babuine.net/2008/03/01/gendarme-and-nant</id>
   <content type="html">&lt;p&gt;Yesterday night, before a week without any free time, I decided spent some
time on Gendarme.&lt;/p&gt;

&lt;p&gt;I decided spent some time on integration tasks with others applications (NAnt, XBuild, CC.NET ...) You can read the &lt;a href=" http://groups.google.com/group/gendarme/browse_thread/thread/81384cc9adc8ef9d"&gt;thread&lt;/a&gt; on &lt;a href="http://groups.google.com/group/Gendarme"&gt;Gendarme Google Group&lt;/a&gt;.  And I started writting a Gendarme Task for &lt;a href="http://nant.sourceforge.net"&gt;NAnt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;By the moment, as I can't capture all in an screenshot, you can see it in
action in a screencast:&lt;/p&gt;

&lt;div class='video'&gt;
&lt;iframe src="http://player.vimeo.com/video/31873885?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="800" height="600" frameborder="0" webkitAllowFullScreen allowFullScreen&gt;&lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;Note that it's only a prototype, and is under heavy development and it's far
away to be a usable stuff (by the moment).&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/j4FX-c_cHWk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/03/01/gendarme-and-nant/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme.Framework.Rocks Rocks!</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/hrSUJ9PLAFM/" />
   <updated>2008-01-17T00:00:00+01:00</updated>
   <id>http://nestor.babuine.net/2008/01/17/gendarmeframeworkrocks-rocks</id>
   <content type="html">&lt;p&gt; In the Mono Summit the Gendarme Team discussed about the features for the next version.  We have a lot of new ideas for improve the framework.  The main targets, for the framework, are the following:&lt;p&gt;
&lt;ul&gt;
	&lt;li&gt;Make simpler write rules, and easier to understand.&lt;/li&gt;
	&lt;li&gt;Make rules uniform, reduce code duplication, easy testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These topics are a bit abstract and is a hard task get it completed.  But I
believe this is the first step for achieve these topics.&lt;/p&gt;

&lt;p&gt;The main problem when we are writting new rules, is the code duplication.
There are several things we should prepare before write the rule logic.  By
example, when a rule is applied?  We have a lot of scenarios before appliying
the rule, if the method is anonymous doesn't make sense check about the naming
conventions, or if a rule must check only the setters.  And is always the same
code, repeated one time, other time, another time ... &lt;/p&gt;

&lt;p&gt;It's easy to understand that this code should be extracted to other class
but, where should we put this code?  The first impression was create static
helpers classes, then you can get this code in the rules:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="csharp"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;MessageCollection&lt;/span&gt; &lt;span class="nf"&gt;CheckMethod&lt;/span&gt; &lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;MethodHelpers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsSetter&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;runner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RuleSuccess&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;//Imagine more rule logic&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;It's okey, but if we use static classes with static methods and thinking a bit ... Eureka! We can use extension methods to Cecil types, following the &lt;a href="http://evain.net/blog/"&gt;JB's&lt;/a&gt; &lt;a href="http://www.mono-project.com/Rocks"&gt;Mono.Rocks&lt;/a&gt;, and the rules looks like:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="csharp"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;MessageCollection&lt;/span&gt; &lt;span class="nf"&gt;CheckMethod&lt;/span&gt; &lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsSetter&lt;/span&gt; &lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;runner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RuleSuccess&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;//Imagine more rule logic&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Beautiful code, isn't it?&lt;/p&gt;

&lt;p&gt;Then, &lt;a href="http://pages.infinit.net/ctech/poupou.html"&gt;Sebastien&lt;/a&gt; and
GHOP participants (Daniel Abramov, Adrian Tsai and Andreas Noever) implemented
some of these Rocks (Good work guys !).  The Rocks have unit tests and
documentation, and we can use it for concentrate our effort writting more
complete rules (click the image for a bigger size).&lt;/p&gt;

&lt;p&gt;Finally, as all people loves screenshots, this is one screenshot of Monodoc
showing the rocks documentation:&lt;/p&gt;

&lt;a href='/images/monodoc-rocks.png' title='Monodoc and Rocks'&gt;&lt;img width="100%" src='/images/monodoc-rocks.png' alt='Monodoc and Rocks' /&gt;&lt;/a&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/hrSUJ9PLAFM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2008/01/17/gendarmeframeworkrocks-rocks/</feedburner:origLink></entry>
 
 <entry>
   <title>After the Mono Summit 07</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/BI3dwgfiAq0/" />
   <updated>2007-12-04T00:00:00+01:00</updated>
   <id>http://nestor.babuine.net/2007/12/04/after-the-mono-summit-07</id>
   <content type="html">&lt;p&gt;Wonderful, incredible, fantastic, amazing... I haven't enough words for
describing my first Mono Summit.&lt;/p&gt;

&lt;p&gt;The first day, I was really excited and a bit nervous because I didn't know anyone, but quickly I found &lt;a href="http://pages.infinit.net/ctech/poupou.html"&gt;Sebastien&lt;/a&gt; and &lt;a href="http://evain.net/blog/"&gt;JB&lt;/a&gt; and I sat by them (thanks you for
all guys!) and we started talking, and hacking.&lt;/p&gt;

&lt;p&gt;I also can see other people from the Mono-Hispano community (Andres, Carlos, Juan Ramon ...) but I missed &lt;a href="http://straybirds130.blogspot.com/"&gt;Marcos&lt;/a&gt; a mate from the
GSoC, I didn't meet you, but I hope the next time we will meet.&lt;/p&gt;

&lt;p&gt;All talks also was really interesting: MonoDevelop, NUnit, Boo, Db4o, C# 3.0,
Moonlight, Build Service, Boxerp, Debugger ...&lt;/p&gt;

&lt;p&gt;Summarizing, the best: all the people.  Thanks you very much!&lt;/p&gt;

&lt;p&gt;Finally the last day, we discussed the new features for the next Gendarme release, you can see it &lt;a href="http://groups.google.com/group/gendarme/web/roadmap"&gt;here&lt;/a&gt;.
There are some killer features and a lot of new ideas.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/BI3dwgfiAq0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/12/04/after-the-mono-summit-07/</feedburner:origLink></entry>
 
 <entry>
   <title>More Gendarme progress</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/zMGF1OhXHao/" />
   <updated>2007-11-22T00:00:00+01:00</updated>
   <id>http://nestor.babuine.net/2007/11/22/more-gendarme-progress</id>
   <content type="html">&lt;p&gt;Since the last post talking about the project files for MonoDevelop, there
are some progress that should be mentioned:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;All rules are fully documented.  You can see it in &lt;a href="http://www.mono-project.com/Gendarme"&gt;Gendarme Main Page&lt;/a&gt; and in &lt;a href="http://groups.google.com/group/gendarme/web/rules-documentation"&gt;Gendarme Google Group&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;We have fixed some bugs in the rules.&lt;/li&gt;
        &lt;li&gt;Added the Moonlight profile.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the next week is the &lt;a href="http://www.mono-project.com/MonoSummit2007"&gt;Mono Summit 2007&lt;/a&gt;.  I'm really excited, because I have the chance to meet face of face to all the Mono Team (and my Gendarme colleagues), I can talk with them, I can learn a lot of things from them,  improve and perhaps hack together.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/zMGF1OhXHao" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/11/22/more-gendarme-progress/</feedburner:origLink></entry>
 
 <entry>
   <title>MonoDevelop project files for Gendarme.</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/a6lIa5qmyGM/" />
   <updated>2007-10-09T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/10/09/monodevelop-project-files-for-gendarme</id>
   <content type="html">&lt;p&gt;This last week, we have been improving the build system and updating the
project files for MonoDevelop and Visual Studio.  This means, that you can use
MonoDevelop or VS for explore the project and also for writting new rules.
However this improvement is still under heavy development, you can see an
screenshot:&lt;/p&gt;

&lt;a href='/images/gendarme-md.png'&gt;&lt;img src='/images/gendarme-md.png' width="100%" alt='Gendarme MonoDevelop' /&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://pages.infinit.net/ctech/poupou.html"&gt;Sebastien&lt;/a&gt; has merged more rules from the GSoC 2007 (from &lt;a href="http://nidhi24.wordpress.com/"&gt;Nidhi&lt;/a&gt; and &lt;a href="http://groups.google.com/group/mono-soc-2007/web/gendarme---meta-project---lukasz-knop"&gt;Lukasz&lt;/a&gt;).&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/a6lIa5qmyGM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/10/09/monodevelop-project-files-for-gendarme/</feedburner:origLink></entry>
 
 <entry>
   <title>Some Gendarme Progress</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/rK1jE7FEgsw/" />
   <updated>2007-10-02T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/10/02/some-gendarme-progress</id>
   <content type="html">&lt;p&gt;Well, since the Pencils Down Report for the Summer of Code I haven't written
anything about Gendarme.  I have continued contributing, as I wished, and
there's time for write a bit about the progress.&lt;/p&gt;

&lt;p&gt;The rules for my GSoC has been merged, and there are more improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Gendarme.Framework.dll to be reusable with new runners and pkg-config.&lt;/li&gt;
&lt;li&gt;Support inclusion and exclusion of rules.&lt;/li&gt;
&lt;li&gt;Added a new profile.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step by step, the first feature allows developers to compile their runners
with the -pkg:gendarme-framework modifiers to [g]mcs.&lt;/p&gt;

&lt;p&gt;The second one, allows users to create their custom rulesets and adapt the
existing ones to their needs.  By example:  Imagine a company that uses Gendarme
to check their code.  Then they can choose the rules that they apply.  &lt;/p&gt;

&lt;p&gt;If, by example, you like check the CodeDuplicatedInSameClass smell and
AvoidLongMethods smell, but you doesn't like apply the
AvoidSpeculativeGenerality you could do it simply:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="xml"&gt;&lt;span class="nt"&gt;&amp;lt;ruleset&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;custom&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;include&lt;/span&gt;&lt;span class="err"&gt;=&amp;quot;CodeDuplicatedInSameClassRule&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="err"&gt;AvoidLongMethodsRule&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;from=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Gendarme.Rules.Smells.dll&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ruleset&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;And the third one, is the Mono BCL profile.  This profile is intended to use
with applications or libraries where the public API isn't under our control, by
example Mono.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/rK1jE7FEgsw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/10/02/some-gendarme-progress/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Pencils Down Status Report.</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/9xE_Pzrp-Ng/" />
   <updated>2007-08-21T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/08/21/gendarme-tasks-pencils-down-status-report</id>
   <content type="html">&lt;p&gt;Sadly, the Summer of Code 2007 has (quasi) finished.  This is the time for
fill the surveys and check the code.&lt;/p&gt;

&lt;p&gt;Personally I have enjoyed a lot contributing with this project and I would
like continue contributing with this project, there are some work to do and a
lot of rules for implement and I would like continue working in this area.&lt;/p&gt;

&lt;p&gt;A briefly summary of my contributions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A rule for don't swallow errors catching non-specific exceptions.&lt;/li&gt;
&lt;li&gt;A rule for check that Attributes end with Attribute suffix.&lt;/li&gt;
&lt;li&gt;A rule for check that enums doesn't end with enum or flags suffix.&lt;/li&gt;
&lt;li&gt;A rule for check that a enum flags uses a plural name.&lt;/li&gt;
&lt;li&gt;A rule for check that a enum uses a singular name unless are flags rule.&lt;/li&gt;
&lt;li&gt;A rule for check for unused parameters.&lt;/li&gt;
&lt;li&gt;Two rule for check that doesn't exist code duplicated.&lt;/li&gt;
&lt;li&gt;A rule for check the class length.&lt;/li&gt;
&lt;li&gt;A rule for check the methods length.&lt;/li&gt;
&lt;li&gt;A rule for check long parameters list.&lt;/li&gt;
&lt;li&gt;A rule for check the presence of speculative generality.&lt;/li&gt;
&lt;li&gt;A little gui for a cecil based tool for count and get some numbers for the classes: Number of methods, number of fields, number of lines per method ...&lt;/li&gt;
&lt;li&gt;A patch for gendarme for allow set properties in the rules.xml file.&lt;/li&gt;
&lt;li&gt;A little patch for Cecil.FlowAnalysis for allow try - catch -finally blocks in the flow analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, I have learnt a lot of stuff:  I have learnt about FOSS projects, how
these projects works, I have learnt about Cecil and Gendarme, I have learnt C#
and CIL, it's amazing.&lt;/p&gt;

&lt;p&gt;I want thank all people that helped me, specially &lt;a href="http://pages.infinit.net/ctech/poupou.html"&gt;Sebastien&lt;/a&gt;, my mentor, for his patience everyday, his coding lessons, his help, his comments ... I also want thank all people that has helped me, &lt;a href="http://monotorrent.blogspot.com/"&gt;Alan&lt;/a&gt;, &lt;a href="http://gameweld-soc.blogspot.com/"&gt;Chris&lt;/a&gt;, &lt;a href="http://evain.net/blog/"&gt;JB Evain&lt;/a&gt;, and my colleagues working on more Gendarme stuff, Nidhi and Lukasz.  And I'm sure that I will forget some names, please apologize me.  Thanks to all.&lt;/p&gt;

&lt;p&gt;And finally, thanks to the mono project for accept my application and to
Google for the Summer of Code.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/9xE_Pzrp-Ng" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/08/21/gendarme-tasks-pencils-down-status-report/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #12</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/lEtV3T1armM/" />
   <updated>2007-08-17T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/08/17/gendarme-tasks-weekly-status-report-12</id>
   <content type="html">&lt;h1&gt;This is the status report for August 12 - August 17.&lt;/h1&gt;

&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;Following the Sebastien's wish, I have implemented the Avoid Speculative
Generality Rule, the rule is now for the reviewing process.  This rule is a
large rule, because I should check several things.&lt;/p&gt;

&lt;p&gt;The rule will check for abstract classes without responsability, unnecesary
delegation and I have a small solution for the problem with the duplicated
violations.  I'm going to explain the problem, for example, in the speculative
generality smell, I have some signs for detect this smell, one of them is that
exists methods with unused parameters (generally reserved parameters), then some
weeks ago, I wrote a rule for detect the unused parameters, then I will run
gendarme and I can get 2 errors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The error produced by Avoid Speculative Generality Rule.&lt;/li&gt;
&lt;li&gt;The error produced by the Avoid Unused Parameters Rule.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then, when a detect a fail, the message should be clear and you should find
the error quickly.  If you get 2 messages, produced by the same error you can
get confused with the errors.&lt;/p&gt;

&lt;p&gt;Then, in the CheckType signature I get a TypeDefinition and a Runner.  The
runner contains a property for retrieve the rules applied, then I checked if the
AvoidUnusedParameters rule will be executed (or has been executed), and if the
rule is present I will skip the checking in the Avoid Speculative Generality
rule.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;Sadly,  the Summer of Code starts to end.  I should upload the code, but I
have a little bit of time for writting the next rule, I have posted the
specification for the Avoid Code Duplicated In Sibling Classes.  As I wrote
other rule for check the code duplicated, I only should refactor and get the
rule.&lt;/p&gt;

&lt;h2&gt;Challenges or problems.&lt;/h2&gt;

&lt;p&gt;Nothing special, the problem of the violations has been (half) fixed.&lt;/p&gt;

&lt;h2&gt;Interesting resource.&lt;/h2&gt;

&lt;p&gt;This week, I haven't any interesting resource.&lt;/p&gt;

&lt;p&gt;Finally I want thank Sebastien, for give me advices and recomendations.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/lEtV3T1armM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/08/17/gendarme-tasks-weekly-status-report-12/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #11</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/6haIlmdgjuw/" />
   <updated>2007-08-12T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/08/12/gendarme-tasks-weekly-status-report-11</id>
   <content type="html">&lt;h1&gt;This is the status report for August 6 - August 12.&lt;/h1&gt;

&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;Well, this week I have posted the rule for detect large classes, I have
written it and I have posted for the reviewing.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;The next week I would like continue writting more smells, but I don't know
which smell will be the following.&lt;/p&gt;

&lt;h2&gt;Challenges or problems.&lt;/h2&gt;

&lt;p&gt;This week, &lt;a href="http://pages.infinit.net/ctech/poupou.html"&gt;Sebastien&lt;/a&gt;
and &lt;a href="http://gameweld-soc.blogspot.com/"&gt;Chris&lt;/a&gt; advice me about the
similarities among smells.   By example:  If you have a large class then the
probability of that class contains code duplicated is greater, then you can have
a violation for the large class and other violation for the code
duplication.&lt;/p&gt;

&lt;p&gt;Then the challenge will be determine how I can make sure I report the best /
right rule violation.  This problem is hard to solve, then I will think about
it.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;Yesterday, I saw an e-mail from &lt;a href="http://tirania.org/blog/index.html"&gt;Miguel&lt;/a&gt;, with a really interesting blog, here is the &lt;a href="http://blogs.msdn.com/fxcop/default.aspx"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And, that's all.  Thanks to the people who has write comments to the
rules.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/6haIlmdgjuw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/08/12/gendarme-tasks-weekly-status-report-11/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #10</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/JZy_6rjPakE/" />
   <updated>2007-08-06T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/08/06/gendarme-tasks-weekly-status-report-10</id>
   <content type="html">&lt;h1&gt;This is the status report for July 30 - August 5.&lt;/h1&gt;

&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;Well, after the review process, &lt;a href="http://monotorrent.blogspot.com/"&gt;Alan&lt;/a&gt; suggested me that 10 is a big number for a long parameter list.  &lt;a href="http://gameweld-soc.blogspot.com/"&gt;Chris&lt;/a&gt; also suggested me if there are any way for change values for the rules without recompile.&lt;/p&gt;

&lt;p&gt;Then I presented a solution and I wrote a patch for allow put some parameter
in the gendarme file config.  Then, with the patch you can specify some
parameters for each ruleset, I like the results and the patch is pending for
review.&lt;/p&gt;

&lt;p&gt;I also finished the Avoid Unused Parameters rule.  &lt;a href="http://monotorrent.blogspot.com/"&gt;Alan&lt;/a&gt; suggested this rule in the list, and I liked it.  This is because, sometimes, refactoring and removing some parameters, accidentally, I forgot remove the parameter from the method signature.  This rule will check that you use all parameters in the signature.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;Well, for the next week I have some ideas.  The first will be implement the
message chain smell.  This smell happens when you make a lot of chained calls.
By example:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="csharp"&gt;&lt;span class="n"&gt;Foo&lt;/span&gt; &lt;span class="n"&gt;anObject&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Foo&lt;/span&gt; &lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;anObject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Bar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ApplyBaz&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;otherObject&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;MakeStuff&lt;/span&gt; &lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt; &lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;ToBar&lt;/span&gt; &lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;There are a lot of calls in this line, and you can read more about it in this
&lt;a href="http://www.soberit.hut.fi/mmantyla/BadCodeSmellsTaxonomy.htm"&gt;link&lt;/a&gt;.
Chris has written some code for detect this chains, and I can reuse it.&lt;/p&gt;

&lt;p&gt;There are other options, by example Detect long classes.  This smell a bit
complex to detect, but I believe I can do it.  And with this smell, I have
finished my 4 comples smells, and I can continue with others (Shotgun surgery,
feature envy ...)&lt;/p&gt;

&lt;h2&gt;Challenges or Problems.&lt;/h2&gt;

&lt;p&gt;Nothing special, there was a problem detecting unused parameters.  Specially
with static methods, but I have fixed it and the rule will be reviewed.&lt;/p&gt;

&lt;p&gt;Other challenge was, read, understand and modify the gendarme code; but the
code is really clear and I like it.  I really enjoyed a lot writting the
patch.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;Well, I have written a link some lines before.  You can check it &lt;a href="http://www.soberit.hut.fi/mmantyla/BadCodeSmellsTaxonomy.htm"&gt;here&lt;/a&gt; is another taxonomy for bad smells.&lt;/p&gt;

&lt;p&gt;Finally I want thank, all people that helped me, with ideas, with revisions or with other help.  Specially my mentor, &lt;a href="http://pages.infinit.net/ctech/poupou.html"&gt;Sebastien&lt;/a&gt;, and &lt;a href="http://monotorrent.blogspot.com/"&gt;Alan&lt;/a&gt;, and &lt;a href="http://gameweld-soc.blogspot.com/"&gt;Chris&lt;/a&gt; and &lt;a href="http://evain.net/blog/"&gt;JB Evain&lt;/a&gt; for the corrections and advices in the IRC.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/JZy_6rjPakE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/08/06/gendarme-tasks-weekly-status-report-10/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #9</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/3D3Q1MBNNoU/" />
   <updated>2007-07-27T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/07/27/gendarme-tasks-weekly-status-report-9</id>
   <content type="html">&lt;p&gt;This is the status report for July 20 - July 27.&lt;/p&gt;

&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;This week I have been hunting a bug in the measurement tool.  I have written
some tests and I have detected and fixed it.&lt;/p&gt;

&lt;p&gt;I also take some measures for choose the long parameter list, and I have
decided to use 10 as MaxParameters in the rule.  Personally, I prefer shorter
parameter lists, but for the rule I believe that is a good measure.&lt;/p&gt;

&lt;p&gt;I have sent the rules for the review process.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;For the next week, I will propose new rules.  I like the Alan proposal for
detect unused parameters.  And I would like implement it.&lt;/p&gt;

&lt;p&gt;As this rule is simple, I will propose a new rule for a new smell.&lt;/p&gt;

&lt;h2&gt;Challenges or problems.&lt;/h2&gt;

&lt;p&gt;None, this week I have worked in the tool; and I have detected the bugs and
corrected it.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;Well, I will post a &lt;a href="http://www.gotdotnet.com/Team/FxCop/gotdotnetstyle.aspx?url=FxCop.html"&gt;link&lt;/a&gt; for the FxCorp tool.  There are a lot of useful rules.&lt;/p&gt;

&lt;p&gt;Finally, thank to all people that has commented the rules and suggest me some
features and new rules.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/3D3Q1MBNNoU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/07/27/gendarme-tasks-weekly-status-report-9/</feedburner:origLink></entry>
 
 <entry>
   <title>Measurement Tool Screencast</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/W6CQILBxkto/" />
   <updated>2007-07-23T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/07/23/measurement-tool-screencast</id>
   <content type="html">&lt;p&gt;I have recorded a little screencast for the measurement tool in action.&lt;/p&gt;

&lt;p&gt;Enjoy !&lt;/p&gt;

&lt;div class='video'&gt;
&lt;iframe src="http://player.vimeo.com/video/31873992?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="800" height="600" frameborder="0" webkitAllowFullScreen allowFullScreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/W6CQILBxkto" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/07/23/measurement-tool-screencast/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #8</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/QT5KCBQ5rKo/" />
   <updated>2007-07-20T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/07/20/gendarme-tasks-weekly-status-report-8</id>
   <content type="html">&lt;h1&gt;This is the status report for July 16 - July 20.&lt;/h1&gt;

&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;With a little bit of delayment, I have written a little cecil based tool for
measure the methods and the types.  I need this tool for choose the values for
detect long parameter lists.&lt;/p&gt;

&lt;p&gt;Currently the tool takes measures from types and methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For Types:  Lines per method, parameters per method, maximum lines in a method and maximum parameters in a method.&lt;/li&gt;
&lt;li&gt;For Methods: Lines in a method and number of parameters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will post a screencast on Monday.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;I hope finish the current rule (Detect Long Parameter List) and I will
continue with other smells.&lt;/p&gt;

&lt;h2&gt;Challenges or Problems.&lt;/h2&gt;

&lt;p&gt;None, this is a simple application.  But, if anyone wants suggest me more
interesting measures, I will be glad to read and implement them.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;None, this week I have spent the time writting the application.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/QT5KCBQ5rKo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/07/20/gendarme-tasks-weekly-status-report-8/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #7</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/ZTX64tnetSk/" />
   <updated>2007-07-13T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/07/13/gendarme-tasks-weekly-status-report-7</id>
   <content type="html">&lt;h1&gt;This is the status report for July 9 - July 13.&lt;/h1&gt;

&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;This week, I have quasi finished the rule for detect long methods.  Well, the
rule simply count the IL instructions and compare with a MaxInstructions value.
The big challenge for this rule has been choose the MaxInstruction value, this
is because if you choose a little value you will get a lot of rule violations,
and else if you choose a big value you won't get any violation.  The two
situations are useless.&lt;/p&gt;

&lt;p&gt;As &lt;a href="http://gameweld-soc.blogspot.com/"&gt;Chris Gameweld&lt;/a&gt; suggested
me, I have to take care of the autogenerated methods too.  The first approach
try to find autogenerated methods simply if the IL code doesn't contain cond
branches instructions.  But this pattern isn't always true, by example Stetic
generate a if statement.  Then, I have collected some well known autogenerated
method names, and checking them (and their types) I can know if a method is
autogenerated.&lt;/p&gt;

&lt;p&gt;I only have to check the types, and I will get the rule ready for the
reviewing.&lt;/p&gt;

&lt;p&gt;I also have proposed a new rule for a new smell.  The rule is Detect Long
Parameter List. The rule should check if a method contains a lot of parameters,
and the big challenge will be (also) choose the value for the parameter
numbers.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;Well, I have to finish the rules and go forward with more smells.  I haven't
decided yet what will be the next smell.&lt;/p&gt;

&lt;h2&gt;Challenges or problems.&lt;/h2&gt;

&lt;p&gt;None, for measure the methods I have chosen a little bit more of a screen.  I
have get the magic number rounding up to 170 IL instructions.&lt;/p&gt;

&lt;p&gt;I have to get the upper limit for the long parameter list.  But this time, I
will measure and compare the results with some software metrics, because IMHO I
can get better conclusions.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;I have the same resources that the last week.&lt;/p&gt;

&lt;p&gt;I want to thank to Lukasz Knop and to &lt;a href="http://gameweld-soc.blogspot.com/"&gt;Chris Gameweld&lt;/a&gt; that suggest me measures, and some corner cases.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/ZTX64tnetSk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/07/13/gendarme-tasks-weekly-status-report-7/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #6</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/j6VvJSI0nCo/" />
   <updated>2007-07-09T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/07/09/gendarme-tasks-weekly-status-report-6</id>
   <content type="html">&lt;h1&gt;This is the status report for July-1 to July-8.&lt;/h1&gt;

&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;This week I have finished the first scenario for detect smells in the code.
I have finished the rule for detect code duplicated in same class.  Finally I
have decided don't use Cecil.FlowAnalysis assembly, because with the new
approach I need know only a few details about flowanalysis and I can get
directly with Cecil.  I'm really impressed with Cecil.  Although the rule is
finished, I will improve more the code for detect code duplicated, because is
the core for other two rules: Detect code duplicated in two sibling subclasses,
and detect code duplicated in two unrelated subclasses.&lt;/p&gt;

&lt;p&gt;I also have proposed a new rule for detect a new smell.  The rule should detect long methods, the biggest challenge for this rule will be to choose correctly the size for determine when a method is long.  A few hours ago, &lt;a href="http://gameweld-soc.blogspot.com/"&gt;Chris Gameweld&lt;/a&gt; sent to the group a mail with a cool suggestion.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;Well, the next week I will finish this rule, and I will propose other rules.
I have a lot of smells for detect.&lt;/p&gt;

&lt;h2&gt;Challenges or problems.&lt;/h2&gt;

&lt;p&gt;Yes, the biggest challenge is determine the maximum method size.  By the
moment I have thought of an screen as the reference measure, if the method is
bigger then the rule will warn you.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;Yes, I have a lot of interesting resources.&lt;/p&gt;

&lt;p&gt;For someone that is interested in smells, you can check this &lt;a href="http://sis36.berkeley.edu/projects/streek/agile/bad-smells-in-code.html#Bad+Smells+in+Code+by+Kent+Beck+and+Martin+Fowler"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, you can read some books about, by example:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Refactoring: Improve the design of existing code. In &lt;a href="http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=pd_bbs_1/002-6813491-9936810?ie=UTF8&amp;s=books&amp;qid=1183933528&amp;sr=8-1"&gt;Amazon&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Refactoring to Patterns.  In &lt;a href="http://www.amazon.com/Refactoring-Patterns-Addison-Wesley-Signature-Kerievsky/dp/0321213351/ref=pd_bbs_2/002-6813491-9936810?ie=UTF8&amp;s=books&amp;qid=1183933528&amp;sr=8-2"&gt;Amazon&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Code Complete. Second Edition. In &lt;a href="http://www.amazon.com/Code-Complete-Second-Steve-McConnell/dp/0735619670/ref=pd_bbs_4/002-6813491-9936810?ie=UTF8&amp;s=books&amp;qid=1183933528&amp;sr=8-4"&gt;Amazon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally thank, all people that have written advices, or comments for the
rules.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/j6VvJSI0nCo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/07/09/gendarme-tasks-weekly-status-report-6/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #5</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/eWz7h0o9sa8/" />
   <updated>2007-06-30T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/06/30/gendarme-tasks-weekly-status-report-5</id>
   <content type="html">&lt;h1&gt;This is the status report for June 24 - June 30.&lt;/h1&gt;

&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;This week I have written a little patch for allow try / catch blocks in the Cecil.FlowAnalysis assembly.  I have sent the patch to the &lt;a href="http://lists.ximian.com/pipermail/mono-devel-list/2007-June/023940.html"&gt;mono-devel list&lt;/a&gt;, because I would like know if I'm doing the testcases correctly and separating the blocks well.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;I have seen other way for implement this funcionality, because I have read
about the Exception Handling in the Ecma document for CLI, and I can get a
better implementation.  I would like finish this task on Tuesday, because I'm
spending more time in this task and I am a bit delayed.  I will put all effort
in finish it.&lt;/p&gt;

&lt;h2&gt;Challenges or Problems.&lt;/h2&gt;

&lt;p&gt;This week I haven't a lot of problems, only one; because I don't know where
send the patch.  But Sebastien answered my question quite well.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;Yes, the &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-335.htm"&gt;Ecma-335 document&lt;/a&gt; helped me a lot.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/eWz7h0o9sa8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/06/30/gendarme-tasks-weekly-status-report-5/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks. Weekly Status Report #4</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/6HJprwOimpI/" />
   <updated>2007-06-23T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/06/23/gendarme-tasks-weekly-status-report-4</id>
   <content type="html">&lt;h1&gt;This is the status report for June 18 - June 23&lt;/h1&gt;

&lt;h2&gt;Accomplished this week:&lt;/h2&gt;

&lt;p&gt;This week I have continued with the Code Duplicated smell.  I'm trying detect
duplicated code reading IL instructions and checking against others.  Is a
simple approach and I can detect some code duplicate.  I'm also impressed with
Cecil, it's a great library and I love the Visitor pattern.&lt;/p&gt;

&lt;p&gt;But I'm not happy with the results, because detecting branches is difficult
and I can't detect all code ways.&lt;/p&gt;

&lt;p&gt;By example:  Suppose a simple if statement:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="csharp"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Contains&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;MoreFoo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Remove&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;MoreFoo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;The IL Code generated is the following:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;IL_0000:  ldarg.0
IL_0001:  ldfld class [mscorlib]System.Collections.IList Test.Rules.Smells.ClassWithCodeDuplicated::myList
IL_0006:  ldstr &amp;quot;MoreFoo&amp;quot;
IL_000b:  callvirt instance bool class [mscorlib]System.Collections.IList::Contains(object)
IL_0010:  brfalse IL_0025

IL_0015:  ldarg.0
IL_0016:  ldfld class [mscorlib]System.Collections.IList Test.Rules.Smells.ClassWithCodeDuplicated::myList
IL_001b:  ldstr &amp;quot;MoreFoo&amp;quot;
IL_0020:  callvirt instance void class [mscorlib]System.Collections.IList::Remove(object)
IL_0025:  ret
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I drop out the ldarg, ldfld, ldstr and others, and I get the information for
compare Instruction Pairs.  And If I write only:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="csharp"&gt;&lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Contains&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;MoreFoo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Remove&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;MoreFoo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;The unique difference in the IL code was that I haven't the branch
instruction.  I can detect simple duplications, but only detecting these ones
won't be useful.&lt;/p&gt;

&lt;p&gt;Then I decided:&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;Following the last lines, I have decided change the code representation, and
I will use Control Flow Graphs for make some FlowAnalysis and obtain more
information for detect code complete.&lt;/p&gt;

&lt;p&gt;I can get from the CFG the blocks and check blocks.  And better, I can try
detect common subsets for each block.  With this approach I believe that I can
write a more complete analysis and detect the code duplication better and in a
easier way.&lt;/p&gt;

&lt;h2&gt;Challenges or Problems.&lt;/h2&gt;

&lt;p&gt;Yes, a lot !  For the first, I have decide use the Cecil.FlowAnalysis
assembly (placed in the cecil module in mono svn) for obtain the CFG, I will
save a lot of work using this library.  But I have a little trouble.&lt;/p&gt;

&lt;p&gt;Yesterday afternoon,  I started working on the CFG analysis, then I started
building the graphs; and I get a surprise:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;1) Test.Rules.Smells.DetectCodeDuplicatedInSameClassTest.TestClassWithCodeDuplicated : System.ArgumentException : Exception handlers are not supported.
Parameter name: body
  at Cecil.FlowAnalysis.Impl.ControlFlow.FlowGraphBuilder..ctor (Mono.Cecil.MethodDefinition method) [0x00000] 
  at Cecil.FlowAnalysis.FlowGraphFactory.CreateControlFlowGraph (Mono.Cecil.MethodDefinition method) [0x00000] 
  at Gendarme.Rules.Smells.DetectCodeDuplicatedInSameClassRule.ContainsDuplicatedCode (Mono.Cecil.MethodDefinition currentMethod, Mono.Cecil.MethodDefinition targetMethod) [0x00000] 
  at Gendarme.Rules.Smells.DetectCodeDuplicatedInSameClassRule.CheckType (Mono.Cecil.TypeDefinition typeDefinition, Gendarme.Framework.Runner runner) [0x00000] 
  at Test.Rules.Smells.DetectCodeDuplicatedInSameClassTest.TestClassWithCodeDuplicated () [0x00000] 
  at &amp;amp;lt;0x00000&amp;gt; &amp;lt;unknown method&amp;gt;
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[])
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] 
  &amp;lt;/unknown&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Ouch !  Then I believe that I have to write a patch for allow exception
handlers and build the graph.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;This week, I only have an interesting resource that hope helps me with this
work, the dragon's book :)&lt;/p&gt;

&lt;p&gt;Finally thanks to &lt;a href="http://pages.infinit.net/ctech/poupou.html"&gt;Sebastien&lt;/a&gt; for solve my doubts.  Also thanks to all mono people, every day I enjoy a bit more working with this great people.&lt;/p&gt;
&lt;p&gt;I want also congratulate the Moonlight accomplishmet, I want try this
technology!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/6HJprwOimpI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/06/23/gendarme-tasks-weekly-status-report-4/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #3</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/sVRgAojNN44/" />
   <updated>2007-06-17T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/06/17/gendarme-tasks-weekly-status-report-3</id>
   <content type="html">&lt;h1&gt;This is the status report for June 10 - June 17&lt;/h1&gt;

&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;This week I have proposed 2 new rules.  The first one is called "Don't
swallow errors catching nonspecific exceptions".  And the second is the first
into the smells set, it's called "Detect code duplicated in methods that belongs
to same class".&lt;/p&gt;

&lt;p&gt;I'm working hard in this last rule.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;The next week, I would like finish this first smell rule.  And purpose other
rules too.&lt;/p&gt;

&lt;p&gt;I have made a plan for finish this first smell.&lt;/p&gt;

&lt;p&gt;I've identified 3 main scenarios:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Code duplicated in the same class.  This happens when you have 2 (or more) methods that have the same expression.  You have to do a "Extract Method" and invoke the code from both places.&lt;/li&gt;
&lt;li&gt;Code duplicated in two sibling subclasses.  Then you can remove the duplication extracting method and pulling it up.  But there are other refactorings to apply here.&lt;/li&gt;
&lt;li&gt;Code duplicated in two unrelated classes.  This scenario can be more difficult to identify.  And I will study it later. &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Challenges or problems.&lt;/h2&gt;

&lt;p&gt;I have a really interesting challenge, detect code duplication often isn't
easy and there are a lot of stuff to do.  Luckyly with the unit test you can see
quickly if you get your goals.&lt;/p&gt;

&lt;p&gt;By the moment, I'm writting this detector using a peephole.  With this
approach I can check the IL directly without build an AST and I can detect the
smell in any language (VB, Nemerle ...)&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;This week, I have a really interesting resource: &lt;a href="http://www.swerl.tudelft.nl/twiki/pub/Main/StefanSlinger/CodeNose-thesis.pdf"&gt;Code Nose Thesis&lt;/a&gt;.  This project inspects Java code for detect some smells too.  Thanks to &lt;a href="http://gameweld-soc.blogspot.com/"&gt;Chris Gameweld&lt;/a&gt; for the link.&lt;/p&gt;

&lt;p&gt;I want also thank all people that have written comments for the rules.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/sVRgAojNN44" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/06/17/gendarme-tasks-weekly-status-report-3/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks.  Weekly Status Report #2</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/vGzWnPi6uVQ/" />
   <updated>2007-06-11T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/06/11/gendarme-tasks-weekly-status-report-2</id>
   <content type="html">&lt;h1&gt;This is the status report for June 4 - June 10.&lt;/h1&gt;

&lt;h2&gt; Accomplished this week.&lt;/h2&gt;

&lt;p&gt;I have proposed 2 new rules.  This rules deals with enums; the first rule,
was "Do use a singular name for an enumeration, unless its values are bit
fields".  The second one, was "Do use a plural name for the Flags Enums".&lt;/p&gt;

&lt;p&gt;I have to write a fix for the singular and singular checkings.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;The next week, I will purpose a new rule for check the empty catch statements
and start working with Cecil and IL.&lt;/p&gt;

&lt;p&gt;I also would like start the code duplicate smell.&lt;/p&gt;

&lt;h2&gt;Challenges or problems.&lt;/h2&gt;

&lt;p&gt;This last week, I was really busy.  This week, I will write more code.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;The first, thanks to &lt;a href="http://kerrick.wordpress.com/"&gt;Brian Nickel&lt;/a&gt; for the links:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.gotdotnet.com/Team/FxCop/Docs/Rules/Naming/FlagsEnumsShouldHavePluralNames.html"&gt;FlagsEnumsShouldHavePluralNames&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.gotdotnet.com/Team/FxCop/Docs/Rules/Naming/OnlyFlagsEnumsShouldHavePluralNames.html"&gt;OnlyFlagsEnumsShouldHavePluralNames&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also thanks for all people who has written comments for the rules. (Last
week, I forgot write this, I'm sorry).&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/vGzWnPi6uVQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/06/11/gendarme-tasks-weekly-status-report-2/</feedburner:origLink></entry>
 
 <entry>
   <title>Gendarme Tasks:  Status Weekly Report</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/IWMmmf2_Ad4/" />
   <updated>2007-06-04T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/06/04/gendarme-tasks-status-weekly-report</id>
   <content type="html">&lt;h2&gt;Accomplished this week.&lt;/h2&gt;

&lt;p&gt;This week, I have learnt some stuff more about Gendarme and Cecil. I have
learnt the differences about TypeReference and TypeDefinition, and how Cecil
resolves the assemblies.&lt;/p&gt;

&lt;p&gt;I also learnt about Gendarme framework, I have looked the source code, and I
have understand better how gendarme applies the rules.&lt;/p&gt;

&lt;h2&gt;Plans for the next week.&lt;/h2&gt;

&lt;p&gt;For the next week, I want finish some simple tasks, 2 or 3 or 4 anyways.  And
if I have finished these tasks I would like start with the smells.&lt;/p&gt;

&lt;p&gt;The first smell will be the duplicated code.  Then, I will learn more about
Mono.Cecil.Cil namespace.&lt;/p&gt;

&lt;h2&gt;Challenges or problems.&lt;/h2&gt;

&lt;p&gt;The first problem came up with the TypeReference and TypeDefinition
difference.  Sebastien helped me a lot, because he explained the differences and
the problems quite good.&lt;/p&gt;

&lt;h2&gt;Interesting resources.&lt;/h2&gt;

&lt;p&gt;I have this &lt;a href="http://blogs.msdn.com/kcwalina/archive/2004/05/18/134208.aspx#135297"&gt;link&lt;/a&gt; that it's a really interesting lecture about enums, and in general about coding guidelines.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/IWMmmf2_Ad4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/06/04/gendarme-tasks-status-weekly-report/</feedburner:origLink></entry>
 
 <entry>
   <title>First impressions working with Cecil / Gendarme</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/D_s4mS6qJmU/" />
   <updated>2007-05-20T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/05/20/first-impressions-working-with-cecil-gendarme</id>
   <content type="html">&lt;p&gt;Well, last week I have spent some time learning Cecil and Gendarme stuff.
I've written my first draft for checking a simple rule and achieve some
knowledge about these two technologies.  I really enjoyed a lot learning these
technologies.&lt;/p&gt;

&lt;p&gt;I'm going to say my first impressions for each techonlogy.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Gendarme is simple.  Writting new rules is easy.  You only have to implement an interface.&lt;/li&gt;
	&lt;li&gt;Gendarme is well named.  If you want to create a new rule for check types, you will implement the ITypeRule interface.  If you want to create a new rule for check methods, you will implement the IMethodRule interface.&lt;/li&gt;
	&lt;li&gt;Gendarme isn't intrusive and is powerful. You can write the rule that you want.  You can write simple rules, and also, you can write really complex rules.&lt;/li&gt;
	&lt;li&gt;Gendarme is integrated.  You can use gendarme with different development tools (you can create a NAnt task, you can use with Makefiles) and programming language (you can use VB.NET, you can use Boo).&lt;/li&gt;
	&lt;li&gt;And finally, Gendarme is in continous improvement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also think Cecil is a great framework too.  By this moment, I think it's
simple, it's fast and it's easy deal with it and you have a lot of
documentation.  I can't write more about Cecil, because Cecil is bigger an I
will need more time to learn it.&lt;/p&gt;

&lt;p&gt;Well, the first rule that I've chosen to implement is that Attributes ends with "Attribute" suffix.&lt;/p&gt;

&lt;p&gt;This rule will check that the new attributes ends with "Attribute" suffix.  You can see the reference in &lt;a href="http://www.go-mono.com/docs/index.aspx?link=ecmaspec%3a24.1"&gt;C#Language Specification&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some examples:&lt;/p&gt;

&lt;p&gt;Good:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="csharp"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomAttribute&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Attribute&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Bad:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="csharp"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Custom&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Attribute&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;In the next days, I will add more test cases and I will put some links to
source code to prove that it's really easy write this rules with Gendarme and
Cecil.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/D_s4mS6qJmU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/05/20/first-impressions-working-with-cecil-gendarme/</feedburner:origLink></entry>
 
 <entry>
   <title>Buildix</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/sAPsNg-8TK4/" />
   <updated>2007-04-27T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/04/27/buildix</id>
   <content type="html">&lt;p&gt;Some days before my travel to Valencia, I have seen this amazing tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://buildix.thoughtworks.com/"&gt;Buildix&lt;/a&gt; is a GNU/Linux
distribution that combines some tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cruisecontrol.sourceforge.net"&gt;CruiseControl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://subversion.tigris.org"&gt;Subversion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And all of them with an little apache front end for manage users for all
components.  I have seen the demo and I decided to try it.&lt;/p&gt;

&lt;p&gt;I'm using trac for my projects and subversion, I think that it's a great
combination.  Trac forces you to think for tickets, you could think tickets as
little things that add value and for register bugs too.  Then you can only
concentrate in these tickets and no write more extra code that doesn't add any
value.&lt;/p&gt;

&lt;p&gt;Then, the subversion server allows you to drop code ownership; and in a
little time you could share your changes and patches.  And one interesting thing
about trac and subversion, the hooks.  With the hooks, you can write in your svn
message:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="text"&gt;refs #ticketNumber

Stuff, Foo, Bar ...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;And then, you can go to the ticket URL in trac and see this changes as
comments, with this little things you can concentrate about the value.  You also
can close a ticket.&lt;/p&gt;

&lt;p&gt;The only thing that I don't know is CruiseControl, is for create automated
building and test the application (also pass a pretty printer for code), by this
time I have only seen working with Java.  I have seen CruiseControl for .NET.  I
don't know if there are any platform for get continous integration in a more
generic way, for example: For Java, you can use Maven, or Ant or Makefiles too,
for Mono you can use NMaven, NAnt and makefiles too.  I believe that one tool
that be capable to build the entire project in an heterogeneus scenario, for
example: If you are developing a C# application and build with NAnt, the tool
take care of this and use NAnt for compile.  The same, if you are writing a Java
application.  The same if you are writing a C/C++application, using
Makefiles.&lt;/p&gt;

&lt;p&gt;I think we can abstract this component a bit more and get a more generic
builder, with different backends.&lt;/p&gt;

&lt;p&gt;And the last one idea for today, I have think about a distribution for
developers.  For example, the ubuntu people has the Sun Toolchain for write Java
applications.  Or the Mono VMWare images for test.  Every developer write the
code in a different way, but for example a distribution with libraries (log4net,
nmock, nunit, mono, monodevelop ...)  Or in the Java way a distro including
(log4java, netbeans or eclipse, java, tomcat, jboss...)&lt;/p&gt;

&lt;p&gt;And that's all for today.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/sAPsNg-8TK4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/04/27/buildix/</feedburner:origLink></entry>
 
 <entry>
   <title>Babuines in db4o</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/vhlvQQ6Kl4s/" />
   <updated>2007-04-15T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/04/15/babuines-in-db4o</id>
   <content type="html">&lt;p&gt;Well, some weeks ago, I received an email from db4o.  And as some babuine
foundation components uses db4o as persistence engine I get a project space in
the community.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://developer.db4o.com/ProjectSpaces/view.aspx/Babuine"&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/vhlvQQ6Kl4s" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/04/15/babuines-in-db4o/</feedburner:origLink></entry>
 
 <entry>
   <title>Returning</title>
   <link href="http://feedproxy.google.com/~r/nestorsalceda/~3/MrlO-mRQ97E/" />
   <updated>2007-04-14T00:00:00+02:00</updated>
   <id>http://nestor.babuine.net/2007/04/14/return</id>
   <content type="html">&lt;p&gt;Yes,  I'm returning.&lt;/&gt;

&lt;p&gt;I'm going to talk a little about me.  My name is Néstor Salceda and I'm
finishing my computer science studies.  I'm interested in software engineering:
concretely about refactoring, software testing, design by contract, compiler
design and implementation and component software.&lt;/p&gt;

&lt;p&gt;I have had other blog, but  my local home server crashed some time ago.  My last &lt;a href="http://wizito.is-a-geek.net"&gt;weblog address&lt;/a&gt; is invalid.  This will be my new blog site, special thanks to &lt;a href="http://www.sergiorubio.net"&gt;Sergio Rubio&lt;/a&gt;, my dear
Sysadmin.&lt;/p&gt;

&lt;p&gt;In this blog I'm going to talk about my &lt;a href="http://code.google.com/soc"&gt;Google Summer of Code&lt;/a&gt; project.  I'm going to write some &lt;a href="http://www.mono-project.com/Gendarme"&gt;Gendarme Rules&lt;/a&gt; for detect bad smells into the code.  I may also write about others OSS stuff that I'm writing, for exmple the &lt;a href="http://www.babuine.net"&gt;Babuine Component Model&lt;/a&gt;, this is a framework for develop MVC components quickly with Mono.&lt;/p&gt;

&lt;p&gt;The smell concept is amazing, when I was reading the &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201485672"&gt; Martin Fowler's book called Refactoring&lt;/a&gt;.  The smells really impressed me. I will write other rules too.&lt;/p&gt;

&lt;p&gt;Okey, the last one; as &lt;a href="http://themonkeysgrinder.blogspot.com/2007/04/it-begins.html"/&gt;Scott Peterson&lt;/a&gt; do, I'm going to post a photo of me.&lt;/p&gt;

&lt;a href="/images/nestor_small.jpg"&gt;&lt;img src='/images/nestor_small.jpg' width="100%" alt='Photo of me' /&gt;&lt;/a&gt;

&lt;p&gt;Well, good luck for all the students that will write the SOC applications.
And thanks to mono project for the chance.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/nestorsalceda/~4/MrlO-mRQ97E" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://nestor.babuine.net/2007/04/14/return/</feedburner:origLink></entry>
 

</feed>

