<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments for Bill the Plumber</title>
	<atom:link href="http://bill.burkecentral.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://bill.burkecentral.com</link>
	<description>Software plumbing using middleware wrenches</description>
	<lastBuildDate>Sat, 14 Aug 2010 05:26:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>Comment on New HornetQ REST Interface by Danny</title>
		<link>http://bill.burkecentral.com/2010/08/09/new-hornetq-rest-interface/#comment-3739</link>
		<dc:creator>Danny</dc:creator>
		<pubDate>Sat, 14 Aug 2010 05:26:00 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/?p=395#comment-3739</guid>
		<description>Hi Bill,

    Thank for reply. Normally, we treat the Queue as Messaging Endpoint for retrieving messages. Why can&#039;t we treat the Queue as something like Web Service/RPC/Function End Point for synchronous request-reply operation which can run side by side with the original asynchronous nature of JMS. 

     In my project, I have chosen HornetQ for its 307% performance boost and its efficiency of managing large object transfer. I am implementing something like below:

Clients (REST/HTTP)  HornetQ + [Request Handler]

    Then, effectively, we can make HornetQ work like Apache Web Server PLUS all the benefits of HornetQ Messaging capability &amp; scalability which allow synchronous and asychronous client communication using just REST api and also can optionally live inside JavaEE ecosystem for other Heavy Duty operation.

   If I can obtain the full sources of the HornetQ REST Api, perhaps I can work out some experiment on it. 

Thanks.</description>
		<content:encoded><![CDATA[<p>Hi Bill,</p>
<p>    Thank for reply. Normally, we treat the Queue as Messaging Endpoint for retrieving messages. Why can&#8217;t we treat the Queue as something like Web Service/RPC/Function End Point for synchronous request-reply operation which can run side by side with the original asynchronous nature of JMS. </p>
<p>     In my project, I have chosen HornetQ for its 307% performance boost and its efficiency of managing large object transfer. I am implementing something like below:</p>
<p>Clients (REST/HTTP)  HornetQ + [Request Handler]</p>
<p>    Then, effectively, we can make HornetQ work like Apache Web Server PLUS all the benefits of HornetQ Messaging capability &amp; scalability which allow synchronous and asychronous client communication using just REST api and also can optionally live inside JavaEE ecosystem for other Heavy Duty operation.</p>
<p>   If I can obtain the full sources of the HornetQ REST Api, perhaps I can work out some experiment on it. </p>
<p>Thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on New HornetQ REST Interface by billburke</title>
		<link>http://bill.burkecentral.com/2010/08/09/new-hornetq-rest-interface/#comment-3738</link>
		<dc:creator>billburke</dc:creator>
		<pubDate>Fri, 13 Aug 2010 23:08:08 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/?p=395#comment-3738</guid>
		<description>Right now I don&#039;t have anything.  Any request header that does not start with &quot;Content-*&quot; is filtered out, or otherwise I&#039;d say you could just pass URLs around in a custom header.  I need to fix this in the next release.

Also I would be happy to flush out your requirements and implement something you need.  Ping me here, on hornetq dev list or resteasy dev list.</description>
		<content:encoded><![CDATA[<p>Right now I don&#8217;t have anything.  Any request header that does not start with &#8220;Content-*&#8221; is filtered out, or otherwise I&#8217;d say you could just pass URLs around in a custom header.  I need to fix this in the next release.</p>
<p>Also I would be happy to flush out your requirements and implement something you need.  Ping me here, on hornetq dev list or resteasy dev list.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on New HornetQ REST Interface by Danny</title>
		<link>http://bill.burkecentral.com/2010/08/09/new-hornetq-rest-interface/#comment-3737</link>
		<dc:creator>Danny</dc:creator>
		<pubDate>Fri, 13 Aug 2010 10:41:22 +0000</pubDate>
		<guid isPermaLink="false">http://billburke.wordpress.com/?p=395#comment-3737</guid>
		<description>Hi Bill, 

   The REST api is very useful. I will be grateful if you can share some idea about how could we implement &quot;Request-Response&quot; pattern for a queue using the new REST api which allow us to achieve the same behavior as the existing HornetQ examples eg. Queue Requestor or Request-Reply. Assuming that I have a JMS MDB or custom consumer to processing the incoming client message.


Thanks.

Rgds,
Danny</description>
		<content:encoded><![CDATA[<p>Hi Bill, </p>
<p>   The REST api is very useful. I will be grateful if you can share some idea about how could we implement &#8220;Request-Response&#8221; pattern for a queue using the new REST api which allow us to achieve the same behavior as the existing HornetQ examples eg. Queue Requestor or Request-Reply. Assuming that I have a JMS MDB or custom consumer to processing the incoming client message.</p>
<p>Thanks.</p>
<p>Rgds,<br />
Danny</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on RESTEasy 2.0.0 Released! by This Week in #REST – Volume 22 (Jul 13 2010 – Jul 25 2010) &#171; This week in REST</title>
		<link>http://bill.burkecentral.com/2010/07/19/resteasy-2-0-0-released/#comment-3726</link>
		<dc:creator>This Week in #REST – Volume 22 (Jul 13 2010 – Jul 25 2010) &#171; This week in REST</dc:creator>
		<pubDate>Tue, 27 Jul 2010 16:31:17 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/?p=391#comment-3726</guid>
		<description>[...] RESTEasy &#8211; Version 2.0.0 of the RESTEasy framework has been released. [...]</description>
		<content:encoded><![CDATA[<p>[...] RESTEasy &#8211; Version 2.0.0 of the RESTEasy framework has been released. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Mapping response on client side by Suresh Bhaskaran</title>
		<link>http://bill.burkecentral.com/2010/02/19/mapping-response-on-client-side/#comment-3701</link>
		<dc:creator>Suresh Bhaskaran</dc:creator>
		<pubDate>Wed, 07 Jul 2010 19:23:43 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/?p=343#comment-3701</guid>
		<description>Hi Bill:
 
I bought your book, &quot;Restful Java&quot; - it is an mazing resource! Thank you!

Got a question on one of the recent readings off of burkecentral.com
I was following some ideas for RestEasy clients on http://www.javauc.com/java/1432
 
Where is the following 2 annotations defined? Or, is it something one need to write thier own? I searched every maven repository - could not find any jars with those interfaces
 
@ResponseMapping
@ExpectedCode(int)
 
For example, in the following:
 
@ResponseMapping
@ExpectedCode(200)
public interface MyResponse {

   @Body   public Customer getCustomer();

   @LinkHeader   public Link getNext();

   @LinkHeader(&quot;last&quot;)   public Link getLastCustomer();

   @Header(&quot;ETag&quot;)   public String getHash();

}

-- 
Have a Nice Day!

Suresh Bhaskaran
Consulting IT Specialist
Home 
Work  
Cell    (310) 499 6211</description>
		<content:encoded><![CDATA[<p>Hi Bill:</p>
<p>I bought your book, &#8220;Restful Java&#8221; &#8211; it is an mazing resource! Thank you!</p>
<p>Got a question on one of the recent readings off of burkecentral.com<br />
I was following some ideas for RestEasy clients on <a href="http://www.javauc.com/java/1432" rel="nofollow">http://www.javauc.com/java/1432</a></p>
<p>Where is the following 2 annotations defined? Or, is it something one need to write thier own? I searched every maven repository &#8211; could not find any jars with those interfaces</p>
<p>@ResponseMapping<br />
@ExpectedCode(int)</p>
<p>For example, in the following:</p>
<p>@ResponseMapping<br />
@ExpectedCode(200)<br />
public interface MyResponse {</p>
<p>   @Body   public Customer getCustomer();</p>
<p>   @LinkHeader   public Link getNext();</p>
<p>   @LinkHeader(&#8220;last&#8221;)   public Link getLastCustomer();</p>
<p>   @Header(&#8220;ETag&#8221;)   public String getHash();</p>
<p>}</p>
<p>&#8211;<br />
Have a Nice Day!</p>
<p>Suresh Bhaskaran<br />
Consulting IT Specialist<br />
Home<br />
Work<br />
Cell    (310) 499 6211</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Want to rewrite JAXB? by Blaise Doughan</title>
		<link>http://bill.burkecentral.com/2010/06/28/want-to-rewrite-jaxb/#comment-3698</link>
		<dc:creator>Blaise Doughan</dc:creator>
		<pubDate>Tue, 29 Jun 2010 18:56:39 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/?p=389#comment-3698</guid>
		<description>Here is how the example is supposed to work:

In this example java.util.HashMap is the unmappable object, the example below could be modified for any unmappable object.

For all references to the umappable object, you annotate the property with @XmlJavaTypeAdapter.  The value of this annotation is the class you are going to use to convert the unmappable object into a mappable one:

&lt;code&gt;
import java.util.HashMap;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {

    @XmlJavaTypeAdapter(MyHashMapAdapter.class)
    HashMap hashmap;

    public Foo() {
        hashmap = new HashMap();
    }

    public HashMap getHashmap() {
        return hashmap;
    }

    public void setHashmap(HashMap hashmap) {
        this.hashmap = hashmap;
    }

}
&lt;/code&gt;


The following XmlAdapter is used to convert the unmappable java.util.HashMap into a mappable MyHashMapType:

&lt;code&gt;
import java.util.HashMap;
import java.util.Map.Entry;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public final class MyHashMapAdapter extends XmlAdapter&lt;MyHashMapType,HashMap&gt; {

    @Override
    public MyHashMapType marshal(HashMap arg0) throws Exception {
        MyHashMapType myHashMapType = new MyHashMapType();
        for(Entry entry : arg0.entrySet()) {
            MyHashEntryType myHashEntryType = new MyHashEntryType();
            myHashEntryType.key = entry.getKey();
            myHashEntryType.value = entry.getValue();
            myHashMapType.entry.add(myHashEntryType);
        }
        return myHashMapType;
    }

    @Override
    public HashMap unmarshal(MyHashMapType arg0) throws Exception {
        HashMap hashMap = new HashMap();
        for(MyHashEntryType myHashEntryType : arg0.entry) {
            hashMap.put(myHashEntryType.key, myHashEntryType.value);
        }
        return hashMap;
    }

}
&lt;/code&gt;

The mappable object MyHashMapType (and MyHashEntryType) look like:

&lt;code&gt;
import java.util.ArrayList;
import java.util.List;

public class MyHashMapType {
    public List entry = new ArrayList();
}
&lt;/code&gt;

and 

&lt;code&gt;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlValue;

public class MyHashEntryType {

    @XmlAttribute
    public Integer key; 

    @XmlValue
    public String value;

}
&lt;/code&gt;

The following code can be used to test the above:

&lt;code&gt;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws JAXBException {
        JAXBContext jaxbContext = JAXBContext.newInstance(Foo.class);

        Foo foo = new Foo();
        foo.getHashmap().put(1, &quot;One&quot;);
        foo.getHashmap().put(2, &quot;Two&quot;);
        foo.getHashmap().put(3, &quot;Three&quot;);

        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(foo, System.out);
    }
}
&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>Here is how the example is supposed to work:</p>
<p>In this example java.util.HashMap is the unmappable object, the example below could be modified for any unmappable object.</p>
<p>For all references to the umappable object, you annotate the property with @XmlJavaTypeAdapter.  The value of this annotation is the class you are going to use to convert the unmappable object into a mappable one:</p>
<p><code><br />
import java.util.HashMap;<br />
import javax.xml.bind.annotation.XmlAccessType;<br />
import javax.xml.bind.annotation.XmlAccessorType;<br />
import javax.xml.bind.annotation.XmlRootElement;<br />
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;</p>
<p>@XmlRootElement<br />
@XmlAccessorType(XmlAccessType.FIELD)<br />
public class Foo {</p>
<p>    @XmlJavaTypeAdapter(MyHashMapAdapter.class)<br />
    HashMap hashmap;</p>
<p>    public Foo() {<br />
        hashmap = new HashMap();<br />
    }</p>
<p>    public HashMap getHashmap() {<br />
        return hashmap;<br />
    }</p>
<p>    public void setHashmap(HashMap hashmap) {<br />
        this.hashmap = hashmap;<br />
    }</p>
<p>}<br />
</code></p>
<p>The following XmlAdapter is used to convert the unmappable java.util.HashMap into a mappable MyHashMapType:</p>
<p><code><br />
import java.util.HashMap;<br />
import java.util.Map.Entry;<br />
import javax.xml.bind.annotation.adapters.XmlAdapter;</p>
<p>public final class MyHashMapAdapter extends XmlAdapter&lt;MyHashMapType,HashMap&gt; {</p>
<p>    @Override<br />
    public MyHashMapType marshal(HashMap arg0) throws Exception {<br />
        MyHashMapType myHashMapType = new MyHashMapType();<br />
        for(Entry entry : arg0.entrySet()) {<br />
            MyHashEntryType myHashEntryType = new MyHashEntryType();<br />
            myHashEntryType.key = entry.getKey();<br />
            myHashEntryType.value = entry.getValue();<br />
            myHashMapType.entry.add(myHashEntryType);<br />
        }<br />
        return myHashMapType;<br />
    }</p>
<p>    @Override<br />
    public HashMap unmarshal(MyHashMapType arg0) throws Exception {<br />
        HashMap hashMap = new HashMap();<br />
        for(MyHashEntryType myHashEntryType : arg0.entry) {<br />
            hashMap.put(myHashEntryType.key, myHashEntryType.value);<br />
        }<br />
        return hashMap;<br />
    }</p>
<p>}<br />
</code></p>
<p>The mappable object MyHashMapType (and MyHashEntryType) look like:</p>
<p><code><br />
import java.util.ArrayList;<br />
import java.util.List;</p>
<p>public class MyHashMapType {<br />
    public List entry = new ArrayList();<br />
}<br />
</code></p>
<p>and </p>
<p><code><br />
import javax.xml.bind.annotation.XmlAttribute;<br />
import javax.xml.bind.annotation.XmlValue;</p>
<p>public class MyHashEntryType {</p>
<p>    @XmlAttribute<br />
    public Integer key; </p>
<p>    @XmlValue<br />
    public String value;</p>
<p>}<br />
</code></p>
<p>The following code can be used to test the above:</p>
<p><code><br />
import javax.xml.bind.JAXBContext;<br />
import javax.xml.bind.JAXBException;<br />
import javax.xml.bind.Marshaller;</p>
<p>public class Demo {</p>
<p>    public static void main(String[] args) throws JAXBException {<br />
        JAXBContext jaxbContext = JAXBContext.newInstance(Foo.class);</p>
<p>        Foo foo = new Foo();<br />
        foo.getHashmap().put(1, "One");<br />
        foo.getHashmap().put(2, "Two");<br />
        foo.getHashmap().put(3, "Three");</p>
<p>        Marshaller marshaller = jaxbContext.createMarshaller();<br />
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);<br />
        marshaller.marshal(foo, System.out);<br />
    }<br />
}<br />
</code></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Want to rewrite JAXB? by billburke</title>
		<link>http://bill.burkecentral.com/2010/06/28/want-to-rewrite-jaxb/#comment-3697</link>
		<dc:creator>billburke</dc:creator>
		<pubDate>Tue, 29 Jun 2010 16:28:19 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/?p=389#comment-3697</guid>
		<description>Have you tried to use the XmlAdapter example to implement Map support?  I have, and failed.  Maybe I&#039;m just stupid.  Another example is, I want to get information from a custom annotation to decide how to build the injected object from an XML document (and vice versa).  Impossible with JAXB.</description>
		<content:encoded><![CDATA[<p>Have you tried to use the XmlAdapter example to implement Map support?  I have, and failed.  Maybe I&#8217;m just stupid.  Another example is, I want to get information from a custom annotation to decide how to build the injected object from an XML document (and vice versa).  Impossible with JAXB.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Want to rewrite JAXB? by Blaise Doughan</title>
		<link>http://bill.burkecentral.com/2010/06/28/want-to-rewrite-jaxb/#comment-3696</link>
		<dc:creator>Blaise Doughan</dc:creator>
		<pubDate>Tue, 29 Jun 2010 16:20:10 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/?p=389#comment-3696</guid>
		<description>&lt;blockquote&gt;JAXB is not very extendable.  For example, I’d love to be able to define custom annotations that trigger callback APIs so that I can read/write custom properties from an XML document.  For example, ever try to do Map support?  I’ve also wanted to convert URLs to/from Link objects in resteasy with hooks into RESTEasy runtime for automatic URL writing.  I just couldn’t find a way to do it within resteasy.&lt;/blockquote&gt;

Have you considered using a javax.xml.bind.annotations.adapters.XmlAdapter?:
http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html

The Javadoc itself demonstrates how to handle Map using an XmlAdapter, you can also use it to convert objects to/from link representations.</description>
		<content:encoded><![CDATA[<blockquote><p>JAXB is not very extendable.  For example, I’d love to be able to define custom annotations that trigger callback APIs so that I can read/write custom properties from an XML document.  For example, ever try to do Map support?  I’ve also wanted to convert URLs to/from Link objects in resteasy with hooks into RESTEasy runtime for automatic URL writing.  I just couldn’t find a way to do it within resteasy.</p></blockquote>
<p>Have you considered using a javax.xml.bind.annotations.adapters.XmlAdapter?:<br />
<a href="http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html" rel="nofollow">http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html</a></p>
<p>The Javadoc itself demonstrates how to handle Map using an XmlAdapter, you can also use it to convert objects to/from link representations.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Polyglotism is the worst idea I ever heard by zoldello</title>
		<link>http://bill.burkecentral.com/2009/07/20/polyglotism-is-the-worst-idea-i-ever-heard/#comment-3642</link>
		<dc:creator>zoldello</dc:creator>
		<pubDate>Wed, 09 Jun 2010 17:06:48 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/?p=240#comment-3642</guid>
		<description>It is great to be passionate about programming. However, Software Engineers are not paid to program; no they are paid to solve problems. Programming is just a tool to this end. This ia akin to a carpenter not being paid to hit nails but to make a chair to solve seating problems (with hitting nails just being a tool to this end but not the actual end). Not mastering a tool but spreading yourself too thin can (although not neccessarily) reduce your abilty to quickly solve problems with what you know. It is ok to hire consultant or expand the team rather than pull your too thin.</description>
		<content:encoded><![CDATA[<p>It is great to be passionate about programming. However, Software Engineers are not paid to program; no they are paid to solve problems. Programming is just a tool to this end. This ia akin to a carpenter not being paid to hit nails but to make a chair to solve seating problems (with hitting nails just being a tool to this end but not the actual end). Not mastering a tool but spreading yourself too thin can (although not neccessarily) reduce your abilty to quickly solve problems with what you know. It is ok to hire consultant or expand the team rather than pull your too thin.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Polyglotism is the worst idea I ever heard by zoldello</title>
		<link>http://bill.burkecentral.com/2009/07/20/polyglotism-is-the-worst-idea-i-ever-heard/#comment-3641</link>
		<dc:creator>zoldello</dc:creator>
		<pubDate>Wed, 09 Jun 2010 17:02:37 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/?p=240#comment-3641</guid>
		<description>Here is a replication (with modifications) of a post I posted somewhere else:

I agree with you post. Here are three issues I have with Software Engineers that are okay with many languages but have not mastered one:

1. The learn-a-new-langauges-annually thing is so 1980’s. You could pick up a book like one by Peter Norton and know everything you need to know about computers then. Now, it takes years to get proficient (not good or great) at ASP.NET and C# (with its huge API). Plus, you got WPF, WF, EF 4 and many others. This is only in the .NET space. Now you have Ruby on Rail, Clojure etc- Rocky Lhotka full-time job is to keep current with just .NET and he cannot. Technology moves too fast and is too large to try everything and expect to know the quirks, bells and whistles to be competent.

2. C# has features from functional languages, dynamic languages OOP languages and more. This reduces the need to try to get a functional language feel from a pure functional language.

3. It takes dedication to become great at a tool/API, especially those with high learning curves (e.g. WPF.) Distracting yourself by trying to learn everything else can reduce you powess and mastery in a tool. If you are afraid of getting stuff knowing one thing that may be gone tommorrow, there will be tutorials. For example, Microsoft guided Software Engineers that moved from VB6 to VB.NET. You just will not be dead in the water. 

Now, languages designers may need to learn a new language annually. Plus, it does not hurt if you learn a new languages annually just because you like programming. However, nowadays I do not feel that it is that urgent as it was in previous decades. Plus, polyglot-languages like C# lets you dive into non-OOP features. It is better to solve a programming the long way and quickly with a tool you are great at and can easily support THEN to build it with a more suitable tool you do not know well, may take longer to build since you are learning along the way and will forces others to learn things way outside their knowledge-area to support.</description>
		<content:encoded><![CDATA[<p>Here is a replication (with modifications) of a post I posted somewhere else:</p>
<p>I agree with you post. Here are three issues I have with Software Engineers that are okay with many languages but have not mastered one:</p>
<p>1. The learn-a-new-langauges-annually thing is so 1980’s. You could pick up a book like one by Peter Norton and know everything you need to know about computers then. Now, it takes years to get proficient (not good or great) at ASP.NET and C# (with its huge API). Plus, you got WPF, WF, EF 4 and many others. This is only in the .NET space. Now you have Ruby on Rail, Clojure etc- Rocky Lhotka full-time job is to keep current with just .NET and he cannot. Technology moves too fast and is too large to try everything and expect to know the quirks, bells and whistles to be competent.</p>
<p>2. C# has features from functional languages, dynamic languages OOP languages and more. This reduces the need to try to get a functional language feel from a pure functional language.</p>
<p>3. It takes dedication to become great at a tool/API, especially those with high learning curves (e.g. WPF.) Distracting yourself by trying to learn everything else can reduce you powess and mastery in a tool. If you are afraid of getting stuff knowing one thing that may be gone tommorrow, there will be tutorials. For example, Microsoft guided Software Engineers that moved from VB6 to VB.NET. You just will not be dead in the water. </p>
<p>Now, languages designers may need to learn a new language annually. Plus, it does not hurt if you learn a new languages annually just because you like programming. However, nowadays I do not feel that it is that urgent as it was in previous decades. Plus, polyglot-languages like C# lets you dive into non-OOP features. It is better to solve a programming the long way and quickly with a tool you are great at and can easily support THEN to build it with a more suitable tool you do not know well, may take longer to build since you are learning along the way and will forces others to learn things way outside their knowledge-area to support.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
