<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments for A Java geek</title>
	<atom:link href="http://blog.frankel.ch/comments/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.frankel.ch</link>
	<description>Nicolas Fränkel blog</description>
	<lastBuildDate>Mon, 17 Jun 2013 21:56:55 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<item>
		<title>Comment on MongoDB course, thoughts and feedback by fabien7474</title>
		<link>http://blog.frankel.ch/mongodb-course-thoughts-and-feedback/comment-page-1#comment-6678</link>
		<dc:creator>fabien7474</dc:creator>
		<pubDate>Mon, 17 Jun 2013 21:56:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=3340#comment-6678</guid>
		<description><![CDATA[Hi Nicolas,

First I&#039;d like to thank you for being the main cause of letting me know about these 10gen MongoDB Courses via your twitter account (mine is @fabien7474). I have approximately the same background as yours and it was the first time I had the opportunity to practice some MongoDB stuff. 

Concerning your feedback, I do agree with many of your points but not all. 

1. &quot;Thank you 10Gen for giving these free course&quot; =&gt; Agree 
2. &quot;Course is very practical...&quot; =&gt; Definitely
3. &quot;The course is said to be “for Java Developers”. Unfortunately not...&quot; =&gt; Yes your are right. This is not a course for Java developer but for any agnostic language developer who can follow this teaching without any difficulties

However I have to mitigate your two last points. 

First, Java API is basic but, if you are about to use MongoDB in a Java application, you better not have using this API directly...the same way we don&#039;t use JDBC API anymore in Database Relational space. Sylvain has pointed out some wrapper-like Java API. I will give you another awesome one : Gorm MongoDB plugin  (http://grails.org/plugin/mongodb) that integrates the Mongo document datastore into Grails, providing a GORM API onto it. Simply awesome.  You can use dynamic finder (ex: Person.findByName(&quot;Bob&quot;) or classical hibernate-like criteria query. 
I do agree however, that the Java code given by these lessons so far is not a good practice for code safety and maintainability.

The only point I truly disagree concerns the Aggregation framework. It took me time to get familiar with the concept, but it is much more powerful that plain SQL code. The concept of transformation and pipelines is actually very natural, much more than SQL aggregation functions used  in conjunction with GROUP BY where you end up with subqueries, temporary view/table and lot of left joins as soon as it gets complicated. Just figure out the answers for Week 5 homework if it was in plan old SQL ? 
Until this Week5 course , I didn&#039;t see any reason for myself to give up Relational Databases in a future project (except if performances or agile - promoted by schemaless style i.e. no schema migrations needed by domain model changes - are first-citizen and top priorities) but with aggregation framework, I found a practical reason for trying MongoDB in a much deeper sense.

Fabien.]]></description>
		<content:encoded><![CDATA[<p>Hi Nicolas,</p>
<p>First I&#8217;d like to thank you for being the main cause of letting me know about these 10gen MongoDB Courses via your twitter account (mine is @fabien7474). I have approximately the same background as yours and it was the first time I had the opportunity to practice some MongoDB stuff. </p>
<p>Concerning your feedback, I do agree with many of your points but not all. </p>
<p>1. &#8220;Thank you 10Gen for giving these free course&#8221; =&gt; Agree<br />
2. &#8220;Course is very practical&#8230;&#8221; =&gt; Definitely<br />
3. &#8220;The course is said to be “for Java Developers”. Unfortunately not&#8230;&#8221; =&gt; Yes your are right. This is not a course for Java developer but for any agnostic language developer who can follow this teaching without any difficulties</p>
<p>However I have to mitigate your two last points. </p>
<p>First, Java API is basic but, if you are about to use MongoDB in a Java application, you better not have using this API directly&#8230;the same way we don&#8217;t use JDBC API anymore in Database Relational space. Sylvain has pointed out some wrapper-like Java API. I will give you another awesome one : Gorm MongoDB plugin  (<a href="http://grails.org/plugin/mongodb" rel="nofollow">http://grails.org/plugin/mongodb</a>) that integrates the Mongo document datastore into Grails, providing a GORM API onto it. Simply awesome.  You can use dynamic finder (ex: Person.findByName(&#8220;Bob&#8221;) or classical hibernate-like criteria query.<br />
I do agree however, that the Java code given by these lessons so far is not a good practice for code safety and maintainability.</p>
<p>The only point I truly disagree concerns the Aggregation framework. It took me time to get familiar with the concept, but it is much more powerful that plain SQL code. The concept of transformation and pipelines is actually very natural, much more than SQL aggregation functions used  in conjunction with GROUP BY where you end up with subqueries, temporary view/table and lot of left joins as soon as it gets complicated. Just figure out the answers for Week 5 homework if it was in plan old SQL ?<br />
Until this Week5 course , I didn&#8217;t see any reason for myself to give up Relational Databases in a future project (except if performances or agile &#8211; promoted by schemaless style i.e. no schema migrations needed by domain model changes &#8211; are first-citizen and top priorities) but with aggregation framework, I found a practical reason for trying MongoDB in a much deeper sense.</p>
<p>Fabien.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MongoDB course, thoughts and feedback by Nicolas Frankel</title>
		<link>http://blog.frankel.ch/mongodb-course-thoughts-and-feedback/comment-page-1#comment-6666</link>
		<dc:creator>Nicolas Frankel</dc:creator>
		<pubDate>Mon, 17 Jun 2013 11:28:57 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=3340#comment-6666</guid>
		<description><![CDATA[In no way do I feel offended: I stated my opinion and you did yours. Unfortunately, no arguments of yours did adress mine in a concrete way.

And for me to collaborate on a project, I would need to be convinced by the product, which is far from being the case.

Cheers]]></description>
		<content:encoded><![CDATA[<p>In no way do I feel offended: I stated my opinion and you did yours. Unfortunately, no arguments of yours did adress mine in a concrete way.</p>
<p>And for me to collaborate on a project, I would need to be convinced by the product, which is far from being the case.</p>
<p>Cheers</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MongoDB course, thoughts and feedback by Sylvain</title>
		<link>http://blog.frankel.ch/mongodb-course-thoughts-and-feedback/comment-page-1#comment-6665</link>
		<dc:creator>Sylvain</dc:creator>
		<pubDate>Mon, 17 Jun 2013 10:40:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=3340#comment-6665</guid>
		<description><![CDATA[I&#039;m bit disappointed reading that kind of blog entry on MongoDB.
But then I looked up and read the header &quot;A Java geek&quot;.
And understood the point of view and therefore the bias.

1- You complain about doing too much shell. But you realized that the wrapper is the exact match of the shell commands. So what do you expect? Isn&#039;t it more accessible to everyone to try your code directly in the shell rather than requiring you to compile java code at each trial ?
2- This course is about learning how to use MongoDB. Are you surprised you have to work on the concepts and basics?
3- The aggregation framework you criticize is, in my opinion, a strength for MongoDB. It provides a build in way to describe complex datas manipulations with small yet powerfull steps. Did you realize that those operations (in the homework) would be far more complex to code if you had a Map/Reduce operation to build?

Finally, if you do not like the Java driver ... go and enhance it : it&#039;s on github.
https://github.com/mongodb/mongo-java-driver
So every one can help improving it.
And please, do not try to compare Driver and Object Mapping framework, thath will never bo the same.

I hope I didn&#039;t offence you.]]></description>
		<content:encoded><![CDATA[<p>I&#8217;m bit disappointed reading that kind of blog entry on MongoDB.<br />
But then I looked up and read the header &#8220;A Java geek&#8221;.<br />
And understood the point of view and therefore the bias.</p>
<p>1- You complain about doing too much shell. But you realized that the wrapper is the exact match of the shell commands. So what do you expect? Isn&#8217;t it more accessible to everyone to try your code directly in the shell rather than requiring you to compile java code at each trial ?<br />
2- This course is about learning how to use MongoDB. Are you surprised you have to work on the concepts and basics?<br />
3- The aggregation framework you criticize is, in my opinion, a strength for MongoDB. It provides a build in way to describe complex datas manipulations with small yet powerfull steps. Did you realize that those operations (in the homework) would be far more complex to code if you had a Map/Reduce operation to build?</p>
<p>Finally, if you do not like the Java driver &#8230; go and enhance it : it&#8217;s on github.<br />
<a href="https://github.com/mongodb/mongo-java-driver" rel="nofollow">https://github.com/mongodb/mongo-java-driver</a><br />
So every one can help improving it.<br />
And please, do not try to compare Driver and Object Mapping framework, thath will never bo the same.</p>
<p>I hope I didn&#8217;t offence you.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Hibernate hard facts – Part 5 by Greg Clark</title>
		<link>http://blog.frankel.ch/hibernate-hard-facts-part-5/comment-page-1#comment-6502</link>
		<dc:creator>Greg Clark</dc:creator>
		<pubDate>Wed, 12 Jun 2013 12:11:18 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=596#comment-6502</guid>
		<description><![CDATA[Nicolas, thank you very much. You saved me a significant amount of time today, with this article.]]></description>
		<content:encoded><![CDATA[<p>Nicolas, thank you very much. You saved me a significant amount of time today, with this article.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Modularity in Spring configuration by Fabrizio Giudici</title>
		<link>http://blog.frankel.ch/modularity-in-spring-configuration/comment-page-1#comment-6415</link>
		<dc:creator>Fabrizio Giudici</dc:creator>
		<pubDate>Wed, 05 Jun 2013 09:15:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=3322#comment-6415</guid>
		<description><![CDATA[I agree and I add a personal tip, which is giving me some satisfaction. By modularizing even the production beans.xml files (I mean, you don&#039;t have a single file, but multiple ones: e.g. a core, and then those of self-contained extra modules) you can easily implement a &quot;poor&#039;s man&quot; dynamic, modularized system. For instance, in a webapp of mine, the path given to Spring to find the beans.xml is something such as:

classpath*:/META-INF/*AutoBeans.xml,classpath*:/META-INF/WebConfigurationBeans.xml,classpath:/META-INF/LayeredFileSystemBeans.xml,classpath:/META-INF/SiteResetOnChangeDetectBeans.xml,classpath:/META-INF/HeaderLanguageOverrideBeans.xml,classpath:/META-INF/ParameterLanguageOverrideBeans.xml,classpath:/META-INF/HtmlCleanupFilterBeans.xml,classpath:/META-INF/XsltMacroFilterBeans.xml,classpath:/META-INF/AvailabilityEnforcerBeans.xml,classpath:/META-INF/ProfilingBeans.xml

The first part (classpath*:/META-INF/*AutoBeans.xml) is static, and I&#039;m using a naming convention so that everything that must be automatically activated is configured in a file that ends with &quot;AutoBeans.xml&quot;. The remaining part is appended before boot by reading a property file. This means that the application can be configured in multiple &quot;personalities&quot;. Of course, this is not as safe as OSGi, as you don&#039;t have true modules which dinamically check for dependency consistency, but in simple cases it works and doesn&#039;t bring in the OSGi complexity.]]></description>
		<content:encoded><![CDATA[<p>I agree and I add a personal tip, which is giving me some satisfaction. By modularizing even the production beans.xml files (I mean, you don&#8217;t have a single file, but multiple ones: e.g. a core, and then those of self-contained extra modules) you can easily implement a &#8220;poor&#8217;s man&#8221; dynamic, modularized system. For instance, in a webapp of mine, the path given to Spring to find the beans.xml is something such as:</p>
<p>classpath*:/META-INF/*AutoBeans.xml,classpath*:/META-INF/WebConfigurationBeans.xml,classpath:/META-INF/LayeredFileSystemBeans.xml,classpath:/META-INF/SiteResetOnChangeDetectBeans.xml,classpath:/META-INF/HeaderLanguageOverrideBeans.xml,classpath:/META-INF/ParameterLanguageOverrideBeans.xml,classpath:/META-INF/HtmlCleanupFilterBeans.xml,classpath:/META-INF/XsltMacroFilterBeans.xml,classpath:/META-INF/AvailabilityEnforcerBeans.xml,classpath:/META-INF/ProfilingBeans.xml</p>
<p>The first part (classpath*:/META-INF/*AutoBeans.xml) is static, and I&#8217;m using a naming convention so that everything that must be automatically activated is configured in a file that ends with &#8220;AutoBeans.xml&#8221;. The remaining part is appended before boot by reading a property file. This means that the application can be configured in multiple &#8220;personalities&#8221;. Of course, this is not as safe as OSGi, as you don&#8217;t have true modules which dinamically check for dependency consistency, but in simple cases it works and doesn&#8217;t bring in the OSGi complexity.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Deployit, deployment automation made easy by Ari</title>
		<link>http://blog.frankel.ch/deployit-deployment-automation-made-easy/comment-page-1#comment-5511</link>
		<dc:creator>Ari</dc:creator>
		<pubDate>Wed, 08 May 2013 10:51:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=3232#comment-5511</guid>
		<description><![CDATA[One possible competitor?

http://www.z2-environment.eu/home]]></description>
		<content:encoded><![CDATA[<p>One possible competitor?</p>
<p><a href="http://www.z2-environment.eu/home" rel="nofollow">http://www.z2-environment.eu/home</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Deployit, deployment automation made easy by Torsten</title>
		<link>http://blog.frankel.ch/deployit-deployment-automation-made-easy/comment-page-1#comment-5509</link>
		<dc:creator>Torsten</dc:creator>
		<pubDate>Tue, 07 May 2013 14:12:01 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=3232#comment-5509</guid>
		<description><![CDATA[How does it compare to OS dependent tools like juju [1] ? Is the configuration management of the system also part of deployit, e.g. when my app and infrastructure around it support multiple modes, like development, testing, production?

[1] https://juju.ubuntu.com/]]></description>
		<content:encoded><![CDATA[<p>How does it compare to OS dependent tools like juju [1] ? Is the configuration management of the system also part of deployit, e.g. when my app and infrastructure around it support multiple modes, like development, testing, production?</p>
<p>[1] <a href="https://juju.ubuntu.com/" rel="nofollow">https://juju.ubuntu.com/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Design by contract and bean validation by Christian Schlichtherle</title>
		<link>http://blog.frankel.ch/design-by-contract-and-bean-validation/comment-page-1#comment-4706</link>
		<dc:creator>Christian Schlichtherle</dc:creator>
		<pubDate>Mon, 22 Apr 2013 08:29:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=3218#comment-4706</guid>
		<description><![CDATA[I enjoy reading your blog postings, but I object to this one. Maybe your example is just too contrived, but like Fabien and Frisian said, a String is a poor replacement for a proper type. The benefits of using a proper type are:

* You can enforce validation in the constructor of the EmailAddress class instead of validating the email address wherever it is used, i.e. when passing it to a method. This may result in big run time savings.

* Everywhere your use the EmailAddress class, you get compile time checking. Assuming the constructor of the EmailAddress class is correct, you can then rest assured that the parameter is a valid email address.

* Nobody needs a stinking framework to do a programmer&#039;s job. ;-)]]></description>
		<content:encoded><![CDATA[<p>I enjoy reading your blog postings, but I object to this one. Maybe your example is just too contrived, but like Fabien and Frisian said, a String is a poor replacement for a proper type. The benefits of using a proper type are:</p>
<p>* You can enforce validation in the constructor of the EmailAddress class instead of validating the email address wherever it is used, i.e. when passing it to a method. This may result in big run time savings.</p>
<p>* Everywhere your use the EmailAddress class, you get compile time checking. Assuming the constructor of the EmailAddress class is correct, you can then rest assured that the parameter is a valid email address.</p>
<p>* Nobody needs a stinking framework to do a programmer&#8217;s job. <img src='http://blog.frankel.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Design by contract and bean validation by Frisian</title>
		<link>http://blog.frankel.ch/design-by-contract-and-bean-validation/comment-page-1#comment-4697</link>
		<dc:creator>Frisian</dc:creator>
		<pubDate>Mon, 22 Apr 2013 07:13:29 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=3218#comment-4697</guid>
		<description><![CDATA[Using a String for an e-mail address is an unnecessary exposure of implementation details. Just like Fabien said, an e-mail address should be encapsulated in a dedicated EmailAddress class with a meaningful API. 
Besides, JSR-303 annotations are dangerous, because there is no way to enforce validation. If the validation isn&#039;t switched on, any argument will be accepted. The same goes for assert keyword, which can be deactivated at runtime.
That&#039;s why I still prefer built-in constructur validation to annotations in value objects. Unless someone changed the source code, one can be sure it represents a valid value.]]></description>
		<content:encoded><![CDATA[<p>Using a String for an e-mail address is an unnecessary exposure of implementation details. Just like Fabien said, an e-mail address should be encapsulated in a dedicated EmailAddress class with a meaningful API.<br />
Besides, JSR-303 annotations are dangerous, because there is no way to enforce validation. If the validation isn&#8217;t switched on, any argument will be accepted. The same goes for assert keyword, which can be deactivated at runtime.<br />
That&#8217;s why I still prefer built-in constructur validation to annotations in value objects. Unless someone changed the source code, one can be sure it represents a valid value.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Design by contract and bean validation by fabien7474</title>
		<link>http://blog.frankel.ch/design-by-contract-and-bean-validation/comment-page-1#comment-4676</link>
		<dc:creator>fabien7474</dc:creator>
		<pubDate>Sun, 21 Apr 2013 22:39:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.frankel.ch/?p=3218#comment-4676</guid>
		<description><![CDATA[This is a very interesting feature that should be generalize to all methods and layers of your application.
BTW, it does already exist in a certain way with Spring MVC data mapping mechanism with a method like his : 
void sendEmail(@Valid Email email)

I personally prefer to type my String as an Email object and validate the object itself (with proper JSR-303 annotations). This is closer to the #DDDesign philosophy and even much more clear for API and documentation]]></description>
		<content:encoded><![CDATA[<p>This is a very interesting feature that should be generalize to all methods and layers of your application.<br />
BTW, it does already exist in a certain way with Spring MVC data mapping mechanism with a method like his :<br />
void sendEmail(@Valid Email email)</p>
<p>I personally prefer to type my String as an Email object and validate the object itself (with proper JSR-303 annotations). This is closer to the #DDDesign philosophy and even much more clear for API and documentation</p>
]]></content:encoded>
	</item>
</channel>
</rss>
