<?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"
	>
<channel>
	<title>Comments for Sadek Drobi's Blog</title>
	<atom:link href="http://sadekdrobi.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://sadekdrobi.com</link>
	<description>Sadek Drobi</description>
	<pubDate>Wed, 20 Aug 2008 16:53:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>Comment on And you get all the VM libraries for free! Is it actually what I want when I switch languages? by Sadache</title>
		<link>http://sadekdrobi.com/2008/06/01/and-you-get-all-the-vm-libraries-for-free-is-it-actually-what-i-want-when-i-switch-languages/#comment-2959</link>
		<dc:creator>Sadache</dc:creator>
		<pubDate>Wed, 04 Jun 2008 09:36:33 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/2008/06/01/and-you-get-all-the-vm-libraries-for-free-is-it-actually-what-i-want-when-i-switch-languages/#comment-2959</guid>
		<description>@Gabriel
I agree. My point is that you can't satisfy the promise of seamless integration and interoperability if you don't at least wrap the existing libraries for the target paradigm.
As I mentioned above in the post, I don't want to go implementing mature libraries from scratch, but it would be kind of nice to have them wrapped and adapted for the new language.
And of course I am not doubting the benefits of runtime capabilities you get, it is a big opportunity to be able to deploy on an already mature VM. However, vm specific libraries limit portability, and sometimes don't fit with language paradigm, at least not out of the box.</description>
		<content:encoded><![CDATA[<p>@Gabriel<br />
I agree. My point is that you can&#8217;t satisfy the promise of seamless integration and interoperability if you don&#8217;t at least wrap the existing libraries for the target paradigm.<br />
As I mentioned above in the post, I don&#8217;t want to go implementing mature libraries from scratch, but it would be kind of nice to have them wrapped and adapted for the new language.<br />
And of course I am not doubting the benefits of runtime capabilities you get, it is a big opportunity to be able to deploy on an already mature VM. However, vm specific libraries limit portability, and sometimes don&#8217;t fit with language paradigm, at least not out of the box.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on And you get all the VM libraries for free! Is it actually what I want when I switch languages? by Gabriel C.</title>
		<link>http://sadekdrobi.com/2008/06/01/and-you-get-all-the-vm-libraries-for-free-is-it-actually-what-i-want-when-i-switch-languages/#comment-2954</link>
		<dc:creator>Gabriel C.</dc:creator>
		<pubDate>Wed, 04 Jun 2008 01:32:18 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/2008/06/01/and-you-get-all-the-vm-libraries-for-free-is-it-actually-what-i-want-when-i-switch-languages/#comment-2954</guid>
		<description>I understand what you're saying, but... you really want to implement your TCP/IP stack from scratch? or your web server? or your security libraries? I prefer to leverage existing the infrastructure and focus on solving the problem. If the language is successful, new libraries will appear that better reflect the language's philosophy (or as you say, a wrapper that hides the "ugliness", at least).
Also, if you're using the JVM/CLR libraries as containers for your code, you can maintain all the paradigm's purity but leverage the runtime capabilities of the architecture (distribution, load balancing, monitoring, etc...).</description>
		<content:encoded><![CDATA[<p>I understand what you&#8217;re saying, but&#8230; you really want to implement your TCP/IP stack from scratch? or your web server? or your security libraries? I prefer to leverage existing the infrastructure and focus on solving the problem. If the language is successful, new libraries will appear that better reflect the language&#8217;s philosophy (or as you say, a wrapper that hides the &#8220;ugliness&#8221;, at least).<br />
Also, if you&#8217;re using the JVM/CLR libraries as containers for your code, you can maintain all the paradigm&#8217;s purity but leverage the runtime capabilities of the architecture (distribution, load balancing, monitoring, etc&#8230;).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on And you get all the VM libraries for free! Is it actually what I want when I switch languages? by john</title>
		<link>http://sadekdrobi.com/2008/06/01/and-you-get-all-the-vm-libraries-for-free-is-it-actually-what-i-want-when-i-switch-languages/#comment-2949</link>
		<dc:creator>john</dc:creator>
		<pubDate>Tue, 03 Jun 2008 19:35:35 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/2008/06/01/and-you-get-all-the-vm-libraries-for-free-is-it-actually-what-i-want-when-i-switch-languages/#comment-2949</guid>
		<description>Not only it makes the your code ugly, it also adds weired feature to these later developped languages. Look at the Ruby experience, Ruby came with its proper frameworks for persistence and web and that is why I love it. I don't think this promise is benefitial, at least not as much as it claims to be.</description>
		<content:encoded><![CDATA[<p>Not only it makes the your code ugly, it also adds weired feature to these later developped languages. Look at the Ruby experience, Ruby came with its proper frameworks for persistence and web and that is why I love it. I don&#8217;t think this promise is benefitial, at least not as much as it claims to be.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Why Haskell Matters -&#62; Abstraction :: Multi Inheritance, Interfaces, Extension Methods and Type Classes by Karmen</title>
		<link>http://sadekdrobi.com/2008/05/12/why-haskell-matters-abstraction-multi-inheritance-interfaces-extension-methods-and-type-classes/#comment-2693</link>
		<dc:creator>Karmen</dc:creator>
		<pubDate>Mon, 12 May 2008 23:33:01 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/2008/05/12/why-haskell-matters-abstraction-multi-inheritance-interfaces-extension-methods-and-type-classes/#comment-2693</guid>
		<description>CLOS is nice and quite flexible, but it doesn't give you what type classes do.


Type classes allow you to externally declare a role a particular type can play, potentially dependent on what other classes it
implements.


Type classes don't give you nifty method combinators that CLOS has, but CLOS doesn't give you the static capabilities that
typeclasses do. Two different beasts with different aims, with properties that are imho rather illustrative of their host languages.</description>
		<content:encoded><![CDATA[<p>CLOS is nice and quite flexible, but it doesn&#8217;t give you what type classes do.</p>
<p>Type classes allow you to externally declare a role a particular type can play, potentially dependent on what other classes it<br />
implements.</p>
<p>Type classes don&#8217;t give you nifty method combinators that CLOS has, but CLOS doesn&#8217;t give you the static capabilities that<br />
typeclasses do. Two different beasts with different aims, with properties that are imho rather illustrative of their host languages.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Why Haskell Matters -&#62; Abstraction :: Multi Inheritance, Interfaces, Extension Methods and Type Classes by foo</title>
		<link>http://sadekdrobi.com/2008/05/12/why-haskell-matters-abstraction-multi-inheritance-interfaces-extension-methods-and-type-classes/#comment-2692</link>
		<dc:creator>foo</dc:creator>
		<pubDate>Mon, 12 May 2008 22:29:18 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/2008/05/12/why-haskell-matters-abstraction-multi-inheritance-interfaces-extension-methods-and-type-classes/#comment-2692</guid>
		<description>Check out the Common Lisp Object System which handles that stuff without problems. It has multiple inheritance. It has multi-methods dispatching over all args. The methods are defined outside the class and bundled as generfic functions, which are objects, too. It also allows one to define different kinds of methods (:before, :after, :primary, :around and even user defined kinds). It also allows to develop your own schemes how the applicable methods are combined, allowing all kinds of user-specified code-reuse. If there still is a need for more, the object system itself is extensible.</description>
		<content:encoded><![CDATA[<p>Check out the Common Lisp Object System which handles that stuff without problems. It has multiple inheritance. It has multi-methods dispatching over all args. The methods are defined outside the class and bundled as generfic functions, which are objects, too. It also allows one to define different kinds of methods (:before, :after, :primary, :around and even user defined kinds). It also allows to develop your own schemes how the applicable methods are combined, allowing all kinds of user-specified code-reuse. If there still is a need for more, the object system itself is extensible.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Why Haskell Matters -&#62; Abstraction :: Multi Inheritance, Interfaces, Extension Methods and Type Classes by Marijn Schouten</title>
		<link>http://sadekdrobi.com/2008/05/12/why-haskell-matters-abstraction-multi-inheritance-interfaces-extension-methods-and-type-classes/#comment-2691</link>
		<dc:creator>Marijn Schouten</dc:creator>
		<pubDate>Mon, 12 May 2008 22:14:32 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/2008/05/12/why-haskell-matters-abstraction-multi-inheritance-interfaces-extension-methods-and-type-classes/#comment-2691</guid>
		<description>If you want a more powerful object system, then why don't you look at CLOS?</description>
		<content:encoded><![CDATA[<p>If you want a more powerful object system, then why don&#8217;t you look at CLOS?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Religion driven industry: buzzwords and checklists vs. thinking and inspection by News and Current Events Talks</title>
		<link>http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/#comment-2670</link>
		<dc:creator>News and Current Events Talks</dc:creator>
		<pubDate>Thu, 08 May 2008 00:59:31 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/#comment-2670</guid>
		<description>I could agree more with Coplien. True, "Focusing on quality requires considering every weapon in the arsenal."

-Joanne</description>
		<content:encoded><![CDATA[<p>I could agree more with Coplien. True, &#8220;Focusing on quality requires considering every weapon in the arsenal.&#8221;</p>
<p>-Joanne</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on OBSEV: Model View Presenter w/Command (sadek) by Igor Rozenberg</title>
		<link>http://sadekdrobi.com/2006/11/22/obsev-model-view-presenter-wcommand-sadek/#comment-2658</link>
		<dc:creator>Igor Rozenberg</dc:creator>
		<pubDate>Thu, 01 May 2008 03:25:52 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/?p=7#comment-2658</guid>
		<description>Sadek, 

Did you heard about Presenter First variation of the MVP pattern? IMHO in non-Web world it's more natural to create an instance of non-visual component (Presenter class) and after that create a brand new View (or reference an existing View). 

Regards,
Igor</description>
		<content:encoded><![CDATA[<p>Sadek, </p>
<p>Did you heard about Presenter First variation of the MVP pattern? IMHO in non-Web world it&#8217;s more natural to create an instance of non-visual component (Presenter class) and after that create a brand new View (or reference an existing View). </p>
<p>Regards,<br />
Igor</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on And Design Patterns suddenly Degrade! by John "Z-Bo" Zabroski</title>
		<link>http://sadekdrobi.com/2008/04/20/and-design-patterns-suddenly-degrade/#comment-2636</link>
		<dc:creator>John "Z-Bo" Zabroski</dc:creator>
		<pubDate>Fri, 25 Apr 2008 05:13:11 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/2008/04/20/and-design-patterns-suddenly-degrade/#comment-2636</guid>
		<description>@sadek

Yes, I recognize that is how you see patterns.  However, patterns are supposed to be formal elements of real world solutions.  They are not simply proven to work, but they can (and should be) proven  through formal analysis to have unique properties.  I'm happy for you, but it seems to me like you are undergoing a mathematical re-awakening more than anything else.  That's great, but don't drop what you already learned at the gates just so you can pass through into Heaven.

Software engineering can be *both* intuitively appealing *and* mathematical.  Creational patterns allow composition, by definition.  Behavioral patterns also allow composition, by definition.  Structural patterns also allow composition, by definition.  People often misunderstand the GoF design patterns.  "Prefer composition over inheritance" is a major principle behind these patterns.  Yet, just the other day I was reading a blog that *tried* and *failed* at teaching the most mathematical design pattern of all: Singleton.  Someone in the comments stated that the purpose of a Singleton was to create a "pattern of prohibition - to stop a programmer doing something they shouldn't do by accident by enforcing the primary goals of single point of access".  This is not true, either.  Singleton is a mathematical concept.  Even in Lisp, there is a singleton: *nil* or the *empty* list (depending on the dialect of Lisp).  This is the most natural expression of Singleton possible, and absolutely essential to Lisp: it is the ATOM! of Lisp.

It is true that Singleton has major repercussions on referential transparency, seeing as how it enforces global state at the architectural layer it is defined in.  In Lisp, nil is totally referentially transparent, so you can define it at any layer of your architecture you choose.  The symbol is global scope, but not many people say it is global state.  This is not true.  It is a globally-defined state, not a global state.  A global state would mean you've hardwired something significant into the system that you truly intended as a "pattern of prohibition".  People do this all the time, because they can't see the consequences of their actions, both intuitively and mathematically!

Take for instance your typical Dependency Injection framework that ends up injecting objects into Controllers and Managers.  What is the point in injecting _anything_ into an object with the name "Manager" or "Controller"?  Objects named "Manager" or "Controller" are the true prohibition, because they hard-wire state-process decisions and force actions to go through them - you need managerial approval from the Boss component to get work done.  This is far from composition, and also far from the goals of inheritance.  It's simply bad system planning and design.  The end result is that you have an architecture that responds slowly to maintenance actions, because any assumptions made in the Manager or Controller are going to be impossible to revisit, because they directly impact the whole system.  At this point, a "bug" in such a component becomes a "feature".  If you don't like it, well, too bad!

I could rant for hours about this, and how it is important to understand design and examples of good design BY NAME and why they work, not simply  what they are used for.  Suffice to say, if you are experiencing a mathematical reawakening, don't think for a second that design patterns degrade.  Instead, I encourage you to unite your intuition with your growing mathematical prowess.  Try learning the most intuitive mathematical system of all: Geometry.  Hyperbolic geometries, Finite geometries, Infinite geometries, etc.  At least, Modern Geometry was the course in college that taught ME the most about systems thinking and how to design programs.  At that point, it was clear to me that specification trumps structure, and that understanding the importance of an intuitive and mathematically appealing specification is a loftier goal than understanding design patterns.</description>
		<content:encoded><![CDATA[<p>@sadek</p>
<p>Yes, I recognize that is how you see patterns.  However, patterns are supposed to be formal elements of real world solutions.  They are not simply proven to work, but they can (and should be) proven  through formal analysis to have unique properties.  I&#8217;m happy for you, but it seems to me like you are undergoing a mathematical re-awakening more than anything else.  That&#8217;s great, but don&#8217;t drop what you already learned at the gates just so you can pass through into Heaven.</p>
<p>Software engineering can be *both* intuitively appealing *and* mathematical.  Creational patterns allow composition, by definition.  Behavioral patterns also allow composition, by definition.  Structural patterns also allow composition, by definition.  People often misunderstand the GoF design patterns.  &#8220;Prefer composition over inheritance&#8221; is a major principle behind these patterns.  Yet, just the other day I was reading a blog that *tried* and *failed* at teaching the most mathematical design pattern of all: Singleton.  Someone in the comments stated that the purpose of a Singleton was to create a &#8220;pattern of prohibition - to stop a programmer doing something they shouldn&#8217;t do by accident by enforcing the primary goals of single point of access&#8221;.  This is not true, either.  Singleton is a mathematical concept.  Even in Lisp, there is a singleton: *nil* or the *empty* list (depending on the dialect of Lisp).  This is the most natural expression of Singleton possible, and absolutely essential to Lisp: it is the ATOM! of Lisp.</p>
<p>It is true that Singleton has major repercussions on referential transparency, seeing as how it enforces global state at the architectural layer it is defined in.  In Lisp, nil is totally referentially transparent, so you can define it at any layer of your architecture you choose.  The symbol is global scope, but not many people say it is global state.  This is not true.  It is a globally-defined state, not a global state.  A global state would mean you&#8217;ve hardwired something significant into the system that you truly intended as a &#8220;pattern of prohibition&#8221;.  People do this all the time, because they can&#8217;t see the consequences of their actions, both intuitively and mathematically!</p>
<p>Take for instance your typical Dependency Injection framework that ends up injecting objects into Controllers and Managers.  What is the point in injecting _anything_ into an object with the name &#8220;Manager&#8221; or &#8220;Controller&#8221;?  Objects named &#8220;Manager&#8221; or &#8220;Controller&#8221; are the true prohibition, because they hard-wire state-process decisions and force actions to go through them - you need managerial approval from the Boss component to get work done.  This is far from composition, and also far from the goals of inheritance.  It&#8217;s simply bad system planning and design.  The end result is that you have an architecture that responds slowly to maintenance actions, because any assumptions made in the Manager or Controller are going to be impossible to revisit, because they directly impact the whole system.  At this point, a &#8220;bug&#8221; in such a component becomes a &#8220;feature&#8221;.  If you don&#8217;t like it, well, too bad!</p>
<p>I could rant for hours about this, and how it is important to understand design and examples of good design BY NAME and why they work, not simply  what they are used for.  Suffice to say, if you are experiencing a mathematical reawakening, don&#8217;t think for a second that design patterns degrade.  Instead, I encourage you to unite your intuition with your growing mathematical prowess.  Try learning the most intuitive mathematical system of all: Geometry.  Hyperbolic geometries, Finite geometries, Infinite geometries, etc.  At least, Modern Geometry was the course in college that taught ME the most about systems thinking and how to design programs.  At that point, it was clear to me that specification trumps structure, and that understanding the importance of an intuitive and mathematically appealing specification is a loftier goal than understanding design patterns.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on And Design Patterns suddenly Degrade! by sadek</title>
		<link>http://sadekdrobi.com/2008/04/20/and-design-patterns-suddenly-degrade/#comment-2634</link>
		<dc:creator>sadek</dc:creator>
		<pubDate>Thu, 24 Apr 2008 20:46:04 +0000</pubDate>
		<guid isPermaLink="false">http://sadekdrobi.com/2008/04/20/and-design-patterns-suddenly-degrade/#comment-2634</guid>
		<description>@John
The context that differs from pattern to another is the problem domain. It exists even without the pattern. The fact that all patterns have almost the same static representation shows that they are the same tool for different kind of problems. That tool in FP is a function and higher order functions (and other abstraction tools).
When I am doing Haskell I feel much more relaxed, I just use my first class tools to solve problems without looking through a catalogue or trying to apply names to my solutions. I see patterns as a catalogue for doing composition because composision is not a first class citizin in the concerned programming languages.</description>
		<content:encoded><![CDATA[<p>@John<br />
The context that differs from pattern to another is the problem domain. It exists even without the pattern. The fact that all patterns have almost the same static representation shows that they are the same tool for different kind of problems. That tool in FP is a function and higher order functions (and other abstraction tools).<br />
When I am doing Haskell I feel much more relaxed, I just use my first class tools to solve problems without looking through a catalogue or trying to apply names to my solutions. I see patterns as a catalogue for doing composition because composision is not a first class citizin in the concerned programming languages.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
