<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sami Dalouche</title>
	<atom:link href="http://www.dalouche.com/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dalouche.com/wordpress</link>
	<description>Sami Dalouche's blog about Linux, Java, .NET and other bleeding-edge stuff. skoobi@free.fr</description>
	<lastBuildDate>Mon, 15 Mar 2010 04:37:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The google way</title>
		<link>http://www.dalouche.com/wordpress/2010/03/14/the-google-way/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/14/the-google-way/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 04:35:37 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=196</guid>
		<description><![CDATA[The key to gmail describes what sh*t umbrellas are at google :
as a shit umbrella, the product managers protect the engineers from getting distracted. It’s not enough to be a “shit funnel” where they would pass some of the junk down to engineers, they need to fully protect the engineers.
No wonder google engineers accomplish great [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://techcrunch.com/2010/03/14/key-to-gmail/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+Techcrunch+%28TechCrunch%29&amp;utm_content=Google+Reader">The key to gmail</a> describes what sh*t umbrellas are at google :</p>
<blockquote><p>as a shit umbrella, the product managers protect the engineers from getting distracted. It’s not enough to be a “shit funnel” where they would pass some of the junk down to engineers, they need to fully protect the engineers.</p></blockquote>
<p>No wonder google engineers accomplish great things : they just focus on their work !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/14/the-google-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft employees love their iphone</title>
		<link>http://www.dalouche.com/wordpress/2010/03/14/microsoft-employees-love-their-iphone/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/14/microsoft-employees-love-their-iphone/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 22:37:58 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=193</guid>
		<description><![CDATA[Slashdot runs a story about Microsoft employees preferring to use the iPhone over Microsoft alternatives.
Even though it might be a good idea to always eat your own dog food, the simple fact that your employees prefer the available alternatives is worth taking into consideration. Indeed, the motivation behind eating your own dogfood is to get [...]]]></description>
			<content:encoded><![CDATA[<p>Slashdot runs a story about <a href="http://apple.slashdot.org/story/10/03/14/208200/Microsoft-Employees-Love-Their-iPhones?from=rss&amp;utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+Slashdot%2Fslashdot+%28Slashdot%29&amp;utm_content=Google+Reader">Microsoft employees preferring to use the iPhone</a> over Microsoft alternatives.</p>
<p>Even though it might be a good idea to <a href="http://en.wikipedia.org/wiki/Eating_one%27s_own_dog_food">always eat your own dog food</a>, the simple fact that your employees prefer the available alternatives is worth taking into consideration. Indeed, the motivation behind eating your own dogfood is to get feedback ; and the simple fact that even your employees do not want to use the product is exactly the kind of feedback you are looking for.</p>
<p>So, if you are a software editor for a product, and for some reason, your own employees (or worse, the developers of the solution itself) want to use the competitor&#8217;s product, then the first thing you should do is welcome them to, and get back to them once the product becomes at least as good as the alternative. No matter whether the reason for not using the product is good or not, it just means there is something to address.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/14/microsoft-employees-love-their-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An example of not applying the repair rule principle</title>
		<link>http://www.dalouche.com/wordpress/2010/03/12/an-example-of-not-applying-the-repair-rule-principle/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/12/an-example-of-not-applying-the-repair-rule-principle/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 12:11:03 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=190</guid>
		<description><![CDATA[Errors should never pass describes  the case of AppArmour which fails to follow the Rule of Repair. In this particular case, AppArmor could not make sense of the user (config) input &#8211; and thus cannot repair the data-, so it should fail as noisily and as soon as possible to prevent debugging nightmares.
Grails is another [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.vrplumber.com/index.php?/archives/2452-guid.html">Errors should never pass</a> describes  the case of AppArmour which fails to follow the <a href="http://www.faqs.org/docs/artu/ch01s06.html#id2878538">Rule of Repair</a>. In this particular case, AppArmor could not make sense of the user (config) input &#8211; and thus cannot repair the data-, so it should fail as noisily and as soon as possible to prevent debugging nightmares.</p>
<p><a href="http://www.grails.org/">Grails</a> is another example of a framework that fails to follow this rule (at least until v1.1, I cannot speak for v1.2).  I have way too often seen situations where the input was clearly incorrect (e.g. spring builder configuration) and grails was not reporting any error, and was injecting null values instead.</p>
<p>Note: this rule is part of <a href="http://www.faqs.org/docs/artu/index.html">the Art of unix programming</a>, and thus part of the <a href="http://www.dalouche.com/wordpress/2010/03/10/on-design-principles/">design principles I believe in (previous post)</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/12/an-example-of-not-applying-the-repair-rule-principle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On real meritocracy</title>
		<link>http://www.dalouche.com/wordpress/2010/03/11/on-real-meritocracy/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/11/on-real-meritocracy/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 03:56:01 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=185</guid>
		<description><![CDATA[If you want to hear about a real example of pure meritocracy, you should listen to Tarus Balog on Linux Link Tech Show episode 343. This guy has truly understood how to lead an open source project, and a number of really interesting things such as Open Source Marketing are discussed. (VCs who want to [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to hear about a real example of pure meritocracy, you should listen to Tarus Balog on <a href="http://feedproxy.google.com/~r/TheLinuxLinkTechShowOgg-vorbisFeed/~3/VsopfBSIDww/tllts_343-03-03-10.ogg">Linux Link Tech Show episode 343</a>. This guy has truly understood how to lead an open source project, and a number of really interesting things such as Open Source Marketing are discussed. (VCs who want to invest $2,000,000 in a company are also welcomed to listen to the podcast episode).</p>
<p>If you have a (possibly good) product that you have open sourced, but without being able to gather a community around it, then I urge you to listen to the episode.</p>
<p>Tarus Balog, keep up the good work, you clearly have understood what a number of supposedly open-source companies totally miss  ! Good work pays in the long run !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/11/on-real-meritocracy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Thoughtworkers think of git&#8230;</title>
		<link>http://www.dalouche.com/wordpress/2010/03/11/what-thoughtworkers-think-of-git/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/11/what-thoughtworkers-think-of-git/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 03:21:51 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=182</guid>
		<description><![CDATA[Martin Fowler published an informal survey of version control tools among Thoughtworkers. Of course, the big winner is git, and anyone who has been going through the effort of learning it correctly would confirm.
BTW, if you want some help convincing people that git is better, do not hesitate to take a look at why git [...]]]></description>
			<content:encoded><![CDATA[<p>Martin Fowler published an <a href="http://martinfowler.com/bliki/VcsSurvey.html">informal survey of version control tools among Thoughtworkers</a>. Of course, the big winner is git, and anyone who has been going through the effort of learning it correctly would confirm.</p>
<p>BTW, if you want some help convincing people that git is better, do not hesitate to take a look at <a href="http://whygitisbetterthanx.com/">why git is better than X</a>.</p>
<p>On a related note, you might want to listen to <a href="http://wiki.twit.tv/wiki/FLOSS_Weekly_111">FLOSS weekly 111</a> podcast (direct <a href="http://www.podtrac.com/pts/redirect.mp3/twit.cachefly.net/floss0111.mp3">link here</a>), where <a href="http://www.cmake.org/">CMake</a> lead developer talks about his wonder build tool (I&#8217;ll never ever use <a href="http://www.gnu.org/software/autoconf/">autoconf</a> again if I need to write some C any day) that is now developed using git.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/11/what-thoughtworkers-think-of-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DDD and NoSQL are a nice fit</title>
		<link>http://www.dalouche.com/wordpress/2010/03/11/ddd-and-nosql-are-a-nice-fit/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/11/ddd-and-nosql-are-a-nice-fit/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 03:04:06 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=178</guid>
		<description><![CDATA[As I explained in a previous post, Domain-driven Design (DDD) is a design principle I strongly believe in.
With more and more evidence of systems/companies switching to NoSQL for scalability reasons, creating a rich  domain model becomes less and less of an option if you don&#8217;t want to shoot yourself in the foot. Indeed, while traditional [...]]]></description>
			<content:encoded><![CDATA[<p>As I explained in a previous post, <a href="http://www.dalouche.com/wordpress/2010/03/10/on-design-principles/">Domain-driven Design (DDD) is a design principle I strongly believe in</a>.</p>
<p>With more and more evidence of systems/companies <a href="http://highscalability.com/blog/2010/3/10/saying-yes-to-nosql-going-steady-with-cassandra-at-digg.html">switching to NoSQL for scalability reasons</a>, creating a rich  domain model becomes less and less of an option if you don&#8217;t want to shoot yourself in the foot. Indeed, while traditional applications <span style="text-decoration: line-through;">sometimes</span> often rely on the database to enforce integrity and referential constraints, this is no longer an option with NoSQL because of the <a href="http://en.wikipedia.org/wiki/CAP_theorem">CAP theorem</a>.</p>
<p>So, this means enforcing constraints becomes the sole application&#8217;s responsibility, which is, IMHO, a good thing. Validation naturally belongs to the domain layer, and once you go through the trouble of transforming your <a href="http://en.wikipedia.org/wiki/Anemic_Domain_Model">POJOs/anaemic domain model</a> into a rich domain model, you will certainly start adopting more and more DDD principles.</p>
<p>Responsibilities thus become clear : the storage layer handles the (possibly distributed) persistence, and the domain layer handles the domain-specific business rules and validation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/11/ddd-and-nosql-are-a-nice-fit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GeoTools</title>
		<link>http://www.dalouche.com/wordpress/2010/03/10/geotools/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/10/geotools/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:05:20 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=172</guid>
		<description><![CDATA[GeoTools developers have released the 2.6.2  version. GeoTools contains an incredible amount of utilities related to GIS and I am totally impressed by the feature set.
To give an example of its use, here is some sample code from gisgraphy-java-client ( a simple Java client I am writing for the open source GISgraphy project).  It calculates [...]]]></description>
			<content:encoded><![CDATA[<p>GeoTools developers have released the <a href="http://geotoolsnews.blogspot.com/2010/03/geotools-262-released.html">2.6.2  version</a>. GeoTools contains an incredible amount of utilities related to <a href="http://en.wikipedia.org/wiki/GIS">GIS</a> and I am totally impressed by the <a href="http://docs.codehaus.org/display/GEOTDOC/Home">feature set</a>.</p>
<p>To give an example of its use, here is some <a href="http://github.com/samokk/gisgraphy-java-client/blob/master/client/src/main/java/com/gisgraphy/client/gisfeature/GisFeatureGeography.java">sample code</a> from <a href="http://github.com/samokk/gisgraphy-java-client">gisgraphy-java-client</a> ( a simple Java client I am writing for the open source <a href="http://www.gisgraphy.com/">GISgraphy</a> project).  It calculates the <a href="http://en.wikipedia.org/wiki/Great-circle_distance">orthodromic distance</a> between two coordinates :</p>
<pre>
    public double distance(GisFeatureGeography o, Unit<Length> unit) {
           Unit<Length> targetUnit = (unit != null) ? unit : SI.METER;
           com.vividsolutions.jts.geom.Geometry me = location;
           com.vividsolutions.jts.geom.Geometry other = o.getLocation();
           try {
                   return  SI.METER
                          .getConverterTo(targetUnit)
                          .convert(JTS.orthodromicDistance(
                                 me.getCoordinate(),
                                 other.getCoordinate(),
                                 DefaultGeographicCRS.WGS84));
           } catch (TransformException e) {
                   throw new RuntimeException(e);
           }
   }
</pre>
<p>Please note that the code makes use of two excellent libraries : <a href="http://www.vividsolutions.com/jts/jtshome.htm">JTS</a> for geographical types, and <a href="http://jscience.org/">JScience</a> for units. And for your information, <a href="http://en.wikipedia.org/wiki/WGS84">WGS84</a> is a friendly name to refer to the GPS coordinate system (x,y,z).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/10/geotools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Design principles</title>
		<link>http://www.dalouche.com/wordpress/2010/03/10/on-design-principles/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/10/on-design-principles/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 03:37:28 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=169</guid>
		<description><![CDATA[There is a constant about Software Developers : they love debating and arguing about every single aspect of the development process. Moreover, they will most likely debate forever, because there is usually nothing that can serve as a reference to tell good and bad practices apart. Want to know why ? Well.. everyone is making [...]]]></description>
			<content:encoded><![CDATA[<p>There is a constant about Software Developers : they love debating and arguing about every single aspect of the development process. Moreover, they will most likely debate forever, because there is usually nothing that can serve as a reference to tell good and bad practices apart. Want to know why ? Well.. everyone is making his own opinion based on his own vision of the truth. There is no <a href="http://en.wikipedia.org/wiki/Axiom">axiom</a> that is taken for granted and that serves as the basis for further discussion.</p>
<blockquote><p>&#8220;In traditional <a title="Logic" href="http://en.wikipedia.org/wiki/Logic">logic</a>, an <strong>axiom</strong> or <strong>postulate</strong> is a proposition that is not proved or demonstrated but considered to be either <a title="Self-evidence" href="http://en.wikipedia.org/wiki/Self-evidence">self-evident</a>, or subject to necessary <a title="Decision making" href="http://en.wikipedia.org/wiki/Decision_making">decision</a>. Therefore, its truth is taken for granted, and serves as a starting point for deducing and inferring other (theory dependent) truths.&#8221;</p></blockquote>
<p>The rest of the mathematical logic is based on these axioms, and given these axioms, everything else can either be proven right or wrong. While it is certainly impossible to create universal axioms and reasoning principles that cover the foundation of software development, I believe we should at least mimic the approach : <strong>decide of which design, architectural and coding principles we believe on, and then use these <em>axiomatic principles</em> as the foundation for decision making</strong>. Of course, the outcome of your next project will depend on the  quality of these axioms, but at least you will be able to move forward and take consistent decisions throughout the lifecycle of the application.</p>
<p>As far as I am concerned, I tend to base my reasoning on a set of <em>axiomatic principles</em> that are based on the opinion of respected and talented people in the software industry. <strong>Even though nothing is perfect, I believe that listening to these experienced people will more likely lead to successes</strong> than listening to any lambda developer&#8217;s opinion. This is my bet, and the rest of this post is a first draft of the main design and architectural principles that I consider my axioms.</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design</a>, <a href="http://en.wikipedia.org/wiki/Specification_pattern">Specifications pattern</a>, <a href="http://corfield.org/blog/index.cfm/do/blog.entry/entry/Layered_Design_Principles">Layered design</a>.</li>
<li><a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">Principles of OOD</a>, and in particular, the <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">S.O.L.I.D. principles</a></li>
<li><a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">Clean code: A Handbook of Agile Software craftmanship</a>.</li>
<li><a href="http://www.amazon.com/Implementation-Patterns-Kent-Beck/dp/0321413091">Implementation Patterns</a></li>
<li>Implementation of the right <a href="http://www.enterpriseintegrationpatterns.com/toc.html">Enterprise Integration Patterns</a> that best describes a given integration issue</li>
<li><a href="http://en.wikipedia.org/wiki/Defensive_programming">Defensive Programming</a> (also see<a href="http://anirudhvyas.com/root/2008/10/20/art-of-defensive-programming/"> Defensive programming in Java</a>) and its derived principles : <a href="http://en.wikipedia.org/wiki/Design_by_Contract">Design by contract</a>, <a href="http://en.wikipedia.org/wiki/Assertion_(computing)">Assertions</a>,  <a href="http://en.wikipedia.org/wiki/Immutable_object">Immutability</a>, Copy-On-Write, <a href="http://code.google.com/p/google-collections/">Immutable collections</a>.</li>
<li><a href="http://en.wikipedia.org/wiki/Inversion_of_control">Inversion of Control</a></li>
<li><a href="http://en.wikipedia.org/wiki/Declarative_programming">Declarative Programming</a>, and in particular <a href="http://en.wikipedia.org/wiki/Functional_programming">Functional Programming</a>-style <a href="http://blogs.warwick.ac.uk/chrismay/entry/writing_functional_java/">collection manipulation</a> and <a href="http://martinfowler.com/bliki/CommandQuerySeparation.html">Command/Query separation</a>, side-effect free methods.</li>
<li><a href="http://c2.com/cgi/wiki?PrematureOptimization">No premature optimization</a>.</li>
<li><a href="http://www.faqs.org/docs/artu/index.html">Lessons learnt from UNIX programming</a>.</li>
<li><a href="http://tagswap.net/articles/OOP_Principles_in_Action:_Tell,_Don%60t_Ask/">Tell don&#8217;t ask</a>.</li>
<li><a href="http://tools.ietf.org/html/rfc793">Robustness principle</a> : Be conservative in what you do, be liberal in what you accept from others.</li>
<li><a href="http://en.wikipedia.org/wiki/Reinventing_the_wheel">Do not reinvent the wheel</a>.</li>
</ul>
<p>The people behind these principles are smart, experienced, and potentially more intelligent than you and me together. So let&#8217;s just follow these principles for now, and once we master every single aspect of them, we will be able to help create the next generation of design and coding principles. In the meanwhile, I take these principles for granted.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/10/on-design-principles/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Usability reviews in the open source world</title>
		<link>http://www.dalouche.com/wordpress/2010/03/09/usability-reviews-in-the-open-source-world/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/09/usability-reviews-in-the-open-source-world/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 03:49:21 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=162</guid>
		<description><![CDATA[It is a pleasure to hear that some open source projects are conducting usability reviews :

Wikipedia : Usability and Experience Study
OpenStreetMap: UX Review
any other ?

Usability reviews are of uttermost importance if you want to learn how your end users use your product. I initially thought that conducting usability reviews was complex, and involved lots of [...]]]></description>
			<content:encoded><![CDATA[<p>It is a pleasure to hear that some open source projects are conducting usability reviews :</p>
<ul>
<li>Wikipedia : <a href="http://usability.wikimedia.org/wiki/Usability_and_Experience_Study">Usability and Experience Study</a></li>
<li>OpenStreetMap: <a href="http://opengeodata.org/ux-review">UX Review</a></li>
<li>any other ?</li>
</ul>
<p>Usability reviews are of uttermost importance if you want to learn how your end users use your product. I initially thought that conducting usability reviews was complex, and involved lots of steps, but <a href="http://pyxis-tech.com/blog/author/jfproulx/">Jean-Francois Proulx</a> definitely convinced me of the approach when I attended one of his usability talks a few months ago.</p>
<p>To me, this is clearly a better investment than having your market-team meet during long hours in front of screenshots trying to shape the next version of your website <img src='http://www.dalouche.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/09/usability-reviews-in-the-open-source-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python ecosystem for a Java Developer</title>
		<link>http://www.dalouche.com/wordpress/2010/03/04/python-ecosystem-for-a-java-developer/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/04/python-ecosystem-for-a-java-developer/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 06:52:42 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=154</guid>
		<description><![CDATA[So&#8230;. you&#8217;ve been developing serious Java applications for quite a few years now, and while it was fun and enjoyable to discover the best practices, the misc. tools, how the messy fragmented ecosystem of frameworks and libraries  hardly wonderfully integrates thanks to amazing JEE-whatever integration stacks (Spring, no pun intended), you now feel that the [...]]]></description>
			<content:encoded><![CDATA[<p>So&#8230;. you&#8217;ve been developing serious Java applications for quite a few years now, and while it was fun and enjoyable to discover the best practices, the misc. tools, how the <span style="text-decoration: line-through;">messy</span> fragmented ecosystem of frameworks and libraries  <span style="text-decoration: line-through;">hardly</span> wonderfully integrates thanks to amazing JEE-whatever integration stacks (Spring, no pun intended), you now feel that the platform has become pretty much boring, and you want to try something else..</p>
<p>Of course, you still love Java (<a href="http://blogs.payscale.com/ask_dr_salary/2008/01/software-develo.html">it pays more</a>) and think it is still the best way to write serious applications (<a href="http://www.dalouche.com/wordpress/2010/02/27/scala-might-be-useable-very-soon/">currently waiting for Scala to get decent IDE support</a> ?). You do not want to hear about this over-hyped language that is supposedly perfect because you simply don&#8217;t like languages that use half of the keyboard&#8217;s non-letter keys as metacharacters.  But you definitely want to hack a little bit using <em>some</em> dynamic language (maybe because you feel like an idiot when these dynamic-language lovers tell you they get a 10x productivity boost by using XXX instead of Java &#8211; replace XXX by whatever trendy, over-hyped popular language of the moment).</p>
<p>Anyways.. for some reason, your choice is Python (if not, then the rest of this post is of no interest to you). You have read a book or two online, and since you&#8217;re not an idiot, you already know how to code basic stuff (still need to lookup some stuff here and there, not sure of what is idiomatic yet, but you have definitely grasped the basic concepts). However, you feel a little bit alone in this new world, wondering what the best practices are, which tools are generally used.. etc.  And nobody on the internet really helps you because when it comes to giving technological advice, people are either of the &#8220;mine is bigger than yours&#8221; type, or the &#8220;everything depends on your needs/preference/[...]&#8221; BS.</p>
<p>So, here are a few things I learned while developping <a href="http://github.com/samokk/pymager">pymager</a>, a RESTful image conversion/rescaling service (hopefully, it will help you to find your way):</p>
<ul>
<li>The equivalent of jars is <a href="http://peak.telecommunity.com/DevCenter/PythonEggs">eggs</a>.</li>
<li>The equivalent of maven dependency resolution/download system is <a href="http://en.wikipedia.org/wiki/Python_eggs">easy_install</a> or the newer <a href="http://pip.openplans.org/">pip</a> that is even better.</li>
<li>The equivalent of ibiblio main repository is <a href="http://en.wikipedia.org/wiki/Python_Package_Index">Pypi</a>.</li>
<li>the equivalent of maven is either <a href="http://docs.python.org/library/distutils.html">distutils</a> or <a href="http://peak.telecommunity.com/DevCenter/setuptools">setuptools</a>. distutils is the default tool shipped with python, and setuptools is an alternative, that is simply superior. This is what runs your unit tests and creates source/egg packages for you.</li>
<li>Installing dependencies can be done using several ways : using <a href="http://en.wikipedia.org/wiki/Python_eggs">easy_install</a> / pip (pollutes your system), using your system package manager (e.g. debian/ubuntu apt-get :  super-clean, but does not install the most up to date packages), and easy_install / pip inside a <a href="http://pypi.python.org/pypi/virtualenv">virtualenv</a> sandbox . See <a href="http://www.clemesha.org/blog/2009/jul/05/modern-python-hacker-tools-virtualenv-fabric-pip/">Tools for the modern Python hacker</a> for some help regarding virtualenv.</li>
<li>There are mainly 2 decent stacks for creating web applications : <a href="http://www.djangoproject.com/">Django</a> and <a href="http://turbogears.org/2.0/">TurboGears 2</a>. Django is for people who like monolithic frameworks that reinvent the wheel, and TurboGears 2.0 is for people who favor integrating best-of-the-breed components. (TG2 gives you this integration for free, so you can see it as an equivalent of <a href="http://www.springsource.org/roo">Spring ROO</a> ).</li>
<li>The equivalent of Hibernate is <a href="http://www.sqlalchemy.org/">SQLAlchemy</a>. In addition to what hibernate gives you, SQLAlchemy provides you with some lower-level utilities (such as SQL manipulation, DB-agnostic way to create a connection, ..). However, the transaction management is clearly inferior to what you get with Spring/Hibernate and their ThreadLocal implementation is just a hack that is clearly not suited to anything else than using from a web framework.  If you need to do anything more serious, you will need to reinvent the wheel (See pymager&#8217;s <a href="http://github.com/samokk/pymager/blob/master/pymager/persistence/_transactional.py">reimplementation of ThreadLocal&#8217;s transaction management</a> ).</li>
<li>There are a dozen ways to expose a python webapp including nasty CGI-related techniques. All of them are either hacks or legacy stuff except the newer <a href="http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface">WSGI</a> approach. Most websites use fancy names for describing what WSGi does, but it is mostly an equivalent of the servlet API.</li>
<li><a href="http://www.cherrypy.org/">Cherrypy</a> is a wonderful embedded web server that supports WSGi (and that can be used as a WSGi application itself behind apache, pretty much like tomcat can serve applications behind mod_jk).  It used to be the one shipped with TurboGears, but they <a href="http://www.cherrypy.org/wiki/CherryPyAndPaste">switched to Paste for some political reasons</a>. (that was necessary for the merge with pylons)</li>
<li>Naming conventions are a joke in python, as nobody seems to follow the same rules. Even some modules in the python standard library (e.g.: unittest module) seem to adopt different conventions than what looks like the python coding standard. I guess that too many ex-java developers program in python without being able to let away their java naming conventions..</li>
<li>As a Java developer, there is some OO purity that you will need to forget about. It seems to be the &#8220;python way&#8221; to use module-wide variables, and you feel like you are fighting the platform / frameworks if you insist on applying your IoC best practices&#8230;</li>
<li><a href="http://code.google.com/p/python-nose/">nose</a> is the way to go for running tests. (it integrates well with setuptools)</li>
<li>there is no really manipulable classpath, and the default python mechanisms for discovering / handling files/data the equivalent of the classpath is <a href="http://peak.telecommunity.com/DevCenter/PkgResources">pkg_resources</a>.  (an additional reason to use setuptools)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/04/python-ecosystem-for-a-java-developer/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>maximum number of developers on a project ?</title>
		<link>http://www.dalouche.com/wordpress/2010/03/02/maximum-number-of-developers-on-a-project/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/02/maximum-number-of-developers-on-a-project/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 03:40:21 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Software Development best practices]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=152</guid>
		<description><![CDATA[What is the maximum number of developers you can ever imagine working _efficiently_ on a project ? 5 ? 7 ? 10 ? 20 ?
Who wrote 2.6.33 reminds us how much the open source world (and in particular the linux kernel community) excels in this area. For the single 2.6.33 release that was developed in [...]]]></description>
			<content:encoded><![CDATA[<p>What is the maximum number of developers you can ever imagine working <em>_efficiently_</em> on a project ? 5 ? 7 ? 10 ? 20 ?</p>
<p><a href="http://lwn.net/Articles/373405/">Who wrote 2.6.33</a> reminds us how much the open source world (and in particular the linux kernel community) excels in this area. For the single 2.6.33 release that was developed in about 3 months :</p>
<blockquote><p>&#8220;As of this writing, <strong>10,500</strong> non-merge <strong>commits</strong> have found their way into 2.6.33 &#8211; <strong>fairly normal by recent standards</strong>.  These changes <strong>added</strong> almost <strong>900,000 lines</strong> while deleting almost 520,000 others; as a result, the kernel grew by a mere 380,000 lines this time around.&#8221;</p></blockquote>
<p>So, if you happen to struggle to scale your team past the 10-people mark using your usual development habits, then there are <strong>maybe</strong> a <strong>few things</strong> you could learn from the open source world.</p>
<p>My personal understanding of why it works so well :</p>
<ul>
<li><span style="text-decoration: line-through;">good</span> elite developers</li>
<li>top-notch, distributed, <a href="http://whygitisbetterthanx.com/">super-fast and merge-friendly version control tools</a> (e.g. git)</li>
<li>Fault-proof and <strong>compromise-free</strong> (though sometimes not politically-correct) ways of enforcing software quality and architecture. Examples showing the disagreement-proof nature of the kernel development process include last summer&#8217;s <a href="http://www.h-online.com/open/news/item/Dispute-between-Linux-gurus-Alan-Cox-and-Linus-Torvalds-742717.html">Alan Cox vs Linus Torvalds dispute</a> regarding the tty subsystem, or <a href="http://lkml.org/lkml/2006/7/28/180">Linus Torvalds vs Hans Reiser argument regarding Reiser4</a>&#8217;s plugin system that does not fit well into linux architecture</li>
<li><a href="http://ericbrown.com/linus-torvalds-on-managing-projects.htm">result-oriented</a> and <a href="http://blog.crossoverhealth.com/2006/12/06/part-2-open-source-values-meritocracy-transparency-and-legitimacy/">meritocracy-driven</a> way of managing the project</li>
<li><a href="http://lwn.net/Articles/246313/">decentralized development</a> (made possible thanks to distributed SCM tools). To quote Linus Torvalds : &#8220;<em>Centralized _works_. It&#8217;s just *inferior*.</em>&#8220;</li>
<li><a href="http://docs.huihoo.com/linux/kernel/a1/index.html">modular architecture</a> supporting the collaboration of many developers.  <em>&#8220;The large number of developers and the fact that they are volunteers has an impact on how the system should be architected. With such a large number of geographically dispersed developers, a tightly coupled system would be quite difficult to develop &#8212; developers would be constantly treading on each others code.</em><em>&#8220;</em></li>
</ul>
<p>You might disagree on the reasons why it works so well (after all, that&#8217;s just my analysis based on my understanding of the situation), but the success is a reality, a fact.</p>
<p>Also, if you are tempted to think that it could not work in the corporate world, please think about that twice by taking another look at <a href="http://lwn.net/Articles/373405/">who wrote 2.6.33</a>, where contributing companies are listed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/02/maximum-number-of-developers-on-a-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google go</title>
		<link>http://www.dalouche.com/wordpress/2010/03/01/google-go/</link>
		<comments>http://www.dalouche.com/wordpress/2010/03/01/google-go/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 02:06:13 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=150</guid>
		<description><![CDATA[Looks  like go is attracting some attention.
&#8220;&#8221;Open source does not mean anarchy. Somebody has to have a vision and the perseverance to see that through. The open source community can then create their own versions if they wish, but it is best if there is a main line, stable version with a consistent architecture with [...]]]></description>
			<content:encoded><![CDATA[<p>Looks  like go is<a href="http://www.pcworld.idg.com.au/article/337773/google_go_captures_developers_imaginations/"> attracting some attention</a>.</p>
<blockquote><p>&#8220;&#8221;Open source does not mean anarchy. Somebody has to have a vision and the perseverance to see that through. The open source community can then create their own versions if they wish, but it is best if there is a main line, stable version with a consistent architecture with a guiding force behind it,&#8221; Gordon said.&#8221;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/03/01/google-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scala might be useable very soon</title>
		<link>http://www.dalouche.com/wordpress/2010/02/27/scala-might-be-useable-very-soon/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/27/scala-might-be-useable-very-soon/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 06:44:19 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=134</guid>
		<description><![CDATA[The Scala 2.8 beta 1 announcement gives hope regarding the availability of a decent IDE for editing Scala code. We will see what Scala 2.8 final looks like, but if the eclipse IDE support features basic Class and Method renaming, I will most likely make Scala my main programming language for writing open source code [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.infoq.com/news/2010/01/scala-beta1">Scala 2.8 beta 1 announcement</a> gives hope regarding the availability of a decent IDE for editing Scala code. We will see what Scala 2.8 final looks like, but if the eclipse IDE support features basic Class and Method renaming, I will most likely make Scala my main programming language for writing open source code that targets the JVM. Two projects that I would most likely convert to Scala would be :</p>
<ul>
<li><a href="http://github.com/samokk/gisgraphy-java-client">Gisgraphy Java client</a> : a Java library that gives access to <a href="http://www.gisgraphy.com/">gisgraphy</a> City and GIS features search engine.</li>
<li><a href="http://github.com/samokk/pymager-java-client">Pymager Java client</a> : a simple Java wrapper on top of the RESTful interface provided by <a href="http://github.com/samokk/pymager">pymager</a>, an image service that provides simple conversion and thumbnailing / resizing features.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/27/scala-might-be-useable-very-soon/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Surviving with many patches</title>
		<link>http://www.dalouche.com/wordpress/2010/02/27/surviving-with-many-patches/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/27/surviving-with-many-patches/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 06:05:33 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=147</guid>
		<description><![CDATA[In many situations, open Source software developers need to deal with the maintenance of patches. Examples include :

Unofficial versions of the linux kernel, where specific patches are applied (e.g. Xen kernel, openvz kernel, ..) and need to be constantly forward-ported to the latest kernel when it is released
Distribution-specific changes (e.g. Ubuntu-specific changes to debian packages).

Maintaining [...]]]></description>
			<content:encoded><![CDATA[<p>In many situations, open Source software developers need to deal with the maintenance of patches. Examples include :</p>
<ul>
<li>Unofficial versions of the linux kernel, where specific patches are applied (e.g. Xen kernel, openvz kernel, ..) and need to be constantly forward-ported to the latest kernel when it is released</li>
<li>Distribution-specific changes (e.g. Ubuntu-specific changes to debian packages).</li>
</ul>
<p>Maintaining one big diff file for all changes would clearly quickly become unmaintanable, so it looks like different approaches are now widely used instead :</p>
<ul>
<li>Maintaining stacks of patches, using specialized tools such as <a href="http://en.wikipedia.org/wiki/Quilt_%28software%29">quilt</a>.</li>
<li>Using distributed VCS tools such as <a href="http://en.wikipedia.org/wiki/Git_%28software%29">git</a>.</li>
</ul>
<p><a href="http://www.suse.de/~agruen/quilt.pdf">How to survive with many patches</a> describes the use of quilt. Here is some background :</p>
<blockquote><p>“Andrew Morton originally developed a set of scripts for<br />
maintaining kernel patches outside of any SCM tool. Others extended these into a suite called quilt.</p></blockquote>
<p>It looks like distributed VCS tools have now superceded quilt, as far as pure software development is concerned (linux kernel, etc.). But quilt remains very popular for maintaining distribution-specific changes to packages. Indeed, as distribution packages live outside a SCM tree, it is important to have mechanisms to apply distribution-specific changes to the upstream source packages. And this is where quilt comes to the rescue.</p>
<p>Ubuntu packaging guide describes the <a href="https://wiki.ubuntu.com/PackagingGuide/Complete#quilt%20%28Example%20Package:%20xterm%29">use of quilt in debian&#8217;s packaging system</a>. Such a simple system is clearly awesome, and the more I understand how the Open Source communities organize themselves, the more it makes me realize how technically advanced the Open Source world  is compared to the corporate world !</p>
<p>No matter how much you might have heard that tooling is unimportant, the reality is that <strong>tools are important.</strong> <strong>Tools</strong> <strong>enable complex collaboration</strong>, and this is clearly an area where Open Source excels.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 109px; width: 1px; height: 1px;">http://www.suse.de/~agruen/quilt.pdf</div>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/27/surviving-with-many-patches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cumulative Flow Chart in Kanban, and distributed SCM tools</title>
		<link>http://www.dalouche.com/wordpress/2010/02/27/cumulative-flow-chart-in-kanban/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/27/cumulative-flow-chart-in-kanban/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 17:01:01 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=144</guid>
		<description><![CDATA[Cumulative Flow Chart in Kanban attracted my attention as I consider it a nice example of using branching efficiently.
IMHO, it is simply wrong to assume that every single task can be split into small fragments that are then iteratively incorporated into the mainline. The author calls this kind of task a &#8220;technically complex story&#8221;, and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.targetprocess.com/blog/2010/02/cumulative-flow-chart-in-kanban-real-usage-example.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+Targetprocess+%28Edge+of+Chaos+|+Agile+Development+Blog%29&amp;utm_content=Google+Reader">Cumulative Flow Chart in Kanban</a> attracted my attention as I consider it a nice example of using branching efficiently.</p>
<p>IMHO, it is simply wrong to assume that every single task can be split into small fragments that are then iteratively incorporated into the mainline. The author calls this kind of task a &#8220;technically complex story&#8221;, and I have yet to see a successful example of migrating frameworks or doing technical migrations like that without resorting to branching. This is what the whole open source community does, and it is high time the &#8220;enterprise&#8221; world catches with these practices.</p>
<p><strong>Branching then comes to the rescue !</strong> Let the &#8220;technically complex story&#8221; evolve in its own branch, and make sure to conduct in-depth QA BEFORE the merge. Same thing for code reviews and going through the DONE checklist : make sure to do it BEFORE the merge so that you do not end up with non production-quality code in the mainline, which is then pretty hard to get rid of.</p>
<p>BTW, <a href="http://martinfowler.com/bliki/VersionControlTools.html">Version Control Tools</a> gives an overview of the differences between <a href="http://git-scm.com/">git</a> and <a href="http://mercurial.selenic.com/">mercurial</a>, which are two wonderful SCM tools that are very branch-friendly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/27/cumulative-flow-chart-in-kanban/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I think this is frightening&#8230;.</title>
		<link>http://www.dalouche.com/wordpress/2010/02/26/i-think-this-is-frightening/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/26/i-think-this-is-frightening/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 07:13:28 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=142</guid>
		<description><![CDATA[why can&#8217;t programmers&#8230;. program is definitely worth reading&#8230; Yes, this is disturbing&#8230;.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html">why can&#8217;t programmers&#8230;. program</a> is definitely worth reading&#8230; Yes, this is disturbing&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/26/i-think-this-is-frightening/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cannot stop laughing while reading this..</title>
		<link>http://www.dalouche.com/wordpress/2010/02/26/cannot-stop-laughing-while-reading-this/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/26/cannot-stop-laughing-while-reading-this/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 07:00:54 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=138</guid>
		<description><![CDATA[The worst question interview ever describes&#8230; well, just read the post and you will quickly figure out what it is about. I simply LOVE Gavin King&#8217;s comment :
Heh, and I&#8217;ll continue to be an ass in all future responses to &#8220;John Smith&#8221;s who tell talented guys who worked on my projects for years that they [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nostacktrace.com/dev/2010/2/26/the-worst-interview-question-ever.html">The worst question interview ever</a> describes&#8230; well, just read the post and you will quickly figure out what it is about. I simply LOVE Gavin King&#8217;s comment :</p>
<blockquote><p>Heh, and I&#8217;ll continue to be an ass in all future responses to &#8220;John Smith&#8221;s who tell talented guys who worked on my projects for years that they aren&#8217;t &#8220;team player&#8221;s, &#8220;have an attitude&#8221; and are &#8220;prima donna&#8221;s. I&#8217;ll be the judge of that, not some asshole anonymous blog comment poster who has never met or worked with Norm. I&#8217;m protective of my team. That&#8217;s not going to change. Sorry if you don&#8217;t like it.</p></blockquote>
<p>YES, Gavin King is an ass, but most of the time, this category of ass is right, and people should just listen to them instead of complaining.. ah ah ah <img src='http://www.dalouche.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  love it ! <img src='http://www.dalouche.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>PS: for those who don&#8217;t already know it, Gavin King is the founder of Hibernate&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/26/cannot-stop-laughing-while-reading-this/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>EJB 3.1 : still not there yet&#8230;</title>
		<link>http://www.dalouche.com/wordpress/2010/02/26/ejb-3-1-still-not-there-yet/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/26/ejb-3-1-still-not-there-yet/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 16:07:29 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=131</guid>
		<description><![CDATA[EJB 3.1, a compelling evolution describes the new features available in EJB 3.1. It looks like EJBs are finally getting the features they miss..
However, there are still a few things bugging me :

Why insist on keeping the neat features (IoC, ..) server-side only ? Why can&#8217;t I just use the same mechanisms for in-container server-side [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.infoq.com/news/2010/02/jee6_ejb_31">EJB 3.1, a compelling evolution</a> describes the new features available in EJB 3.1. It looks like EJBs are finally getting the features they miss..</p>
<p>However, there are still a few things bugging me :</p>
<ul>
<li>Why insist on keeping the neat features (IoC, ..) server-side only ? Why can&#8217;t I just use the same mechanisms for in-container server-side code  and other kind of code ? Do I still need to revert to using Spring for everything that is not running inside the JEE6 container ? What about integrated tests ?</li>
<li>How come we still don&#8217;t have any equivalent to Spring templates, that take care of creating standardized, runtime exceptions and handling opening/closing resources automatically ?</li>
</ul>
<p>So for now, when working in non-spring environments, I need to create my own Templates to avoid creating clumsy code&#8230;</p>
<p>I agree that Spring Framework is a patch, and should eventually disappear. But for it to disappear, the underlying technologies need to start being half-decent&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/26/ejb-3-1-still-not-there-yet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NoSQL</title>
		<link>http://www.dalouche.com/wordpress/2010/02/26/nosql/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/26/nosql/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 14:27:58 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=127</guid>
		<description><![CDATA[These days, it looks like there is a lot of hype around the NoSQL movement.
These data storage systems have a number of features in common:
•   a call level interface (in contrast to a SQL binding)
•   fast indexes on large amounts of data,
•   ability to horizontally scale throughput over many servers, and
•   ability to dynamically define [...]]]></description>
			<content:encoded><![CDATA[<p>These days, it looks like there is a lot of hype around the NoSQL movement.</p>
<blockquote><p>These data storage systems have a number of features in common:<br />
•   a call level interface (in contrast to a SQL binding)<br />
•   fast indexes on large amounts of data,<br />
•   ability to horizontally scale throughput over many servers, and<br />
•   ability to dynamically define attributes or data schema.</p></blockquote>
<p><a href="http://beust.com/weblog/2010/02/25/nosql-explained-correctly-finally/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+beust%2FOtakuXml+%28Otaku%2C+Cedric%27s+weblog%29&amp;utm_content=Google+Reader">NoSQL explained correctly</a> gives an idea of what these datastores are useful for, and how they complement the current RDBMS offering.</p>
<p><a href="http://highscalability.com/blog/2010/2/25/paper-high-performance-scalable-data-stores.html">High performance scalable datastores</a> compares the technical  characteristics, maturity and licenses of the  NoSQL offering.</p>
<p>Other links on the subject that might be of interest :</p>
<ul>
<li>Twitter is <a href="http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king">switching to Cassandra</a></li>
<li><a href="https://dzone.webex.com/ec0605l/eventcenter/recording/recordAction.do?theAction=poprecord&amp;actname=%2Feventcenter%2Fframe%2Fg.do&amp;actappname=ec0605l&amp;renewticket=0&amp;renewticket=0&amp;apiname=lsr.php&amp;entappname=url0107l&amp;needFilter=false&amp;&amp;isurlact=true&amp;rID=188652&amp;entactname=%2FnbrRecordingURL.do&amp;rKey=7ca2de1aa515d68d&amp;recordID=188652&amp;siteurl=dzone&amp;rnd=7475843994&amp;SP=EC&amp;AT=pb&amp;format=short">Common principles and patterns for building scalable systems</a></li>
<li><a href="http://ai.mee.nu/seeking_a_database_that_doesnt_suck">Seeking a database that does not suck</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/26/nosql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is OpenSolaris dead ?</title>
		<link>http://www.dalouche.com/wordpress/2010/02/24/is-opensolaris-dead/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/24/is-opensolaris-dead/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 03:48:13 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=125</guid>
		<description><![CDATA[It looks like that the future of OpenSolaris is unclear, now that Oracle has acquired Sun..
I take the official Oracle website to be rather &#8230; official ?
Lets recap, shall we ?
a) Almost every trace of OpenSolaris Support subscriptions vanished from
the official website within the last 14 days.
b) An Oracle sales rep informed me personally last [...]]]></description>
			<content:encoded><![CDATA[<p>It looks like that<a href="http://opensolaris.org/jive/thread.jspa?threadID=124338&amp;tstart=0"> the future of OpenSolaris is unclear</a>, now that Oracle has acquired Sun..</p>
<blockquote><p>I take the official Oracle website to be rather &#8230; official ?</p>
<p>Lets recap, shall we ?</p>
<p>a) Almost every trace of OpenSolaris Support subscriptions vanished from<br />
the official website within the last 14 days.</p>
<p>b) An Oracle sales rep informed me personally last week that I could no<br />
longer purchase support subscriptions for OpenSolaris.</p></blockquote>
<p>More information available on <a href="http://opensolaris.org/jive/thread.jspa?threadID=124338&amp;tstart=0">this thread</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/24/is-opensolaris-dead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenStreetMap</title>
		<link>http://www.dalouche.com/wordpress/2010/02/20/openstreetmap/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/20/openstreetmap/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 15:52:09 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=123</guid>
		<description><![CDATA[Here is an introductory article to OpenStreetMap (OSM) . A short except :
Why is that important? Because each time you fix something in OSM your brain gives you a little drop of seratonin, or something, that makes you feel good. And that comes from a quick feedback loop. With traditional companies your feedback loop is far, [...]]]></description>
			<content:encoded><![CDATA[<p>Here is an <a href="http://opengeodata.org/openstreetmap-the-best-map?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+Opengeodata+%28OpenGeoData%29&amp;utm_content=Google+Reader">introductory article to OpenStreetMap (OSM)</a> . A short except :</p>
<blockquote><p>Why is that important? Because each time you fix something in OSM your brain gives you a little drop of seratonin, or something, that makes you feel good. And that comes from a quick feedback loop. With traditional companies your feedback loop is far, far too long. Anything more than a couple of minutes is too long because there’s no association of the act of fixing something with the good feeling. More often than not, you help fix something and it drops in to a black hole.</p>
<p>[...]</p>
<p>The logistical costs of producing maps in a top-down fashion pretty much levelled out at having fleets of cars driving around North America and Europe. Increasing the detail with footpaths would cost far more than the benefit any company could leverage if they tried to do it a similar way. Crowd sourcing this from customers and others is simply inevitable &#8211; there is no other way to do it. But many will likely try to add quality assurance in between their contributors and the map and thus limit the scope and depth of the contributions.</p>
<p>[...]</p>
<p>Those maps will, at times and in certain areas, be better than OSM. But the growth of OSM is inexorable and like a freight train will ultimately roll over everything in its path. It may even happen before traditional companies figure this out and try to start seriously crowd sourcing data.</p></blockquote>
<p>Is OSM the next wikipedia of mapping data ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/20/openstreetmap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top 25 most dangerous programming errors</title>
		<link>http://www.dalouche.com/wordpress/2010/02/19/top-25-most-dangerous-programming-errors/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/19/top-25-most-dangerous-programming-errors/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 12:56:38 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=121</guid>
		<description><![CDATA[Top 25 most dangerous programming errors can be used to identify common programming, design, architecture mistakes that can potentially harm your system. A few examples :

Failure to Preserve Web Page Structure (&#8216;Cross-site Scripting&#8216;)
Improper Sanitization of Special Elements used in an SQL Command (&#8216;SQL Injection&#8217;)
Cross-Site Request Forgery (CSRF)
Reliance on untrusted input in a security decision
&#8230;

]]></description>
			<content:encoded><![CDATA[<p><a href="http://cwe.mitre.org/top25/?">Top 25 most dangerous programming errors</a> can be used to identify common programming, design, architecture mistakes that can potentially harm your system. A few examples :</p>
<ul>
<li>Failure to Preserve Web Page Structure (&#8216;<a href="http://cwe.mitre.org/top25/?#CWE-79">Cross-site Scripting</a>&#8216;)</li>
<li>Improper Sanitization of Special Elements used in an SQL Command (<a href="http://cwe.mitre.org/top25/?#CWE-89">&#8216;SQL Injection&#8217;</a>)</li>
<li>Cross-Site Request Forgery (<a href="http://cwe.mitre.org/top25/?#CWE-352">CSRF</a>)</li>
<li><a href="http://cwe.mitre.org/top25/?#CWE-807">Reliance on untrusted input in a security decision</a></li>
<li>&#8230;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/19/top-25-most-dangerous-programming-errors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git, Mercurial, Subversion..</title>
		<link>http://www.dalouche.com/wordpress/2010/02/17/git-mercurial-subversion/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/17/git-mercurial-subversion/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 04:26:02 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=119</guid>
		<description><![CDATA[Pretty good post from Martin Fowloer on Version Control Tools.
What he says on git :
Git certainly seems to be liked for its power. Folks go ga-ga   over it&#8217;s near-magical ability to do textual merges automatically   and correctly, even in the face of file renames. I haven&#8217;t seen any   objective [...]]]></description>
			<content:encoded><![CDATA[<p>Pretty good post from Martin Fowloer on <a href="http://martinfowler.com/bliki/VersionControlTools.html">Version Control Tools</a>.</p>
<p>What he says on git :</p>
<blockquote><p>Git certainly seems to be liked for its power. Folks go ga-ga   over it&#8217;s near-magical ability to do textual merges automatically   and correctly, even in the face of file renames. I haven&#8217;t seen any   objective tests comparing merge capabilities, but the subjective   opinion favors git.</p>
<p>[...]</p>
<p>For many git&#8217;s biggest downside was its oft-cryptic commands and   mental model. Ben Butler-Cole phrased it beautifully: &#8220;there is this   amazingly powerful thing writhing around in there that will   basically do everything I could possibly ask of it if only I knew   how.&#8221; To its detractors, git lacks discoverability &#8211; the ability to   gradual infer what it does from it&#8217;s apparent design. Git&#8217;s   advocates say that much of this is because it uses a different   mental model to other VCSs, so you have to do more unlearn your   knowledge of VCS to appreciate git. Whatever the reason git seems to   be attractive more to those who enjoy learning the internals while   mercurial seems to appeal more to those who just want to do version   control.</p>
<p>[..]</p>
<p>People generally find that git handles branching better than   Mercurial, particular for short-lived branches for experimentation   and check-pointing. Mercurial encourages other mechanisms, such as   fast cloning of separate repository directories and queue patching,   but git&#8217;s branching is a simpler and better model.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/17/git-mercurial-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stress-testing VS 2010</title>
		<link>http://www.dalouche.com/wordpress/2010/02/14/stress-testing-vs-2010/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/14/stress-testing-vs-2010/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 00:27:53 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=117</guid>
		<description><![CDATA[Kirill Osenkov wrote an article about stress-testing VS 2010.
I especially love the following part :
right now a feature is considered not leaking if there is average increase of less then ~5KB per iteration
]]></description>
			<content:encoded><![CDATA[<p>Kirill Osenkov wrote an article about <a href="http://blogs.msdn.com/kirillosenkov/archive/2010/02/07/stress-testing-visual-studio-2010.aspx">stress-testing VS 2010</a>.</p>
<p>I especially love the following part :</p>
<blockquote><p>right now a feature is considered not leaking if there is average increase of less then ~5KB per iteration</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/14/stress-testing-vs-2010/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Elastic search : solr on steroids</title>
		<link>http://www.dalouche.com/wordpress/2010/02/10/elastic-search-solr-on-steroids/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/10/elastic-search-solr-on-steroids/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 00:40:27 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=114</guid>
		<description><![CDATA[Elastic search seems to be a pretty cool alternative to solr, that supports automagical replication of information to all the detected nodes ! Nice video screencast available here.
]]></description>
			<content:encoded><![CDATA[<p>Elastic search seems to be a pretty cool alternative to solr, that supports automagical replication of information to all the detected nodes ! Nice <a href="http://www.elasticsearch.com/videos/">video screencast available here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/10/elastic-search-solr-on-steroids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>360 evaluations : is it really the best way to actually become better ?</title>
		<link>http://www.dalouche.com/wordpress/2010/02/06/360-evaluations-is-it-really-the-best-way-to-actually-become-better/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/06/360-evaluations-is-it-really-the-best-way-to-actually-become-better/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 17:34:51 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=111</guid>
		<description><![CDATA[After taking a look at the results of a collegue&#8217;s 360 evaluation, I wonder whether it is an actual way to have  people become better (and thus, make a better company).
By continually getting feedback and improving pointed weaknesses, the end result is that you get better over the time

Simple, isn&#8217;t it ? So simple that [...]]]></description>
			<content:encoded><![CDATA[<p>After taking a look at the results of a collegue&#8217;s 360 evaluation, I wonder whether it is an actual way to have  people become better (and thus, make a better company).</p>
<p><strong>By continually getting feedback and improving pointed weaknesses, the end result is that you get better over the time<br />
</strong></p>
<p>Simple, isn&#8217;t it ? So simple that it is clearly understandable and unchallengeable. Of course it is true, and those who do not think so should just burn in hell ! Or.. shouldn&#8217;t they ?</p>
<p><strong>360 evaluations are not tainted by political issues and personal preferences !</strong></p>
<p>Let&#8217;s take a <span style="text-decoration: line-through;">similar</span> different example: politics. Theoretically, thanks to the power of voting, parties should continually get better to be (re-)elected. Hum ! Who feels like political parties focus on the real issues ? Does it have to do with the fact that real issues are unpopular and unlikely to get them re-elected ? Here is a short excerpt from Les Cowboys Fringuants &#8211; 8 secondes :</p>
<blockquote><p>Mais l&#8217;monde oublie vite c&#8217;est pas grave<br />
Suffit de faire un bon budget<br />
D&#8217;parler d&#8217;santé pour que les caves<br />
Vous réélisent l&#8217;année d&#8217;après</p></blockquote>
<p><strong>But 360 evaluations do not have anything to do with politics, really !</strong></p>
<p>The same way parties shift their focus from the real,  unpopular issues, I believe that listening too much to 360 feedback will just make you focus on the wrong things. Either you are too X, or not enough Y.  Either you&#8217;re too concrete or too abstract. Either you have too much self-confidence, or need to higher your self-esteem. Either you do not show enough leadership, or your leadership does not leave enough room for others. Oh, and sometimes, something is both in the &#8220;strengths&#8221; and &#8220;weaknesses&#8221; columns. wao !</p>
<p>It truly makes me laugh when I realize that my collegue&#8217;s evaluation strengths include both :</p>
<ul>
<li>&#8220;Less jokes in the messages&#8221; [understand: you got better since last 360 evaluation by reducing the amount of jokes in your messages]</li>
<li>&#8220;Great sense of humour&#8221;</li>
</ul>
<p>Hum ! hum ! So.. what is going on exactly ? Should he continue to do jokes and develop his sense of humor, or should he stop doing so ? .. It might simply be that different people perceive things differently, so the only true way to accomplish a perfect, no-fault, 360 evaluation is to be nothing more than a moderate lemming that has no real strengths and no weaknesses. 101 guide to having a good 360 evaluation :</p>
<ul>
<li>Take a few un-risky initiatives to show that you do have some leadership, but make sure you do not address the risky, unpopular issues !</li>
<li>Criticize things moderately and constructively, but make sure you only criticize things that others would criticize too.</li>
<li>&#8230;  [hint: do not address the real issues, as those are the most risky, address the popular ones)</li>
</ul>
<p>If you have real strengths, then they usually come with their set of weaknesses ! Not everybody might be happy about them, but in my humble opinion, erasing them would definitely not make a better company in the end.</p>
<p><strong>What if the problem was the unability of people to understand the situation correctly ?</strong></p>
<blockquote><dt>All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident.</dt>
<dd><strong><a href="http://www.quotationspage.com/quotes/Arthur_Schopenhauer/">Arthur Schopenhauer</a></strong><br />
<em>German philosopher  (1788 &#8211; 1860)</em></dd>
</blockquote>
<dd style="text-align: left;"><em><br />
</em></dd>
<p><strong>So, what do we do ?</strong></p>
<p>Always make sure to bring this question when you raise an issue. Even if you do not have any answer, this shows your willingness to contribute positively instead of just openly criticizing <img src='http://www.dalouche.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/06/360-evaluations-is-it-really-the-best-way-to-actually-become-better/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Click-to-call: a smart way to increase ad revenues !</title>
		<link>http://www.dalouche.com/wordpress/2010/02/06/google-click-to-call-a-smart-way-to-increase-ads-revenues/</link>
		<comments>http://www.dalouche.com/wordpress/2010/02/06/google-click-to-call-a-smart-way-to-increase-ads-revenues/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 15:03:00 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=107</guid>
		<description><![CDATA[Simple article on the new click-to-call [french] mobile ad strategy that google is pushing. Hum! interesting&#8230;
]]></description>
			<content:encoded><![CDATA[<p>Simple article on the new <a href="http://bulle-interactive.com/publicite/google-lance-le-click-to-call-mais-cest-quoi/">click-to-call [french]</a> mobile ad strategy that google is pushing. Hum! interesting&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/02/06/google-click-to-call-a-smart-way-to-increase-ads-revenues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mockito, EasyMock and jMock</title>
		<link>http://www.dalouche.com/wordpress/2010/01/24/mockito-easymock-and-jmock/</link>
		<comments>http://www.dalouche.com/wordpress/2010/01/24/mockito-easymock-and-jmock/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 20:58:01 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=103</guid>
		<description><![CDATA[So, you&#8217;ve started to embrace the Test-Driven Development approach while doing Java Development. You&#8217;re trying to improve your tests, try to write them well and make them readable,  and you are now looking for the right mocking framework to assist you. Here are a few hints that might help you choose the right mocking framework [...]]]></description>
			<content:encoded><![CDATA[<p>So, you&#8217;ve started to embrace the Test-Driven Development approach while doing Java Development. You&#8217;re trying to improve your tests, try to write them well and make them readable,  and you are now looking for the right mocking framework to assist you. Here are a few hints that might help you choose the right mocking framework :</p>
<ul>
<li>If you are an absolute TDD-lover, think that Ruby is awesome in every aspect, that RSpec is THE WAY to go, agree with every single principle of TDD, never write a single line of untested code and believe that  sex cannot be good unless you have written a test case to explicit the conditions of success before going to bed, then <a href="http://www.jmock.org/">jMock</a> is the tool for you.</li>
<li>If you&#8217;re a <a href="http://beust.com/weblog/2009/09/27/duct-tape-and-the-brittleness-of-agility/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+beust%2FOtakuXml+%28Otaku%2C+Cedric%27s+weblog%29&amp;utm_content=Google+Reader">duct-tape programmer</a>, think that <a href="http://www.joelonsoftware.com/">Joel Spolsky</a> rocks, and favor pragmatism over purism, then <a href="http://mockito.org/">Mockito</a> is the right tool for you. Mockito is very similar to <a href="http://easymock.org/">EasyMock</a> but is just newer and simpler to use.</li>
<li><a href="http://www.youtube.com/watch?v=O8KIUYCbIuc">For everything else, there is Mastercard</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/01/24/mockito-easymock-and-jmock/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Salary policies are a JOKE</title>
		<link>http://www.dalouche.com/wordpress/2010/01/21/salary-policies-are-a-joke/</link>
		<comments>http://www.dalouche.com/wordpress/2010/01/21/salary-policies-are-a-joke/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 03:49:55 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/?p=100</guid>
		<description><![CDATA[On wages is an excellent article clearly describing why most all companies&#8217; salary policies are a joke.
Anyone interested in wage transparency and paying value for value ?
]]></description>
			<content:encoded><![CDATA[<p><a href="http://measuringmeasures.blogspot.com/2010/01/on-wages.html">On wages</a> is an excellent article clearly describing why <span style="text-decoration: line-through;">most</span> all companies&#8217; salary policies are a joke.</p>
<p>Anyone interested in wage transparency and paying value for value ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2010/01/21/salary-policies-are-a-joke/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>git housekeeping tasks</title>
		<link>http://www.dalouche.com/wordpress/2009/12/26/git-housekeeping-tasks/</link>
		<comments>http://www.dalouche.com/wordpress/2009/12/26/git-housekeeping-tasks/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 01:52:10 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/12/26/git-housekeeping-tasks/</guid>
		<description><![CDATA[Every once in a while, it is necessary to perform a few housekeeping tasks to keep your git repository clean and efficient :
delete unused local branches
git branch -a
git branch -D unused_local_branch
delete unused remote branches
git push origin :unused_remote_branch
delete unused remote-tracking branches
If you use a shared-repository approach (several people have commit access to the same remote git [...]]]></description>
			<content:encoded><![CDATA[<p>Every once in a while, it is necessary to perform a few housekeeping tasks to keep your git repository clean and efficient :</p>
<p><strong>delete unused local branches</strong></p>
<blockquote><p>git branch -a</p>
<p>git branch -D unused_local_branch</p></blockquote>
<p><strong>delete unused remote branches</strong></p>
<blockquote><p>git push origin :unused_remote_branch</p></blockquote>
<p><strong>delete unused remote-tracking branches</strong></p>
<blockquote><p>If you use a shared-repository approach (several people have commit access to the same remote git repository), it will happen that someone else deletes a branch on the remote repository. Git does not automatically delete your local remote-tracking branches. To do so, it is necessary to :</p>
<p>git remote prune origin</p></blockquote>
<p><strong>clean-up unreachable commit objects</strong></p>
<blockquote><p>git prune</p></blockquote>
<p><strong>efficiently pack the repository objects</strong></p>
<blockquote><p>git gc &#8211;aggressive</p></blockquote>
<p>That&#8217;s it <img src='http://www.dalouche.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/12/26/git-housekeeping-tasks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Declarative code</title>
		<link>http://www.dalouche.com/wordpress/2009/11/18/declarative-code/</link>
		<comments>http://www.dalouche.com/wordpress/2009/11/18/declarative-code/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 01:21:14 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/11/18/declarative-code/</guid>
		<description><![CDATA[While reading david&#8217;s article about JUnit&#8217;s @Theory, I realized that the power of declarative code is often underestimated. JUnit&#8217;s @Theory feature is a kind of declarative-style programming that clearly shows the benefits of this paradigm for testing. It greatly improves code maintainability by clearly separating out the assertions from the data set creational logic. It&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>While reading david&#8217;s article about <a href="http://davidmasclet.gisgraphy.com/post/2009/11/17/faire-des-test-combinatoires-avec-les-theory-JUnit">JUnit&#8217;s @Theory</a>, I realized that the power of declarative code is often underestimated. JUnit&#8217;s @Theory feature is a kind of declarative-style programming that clearly shows the benefits of this paradigm for testing. It greatly improves code maintainability by clearly separating out the assertions from the data set creational logic. It&#8217;s important to realize that not just tests can benefit from declarative-style programming, and here are a few concepts that you might be interested in :</p>
<ul>
<li>The <a href="http://martinfowler.com/apsupp/spec.pdf">Specification</a> pattern. This pattern can be used in a wide range of situations, from <a href="http://www.dalouche.com/wordpress/2009/04/23/to-go-a-little-further-in-abstracting-conditions/">abstracting domain constraints</a> to making complex data driven tests more readable thanks to the &#8220;outsourcing&#8221; of the test data creational logic out of the testcase.</li>
<li><a href="http://en.wikipedia.org/wiki/Constraint_programming">Constraint Oriented Programming</a></li>
<li><a href="http://en.wikipedia.org/wiki/Domain_Specific_Language">DSL</a>s can be used to declaratively specify what you&#8217;re interested in, rather than how you want to achieve it</li>
<li><a href="http://en.wikipedia.org/wiki/SQL">SQL</a>, <a href="http://en.wikipedia.org/wiki/XPath">XPath</a>, <a href="http://en.wikipedia.org/wiki/XSLT">XSLT</a> are all declarative programming languages that focus on the intent</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/11/18/declarative-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 reasons pair programming is not for the masses</title>
		<link>http://www.dalouche.com/wordpress/2009/09/22/10-reasons-pair-programming-is-not-for-the-masses/</link>
		<comments>http://www.dalouche.com/wordpress/2009/09/22/10-reasons-pair-programming-is-not-for-the-masses/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 13:37:39 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/09/22/10-reasons-pair-programming-is-not-for-the-masses/</guid>
		<description><![CDATA[Here is a wonderful article about pair programming, written by Obie Fernandez, from Hashrocket. The article doesn&#8217;t just cover a few politically-correct, well-known principles about pair programming that everybody already knows and nobody cares about. No, he goes WAY FURTHER than that and dissects why it works at hashrocket and doesn&#8217;t in most software shops.
As [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a <a href="http://blog.obiefernandez.com/content/2009/09/10-reasons-pair-programming-is-not-for-the-masses.html">wonderful article about pair programming</a>, written by Obie Fernandez, from <a href="http://www.hashrocket.com/">Hashrocket</a>. The article doesn&#8217;t just cover a few politically-correct, well-known principles about pair programming that everybody already knows and nobody cares about. No, he goes WAY FURTHER than that and dissects why it works at hashrocket and doesn&#8217;t in most software shops.</p>
<p>As a result, he covers hiring, hardware, salaries, skills, etc&#8230; really, really interesting  !</p>
<p>A little excerpt :</p>
<blockquote><p><em>This reason is related to #5 in the sense that most software shops don&#8217;t have enough good people to take responsibility for the truckloads of work that they&#8217;re expected to do. You can&#8217;t put idiots in charge of important projects, therefore pair programming requires double the amount of &#8220;good&#8221; people as not pair programming. </em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/09/22/10-reasons-pair-programming-is-not-for-the-masses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A good example of why code quality will never be objectively measurable</title>
		<link>http://www.dalouche.com/wordpress/2009/09/13/a-good-example-of-why-code-quality-will-never-be-objectively-measurable/</link>
		<comments>http://www.dalouche.com/wordpress/2009/09/13/a-good-example-of-why-code-quality-will-never-be-objectively-measurable/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 20:24:53 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Software Development best practices]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/09/13/a-good-example-of-why-code-quality-will-never-be-objectively-measurable/</guid>
		<description><![CDATA[I like this refactoring example a lot. As pointed out, trimming down functions to do &#8220;only one&#8221; thing is a widely known best practice, but one man’s “one thing” might be someone else’s “two things”.
So&#8230; come on with your metrics, guys! they&#8217;re probably never going to match the &#8220;WTF/min&#8221; metric of a human-being senior developer.
]]></description>
			<content:encoded><![CDATA[<p>I like this <a href="http://blog.objectmentor.com/articles/2009/09/11/one-thing-extract-till-you-drop">refactoring example</a> a lot. As pointed out, trimming down functions to do &#8220;only one&#8221; thing is a widely known best practice, but one man’s “one thing” might be someone else’s “two things”.</p>
<p>So&#8230; come on with your metrics, guys! they&#8217;re probably never going to match the &#8220;WTF/min&#8221; metric of a human-being senior developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/09/13/a-good-example-of-why-code-quality-will-never-be-objectively-measurable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convincing/evangelizing is a turn off, so what&#8217;s the key ?</title>
		<link>http://www.dalouche.com/wordpress/2009/09/13/convincingevangelizing-is-a-turn-off-so-whats-the-key/</link>
		<comments>http://www.dalouche.com/wordpress/2009/09/13/convincingevangelizing-is-a-turn-off-so-whats-the-key/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 20:12:58 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Agility]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/09/13/convincingevangelizing-is-a-turn-off-so-whats-the-key/</guid>
		<description><![CDATA[I came across this interesting article about agile evangelism (thanks to Mathieu for sharing the link).
The conclusion of the post is that if you insist too much and try to convince others that your way of doing something [in this case, agile] is superior to their way of doing the same thing, you end up [...]]]></description>
			<content:encoded><![CDATA[<p>I came across this interesting <a href="http://grantjoung.blogspot.com/2009/08/when-agile-evangelism-goes-wrong.html">article about agile evangelism</a> (thanks to Mathieu for sharing the link).</p>
<p>The conclusion of the post is that if you insist too much and try to convince others that your way of doing something [in this case, agile] is superior to their way of doing the same thing, you end up being seen as a freak. So his conclusion is to let people &#8220;learn from themselves&#8221;. So, in this scenario, I guess <strong>darwinism</strong> will then help determine the best alternative, as the<strong> inferior solutions will eventually die</strong>. awesome !</p>
<p>Now, let&#8217;s say you have some kind of interest in the success of the projects (involved in the project, somehow)  using an <strong>&#8220;inferior&#8221; solution</strong> that you consider <strong>threatening for the project</strong>.  What are your options ? The ones I see are :</p>
<ul>
<li>Debate forever in the hope that the others will rally in favor of your solution. In his article, Grant Joung seems to think it&#8217;s just making things worse, and I can understand that religious debates do not lead anywhere, as nobody is likely to rally (have you ever seen a muslim convert to Judaism just because someone made a point against  islam during a debate ??)</li>
<li>If a few others also support your solution, and depending on whether it&#8217;s worth it, you can always attempt a putch on the project and just let the unsatisfied people go away, and end up dealing with those that agree with you</li>
<li>Quit (which ends up being the same solution as Grant Joung suggests). You definitely do not want to be part of something that you know will fail</li>
</ul>
<p>Hmm.. It looks like none of the options I see is ideal&#8230; Does anyone have a suggestion ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/09/13/convincingevangelizing-is-a-turn-off-so-whats-the-key/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux is not ready for the desktop</title>
		<link>http://www.dalouche.com/wordpress/2009/05/18/linux-is-not-ready-for-the-desktop/</link>
		<comments>http://www.dalouche.com/wordpress/2009/05/18/linux-is-not-ready-for-the-desktop/#comments</comments>
		<pubDate>Mon, 18 May 2009 17:07:22 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/05/18/linux-is-not-ready-for-the-desktop/</guid>
		<description><![CDATA[Take look at : Why Linux is not (yet) ready for the desktop.
This is the first article I read on this subject that is actually giving strong, valid points. I totally agree!
]]></description>
			<content:encoded><![CDATA[<p>Take look at : <a href="http://linuxfonts.narod.ru/why.linux.is.not.ready.for.the.desktop.html">Why Linux is not (yet) ready for the desktop</a>.</p>
<p>This is the first article I read on this subject that is actually giving strong, valid points. I totally agree!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/05/18/linux-is-not-ready-for-the-desktop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looks like .NET has a long way to go&#8230;</title>
		<link>http://www.dalouche.com/wordpress/2009/04/28/looks-like-net-has-a-long-way-to-go/</link>
		<comments>http://www.dalouche.com/wordpress/2009/04/28/looks-like-net-has-a-long-way-to-go/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 03:27:49 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/04/28/looks-like-net-has-a-long-way-to-go/</guid>
		<description><![CDATA[I&#8217;ve long been convinced that the best way to choose between the different languages is to consider their respective communities, and this article definitely confirms my perception.
Relying on the technical merits of whatever platform is mostly religion. However, considering the surrounding community and environment totally makes sense. If you pick PHP as a language, no [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve long been convinced that the best way to choose between the different languages is to consider their respective communities, and <a href="http://davybrion.com/blog/2009/04/at-this-point-id-prefer-java-developers-over-net-developers/">this article</a> definitely confirms my perception.</p>
<p>Relying on the technical merits of whatever platform is mostly religion. However, considering the surrounding community and environment totally makes sense. If you pick PHP as a language, no matter what you think of it from a technical point of view, you&#8217;re going to have to deal with (or even hire) PHP developers, who have been deeply affected by the hacker syndrome. If you pick the .NET platform, you&#8217;re going to work with religious people who do not consider anything which is not an official Microsoft BestPractice. If you pick the Java platform, you&#8217;re going to deal with framework-ill people who focus more on the infrastructure than the target application. and so on&#8230;.<br />
Everything is about choice!  So, just consider this when you start your next project, I feel like it&#8217;s as important as other technical considerations..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/04/28/looks-like-net-has-a-long-way-to-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error handling in REST applications : best practices</title>
		<link>http://www.dalouche.com/wordpress/2009/04/25/error-handling-in-rest-applications-best-practices/</link>
		<comments>http://www.dalouche.com/wordpress/2009/04/25/error-handling-in-rest-applications-best-practices/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 13:38:42 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/04/25/error-handling-in-rest-applications-best-practices/</guid>
		<description><![CDATA[RESTful error handling gives a nice overview of the miscellaneous ways of handling errors in a RESTful web application. To me, the following criteria need to be met to provide decent REST error handling :

Be simple to implement (or at least, be simple for simple cases)
Be machine-parseable (so that intelligent REST clients can be built)
Be [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oreillynet.com/onlamp/blog/2003/12/restful_error_handling.html"><em>RESTful error handling</em></a> gives a nice overview of the miscellaneous ways of handling errors in a RESTful web application. To me, the following criteria need to be met to provide decent REST error handling :</p>
<ul>
<li>Be simple to implement (or at least, be simple for simple cases)</li>
<li>Be machine-parseable (so that intelligent REST clients can be built)</li>
<li>Be human-readable (so you don&#8217;t have to fire up your HTTP sniffer to understand what went wront, when you&#8217;re developping a client)</li>
<li>Follows HTTP semantics, so proxies, caching, etc continues to work correctly</li>
</ul>
<p>None of the ideas suggested in the article match all of my criteria, so here is the solution I would suggest :</p>
<ul>
<li>ALWAYS return the most appropriate HTTP error code whenever an application error happens. Sure, it might not map perfectly, but choose the one that expresses the concept correctly. It is totally absurd to always use 200 error codes, even the SOAP guys have not made that mistake ! Also make sure to use a server-side REST framework that will automatically handle common errors for you (405 for unsupported methods, etc..)</li>
<li>When the same HTTP error code maps to several application errors, add an ADDITIONAL <em>X-Application-Error-Code</em> : header that provides a simple string allowing to remove ambiguity (choose a simple all-ASCII exception name). This will allow creating simple clients that can easily parse exceptions without too much burden for simple cases</li>
<li>Add a body that allows a human being (for instance, the developer of a REST client for your service) to instantly understand what went wrong. This can take the form of either a free-form response, or a fully-parseable (XML, JSON, whatever) response body that contains a message field.</li>
<li>Only implement the fully-parseable response body when your application has matured. Do it smartly, avoid working weeks on your service before even displaying the first feature to your user <img src='http://www.dalouche.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/04/25/error-handling-in-rest-applications-best-practices/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>To go a little further in abstracting conditions</title>
		<link>http://www.dalouche.com/wordpress/2009/04/23/to-go-a-little-further-in-abstracting-conditions/</link>
		<comments>http://www.dalouche.com/wordpress/2009/04/23/to-go-a-little-further-in-abstracting-conditions/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 01:07:36 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/04/23/to-go-a-little-further-in-abstracting-conditions/</guid>
		<description><![CDATA[on the smallest possible conditions talks about abstracting conditions behind meaninful method names. Now, let&#8217;s say we want to go a step further, and want to reuse the same condition in different parts of the project&#8230;.
I wish I would explain my super-great-idea about achieving this goal, but as usual, Martin Fowler &#038; Eric Evans have [...]]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://thecodereef.blogspot.com/2009/03/on-smallest-possible-condition.html">on the smallest possible conditions</a></em> talks about abstracting conditions behind meaninful method names. Now, let&#8217;s say we want to go a step further, and want to reuse the same condition in different parts of the project&#8230;.</p>
<p>I wish I would explain my super-great-idea about achieving this goal, but as usual, Martin Fowler &#038; Eric Evans have thought about it before me, so here&#8217;s just the link to the wonderful pattern called <em><a href="http://martinfowler.com/apsupp/spec.pdf">Specification</a></em>.  You could also buy the <a href="http://domaindrivendesign.org/">Domain Driven Design </a>book, as Evans speaks about it in his book.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/04/23/to-go-a-little-further-in-abstracting-conditions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>On using IoC for initializing dispatchers</title>
		<link>http://www.dalouche.com/wordpress/2009/04/23/on-using-ioc-for-initializing-dispatchers/</link>
		<comments>http://www.dalouche.com/wordpress/2009/04/23/on-using-ioc-for-initializing-dispatchers/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 00:59:21 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/04/23/on-using-ioc-for-initializing-dispatchers/</guid>
		<description><![CDATA[This post is in response to On using containers as objects.
First of all, dispatching calls to different services based on runtime conditions is something that is needed all the time. The example explained on the code reef might not speak to everybody, though. Example scenarios of every-day use include :

You need to change the behavior [...]]]></description>
			<content:encoded><![CDATA[<p>This post is in response to <em><a href="http://thecodereef.blogspot.com/2009/04/on-using-containers-as-objects.html">On using containers as objects</a></em>.</p>
<p>First of all, dispatching calls to different services based on runtime conditions is something that is needed all the time. The example explained on <a href="http://thecodereef.blogspot.com/2009/04/on-using-containers-as-objects.html"><em>the code reef</em></a> might not speak to everybody, though. Example scenarios of every-day use include :</p>
<ul>
<li>You need to change the behavior of a payment system depending on the environment. Obviously, you cannot use the real bank service for development, so you need to switch between a DevelopmentPaymentFakeSystem and a RealWorldBankPaymentSystem implementation depending on a runtime condition (the environment on which the application is deployed)</li>
<li>You need to activate debug features (IE browser check pass-through in development mode, etc)</li>
</ul>
<p>Obviously, every programming problem can be solved by adding spaghetti code that adds a few conditions here and there in your real services. But the rest of this post assumes that for testability and maintainability reasons, you are implementing the features as different services : the fake payment system, and the real world payment system</p>
<p>The idea suggested by the aforementionned blog post is to use a front-service that will deleguate to the right implementation (real vs fake) based on a runtime condition (deployment). Even though the idea of doing that is brilliant,  I would tend to think that the provided implementation is assuming a broken, half-implemented IoC container.</p>
<p>Indeed, by using a framework such as Spring :</p>
<ul>
<li>The Spring container can directly be used as a service locator (just implement ApplicationContextAware, and spring will inject you the service locator). So, no need to create your own implementation of the container (you could always implement ApplicationContextAware later if you need to switch to a different container, as this is just an interface)</li>
<li>There is actually no need to use the IoC container as a service locator: the dispatcher service can be declared in the IoC container and one can inject it the different implementations using the IoC mechanisms. This can be accomplished using several techniques : name-based wiring (or the @Autowired annotation coupled with @Qualifier), tag-based wiring (you can now tag implementations based on some logical semantic, and then use @Autowired complemented with @Qualifier to get the right instance), or you can just have all implementations of a given interface directly injected to you so you can do your runtime logic to determine the right object (once again, the magical  @Autowired annotation is your friend, just declare an array of the given type and @Autowired it! )</li>
</ul>
<p>Sure, there are advantages of abstracting the container, but sping provides so much goodness that it&#8217;s pretty sad to avoid making use of it, or mirroring its features in custom code !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/04/23/on-using-ioc-for-initializing-dispatchers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nobody&#8217;s interested in &#8220;agility&#8221;</title>
		<link>http://www.dalouche.com/wordpress/2009/04/22/nobodys-interested-by-agility/</link>
		<comments>http://www.dalouche.com/wordpress/2009/04/22/nobodys-interested-by-agility/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 21:28:03 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Agility]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/04/22/nobodys-interested-by-agility/</guid>
		<description><![CDATA[Very nice post from Martin proulx called Personne n&#8217;est interessé par l&#8217;agilité. (french)
Something that I would add to his article is that programmers themselves are NOT INTERESTED in agility, really !
For the sake of explaining my point, let&#8217;s consider two types of developers :

Joe the programmer, who doesn&#8217;t care about code quality
Scott, the more advanced [...]]]></description>
			<content:encoded><![CDATA[<p>Very nice post from Martin proulx called <em><a href="http://pyxis-tech.com/blog/index.php/2009/04/21/53-personne-n-est-interesse-par-agile">Personne n&#8217;est interessé par l&#8217;agilité</a></em>. (french)<br />
Something that I would add to his article is that <strong>programmers</strong> themselves are <strong>NOT INTERESTED in agility</strong>, really !</p>
<p>For the sake of explaining my point, let&#8217;s consider two types of developers :</p>
<ul>
<li>Joe the programmer, who doesn&#8217;t care about code quality</li>
<li>Scott, the more advanced developer, who works as hard as possible to produce good code quality</li>
</ul>
<p>It&#8217;s pretty easy to realize that Joe doesn&#8217;t care about agility, scrum, and whatever, as he just works on whatever his hierarchy wants him to work on. Give him scrum, give him waterfall, he just won&#8217;t see a difference anyways. Code is about copy-pasting, and google is your friend !</p>
<p>Now, let&#8217;s see the case of Scott, the &#8220;elite&#8221; developer. He wants to focus on code. He likes code, he dreams about code, he wants to refactor, and he will do anything that allows him to produce better code. And usually, he just <strong>_hates_ politics</strong>. When Scott first heard of agility, what he thought was &#8220;yeahhhhhhh great!!! FINALLY something that allows me to just focus on my code&#8221;. yeah.. that was a few years ago.</p>
<p>That was true, at least for some time, because agility used to be about good developers trying to find a way to just work.</p>
<p>But now, things have changed. Agile is nearly mainstream, and most developers who claim they do agile development are just instances of Joe() who learnt how to create crappy, unmaintainable tests. The good developers have already moved to the latest bleeding edge methodology which is called &#8220;<strong>Common Sense Politic-Less Programming</strong> <strong>(CSPLP)</strong>&#8220;.  That&#8217;s what allows them to get away from the religious debates brought by the scrum and agile masses. (they prefer technical religious debates.. but that&#8217;s another problem.. <img src='http://www.dalouche.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )<br />
Once again, what they want is to produce code, not  debate forever about &#8220;how long should a daily scrum last&#8221;, &#8220;what kind of clown tricks could we do to build a better team&#8221;, or &#8220;how to teach the monkeys how to produce good code without affecting their ego &#8220;. Have you heard of google developers applying Scrum ? Have you heard of Linus torvalds bringing agile to improve Linux ? All of them just don&#8217;t care, because they already produce good, working software, that they release iteratively. And they did not need agile for that, they had their skills, and their common sense. It&#8217;s the developers who are producing the code, not the methodology ! And the successful companies have understood one thing : &#8220;if you hire the good guys, you&#8217;re gonna make great things&#8221;. It&#8217;s as simple as that.<br />
To put it in a nutshell, nobody cares about agile and scrum. While the average joe doesn&#8217;t care or hasn&#8217;t even heard about it, the elite scott is skilled-enough to apply the CSPLP methodology, which stands for Common Sense Politics-Less Programming.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/04/22/nobodys-interested-by-agility/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to learn faster in an agile development process ?</title>
		<link>http://www.dalouche.com/wordpress/2009/04/16/how-to-learn-faster-in-an-agile-development-process/</link>
		<comments>http://www.dalouche.com/wordpress/2009/04/16/how-to-learn-faster-in-an-agile-development-process/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 14:06:18 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2009/04/16/how-to-learn-faster-in-an-agile-development-process/</guid>
		<description><![CDATA[Agile software development methodologies highlight the importance of continuous learning.
Teams can take advantage of having small iterations followed by retrospectives in order to progressively get better, smarter, and learn from their errors.
And theoretically eventually, the team will get to a point where its members can efficiently work together, where every team member can produce high [...]]]></description>
			<content:encoded><![CDATA[<p>Agile software development methodologies highlight the importance of continuous learning.</p>
<p>Teams can take advantage of having small iterations followed by retrospectives in order to progressively get better, smarter, and learn from their errors.</p>
<p>And <del>theoretically</del> eventually, the team will get to a point where its members can efficiently work together, where every team member can produce high quality and maintainable code, where the sky is perfectly blue, and the sun is shining.</p>
<p>Yeah.. eventually, we will live in a perfect world&#8230;</p>
<p>However, there is something that bugs me with this approach: by letting the team &#8220;auto-organize itself to discover its own solutions to its highly specific issues&#8221;, we actually end up having the team <strong>re-invent the wheel to solve the always-same problems</strong> that every development team faces. Yes, guess what ? At some point, sometime in the future, the team will discover that it needs to write decent OO code, that it needs to have a decent coverage of carefully written tests or executable specifications (TDD, BDD), that the domain needs to be properly externalized from the technical code (DDD), that it needs decent modelling skills, that IoC enhances the testability of their code,that it needs to decouple the code with small modules and services, that junior developers need to be coached by senior ones, and so on&#8230;. Or.. the team won&#8217;t discover it, because the project will lack money at some point, and everything will need to start from scratch again.. Wao! so productive !</p>
<p>So, the question is.. What can we do to <strong>reduce the duration of the learning curve</strong> ? How can we make sure new projects can benefit from the experience of previous ones ? That&#8217;s exactly the debate we have had with a few guys from Pyxis Technologies (<a rel="nofollow" href="http://www.pyxis-tech.ca/">http://www.pyxis-tech.ca</a>).</p>
<p>When dealing with organizational coaching (Scrum, Agile), the idea of imposing engineering practices (XP, DDD, ..) was totally rejected by a few people that had concrete examples of failures. Most developers have a great ego and still haven&#8217;t learned enough of programming to just admit they can learn more from others.</p>
<p>So, what are the other ideas that were thrown ? Everyone seemed to agree that most of the problem lies in the beginning of the contract: every Scrum/development contract should start with an initial diagnostic, that states the technical debt accumulated by the team. This can then serve as the basis of an execution plan. Most of the challenge lies in linking the technical recommendations with business objectives, and clearly explaining the value of these engineering practices to the product owner and stake holders.<br />
Once the product owner (PO) agrees with the values and the vision, most of the job is done. The team is supposed to work on the PO&#8217;s priorities, and the technical coaching will be seen as a wonderful help to meet the business objectives.</p>
<p>Of course, in order to achieve this, a few things will need to be sorted out such as compiling the list of the best practices that we embrace. But nothing impossible here, I guess.</p>
<p>Is that enough to learn faster ? probabably. Is that enough to learn wayy faster ? probably not ! We will still see crappy code being produced for months (years ?), and projects failing because of that. So, what can we do to <strong><em>DRASTICALLY</em></strong> improve the quality of code that is produced by those teams ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2009/04/16/how-to-learn-faster-in-an-agile-development-process/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Acegi and AppFuse 2.0 Captcha</title>
		<link>http://www.dalouche.com/wordpress/2007/04/17/acegi-and-appfuse-20-captcha/</link>
		<comments>http://www.dalouche.com/wordpress/2007/04/17/acegi-and-appfuse-20-captcha/#comments</comments>
		<pubDate>Tue, 17 Apr 2007 14:26:50 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2007/04/17/acegi-and-appfuse-20-captcha/</guid>
		<description><![CDATA[Just a few words to give my opinion about this post on Acegi and AppFuse 2.0.
ACEGI
1. If you use composition, your domain objects don&#8217;t have to implement the UserDetails interface, so you don&#8217;t have to &#8220;pollute&#8221; them.
1&#8242;. Even if you do not use composition, implementing an interface doesn&#8217;t  mean your domain objects are not POJOs [...]]]></description>
			<content:encoded><![CDATA[<p>Just a few words to give my opinion about <a href="http://jroller.com/page/JavaStuff?entry=acegi_and_appfuse_2_0">this post on Acegi and AppFuse 2.0</a>.</p>
<p>ACEGI</p>
<p>1. If you use composition, your domain objects don&#8217;t have to implement the UserDetails interface, so you don&#8217;t have to &#8220;pollute&#8221; them.</p>
<p>1&#8242;. Even if you do not use composition, implementing an interface doesn&#8217;t  mean your domain objects are not POJOs anymore. However, having to inherit some base class makes them not POJO, which is not the case with Acegi.</p>
<p>2. There is no concrete provider, but once again, if you wrap your AccountDao (or whatever JPA/Hibernate Dao ), implementing the provider takes 2 or 3 lines of code&#8230;.</p>
<p>3.  Yes, indeed the documentation is not easy to deal with&#8230;</p>
<p>APPFUSE</p>
<p>1. Annotations vs XML debate&#8230; I guess it&#8217;s a matter of taste.. XML is definitely more powerful, etc, but you don&#8217;t generally need this power, and ease of maintenance can be considered as more important that theoretical flexibility&#8230;</p>
<p>2. I agree.
</p>
<p><!--45605dc4b50a0efe27e20b17cb5d4d41-->
</p>
<p><!--0461dc3e0823af57944426758e3d9c2e-->
</p>
<p><!--1ad546358f088efa7755058badacb6ab-->
</p>
<p><!--cce24683abd177c5b11a421c1673c7a6--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2007/04/17/acegi-and-appfuse-20-captcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Re-inventing the wheel vs Integrating many libraries..</title>
		<link>http://www.dalouche.com/wordpress/2007/03/03/re-inventing-the-wheel-vs-integrating-many-libraries/</link>
		<comments>http://www.dalouche.com/wordpress/2007/03/03/re-inventing-the-wheel-vs-integrating-many-libraries/#comments</comments>
		<pubDate>Sat, 03 Mar 2007 09:26:49 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2007/03/03/re-inventing-the-wheel-vs-integrating-many-libraries/</guid>
		<description><![CDATA[I happened to read this blog entry about NOT reinventing the wheel. I 100% agree with the author. However, I would like to add something important : Reinventing the wheel is bad, but integrating too much stuff together will necessarily cause headaches about version incompatibilities, subtle problems, etc..
For instance&#8230; Let&#8217;s say you want to display [...]]]></description>
			<content:encoded><![CDATA[<p>I happened to read <a href="http://jroller.com/page/Faisal?entry=disadvantages_of_re_inventing_the">this blog entry</a> about NOT reinventing the wheel. I 100% agree with the author. However, I would like to add something important : Reinventing the wheel is bad, but integrating too much stuff together will necessarily cause headaches about version incompatibilities, subtle problems, etc..</p>
<p>For instance&#8230; Let&#8217;s say you want to display AJAX-pages that will query the server asynchronously for some stuff, and display the result to the user. One of the best alternatives is <a href="http://getahead.ltd.uk/dwr/">DWR</a>, so let&#8217;s say you use version 2, because it supports annotations, etc..</p>
<p>Now, you want to create AJAX-validation of your forms. You don&#8217;t want to reinvent the wheel, so you use something like <a href="http://struts.apache.org/2.x/">Struts2</a>, with the ajax theme. Bad luck ! Struts2 seems to work fine with DWR1, but one will have problems with DWR2&#8230; How do you solve the issue ? Patching, patching, patching, if you have the time.</p>
<p>The problem is that this kind of headaches constantly happens whenever you use a few frameworks and libraries, which completly kills the productivity&#8230; Another real headache  would be the use of Spring 2 + AspectJ + Hibernate to Dependency-inject POJOs&#8230; The problem + solution is described on this <a href="http://forum.springframework.org/showthread.php?p=95320#post95320">post</a>&#8230;</p>
<p>Another example I came accross would be the incompatibility between some prior ActiveMQ  version (before 4.x was released) and Spring 2.0, whereas everything was working fine in 2.0 RC4&#8230; The problem came from Xbean 2.6 which was incompatible with Spring 2.0 final&#8230;.</p>
<p>And I could post hundreds of framework-headaches &#8230; I am not saying frameworks and libraries are bad (otherwise, I wouldn&#8217;t use them), but they&#8217;re not paradise either&#8230;
</p>
<p><!--0adfb1fc50cea1cfc594b1505c186224-->
</p>
<p><!--7d5964efa1c62a85335d7d7de0b7a791-->
</p>
<p><!--b61b156127b8432478bccad37ad46861-->
</p>
<p><!--af6f26cebf6999b3b0d5fef78a681e0f-->
</p>
<p><!--433b0bf6f66185a0fb4c0d7be9073ab5--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2007/03/03/re-inventing-the-wheel-vs-integrating-many-libraries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven2 for Debian ?</title>
		<link>http://www.dalouche.com/wordpress/2007/03/03/maven2-for-debian/</link>
		<comments>http://www.dalouche.com/wordpress/2007/03/03/maven2-for-debian/#comments</comments>
		<pubDate>Sat, 03 Mar 2007 09:08:07 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2007/03/03/maven2-for-debian/</guid>
		<description><![CDATA[I came accross this blog entry which is a mini &#8220;howto install maven2 under debian&#8221;. Thanks for the hint, and thanks to the Debian Java team for working on official Debian packages for maven2.
However, I think we have a deeper problem than just the lack of maven2 package..  Just take a look at the number [...]]]></description>
			<content:encoded><![CDATA[<p>I came accross <a href="http://gnu.wildebeest.org/diary-man-di/?p=35">this blog entry</a> which is a mini &#8220;howto install maven2 under debian&#8221;. Thanks for the hint, and thanks to the Debian Java team for working on official Debian packages for maven2.</p>
<p>However, I think we have a deeper problem than just the lack of maven2 package..  Just take a look at the number of jars in <a href="http://www.ibiblio.org/maven2/">Maven2 repository</a>. And this doesn&#8217;t take into consideration the jars offered on <a href="https://maven2-repository.dev.java.net/nonav/repository">Java.net</a> repository, or <a href="http://people.apache.org/repo/m2-incubating-repository">Apache Incubating</a> one.</p>
<p>So, what is the problem exactly ? Well, it is going to be IMPOSSIBLE for Debian to keep up with the crazy and constantly increasing amount of Java jars available. So, instead of trying to re-package Java libraries once again (mainstream developers already have to package them for maven1 and maven2), why not work on some integration between Debian Packages and Maven2 ones ? And when you think a bit about it, Debian has the same problem with <a href="http://pear.php.net/">PHP PEAR</a> and and <a href="http://www.cpan.org/">Perl CPAN</a>.</p>
<p>Maven2 is a full-blown java package system that expresses dependencies, etc. So, to my opinion, what Debian should do is the following :</p>
<ul>
<li>Create a notion of a &#8220;soft-depencency&#8221;. Basically, this  would mean that any Package can have hard dependencies (the current deb dependencies), and soft dependencies which could be resolved by a soft-dependency subsystem.</li>
<li>In order to deal with Java, CPAN and PEAR&#8217;s case, a soft-dependency could be expressed as prefix:dependency. A soft-dependency manager could register a prefix, and the dependency string would be subsystem-specific.  So, for instance, if I need freemarker, the dependency could be maven2:freemarker/freemarker/2.3.8</li>
</ul>
<p>Now, the question is whether Debian is ready to accept such a shift in its concept ?
</p>
<p><!--a2fb7852c0ecc36893b50e36545cc42a-->
</p>
<p><!--d705e1e34cbbe7bd6cc8b292cb9782c4-->
</p>
<p><!--7088d7e84dcb09f39845c38618a0635f--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2007/03/03/maven2-for-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo : How to animate a ProgressBar</title>
		<link>http://www.dalouche.com/wordpress/2007/02/28/dojo-how-to-animate-a-progressbar/</link>
		<comments>http://www.dalouche.com/wordpress/2007/02/28/dojo-how-to-animate-a-progressbar/#comments</comments>
		<pubDate>Wed, 28 Feb 2007 10:33:04 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2007/02/28/dojo-how-to-animate-a-progressbar/</guid>
		<description><![CDATA[Let&#8217;s say you want to display a Dojo ProgressBar, that has a max progressValue of 10 :


Now, you want to animate it so that it progressively reaches its progressValue. Something like the following will be needed :
function animateProgressBar(progressBarName, targetValue anim) {
dojo.event.connect(
anim,
&#8220;onAnimate&#8221;,
function(e) {
var bar = dojo.widget.byId(progressBarName);
bar.setProgressValue(targetValue * e.x / 100);
}
);
}
dojo.addOnLoad(
function() {
var anim = new dojo.animation.Animation(
new dojo.math.curves.Line([0], [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s say you want to display a Dojo ProgressBar, that has a max progressValue of 10 :</p>
<blockquote><p><dojo:ProgressBar id="progressBar"<br />
width="200" height="20"<br />
hasText="true"<br />
progressValue="7"<br />
maxProgressValue="10" id="testBar" showOnlyIntegers="true" /></p>
</blockquote>
<p>Now, you want to animate it so that it progressively reaches its progressValue. Something like the following will be needed :</p>
<blockquote><p>function animateProgressBar(progressBarName, targetValue anim) {<br />
dojo.event.connect(<br />
anim,<br />
&#8220;onAnimate&#8221;,<br />
function(e) {<br />
var bar = dojo.widget.byId(progressBarName);<br />
bar.setProgressValue(targetValue * e.x / 100);<br />
}<br />
);<br />
}</p>
<p>dojo.addOnLoad(<br />
function() {</p>
<p>var anim = new dojo.animation.Animation(<br />
new dojo.math.curves.Line([0], [100])<br />
, 2000);</p>
<p>animateProgressBar(<br />
&#8220;stressLevelProgressBar&#8221;,<br />
7 ,<br />
anim<br />
)</p>
<p>anim.play();<br />
}<br />
);</p>
</blockquote>
<p>And it should be working&#8230;
</p>
<p><!--55456e884cd6505f5fa20f111c983878-->
</p>
<p><!--f28721f49c29dead5a7577b777e9db9c-->
</p>
<p><!--8b2475a39e6c0ee2d91c865086335699--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2007/02/28/dojo-how-to-animate-a-progressbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xen 3.0 limitations</title>
		<link>http://www.dalouche.com/wordpress/2007/01/19/xen-30-limitations/</link>
		<comments>http://www.dalouche.com/wordpress/2007/01/19/xen-30-limitations/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 08:30:54 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2007/01/19/xen-30-limitations/</guid>
		<description><![CDATA[In a recent post, Ian lists the current limitations of Xen 3.0. Nice work ! Definitely Useful, but I would just like to add that there is a trick that I previously described, to circumvent the 3 network interfaces limit.








]]></description>
			<content:encoded><![CDATA[<p>In a recent post, Ian lists the <a href="http://ian.blenke.com/xen/3.0/limitations/xen_limitations.html">current limitations of Xen 3.0</a>. Nice work ! Definitely Useful, but I would just like to add that there is a trick that I previously described, to <a href="http://www.dalouche.com/wordpress/2006/11/26/howto-use-more-than-3-virtual-interfaces-with-xen-by-using-ip-aliasing/">circumvent the 3 network interfaces limit</a>.
</p>
<p><!--cb9927402d0fe727e5b92f60192d3cd2-->
</p>
<p><!--9b6e03dd9241d658d8a201d45c3b7400-->
</p>
<p><!--7e55d8f9774c035bde3314b1c1b90db9-->
</p>
<p><!--c1ee3284f6955ab19f6fd644c9a04c77--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2007/01/19/xen-30-limitations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java, from different viewpoints</title>
		<link>http://www.dalouche.com/wordpress/2006/12/16/java-from-different-viewpoints/</link>
		<comments>http://www.dalouche.com/wordpress/2006/12/16/java-from-different-viewpoints/#comments</comments>
		<pubDate>Sat, 16 Dec 2006 09:56:59 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2006/12/16/java-from-different-viewpoints/</guid>
		<description><![CDATA[Here is a funny, satirical comment from Daniel Spiewak on Java code produced by different people (student, professor, developer&#8230;).
We can probably draw a parallel with the funny quotes about Java  I previously cited.
My opinion is that every Java developer is aware that everything he does is far more complex than it should be. However, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jroller.com/page/djspiewak?entry=java_skill_levels">Here is a funny, satirical comment</a> from Daniel Spiewak on Java code produced by different people (student, professor, developer&#8230;).</p>
<p>We can probably draw a parallel with the funny quotes about Java  <a href="http://www.dalouche.com/wordpress/2006/11/04/funny-quote-java-vs-php/">I previously cited</a>.</p>
<p>My opinion is that every Java developer is aware that everything he does is far more complex than it should be. However,  abstraction is the key foundation of Computer Science, and most people agree that C is a good abstraction over ASM and Java/.Net are good abstractions over C. So, what is the limit of abstraction ? Are frameworks, Design Patterns, Factories and new abstractions all over the place a good thing ?</p>
<p>What is sure is that people who start using frameworks and libraries use even more of them. So, even if it is not a perfect solution, there is something great in that.
</p>
<p><!--2fe5e936fb05a8f3c6085816b860dd0f-->
</p>
<p><!--7cc6e0895b25f1441e25aeabb507810d-->
</p>
<p><!--ed238ab83c364ddffdaf5dde3a2be9ca--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2006/12/16/java-from-different-viewpoints/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>J2SE 6 : will web development finally be productive thanks to scripting ?</title>
		<link>http://www.dalouche.com/wordpress/2006/12/11/j2se-6-will-web-development-finally-be-productive-thanks-to-scripting/</link>
		<comments>http://www.dalouche.com/wordpress/2006/12/11/j2se-6-will-web-development-finally-be-productive-thanks-to-scripting/#comments</comments>
		<pubDate>Mon, 11 Dec 2006 20:14:25 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2006/12/11/j2se-6-will-web-development-finally-be-productive-thanks-to-scripting/</guid>
		<description><![CDATA[Sun just announced J2SE 6 and many java bloggers are relaying the information..
Something important for the web development community in this release is the  support for scripting languages. In fact, the trend, that has been started with Java Hotswap, is to create tools that allow Web Frameworks to be more productive for developers.
Indeed, developers are [...]]]></description>
			<content:encoded><![CDATA[<p>Sun <a href="http://www.sun.com/smi/Press/sunflash/2006-12/sunflash.20061211.1.xml">just announced J2SE 6</a> and many <a href="http://www.jroller.com/page/vkpillai?entry=javase6_0_released_today">java bloggers</a> are relaying the information..</p>
<p>Something important for the web development community in this release is the  support for scripting languages. In fact, the trend, that has been <a href="http://www.dalouche.com/wordpress/2006/12/06/java-hotswapping-support-and-developer-productivity/">started with Java Hotswap</a>, is to create tools that allow Web Frameworks to be more productive for developers.</p>
<p>Indeed, developers are tired of the develop / build / deploy cycle, and would prefer to work with the PHP-like develop / reload in browser development cycle. Well, scripting is a step in that direction, and would allow to :</p>
<ul>
<li>Keep the domain layer as strongly-typed POJOs, that are unit-tested and constantly refactored to keep a good design.</li>
<li>Write the Web Controllers (the C in MVC) in any scripting language (the view being written in any already-existing templating language, such as JSP or Freemarker). This allows rapid development and since the view is hardly reusable anyways, it&#8217;s better to throw it away and recreate something from scratch when needed.</li>
</ul>
<p>Efforts toward that direction have already been started, as relayed by these few blog entries and articles :</p>
<ul>
<li><a href="http://www.almaer.com/blog/archives/000312.html">Christian groovin&#8217; with webwork 2</a></li>
<li><a href="http://www.theserverside.com/tt/blogs/showblog.tss?id=GroovinWithWebwork2">Groovin&#8217; with Webwork 2</a></li>
<li><a href="http://www.theserverside.com/news/thread.tss?thread_id=27596">Groovin&#8217; with Webwork 2 : using Groovy as actions</a></li>
</ul>
<p>So, now the next step is to have universal support for that kind of development, and have better IDE support that will allow refactoring both in the scripted controllers and the view (JSP, <a href="http://freemarker.sourceforge.net/">Freemarker</a>..). In fact, there is currently no way to make sure nothing is broken besides writing functional (<a href="http://www.openqa.org/selenium/">Selenium</a>, <a href="http://webtest.canoo.com/webtest/manual/WebTestHome.html">Canoo Webtest</a>, <a href="http://httpunit.sourceforge.net/">HttpUnit</a>&#8230;) tests.
</p>
<p><!--a76e346db18717cb7eb8a6157c0d85d6-->
</p>
<p><!--563d3ac240a2c9ef14addf96d32f6936-->
</p>
<p><!--98d190ff48165f65fe7c7d03fd182cd1--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2006/12/11/j2se-6-will-web-development-finally-be-productive-thanks-to-scripting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meta Patterns</title>
		<link>http://www.dalouche.com/wordpress/2006/12/11/meta-patterns/</link>
		<comments>http://www.dalouche.com/wordpress/2006/12/11/meta-patterns/#comments</comments>
		<pubDate>Mon, 11 Dec 2006 19:52:31 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Methodologies]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2006/12/11/meta-patterns/</guid>
		<description><![CDATA[Jonathan Locke wrote a post about Meta Patterns. I don&#8217;t exactly understand what he means by using the &#8220;Meta Pattern&#8221; expression, but this definitely looks exciting.
In any case, I am curious to see one or two examples of these Meta Patterns to truly understand his thoughts.




]]></description>
			<content:encoded><![CDATA[<p>Jonathan Locke wrote a post about <a href="http://www.jroller.com/page/JonathanLocke?entry=design_meta_patterns">Meta Patterns</a>. I don&#8217;t exactly understand what he means by using the &#8220;Meta Pattern&#8221; expression, but this definitely looks exciting.</p>
<p>In any case, I am curious to see one or two examples of these Meta Patterns to truly understand his thoughts.
</p>
<p><!--0ffa54b5cc29ae7d0ff23df3ba952b8d-->
</p>
<p><!--cd263c750abfffb347439ddfe041b79b--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2006/12/11/meta-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building Modern Web Applications.</title>
		<link>http://www.dalouche.com/wordpress/2006/12/11/building-modern-web-applications/</link>
		<comments>http://www.dalouche.com/wordpress/2006/12/11/building-modern-web-applications/#comments</comments>
		<pubDate>Mon, 11 Dec 2006 17:00:32 +0000</pubDate>
		<dc:creator>Sami Dalouche</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.dalouche.com/wordpress/2006/12/11/building-modern-web-applications/</guid>
		<description><![CDATA[An interesting post about HTML, CSS is available here. It&#8217;s definitely worth reading it.


]]></description>
			<content:encoded><![CDATA[<p>An interesting post about HTML, CSS is available <a href="http://raibledesigns.com/page/rd?entry=tse_building_modern_web_applications">here</a>. It&#8217;s definitely worth reading it.
</p>
<p><!--235d4731f4098533f31339b6133b1c94--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dalouche.com/wordpress/2006/12/11/building-modern-web-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
