<?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>Sadek Drobi's Blog &#187; Polyglot Programming</title>
	<atom:link href="http://sadekdrobi.com/category/polyglot-programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://sadekdrobi.com</link>
	<description>Sadek Drobi</description>
	<lastBuildDate>Tue, 08 Mar 2011 22:56:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DCI in Real World: Domain Context and Interaction with Scala in a Real World Project</title>
		<link>http://sadekdrobi.com/2009/06/10/dci-in-real-world-domain-context-and-interaction-with-scala-in-a-real-world-project/</link>
		<comments>http://sadekdrobi.com/2009/06/10/dci-in-real-world-domain-context-and-interaction-with-scala-in-a-real-world-project/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 22:40:09 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Coplien]]></category>
		<category><![CDATA[DCI]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Domain-Context-Interaction]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[Multi-languages projects]]></category>
		<category><![CDATA[Polyglot Programming]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[back-to-oop]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/06/10/dci-in-real-world-domain-context-and-interaction-with-scala-in-a-real-world-project/</guid>
		<description><![CDATA[Those that follow my twitter @sadache , me @infoQ or my blog have certainly already noticed that I am quite interested in Scala on languages&#8217; axis and in Domain Context Interaction DCI pattern on architecture axis. I always search new ways for delivering quality code which is modular and concise. Modularity offers the opportunity to [...]]]></description>
			<content:encoded><![CDATA[<p>Those that follow <a href="http://twitter.com/sadache">my twitter @sadache</a> , <a href="http://www.infoq.com/author/sadek-drobi">me @infoQ</a> or my blog have certainly already noticed that I am quite interested in Scala on languages&#8217; axis and in <a href="http://www.artima.com/articles/dci_vision.html">Domain Context Interaction DCI</a> pattern on architecture axis. I always search new ways for delivering quality code which is modular and concise. Modularity offers the opportunity to think about the problem in parts, which is typical of the way brains work, whereas conciseness makes use of imaginary system (reading code blocks like images). </p>
<p>Recently, I&#8217;ve been working on a Web Api system where, thanks to support of <a href="http://twitter.com/morlhon">@jeanlaurent</a> <a href="http://morlhon.net/blog/">http://morlhon.net/blog/</a>, I used Scala applying DCI architecture in a real world project. This post is about reporting benefits of using this approach. Other posts will follow that will be more focused on the use of Scala and Functional Programming in that project. Code included is a bit simplified and parts of the system that are not of interest are omitted.</p>
<p><span id="more-638"></span>
<p>The concerned part of the system is an API for logging a Web API usage and using it for showing interesting statistics to users and for implementing a Web 2.0 business model authorization.</p>
<p>The story starts with an API key passed as a parameter in the requested URI something like <em>product/1234?api_key=AFFSEFFVFE2344</em></p>
<p>I create an object that represents the API user containing the key: (did I tell I like one liners?)</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb.png" width="260" height="40"></a>&nbsp; </p>
<p>This is a class of an object that holds the apiKey, now I need a method that I will call to log the use of product/123 for user represented by the apiKey AFFSEFFVFE2344. What could be quite convenient and OOP-iesh is to call a <em>record</em> method on the apiKey instance, something like <em>apiUser.record(&#8230;) .</em> The problem with this, as explained in the original DCI article, is that adding these methods to the domain objects adds noise in other contexts for which recording is not relevant such as authorization and statistics, as we will see later. I would rather use here the DCI&#8217;s <em>role</em> concept (or <em>context</em>). Doing so I would say <em>(apiUser in recording role).record(&#8230;) . </em>This pseudo code tends to be very close to mixins implemented in Scala language and will look like following in real world Scala code:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image1.png"></a><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image2.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb1.png" width="617" height="57"></a>&nbsp; </p>
<p>Here the ApiUser object doesn&#8217;t contain a record method by default and so it can be shared in different contexts. In other words we kept our domain objects pure yet not scarifying OOP convenience. Now the <em>Recorder</em> is a trait that minds only business in the context of recording. The definition looks like the following:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image3.png"></a><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image4.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb2.png" width="281" height="108"></a>&nbsp; </p>
<p>Another view of the system is the end user&#8217;s statistics. Statistics should be represented in a meaningful way to the user and the user can&#8217;t care less about how the recording is done. So, it is quite desirable not to have the noise of recording when talking about the statistics view context. Here is how the call looks like in our example in Scala:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image5.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb3.png" width="667" height="63"></a> </p>
<p>Again what we are doing here looks merely like saying: I want to use the ApiUser in a statistics context and I choose to call method getRequestsPerMonthForLast12Months. I guess the convenience brought by using this approach is obvious. This is how the Statistics trait looks like:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image6.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb4.png" width="647" height="150"></a> </p>
<p>Note that as in the Recording trait, the <em>ApiUser</em> object is not passed as an explicit parameter but rather as an implicit receiver parameter (something like <em>this</em> for an object). To access it we use <em>Self</em> that refers to it<em>.</em></p>
<p>The third view of the system is what allows us to provide an authorization mechanism based on user&#8217;s activities for a business plan they choose (be it a quota per day, per month or other interesting combinations). It could be quite convenient to have the call looking like <em>apiUser.isAuthorized . </em>We get pretty close with DCI without polluting our domain object with a specific context logic:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image7.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb5.png" width="540" height="66"></a> </p>
<p>Like the previous, the Authorizer trait looks straightforward :</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image8.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb6.png" width="454" height="207"></a> </p>
<p>Now that we looked at the three views of our system introducing three examples of &#8220;<em>Context</em>&#8221; from DCI pattern we can go beyond that to discover how we use nested <em>contexts</em> (or <em>roles</em>). </p>
<p>Looking at the Authorizer trait, the ApiUser referred to by <em>Self,</em> doesn&#8217;t tell us much about<em> </em>how many requests the user did today or this month. And for authorizing user one needs a richer ApiUser that can give the necessary information that live themselves in a file or a database. But once again, we don&#8217;t want to pollute our domain object with Data Access code that varies on a different axis than the domain object itself.&nbsp; Introducing a nested context/role that adds the Data Access logic would pretty convenient here:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image9.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb7.png" width="473" height="56"></a> </p>
<p>Here <em>Self </em>is a richer ApiUser that carries Requests Data Access logic defined in the RequestsDataAccessor trait:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image10.png"></a><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image11.png"></a><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image12.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb8.png" width="848" height="193"></a>&nbsp;&nbsp; </p>
<p>And the implementation of the Authorizer trait defined in terms of <em>ApiUser with RequestsDataAccessor</em>:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image13.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb9.png" width="468" height="373"></a> </p>
<p>In the same way we implement the <em>Statistics</em> and <em>Recorder</em> traits using <em>ApiUser with RequestsDataAccessor:</em></p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image14.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb10.png" width="451" height="148"></a> </p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image15.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb11.png" width="581" height="295"></a> </p>
<p>If you are not familiar with generics ( getRequestsPer[Day] ) you can ignore them since they are not central to the subject of this post and simply use their readability to understand the purpose of the method. The use of generics in this project will be the subject of a future post.</p>
<h3>Encapsulation Test!</h3>
<p>Now in the first version of the system, the ApiKey was passed in clear in the service URI. This is not very secured as it is quite easy to get the key and use it for using the API. We might prefer to encrypt the key in some way. This fortunately changes nothing for any of our traits implementations since the decryption of the key is the responsiblity of the ApiUSer object and all what our traits need is to get the concerned ApiKey from that object which can be easily done with pattern matching. Same thing if we want to replace database logging with file system in RequestsDataAccessor. Modularity and separation of concerns are apparent in this DCI architecture implementation.</p>
<p>&nbsp;</p>
<h3>Conclusion</h3>
<p>This is a refreshing approach to OOP. The <strong>Domain Context Interaction</strong> pattern allowed us to restore interesting properties of real OOP approach yet not sacrificing modularity and separation of concerns. This simple view of &#8220;an object in several contexts&#8221; helps quite much in thinking explicitly about and understanding context boundaries. Note that an object(instance) is not defined by a single class but each instance curries the necessary context. This is essential to OOP which is NOT COP (for Class Oriented Programming ;) )</p>
<p>&nbsp;</p>
<p>Feel free to ask questions and/or comment about this implementation. Refer to original papers for more in-depth explanation of the pattern. </p>
<p>Thanks to JetBrains&#8217; IDEA and the Scala plug-in that helped me programming in Scala.</p>
<p>&nbsp;</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7cedd753-901b-4d50-b76a-a7c30a681f4e" class="wlWriterSmartContent">Mots clés Technorati : <a href="http://technorati.com/tags/DCI" rel="tag">DCI</a>,<a href="http://technorati.com/tags/Coplien" rel="tag">Coplien</a>,<a href="http://technorati.com/tags/OOP" rel="tag">OOP</a>,<a href="http://technorati.com/tags/Scala" rel="tag">Scala</a>,<a href="http://technorati.com/tags/J2EE" rel="tag">J2EE</a>,<a href="http://technorati.com/tags/Domain-Context-Interaction" rel="tag">Domain-Context-Interaction</a>,<a href="http://technorati.com/tags/Architecture" rel="tag">Architecture</a>,<a href="http://technorati.com/tags/Multi-Paradigm-Design" rel="tag">Multi-Paradigm-Design</a></div>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/06/10/dci-in-real-world-domain-context-and-interaction-with-scala-in-a-real-world-project/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Multimethod in Clojure: Should I call it first class Pattern Matching? or Pattern Matching in disguise?</title>
		<link>http://sadekdrobi.com/2009/05/27/multimethod-in-clojure-should-i-call-it-first-class-pattern-matching-or-pattern-matching-in-disguise/</link>
		<comments>http://sadekdrobi.com/2009/05/27/multimethod-in-clojure-should-i-call-it-first-class-pattern-matching-or-pattern-matching-in-disguise/#comments</comments>
		<pubDate>Wed, 27 May 2009 21:25:24 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[Multi-languages projects]]></category>
		<category><![CDATA[Polyglot Programming]]></category>
		<category><![CDATA[clojure]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/05/27/multimethod-in-clojure-should-i-call-it-first-class-pattern-matching-or-pattern-matching-in-disguise/</guid>
		<description><![CDATA[from Rich Hickey on Clojure&#8217;s Features and Implementation
Clojure multimethods are just another level of that same logic, in fact they are a realization of the last sentence I just said. They are dispatch based upon an arbitrary function of the arguments. You define a multimethod and you say &#8220;Here is a function of the arguments [...]]]></description>
			<content:encoded><![CDATA[<p>from <a href="http://www.infoq.com/interviews/hickey-clojure">Rich Hickey on Clojure&#8217;s Features and Implementation</a></p>
<blockquote><p>Clojure multimethods are just another level of that same logic, in fact they are a realization of the last sentence I just said. They are dispatch based upon an arbitrary function of the arguments. You define a multimethod and you say &#8220;Here is a function of the arguments I&#8217;d like you to use&#8221; You could look at the first argument, you could look at the 5th, you could look at all of them, you could look inside them, some member of an argument, it could look at the types or not or the values. Now, you could look at relationships between arguments, you have dispatch based upon an arbitrary function of the arguments and you have a vastly wider set of polymorphic possibilities than you had before and it&#8217;s quite powerful. In particular, it allows you to do Runtime dispatch on Runtime attributes. You don&#8217;t usually represent something like being hungry as part of something&#8217;s type, it&#8217;s some attribute that it acquires while the program is running or being outdated or things like that. Now you can access those things and you can do things polymorphically based upon that and take a lot of switch statements out of your code.</p>
</blockquote>
<p>Should I call it first class Pattern Matching? or Pattern Matching in disguise?</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/05/27/multimethod-in-clojure-should-i-call-it-first-class-pattern-matching-or-pattern-matching-in-disguise/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Interview: Don Syme Answering Questions on F#, C#, Haskell and Scala</title>
		<link>http://sadekdrobi.com/2009/03/29/interview-don-syme-answering-questions-on-f-c-haskell-and-scala/</link>
		<comments>http://sadekdrobi.com/2009/03/29/interview-don-syme-answering-questions-on-f-c-haskell-and-scala/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 21:14:57 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[InfoQ]]></category>
		<category><![CDATA[LinQ]]></category>
		<category><![CDATA[Polyglot Programming]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/03/29/interview-don-syme-answering-questions-on-f-c-haskell-and-scala/</guid>
		<description><![CDATA[A great discussion I had with Don Syme at QCon SF. Don is one of the heroes to thank for .Net generics and he is a major contributor to F# design, Thanks Don!
http://www.infoq.com/interviews/F-Sharp-Don-Syme
]]></description>
			<content:encoded><![CDATA[<p>A great discussion I had with Don Syme at QCon SF. Don is one of the heroes to thank for .Net generics and he is a major contributor to F# design, Thanks Don!</p>
<p><a href="http://www.infoq.com/interviews/F-Sharp-Don-Syme">http://www.infoq.com/interviews/F-Sharp-Don-Syme</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/03/29/interview-don-syme-answering-questions-on-f-c-haskell-and-scala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming Languages: 2008 Review and Prospects for 2009</title>
		<link>http://sadekdrobi.com/2009/01/10/programming-languages-2008-review-and-prospects-for-2009/</link>
		<comments>http://sadekdrobi.com/2009/01/10/programming-languages-2008-review-and-prospects-for-2009/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 00:34:23 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[InfoQ]]></category>
		<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[Polyglot Programming]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/?p=580</guid>
		<description><![CDATA[In the beginning of last year, Ehud Lamm launched on Lamba the Ultimate a thread about programming languages predictions for 2008. Several subjects popped up: concurrency, functional programming, future of Java, Ruby, C++, and many others&#8230; What really happened in 2008 and what are the prospects for 2009? Bloggers have addressed these questions on demand [...]]]></description>
			<content:encoded><![CDATA[<p>In the beginning of last year, Ehud Lamm launched on Lamba the Ultimate a thread about programming languages predictions for 2008. Several subjects popped up: concurrency, functional programming, future of Java, Ruby, C++, and many others&#8230; What really happened in 2008 and what are the prospects for 2009? Bloggers have addressed these questions on demand of James Iry, echoing at last year thread.</p>
<p><span id="more-580"></span></p>
<p>originally posted on <a href="http://www.infoq.com/news/2009/01/pl-predictions-2009">http://www.infoq.com/news/2009/01/pl-predictions-2009</a></p>
<p>In the beginning of the last year, Ehud Lamm launched a thread on Lamba the Ultimate inviting other bloggers to submit their <a href="http://lambda-the-ultimate.org/node/2600">predictions for 2008 in fields relative to programming languages</a> (PL).</p>
<p>Concurrency was one of the first topics to be defined as an upcoming theme of the year even though it was argued that it &#8220;won&#8217;t go anywhere because the current paradigms [&#8230;] and architectures [&#8230;] can&#8217;t deal with it very well&#8221;. Many equally ambivalent predictions concerned functional programming languages. Haskel was supposed to &#8220;rock the blogosphere&#8221; without being widely used as such, but rather becoming an inspiration for new features in more mainstream programming languages. More generally speaking, some expected that &#8220;no functional language [would] become significantly popular&#8221;, while several other bloggers had far more optimistic prognoses for F# and Scala that were to &#8220;enjoy large uptakes&#8221;, at least through the development of &quot;multi-language&quot; projects&#8220; in some combination of F#/C# or Scala/Java&#8221;.&#160; As far as other languages were concerned, Java was supposed to become &#8220;more entrenched&#8221;. And the same was to happen to Ruby that would be undermined by the downtrend of Rails. On the contrary, C++ with its new ISO standard for 2009 was expected to &#8220;become the language-of-the-year in 2008&#8221; and Javascript to gain more momentum.</p>
<p>As an echo to this tread, James Iry asked bloggers at the end of 2008 to share their opinion on &#8220;<a href="http://lambda-the-ultimate.org/node/3144">what was noteworthy about 2008 as far as programming languages were concerned</a>&#8221;.</p>
<p>Trying to assess the validity of last year predictions, Key Schluehr believes that concurrency was far from being the theme of the year. And, if there were one, it was, in his opinion, &#8220;cloud computing&#8221;, even though he considers that &#8220;this had little to with computing at all&#8221;. He also asserts that, just like Morris Johns expected, no functional language became significantly popular, which many other bloggers disagree with. <b></b></p>
<p>James Iry argues indeed that even though no functional language is at Java or even Ruby level of popularity, &#8220;the fact that languages like these popped up so brightly on the mainstream radar last year is not just significant, but huge.&#8221; Eli Ford highlights that &#8220;F# got its own CTP in September, and is now slated for a supported release as part of Visual Studio 2010, alongside C# and VB&#8221;. And Sean McDirmid argues that &#8220;as far as specific languages go 2008 was a good year for Scala&#8221;. &#8220;Clojure&#8221;, that was not at all mentioned in the last year discussion, is considered to be the discovery of the year by Chris Rathman who believes that it is a good example of how &#8220;to go about integrating existing concepts into a programming language&#8221;.</p>
<p>Along with Scala, Sean McDirmid mentions Objective C &#8220;as the real hot language of 2008 thanks to the iPhone SDK&#8221; and believes that 2008 was also the year of C vengeance with various forms of it being &#8220;used to program GPU hardware (HLSL, CUDA, OpenCL&#8230;)&#8221;.</p>
<p>On the other hand, several bloggers highlight that last year was not that good for Java. Sean McDirmid asserts that &#8220;JavaFX was late and didn&#8217;t make the splash it needed to make&#8221;. If it is true that bloggers express some concerns about Java&#8217;s future, Daniel Weinreb stresses that &#8220;it&#8217;s used in so many places now that we&#8217;re very unlikely to see it disappear&#8221; and, according to James Iry, &#8220;it is still and will remain for quite awhile one of the a handful of &quot;safe&quot; choices for an IT manager&#8221;. Others question however the capacity of Sun to survive the current crisis and speculate about the future of JVM expecting IBM or Google to step in.</p>
<p>The discussion moves from 2008 to 2009 and a number of new predictions are made. In the field of functional programming, James Iry expects great things from both Clojure and Scala teams while Falcon argues that &#8220;2009 will be a year of clojure rather than scala&#8221; and expects F# to be finally brought &#8220;to the attention of mainstream .NET developers.&#8221; Ross Smith, however, reiterates the prediction of last year that functional programming will enter the mainstream rather &#8220;by being incorporated into pre-existing procedural and OO languages&#8221;. He also believes that &#8220;the new C++ standard will become official&#8221;, &#8220;concurrency, including GPGPU applications, will continue its rise in importance&#8221;, &#8220;Python will start to bleed users specifically because of [its] lack of good support for concurrency&#8221; while &#8220;JavaScript&#8217;s star will continue to rise&#8221;.</p>
<p>Xscott goes along the same lines about JavaScript predicting that it &#8220;will eventually become the popular server and application scripting language &#8211; mostly because of it&#8217;s various JIT compiling implementations&#8221;, whereas Kay Schluehr believes that it &#8220;will not expand on its niche&#8221;. On the other hand, he thinks that &#8220;one of the great-future-of-programming hopes like Perl 6, Rubinius or PyPy [will] finally [reach] a state where programmers other than core developers start to show interest.&#8221; </p>
<p>Kaveh Shahbazian believes that &#8220;one thing [that] is going to happen [in 2009] is finding new approaches to employ scripting&#8221; and names Lua as a successful example. And, last but not least, Sean McDirmid predicts that &#8220;no progress will be made on the static/dynamic debate.&#8221; :)</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/01/10/programming-languages-2008-review-and-prospects-for-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You&#8217;ve got 100 pages to convince me of your shiny language!</title>
		<link>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/</link>
		<comments>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 20:42:37 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[Methodologies]]></category>
		<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[Multi-languages projects]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>
		<category><![CDATA[Polyglot Programming]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/</guid>
		<description><![CDATA[ In the rapidly spanning world of programming languages, I find myself buying and reading a lot of books about new and old programming languages. There are a few interesting concepts in each language, and if you think about employing more than one language in your projects then you better know about the existence of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/01/dsc-01501.jpg"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="322" alt="DSC_0150-" src="http://sadekdrobi.com/wp-content/uploads/2009/01/dsc-0150-thumb1.jpg" width="470" align="left" border="0"></a> In the rapidly spanning world of programming languages, I find myself buying and reading a lot of books about new and old programming languages. There are a few interesting concepts in each language, and if you think about employing more than one language in your projects then you better know about the existence of these concepts (see <a href="http://www.infoq.com/articles/paradigm-based-polyglot-prog">Paradigm based Polyglot Programming</a>).
<p>One thing that annoys me though about most programming language books is how raw they often are.</p>
<p><span id="more-575"></span></p>
<p>&nbsp; Probably constrained by time, authors and book teams seem to invest less on editorial stuff and teaching methodology and more on explaining details of technical and behind the scenes stuff. This often results in more manual-like books where you have a great wealth of material that you are not able to exploit anyway because of, well, lack of time. I am not sure I can invest time in reading 500+ manual of a new, or at least non mainstream, language that I might decide not to use by the end.&nbsp;
<p>I am not saying here that technical and behind the scene stuff does not matter, quite the opposite. I just think that manual, important it is, should not be the introduction to the programming language. A rather 100 to 200 pages brief book that is carefully edited to introduce paradigm, concepts, and strengths of the programming language is a more attractive choice , accompanied with a wordy but well organized reference book with examples and more in-depth explanation of language features. I guess this is a more pragmatic approach to programming language learning in the presence of WWW and Google search.
<p>PS: I personally find <a href="http://www.amazon.com/Haskell-School-Expression-Functional-Programming/dp/0521644089/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1231187744&amp;sr=8-1">Paul Hudak&#8217;s Haskell book</a> a very good example of an enjoyable, brief, nicely and carefully edited programming language book. Also <a href="http://www.amazon.com/Programming-Lua-Second-Roberto-Ierusalimschy/dp/8590379825/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1231187997&amp;sr=1-1">LUA&#8217;s programming book</a> is nicely done.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refx :: Is OOP Better for Structuring your Code?</title>
		<link>http://sadekdrobi.com/2008/11/30/refx-is-oop-better-for-structuring-your-code/</link>
		<comments>http://sadekdrobi.com/2008/11/30/refx-is-oop-better-for-structuring-your-code/#comments</comments>
		<pubDate>Sun, 30 Nov 2008 16:49:23 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Polyglot Programming]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/11/30/refx-is-oop-better-for-structuring-your-code/</guid>
		<description><![CDATA[Programming languages that offer more power and flexibility have been lately gaining momentum. Johnatan Tang highlights, however, the flexibility vs. productivity tradeoff in terms of program structure. Whereas multi-dispatch languages provide more flexibility in arranging code, traditional object orientation makes organizing programs easier.


Originally posted on http://www.infoq.com/news/2008/11/oop-vs-fp-4-code-structure
Programming languages that offer more power and flexibility have been [...]]]></description>
			<content:encoded><![CDATA[<p>Programming languages that offer more power and flexibility have been lately gaining momentum. Johnatan Tang highlights, however, the flexibility vs. productivity tradeoff in terms of program structure. Whereas multi-dispatch languages provide more flexibility in arranging code, traditional object orientation makes organizing programs easier.</p>
<p><span id="more-546"></span></p>
<p>
<p>Originally posted on <a href="http://www.infoq.com/news/2008/11/oop-vs-fp-4-code-structure">http://www.infoq.com/news/2008/11/oop-vs-fp-4-code-structure</a>
<p>Programming languages that offer more power and flexibility have been lately gaining momentum. Johnatan Tang highlights, however, the flexibility vs. productivity tradeoff due, amongst other things, to the fact that traditional <a href="http://eve-language.blogspot.com/2008/11/oo-as-organizing-principle.html">object orientation makes organizing programs easier and more straightforward</a>.
<p>He argues that in languages with single dispatch, â€œgiven a parameter or other value, you know exactly what you can do with itâ€. Whereas in statically typed languages code is more revealing about values involved, in structurally typed languages it is more general, but still gives an immediate idea what operations are available on a given value. And for both, statically and structurally typed languages, it is pretty clear what to do if you want to perform an operation that is not supported by a given object:<br />
<blockquote>
<p>You write a method that performs that operation. This is problematic if you don&#8217;t control that class, which is why Ruby and C# have moved to open classes. [â€¦]
<p>And it&#8217;s usually obvious where this method should go: on the class that you need to manipulate.</p>
</blockquote>
<p>In multi-dispatch languages, it is much less obvious where a method should be written and â€œwhich<i> </i>parameter of the new method might take [a given] valueâ€. This provides more flexibility in arranging code but this implies that more decisions should be taken about it and more efforts should be provided to keep these decisions in mind:<br />
<blockquote>
<p>And then every time someone uses the method, they need to remember where it was defined and add the appropriate import statement. If they forget, they might get behavior they don&#8217;t expect, as the appropriate method for the given generic function won&#8217;t even have been loaded.</p>
</blockquote>
<p>Establishing conventions can be considered a solution to this issue. However, Tang believes that â€œconventions that aren&#8217;t enforced by the language tend not to be followedâ€. Moreover, having tried to define some patterns for modules arrangements, he also asserts that â€œthis is inherently problem-domain-specific: there&#8217;s no one right organizing principle that applies to everyone&#8217;s programs.â€
<p>Hence, according to Johnatan Tang there is no obvious solution to this tradeoff of flexibility vs. productivity in organizing programs. What about your favorite languages? What solutions could you find? And, given your experience, is there any convenient compromise between the two?  </p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/11/30/refx-is-oop-better-for-structuring-your-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RefX:: ORMs, Relational Data, Mismatch, LinQ and DSLs</title>
		<link>http://sadekdrobi.com/2008/11/10/refx-orms-relational-data-mismatch-linq-and-dsls/</link>
		<comments>http://sadekdrobi.com/2008/11/10/refx-orms-relational-data-mismatch-linq-and-dsls/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 02:42:22 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile in the Enterprise]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[D90]]></category>
		<category><![CDATA[DOTNET]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[LinQ]]></category>
		<category><![CDATA[Mapping]]></category>
		<category><![CDATA[Model Mismatch]]></category>
		<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Polyglot Programming]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/11/10/refx-orms-relational-data-mismatch-linq-and-dsls/</guid>
		<description><![CDATA[   
Having worked with several Object-Relational mapping frameworks in the last few years, I got to a point where I couldn&#8217;t justify their complexity in my project. We often talk about the mismatch between the database and the object worlds, and that is where ORMs are often stated and referenced for &#8220;bridging the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sadekdrobi.com/wp-content/uploads/2008/11/raw000781.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="361" alt="Raw00078" src="http://sadekdrobi.com/wp-content/uploads/2008/11/raw00078-thumb1.jpg" width="534" border="0"></a> <a href="http://sadekdrobi.com/wp-content/uploads/2008/11/raw001701.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="379" alt="Raw00170" src="http://sadekdrobi.com/wp-content/uploads/2008/11/raw00170-thumb1.jpg" width="258" border="0"></a> <a href="http://sadekdrobi.com/wp-content/uploads/2008/11/dsc-01911.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="378" alt="DSC_0191" src="http://sadekdrobi.com/wp-content/uploads/2008/11/dsc-0191-thumb1.jpg" width="257" border="0"></a> </p>
<p>Having worked with several Object-Relational mapping frameworks in the last few years, I got to a point where I couldn&#8217;t justify their complexity in my project. We often talk about the mismatch between the database and the object worlds, and that is where ORMs are often stated and referenced for &#8220;bridging the gap&#8221;!</p>
<p>Well I prefer to call it lifting the gap, or highering the gap, to have it now between DAOs and the rest of the code than having it between database and code.But I wouldn&#8217;t call this in any way reducing the gap.</p>
<p><span id="more-538"></span></p>
<p>First thing to mention here, is that data structures are not evil. We often deal with XML data structure but we absolutely refuse to deal with relational data structures. The problem might be related to time, XML came with a whole arsenal of managed APIs that represent its model in a way that makes it more comfortable for you to manipulate these documents. All together with transformation APIs that made it a lot easier to fill your object model out of an XML. Relational data structure on the other hand did not have the luxury of standard APIs and representation models in mainstream languages, and that made dealing with a database request result so arbitrary (Datasets existed in .Net but they have been cursed heavily and has been forced out of the cool toolbox, do not know yet why!) .&nbsp; </p>
<p>In some way, I guess that the &#8220;mismatch&#8221; between Relational data structures and objects exists much similarly between XML and objects, however we didn&#8217;t think for so long of a doing a mapping between XML and object OXM? (no we are starting to do so, writing some XML to map XML to objects!).</p>
<p>With the experience I had with mapping technologies, I can say that they do not solve the problem for me. They merely add yet another useless level of abstraction where your domain types look nothing like relational data structures, but yet nothing like your target domain model! They have gone a half way, and now its your turn to poison your application with a lot of absurd ORM code trying to stretch this bridge to reduce the gap&#8230; </p>
<p>Geeks love talking about intrusivty of an ORMs and compare level of intrusivty in different terms. Intrusivty is much more than the lack of an interface or methods to implement in your domain objects. I guess I am ok to deal with that kind of intrusivity. However all ORMs I tried do not give me the opportunity to express my domain model in the way I would like to. I have to deal with notions of Lazy Loading, Attached/Detached entities, Entity sets, ids, back fields and a lot of other things that I don&#8217;t want to appear in my model and that make the resulting code so ugly and complex that I don&#8217;t wish to visit soon.</p>
<p>As Bob Martin said before, we are missing the opportunity to do oop, I would enforce and say we are missing the opportunity to model at all. And I guess we have gone too far with ORMs and it is time to go back to the basics, in the same way we have done after the EJB great abstraction.</p>
<p>It is very contradictory, while we are so excited about DSLs and the goodness they can potentially bring to enterprise development that results in a declarative semanticful style of programming, we can&#8217;t help but to engage all of our means in trying to bury SQL (and effective, semanticful, declarative powerful domain specific language) behind a dumb API to &#8220;abstract database access&#8221;! I guess we got to chose one strategy, either we keep SQL and we&nbsp; keep marketing DSLs or we hope for a new advanced GPL compiler that will hide all of this in the same way modern languages did with garbage collection, concurrency and synchronization.</p>
<p>Since I am not yet a compiler writer, and I aint got around an effective way of integrating database in mainstream languages (there is actually a very productive in memory database on Haskell that worth trying), I decide to keep the DSL, and to work with them without the need to hide them, but rather to get a better tooling to help converting between difference data structures.</p>
<p>I guess you&#8217;ve guessed it by now. For me LinQ is the mid-term solution for the data structure mismatch. No not LinQ to sql, nor Ado.Net entities (they are helpful and we might use them but lets focus on the solution). LinQ is a very productive tool that halps effectively transform anything to anything in few lines of code. I mean that I can still use powerful SQL to get data effeciently and then convert them with one line of LinQ into the destination data structure. No abstraction leak, less complexity: Use the right tool where it applies. </p>
<p>So what I would actually do is to use a framework that will execute my SQL or SQL like query on the database and get me the records in much the same way they are in the database,Much in the same way Active Record gets you records as they are in the database. No useless efforts from the framework to bend the data to make it look untruthfully like the destination model.&nbsp; I guess I know better my domain model, and with this better tooling I can get it done with no problem.</p>
<p>&nbsp;</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f663d4e1-de43-4d9c-9f89-7b45ec5b5a86" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Mots clÃ©s Technorati : <a href="http://technorati.com/tags/mapping" rel="tag">mapping</a>,<a href="http://technorati.com/tags/orm" rel="tag">orm</a>,<a href="http://technorati.com/tags/linq" rel="tag">linq</a>,<a href="http://technorati.com/tags/mismatch" rel="tag">mismatch</a>,<a href="http://technorati.com/tags/relational.%20data%20structure" rel="tag">relational. data structure</a>,<a href="http://technorati.com/tags/abstraction" rel="tag">abstraction</a>,<a href="http://technorati.com/tags/domain%20model" rel="tag">domain model</a>,<a href="http://technorati.com/tags/deseign" rel="tag">deseign</a></div>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/11/10/refx-orms-relational-data-mismatch-linq-and-dsls/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ted Neward on Present and Past Languages</title>
		<link>http://sadekdrobi.com/2008/10/28/ted-neward-on-present-and-past-languages/</link>
		<comments>http://sadekdrobi.com/2008/10/28/ted-neward-on-present-and-past-languages/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 13:28:58 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[DOTNET]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[InfoQ]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[LinQ]]></category>
		<category><![CDATA[Polyglot Programming]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/10/28/ted-neward-on-present-and-past-languages/</guid>
		<description><![CDATA[This is an interview I did at QCon with Ted Neward. Talking to Ted was very interesting even though arguing with him turned to be not easy at all :)
]]></description>
			<content:encoded><![CDATA[<p>This is <a href="http://www.infoq.com/interviews/Languages-Ted-Neward">an interview I did at QCon with Ted Neward</a>. Talking to <a href="http://blogs.tedneward.com/">Ted</a> was very interesting even though arguing with him turned to be not easy at all :)</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/10/28/ted-neward-on-present-and-past-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More languages on top of Erlang virtual machine</title>
		<link>http://sadekdrobi.com/2008/10/11/more-languages-on-top-of-erlang-virtual-machine/</link>
		<comments>http://sadekdrobi.com/2008/10/11/more-languages-on-top-of-erlang-virtual-machine/#comments</comments>
		<pubDate>Sat, 11 Oct 2008 09:49:52 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[InfoQ]]></category>
		<category><![CDATA[Polyglot Programming]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/10/11/more-languages-on-top-of-erlang-virtual-machine/</guid>
		<description><![CDATA[Erlang virtual machine â€“ BEAM â€“ hosts an increasing number of languages. Reia, a Python/Ruby like scripting language and Lisp Flavoured Erlang have recently been released. Debasish Ghosh reflects on this trend while other authors try to outline other possible language variants inspired by Ruby or Haskell.

Originally posted at http://www.infoq.com/news/2008/10/more-languages-on-erlang-vm
Some time ago a blog post [...]]]></description>
			<content:encoded><![CDATA[<p>Erlang virtual machine â€“ BEAM â€“ hosts an increasing number of languages. Reia, a Python/Ruby like scripting language and Lisp Flavoured Erlang have recently been released. Debasish Ghosh reflects on this trend while other authors try to outline other possible language variants inspired by Ruby or Haskell.</p>
<p><span id="more-524"></span></p>
<p>Originally posted at <a href="http://www.infoq.com/news/2008/10/more-languages-on-erlang-vm">http://www.infoq.com/news/2008/10/more-languages-on-erlang-vm</a></p>
<p>Some time ago a blog post on Antares Trader explored the idea of <a href="http://blog.antarestrader.com/?p=77">implementing a ruby-like language on the top of Erlang virtual machine</a> â€“ BEAM â€“ in order to combine the advantages offered by Ruby syntax and those of Erlang&#8217;s concurrency model:<br />
<blockquote>
<p>Ruby makes OO programming easy, enjoyable and intuitive [...] but its concurrency model is out of the dark ages&#8221; [...]
<p>Erlang makes concurrency easy and natural, but its syntax is poor, static, and high on ceremony
<p>[...] if Ruby can run on top of the Java Virtual Machine and take advantage of all the power of that environment while still being an expressive and efficient language, why not have a modified version of ruby on top of BEAM, the Erlang virtual machine.</p>
</blockquote>
<p>While the author outlines how a Ruby like language on top of Erlang could look like, commentators highlight possible challenges and necessary precautions and point out to the existing initiatives of implementing languages on BEAM, such as <a href="http://wiki.reia-lang.org/wiki/Reia_Programming_Language">Reia</a> (a Python/Ruby like language) and <a href="http://www.erlang.org/pipermail/erlang-questions/2008-March/033245.html">LFE</a> (Lisp Flavoured Erlang).
<p>Debasish Ghosh, who wrote several posts about Erlang virtual machine, seems to believe <a href="http://debasishg.blogspot.com/2008/10/erlang-vm-now-hosting-multiple.html">momentum is growing for increasing number of languages variants being implemented on top of BEAM</a>. In his post â€žErlang VM : now hosting multiple languages&#8221;, he also mentions Reia and LFE whereas one comentator refers to some Haskel based initiatives. Debasish suggests that this growth of Erlang ecosystem is part of a more general trend observed by Ted Leung who argues that â€ž<a href="http://www.sauria.com/blog/2008/06/05/thoughts-on-maglev-vms-for-everybody/">we are going to see not only flourishing new virtual machines, but also lots of languages atop existing virtual machines</a>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/10/11/more-languages-on-top-of-erlang-virtual-machine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paradigm based Polyglot Programming</title>
		<link>http://sadekdrobi.com/2008/09/25/paradigm-based-polyglot-programming/</link>
		<comments>http://sadekdrobi.com/2008/09/25/paradigm-based-polyglot-programming/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 07:08:16 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[InfoQ]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[Multi-languages projects]]></category>
		<category><![CDATA[Polyglot Programming]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/09/25/paradigm-based-polyglot-programming/</guid>
		<description><![CDATA[ 
How many languages are you using on the same project? If you go counting you will see that they are many. I mean XML, Java, XSLT, HTML, CSS&#8230; etc. But the reason why you are using almost all of them is that they happen to be mainstream and, oftentimes, they are the only language [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sadekdrobi.com/wp-content/uploads/2008/09/dsc-01721.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="429" alt="DSC_0172" src="http://sadekdrobi.com/wp-content/uploads/2008/09/dsc-0172-thumb1.jpg" width="640" border="0"></a> </p>
<p>How many languages are you using on the same project? If you go counting you will see that they are many. I mean XML, Java, XSLT, HTML, CSS&#8230; etc. But the reason why you are using almost all of them is that they happen to be mainstream and, oftentimes, they are the only language choice for a needed framework. You are actually almost obliged to use them. <em>The choice is done for you. Style? CSS. Configuration? Often XML. Web interface description? Html.</em> However, if you want to adopt true polyglot programming, you will have to face inevitable decision of language choice.</p>
<p><span id="more-517"></span></p>
<p><a href="http://www.infoq.com/articles/paradigm-based-polyglot-prog">Read my article on Paradigm based Polyglot Programming at InfoQ.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/09/25/paradigm-based-polyglot-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

