<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-637417304187784899</id><updated>2012-01-28T06:21:24.433Z</updated><category term='qcon'/><category term='jsr299'/><category term='designer'/><category term='mail'/><category term='nexus'/><category term='relaxng'/><category term='wiki'/><category term='fuse'/><category term='fuseide'/><category term='swing'/><category term='web'/><category term='apple'/><category term='soa'/><category term='activemq servicemix'/><category term='messaging'/><category term='mock'/><category term='ipad'/><category term='maven'/><category term='gwt'/><category term='jersey'/><category term='camel'/><category term='wsdl'/><category term='ikvm'/><category term='template'/><category term='pimp'/><category term='osx'/><category term='latrz'/><category term='jwebpane'/><category term='fuse ide'/><category term='osgi'/><category term='transactions'/><category term='guice'/><category term='webkit'/><category term='gosling'/><category term='leopard'/><category term='camel book'/><category term='ci'/><category term='eclipse'/><category term='jaxrs'/><category term='confluence'/><category term='gwtext'/><category term='javafx'/><category term='mygwt'/><category term='scala'/><category term='camel scala dsl'/><category term='osx backup'/><category term='java'/><category term='xsd'/><category term='camel spring testing'/><category term='camelone'/><category term='vmware'/><category term='scalate'/><category term='fusesource'/><category term='tooling'/><category term='sbt'/><category term='jface'/><category term='tssjs'/><category term='rest'/><category term='cool'/><category term='uface'/><category term='activemq'/><category term='android'/><category term='appengine'/><category term='atompub'/><category term='groovy'/><category term='camel servicemix'/><category term='twitter'/><category term='mac'/><category term='dsl'/><category term='eip'/><category term='servicemix'/><title type='text'>James Strachan's Blog</title><subtitle type='html'>Random ramblings on Open Source, integration and other malarkey</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default?start-index=101&amp;max-results=100'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>125</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-9115754596578444880</id><published>2011-11-14T22:17:00.001Z</published><updated>2011-11-14T22:17:15.281Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='scalate'/><title type='text'>Scalate 1.5.3 Released</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;The &lt;a href="http://scalate.fusesource.org/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scalate team&lt;/a&gt; is pleased to announce the availability of Scalate 1.5.3&lt;/p&gt; &lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;Scalate is a &lt;a href="http://www.scala-lang.org/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scala 2.9.1&lt;/a&gt; based &lt;a href="http://en.wikipedia.org/wiki/Template_engine_(web)" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;template engine&lt;/a&gt; which can be used stand alone, with servlets or web frameworks like &lt;a href="http://scalate.fusesource.org/documentation/jog.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;JAXRS&lt;/a&gt;, &lt;a href="http://scalate.fusesource.org/documentation/lift.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Lift&lt;/a&gt; or &lt;a href="http://github.com/pk11/play-scalate" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Play&lt;/a&gt; or in integration frameworks like &lt;a href="http://camel.apache.org/scalate.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Apache Camel&lt;/a&gt;.&lt;/p&gt; &lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;The following template languages are supported through the same common API:&lt;/p&gt;&lt;ul style="color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt; &lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Ssp&lt;/a&gt; which is like a Scala version of &lt;a href="http://velocity.apache.org/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Velocity&lt;/a&gt;, JSP or Erb from Rails&lt;/li&gt; &lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt; which is a Scala dialect of &lt;a href="http://haml-lang.com/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Haml&lt;/a&gt; for very DRY markup along with the &lt;a href="http://scalate.fusesource.org/documentation/jade.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt; syntax&lt;/li&gt; &lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/mustache.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt; which is a Scala dialect of &lt;a href="http://mustache.github.com/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt; for logic-less templates which also work inside the browser using &lt;a href="http://github.com/janl/mustache.js" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;mustache.js&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;All expressions inside &lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Ssp&lt;/a&gt;, &lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt; and &lt;a href="http://scalate.fusesource.org/documentation/jade.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt; benefit from the full power and expressiveness of Scala plus they are typesafe and checked at edit/compile time to ensure you don&amp;#39;t leave any mistakes in your templates.&lt;/p&gt; &lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;&lt;strong&gt;Scalate 1.5.3 Highlights&lt;/strong&gt;&lt;/p&gt;&lt;ul style="color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt; &lt;li&gt;Scalate now uses the &lt;a href="https://groups.google.com/d/msg/scalate/3mrkmrXK7vs/7nBh96DPT4YJ" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scala Presentation Compiler&lt;/a&gt; to boost performance of template compilation 3-10X&lt;/li&gt; &lt;li&gt;Support for compiling stand alone CoffeeScript files on the server, CoffeeScript filters and various CoffeeScript related bug fixes&lt;/li&gt;&lt;li&gt;A &lt;a href="http://www.assembla.com/spaces/scalate/tickets/129" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;pure Java API&lt;/a&gt; to working with Scalate&lt;/li&gt; &lt;/ul&gt;&lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;For more detail see the &lt;a href="http://www.assembla.com/spaces/scalate/milestones/531621-1-5-3" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Full Change Log&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;&lt;a href="http://scalate.fusesource.org/community.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Feedback&lt;/a&gt; is always welcome!&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://implicit.ly/scalate-153-released"&gt;implicit.ly&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-9115754596578444880?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/9115754596578444880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=9115754596578444880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9115754596578444880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9115754596578444880'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2011/11/scalate-153-released.html' title='Scalate 1.5.3 Released'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-868595374347321510</id><published>2011-09-10T07:28:00.001Z</published><updated>2011-09-10T07:28:14.056Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='scalate'/><title type='text'>Scalate 1.5.2 Released</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div style="border-collapse: collapse; color: rgb(68, 68, 68); font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt; The &lt;a href="http://scalate.fusesource.org/" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scalate team&lt;/a&gt; is pleased to announce the availability of Scalate 1.5.2&lt;/p&gt;&lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt; Scalate is a &lt;a href="http://www.scala-lang.org/" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scala 2.9.1&lt;/a&gt; based &lt;a href="http://en.wikipedia.org/wiki/Template_engine_(web)" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;template engine&lt;/a&gt; which can be used stand alone, with servlets or web frameworks like &lt;a href="http://scalate.fusesource.org/documentation/jog.html" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;JAXRS&lt;/a&gt;, &lt;a href="http://scalate.fusesource.org/documentation/lift.html" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Lift&lt;/a&gt; or &lt;a href="http://github.com/pk11/play-scalate" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Play&lt;/a&gt; or in integration frameworks like &lt;a href="http://camel.apache.org/scalate.html" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Apache Camel&lt;/a&gt;.&lt;/p&gt; &lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;The following template languages are supported through the same common API:&lt;/p&gt;&lt;ul style="color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt; &lt;li style="margin-left: 15px;"&gt;&lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Ssp&lt;/a&gt; which is like a Scala version of &lt;a href="http://velocity.apache.org/" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Velocity&lt;/a&gt;, JSP or Erb from Rails&lt;/li&gt; &lt;li style="margin-left: 15px;"&gt;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt; which is a Scala dialect of &lt;a href="http://haml-lang.com/" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Haml&lt;/a&gt; for very DRY markup along with the &lt;/li&gt; &lt;li style="margin-left: 15px;"&gt;&lt;a href="http://scalate.fusesource.org/documentation/jade.html" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt; for even more DRY Scaml&lt;/li&gt; &lt;li style="margin-left: 15px;"&gt;&lt;a href="http://scalate.fusesource.org/documentation/mustache.html" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt; which is a Scala dialect of &lt;a href="http://mustache.github.com/" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt; for logic-less templates which also work inside the browser using &lt;a href="http://github.com/janl/mustache.js" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;mustache.js&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;All expressions inside &lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Ssp&lt;/a&gt;, &lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt; and &lt;a href="http://scalate.fusesource.org/documentation/jade.html" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt; benefit from the full power and expressiveness of Scala plus they are typesafe and checked at edit/compile time to ensure you don&amp;#39;t leave any mistakes in your templates.&lt;/p&gt; &lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;&lt;strong&gt;Scalate 1.5.2 Highlights&lt;/strong&gt;&lt;/p&gt;&lt;ul style="color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt; &lt;li style="margin-left: 15px;"&gt;Server side compilation of CoffeeScript in the &lt;a href="http://scalate.fusesource.org/documentation/jade-syntax.html#filters" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;:coffeescript filter&lt;/a&gt; - many thanks for the &lt;a href="https://github.com/scalate/scalate/pull/6" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;patch&lt;/a&gt; Dag!&lt;/li&gt; &lt;li style="margin-left: 15px;"&gt;Provide a Scala 2.8.1 distribution of Scalate (version &lt;strong&gt;1.5.2-scala_2.8.1&lt;/strong&gt;) for easier &lt;a href="http://www.playframework.org/" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Play&lt;/a&gt; integration and working with other Scala 2.8.x projects.&lt;/li&gt; &lt;li style="margin-left: 15px;"&gt;Minor improvements in the use of the ScalaCompiler to make it easier to support &lt;a href="http://lifty.github.com/" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Lifty&lt;/a&gt; as a plugin inside &lt;a href="https://github.com/harrah/xsbt/wiki" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;SBT&lt;/a&gt; - thanks for the help and welcome to the team &lt;a href="https://github.com/mads379" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Mads&lt;/a&gt;&lt;/li&gt; &lt;li style="margin-left: 15px;"&gt;Fixed &lt;a href="http://scalate.assembla.com/spaces/scalate/tickets/260" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;#260&lt;/a&gt; : Scalate distro does not include all the jars required for textile support&lt;/li&gt; &lt;/ul&gt;&lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;For more detail see the &lt;a href="http://www.assembla.com/spaces/scalate/milestones/529481-1-5-2" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Full Change Log&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0px; color: rgb(102, 102, 102); font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;&lt;a href="http://scalate.fusesource.org/community.html" target="_blank" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Feedback&lt;/a&gt; is always welcome!&lt;/p&gt; &lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://implicit.ly/scalate-152-released"&gt;implicit.ly&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-868595374347321510?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/868595374347321510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=868595374347321510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/868595374347321510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/868595374347321510'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2011/09/scalate-152-released.html' title='Scalate 1.5.2 Released'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-935604389528890894</id><published>2011-06-17T16:20:00.000Z</published><updated>2011-06-17T16:20:44.339Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuse ide'/><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><category scheme='http://www.blogger.com/atom/ns#' term='scalate'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>CamelOne and Scala eXchange were awesome!</title><content type='html'>Its been a busy few weeks lately! 3 weeks ago we had &lt;a href="http://fusesource.com/camelone2011/"&gt;CamelOne&lt;/a&gt; which was a really great conference; one of the best I've been to for a while. Great talks &amp;amp; conversations - loads of energy around the &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; community.&amp;nbsp;I'm already looking forward to the next one! We should have the various presentations from it online.&lt;br /&gt;&lt;br /&gt;I got the chance to demo the new beta of&amp;nbsp;&lt;a href="http://fusesource.com/products/fuse-ide-camel/"&gt;Fuse IDE&lt;/a&gt;&amp;nbsp;which is coming out soon; its packed with some really awesome features for working with &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt;, &lt;a href="http://camel.apache.org/"&gt;Camel&lt;/a&gt; and &lt;a href="http://servicemix.apache.org/home.html"&gt;ServiceMix&lt;/a&gt;. We're hard at work getting that ready...&lt;br /&gt;&lt;br /&gt;Then yesterday I had the pleasure of giving the day 2 keynote at &lt;a href="http://skillsmatter.com/event/scala/scala-exchange-2011"&gt;Scala eXchange&lt;/a&gt; in London. I had heaps of fun, met loads of the Scala folks I've only met online before (including &lt;a href="http://twitter.com/#!/odersky"&gt;Martin&lt;/a&gt;, finally!) &amp;amp; even managed to get a few laughs in my talk (mostly at JSPs expense I think :). It was a very similar conference to CamelOne in many ways; heaps of fun, loads of energy &amp;amp; passion around and lots of fun was had by all.&lt;br /&gt;&lt;br /&gt;My keynote was on the &lt;a href="http://scalate.fusesource.org/"&gt;Scalate&lt;/a&gt; template engine; there's &lt;a href="https://wiki.scala-lang.org/display/SW/Scala+Exchange+2011+Resources#ScalaExchange2011Resources-Keynote%3AIntroducingScalate%2CTheScalaTemplateEngine"&gt;details&lt;/a&gt; here or go straight to the &lt;a href="http://www.slideshare.net/strachaj/introducing-scalate-the-scala-template-engine"&gt;slides&lt;/a&gt; or &lt;a href="http://skillsmatter.com/podcast/scala/talk-by-james-strachan"&gt;video&lt;/a&gt;. The samples I used in the talk are in &lt;a href="https://github.com/scalate/scalate/tree/master/samples/scalate-example/src/main/webapp"&gt;github&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-935604389528890894?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/935604389528890894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=935604389528890894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/935604389528890894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/935604389528890894'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2011/06/camelone-and-scala-exchange-were.html' title='CamelOne and Scala eXchange were awesome!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-5801812771246938646</id><published>2011-05-20T11:59:00.001Z</published><updated>2011-05-20T12:02:24.372Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuse ide'/><category scheme='http://www.blogger.com/atom/ns#' term='camelone'/><title type='text'>CamelOne, Fuse IDE, Fuse Fabric, oh my...</title><content type='html'>I've been way too busy to blog for a while; will try to do better going forward.&lt;br /&gt;&lt;br /&gt;A little while ago we released the GA version of&amp;nbsp;&lt;a href="http://fusesource.com/products/fuse-ide-camel/"&gt;Fuse IDE&lt;/a&gt;; folks seem to really like it. If you use &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; I highly recommend you try it out - also check out &lt;a href="http://janstey.blogspot.com/"&gt;Jon's&lt;/a&gt; recent &lt;a href="http://java.dzone.com/articles/open-source-integration-apache"&gt;article&lt;/a&gt; on it.&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://fusesource.com/products/fuse-ide-camel/" title="Fuse IDE"&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5608414440701305298" src="http://4.bp.blogspot.com/-0EdYpQTJZPM/TdUXOBssIdI/AAAAAAAAAIc/v7mVjYsWRb4/s320/figure4.png" style="border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; display: block; height: 219px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="color: black; font-family: Times; font-size: medium; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black; font-family: Times; font-size: medium; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Since then we've been working hard on a bunch of cool new features for it; we'll be releasing the 1.2 beta next month &amp;amp; its gonna rock even more :). I'm hoping to demo some of the newer features of Fuse IDE in my keynote at next weeks &lt;a href="http://camelone.com/"&gt;CamelOne&lt;/a&gt; conference.&lt;/div&gt;&lt;div style="color: black; font-family: Times; font-size: medium; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black; font-family: Times; font-size: medium; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In parallel we've been working hard on &lt;a href="http://fabric.fusesource.org/"&gt;Fuse Fabric&lt;/a&gt;, open source software for weaving your application containers into an easy to configure, provision and manage system. Have a browse of the &lt;a href="http://fabric.fusesource.org/documentation/user-guide.html"&gt;user guide&lt;/a&gt; if you want to know more.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully see you in Washington DC at&amp;nbsp;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small; line-height: normal;"&gt;&lt;a href="http://camelone.com/"&gt;CamelOne&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small; line-height: normal;"&gt;&amp;nbsp;next week?&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-5801812771246938646?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/5801812771246938646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=5801812771246938646' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5801812771246938646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5801812771246938646'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2011/05/camelone-fuse-ide-fuse-fabric-oh-my.html' title='CamelOne, Fuse IDE, Fuse Fabric, oh my...'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-0EdYpQTJZPM/TdUXOBssIdI/AAAAAAAAAIc/v7mVjYsWRb4/s72-c/figure4.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1569275552772087711</id><published>2011-03-04T12:05:00.001Z</published><updated>2011-03-04T12:07:04.913Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camelone'/><category scheme='http://www.blogger.com/atom/ns#' term='tssjs'/><category scheme='http://www.blogger.com/atom/ns#' term='qcon'/><title type='text'>speaking at QCon, TSSJS, CamelOne, Scala eXchange, oh my</title><content type='html'>I've a fairly busy speaking time coming up in the next couple of months. Here's my current schedule...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://qconlondon.com/"&gt;Q&lt;span id="goog_1446132782"&gt;&lt;/span&gt;Con London&lt;/a&gt;&lt;span id="goog_1446132783"&gt;&lt;/span&gt;, Wednesday 9th March @ 15:35 I'll be presenting "&lt;a href="http://qconlondon.com/london-2011/presentation/Take+a+Ride+on+Camel"&gt;Take a Ride on Camel&lt;/a&gt;"&lt;/li&gt;&lt;li&gt;&lt;a href="http://javasymposium.techtarget.com/"&gt;TSSJS Vegas&lt;/a&gt;, &amp;nbsp;Thursday 17th March @ 10:00 "&lt;a href="http://javasymposium.techtarget.com/html/architecture.html#CIbsenCamel"&gt;Apache Camel: Tales from the Leading Camel Experts&lt;/a&gt;" along with &lt;a href="http://davsclaus.blogspot.com/"&gt;Claus Ibsen&lt;/a&gt;. I think I'm gonna be on the &lt;a href="http://javasymposium.techtarget.com/html/language.html#PanelJVM"&gt;Other languages on the JVM panel&lt;/a&gt;&amp;nbsp;at 3:55pm which sounds fun too&lt;/li&gt;&lt;li&gt;&lt;a href="http://camelone.eventbrite.com/"&gt;CamelOne&lt;/a&gt;&amp;nbsp;in DC, May 24th not exactly sure yet when I'll be speaking but expect a talk or two and a demo of &lt;a href="http://fusesource.com/fuse/camel-beta/"&gt;Fuse IDE&lt;/a&gt;&amp;nbsp;at least :). I'll also be trying to get my copy of &lt;a href="http://www.enterpriseintegrationpatterns.com/"&gt;Enterprise Integration Patterns&lt;/a&gt; and &lt;a href="http://www.manning.com/ibsen/"&gt;Camel in Action&lt;/a&gt; signed by the authors - you're most welcome to try too! :)&lt;/li&gt;&lt;li&gt;&lt;a href="http://skillsmatter.com/event/scala/scala-exchange-2011"&gt;Skillsmatter Scala eXchange&lt;/a&gt; in London Wed 15th-16th June.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;More details of other &lt;a href="http://fusesource.com/"&gt;FuseSource&lt;/a&gt; folks speaking &lt;a href="http://fusesource.com/resources/news/"&gt;here&lt;/a&gt;. If you're going to be at any of these conferences it'd be good to meet up and say hi!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1569275552772087711?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1569275552772087711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1569275552772087711' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1569275552772087711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1569275552772087711'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2011/03/speaking-at-qcon-tssjs-camelone-scala.html' title='speaking at QCon, TSSJS, CamelOne, Scala eXchange, oh my'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3547886364058771777</id><published>2011-02-10T12:32:00.001Z</published><updated>2011-02-10T12:32:25.383Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='scalate'/><title type='text'>Scalate 1.4.0 Released</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;p style="margin-bottom: 0px;"&gt;The &lt;a href="http://scalate.fusesource.org/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scalate team&lt;/a&gt; is pleased to announce the availability of Scalate 1.4.0&lt;/p&gt; &lt;p style="margin-bottom: 0px;"&gt;Scalate is a &lt;a href="http://www.scala-lang.org/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scala 2.8.1&lt;/a&gt; based &lt;a href="http://en.wikipedia.org/wiki/Template_engine_(web)" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;template engine&lt;/a&gt; which can be used stand alone, with servlets or web frameworks like &lt;a href="http://scalate.fusesource.org/documentation/jog.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;JAXRS&lt;/a&gt;, &lt;a href="http://scalate.fusesource.org/documentation/lift.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Lift&lt;/a&gt; or &lt;a href="http://github.com/pk11/play-scalate" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Play&lt;/a&gt; or in integration frameworks like &lt;a href="http://camel.apache.org/scalate.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Apache Camel&lt;/a&gt;.&lt;/p&gt; &lt;p style="margin-bottom: 0px;"&gt;The following template languages are supported through the same common API:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Ssp&lt;/a&gt; which is like a Scala version of &lt;a href="http://velocity.apache.org/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Velocity&lt;/a&gt;, JSP or Erb from Rails&lt;/li&gt; &lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt; which is a Scala dialect of &lt;a href="http://haml-lang.com/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Haml&lt;/a&gt; for very DRY markup along with the &lt;a href="http://scalate.fusesource.org/documentation/jade.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt; syntax&lt;/li&gt; &lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/mustache.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt; which is a Scala dialect of &lt;a href="http://mustache.github.com/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt; for logic-less templates which also work inside the browser using &lt;a href="http://github.com/janl/mustache.js" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;mustache.js&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;p style="margin-bottom: 0px;"&gt;All expressions inside &lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Ssp&lt;/a&gt;, &lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt; and &lt;a href="http://scalate.fusesource.org/documentation/jade.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt; benefit from the full power and expressiveness of Scala plus they are typesafe and checked at edit/compile time to ensure you don&amp;#39;t leave any mistakes in your templates.&lt;/p&gt; &lt;p style="margin-bottom: 0px;"&gt;&lt;strong&gt;Scalate 1.4.0 Highlights&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Upgraded to Scala 2.8.1&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.assembla.com/spaces/scalate/tickets/211" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Added&lt;/a&gt; new SBT plugins for precompiling templates and &lt;a href="http://scalate.fusesource.org/documentation/siteGen.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;site generation&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/siteGen.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Site generation&lt;/a&gt; is &lt;a href="http://www.assembla.com/spaces/scalate/tickets/196" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;now&lt;/a&gt; available in the &lt;a href="http://scalate.fusesource.org/documentation/tool.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;scalate command line tool and shell&lt;/a&gt; and it also&lt;a href="http://www.assembla.com/spaces/scalate/tickets/195" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;now&lt;/a&gt; supports a simpler directory layout.&lt;/li&gt; &lt;li&gt;Added pygmentize, css, and cdata filters&lt;/li&gt;&lt;li&gt;Added &lt;a href="http://textile.thresholdstate.com/" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Textile&lt;/a&gt; support and filters&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/mustache.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt; can &lt;a href="http://www.assembla.com/spaces/scalate/tickets/122" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;now&lt;/a&gt; be used for creating layouts and refer to parts of the generated template by &lt;a href="http://scalate.fusesource.org/documentation/mustache.html#Layouts" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;navigating the &lt;strong&gt;html&lt;/strong&gt; section&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/mustache.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt; &lt;a href="http://www.assembla.com/spaces/scalate/tickets/198" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;automatically&lt;/a&gt; &lt;a href="http://www.assembla.com/spaces/scalate/tickets/197" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;unwraps Option&lt;/a&gt; types.&lt;/li&gt; &lt;li&gt;Improved OSGi support&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-bottom: 0px;"&gt;For more detail see the &lt;a href="http://www.assembla.com/spaces/scalate/milestones/315531-1-4" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Full Change Log&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0px;"&gt;&lt;a href="http://scalate.fusesource.org/community.html" style="color: rgb(153, 0, 0); font-weight: bold; text-decoration: none;"&gt;Feedback&lt;/a&gt; is always welcome!&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://implicit.ly/scalate-140-released"&gt;implicit.ly&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3547886364058771777?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3547886364058771777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3547886364058771777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3547886364058771777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3547886364058771777'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2011/02/scalate-140-released.html' title='Scalate 1.4.0 Released'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-6572307359929867054</id><published>2011-01-28T17:45:00.001Z</published><updated>2011-01-28T19:40:27.656Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><category scheme='http://www.blogger.com/atom/ns#' term='eip'/><category scheme='http://www.blogger.com/atom/ns#' term='fuseide'/><title type='text'>Wanna try our Apache Camel developer tools for Enterprise Integration Patterns?</title><content type='html'>When I first created&amp;nbsp;&lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt;&amp;nbsp;one of my design goals was to let folks describe the&amp;nbsp;&lt;a href="http://camel.apache.org/enterprise-integration-patterns.html"&gt;Enterprise Integration Patterns&lt;/a&gt;&amp;nbsp;as easily as possible using concise and declarative domain specific languages instead of reams of confusing opaque bean configurations. &amp;nbsp;So whichever the developer prefers, a DSL in&amp;nbsp;&lt;a href="http://camel.apache.org/dsl.html"&gt;Java&lt;/a&gt;, &lt;a href="http://www.blogger.com/"&gt;&lt;span id="goog_267959950"&gt;&lt;/span&gt;XML&lt;span id="goog_267959951"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://camel.apache.org/scala-dsl.html"&gt;Scala&lt;/a&gt;, &lt;a href="http://camel.apache.org/groovy.html"&gt;Groovy&lt;/a&gt;, &lt;a href="http://camel.apache.org/ruby.html"&gt;Ruby&lt;/a&gt; etc. It was always part of the plan to actually have a visual domain specific language too and we've finally created one.&lt;br /&gt;&lt;br /&gt;We're just starting the public beta of &lt;a href="http://fusesource.com/fuse/camel-beta/"&gt;Fuse IDE for Camel&lt;/a&gt;, our &lt;a href="http://eclipse.org/"&gt;Eclipse&lt;/a&gt; tool suite that lets you visually create, edit and configure &lt;a href="http://camel.apache.org/enterprise-integration-patterns.html"&gt;Enterprise Integration Patterns&lt;/a&gt;&amp;nbsp;easily using &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt;&amp;nbsp;and its huge selection of &lt;a href="http://camel.apache.org/enterprise-integration-patterns.html"&gt;patterns&lt;/a&gt; and &lt;a href="http://camel.apache.org/components.html"&gt;components&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you use&amp;nbsp;&lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt;&amp;nbsp;or have always meant to give it a try then please&amp;nbsp;&lt;a href="http://fusesource.com/docs/developer/camel/beta/install_guide/index.html"&gt;install it&lt;/a&gt;, take it for a spin and see what you think. We'd love to &lt;a href="http://fusesource.com/forums/forum.jspa?forumID=13"&gt;hear your feedback&lt;/a&gt; on the tool &amp;amp; how we can improve it!&lt;br /&gt;&lt;br /&gt;We've lots of things planned for the tool; this is just the beginning...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-6572307359929867054?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/6572307359929867054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=6572307359929867054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6572307359929867054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6572307359929867054'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2011/01/wanna-try-our-apache-camel-developer.html' title='Wanna try our Apache Camel developer tools for Enterprise Integration Patterns?'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8029292096117844659</id><published>2010-12-13T10:03:00.000Z</published><updated>2010-12-13T10:03:04.319Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel book'/><title type='text'>Camel in Action is complete!</title><content type='html'>Just in time for Christmas, my fellow &lt;a href="http://fusesource.com/"&gt;FuseSource&lt;/a&gt; colleages &lt;a href="http://davsclaus.blogspot.com/"&gt;Claus&lt;/a&gt; and &lt;a href="http://janstey.blogspot.com/"&gt;Jon&lt;/a&gt; have finished their excellent book, &lt;a href="http://manning.com/CamelinAction"&gt;Camel in Action&lt;/a&gt;. Congratulations guys!&lt;br /&gt;&lt;br /&gt;Its a great read &amp;amp; highly recommended if you have integration problems you want to solve with the best of breed open source solutions.&lt;br /&gt;&lt;br /&gt;There's more &lt;a href="http://davsclaus.blogspot.com/2010/12/camel-in-action-is-done.html"&gt;history and background in Claus's post&lt;/a&gt; or to quote from Jon's &lt;a href="http://janstey.blogspot.com/2010/12/camel-in-action-is-complete.html"&gt;post&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://www.manning.com/ibsen/" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="color: #223344; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: x-small;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5548701747034496994" src="http://2.bp.blogspot.com/_JZEz3zQ95mA/TQDy1zSUn-I/AAAAAAAAAHI/qnElOBOavVo/s200/cia-small.jpg" style="border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 200px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; margin-top: 0px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; width: 165px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;So we did it.&amp;nbsp;&lt;a href="http://manning.com/CamelinAction"&gt;Camel in Action&lt;/a&gt;&amp;nbsp;is headed to the press! Time for beers and all that, but first a little blog post :)&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;div&gt;I had to actually search through my mail to find out when I started on this project. Turns out I got involved mid September 2009 which puts the time in about 15 months.&amp;nbsp;&lt;a href="http://davsclaus.blogspot.com/" style="color: #445566;"&gt;Claus&lt;/a&gt;&amp;nbsp;started before that so his month count is higher - poor guy ;) So it was a pretty big chunk of time for both of us but not too bad for a technical book I'm told.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We set out to create something that the growing&amp;nbsp;&lt;a href="http://camel.apache.org/" style="color: #445566;"&gt;Apache Camel&lt;/a&gt;community needed badly - a great reference for newbies and experts alike. I'd like to think we accomplished that goal. Seems the early access readers agree too.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks to all who were involved in producing this book. We had tons of very helpful reviewers,&amp;nbsp;&lt;a href="http://www.manning.com/" style="color: #445566;"&gt;Manning&lt;/a&gt;&amp;nbsp;staff, and even multiple foreword writers - there were a lot of people involved in creating this other than&amp;nbsp;&lt;a href="http://davsclaus.blogspot.com/" style="color: #445566;"&gt;Claus&lt;/a&gt;&amp;nbsp;or myself. Of course, we officially thanked the folks involved in the acknowledgements section so be sure to look there if you helped out :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have yet to see anything other than a PDF copy of the book (which should be released tomorrow) so I'm really looking forward to when the print copies start showing up in 10 days!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, feel free to use the "camel50" code for 50% off when ordering through&amp;nbsp;&lt;a href="http://manning.com/CamelinAction" style="color: #445566;"&gt;http://manning.com/CamelinAction&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="color: #333333; font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Festive beers to both of you! :)&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8029292096117844659?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8029292096117844659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8029292096117844659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8029292096117844659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8029292096117844659'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/12/camel-in-action-is-complete.html' title='Camel in Action is complete!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JZEz3zQ95mA/TQDy1zSUn-I/AAAAAAAAAHI/qnElOBOavVo/s72-c/cia-small.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-7121382281328319655</id><published>2010-10-26T12:29:00.000Z</published><updated>2010-10-26T12:29:14.327Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scala is awesome!</title><content type='html'>I got caught unawares by Debbie from &lt;a href="http://fusesource.com/"&gt;FuseSource&lt;/a&gt; with her video camera and she managed to get me rambling about programming languages and what I thought of Scala.&lt;br /&gt;&lt;br /&gt;The sound is a bit quiet you might need to turn it up when Debbie's not talking :)&lt;br /&gt;&lt;br /&gt;Here's the &lt;a href="http://www.youtube.com/watch?v=seBjpuP124Q"&gt;video&lt;/a&gt; or try it embedded below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="250" width="400"&gt;&lt;param name="movie" value="http://www.youtube.com/v/seBjpuP124Q?fs=1&amp;amp;hl=en_GB"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/seBjpuP124Q?fs=1&amp;amp;hl=en_GB" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-7121382281328319655?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/7121382281328319655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=7121382281328319655' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7121382281328319655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7121382281328319655'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/10/scala-is-awesome.html' title='Scala is awesome!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-7052335239049709416</id><published>2010-10-25T15:04:00.000Z</published><updated>2010-10-25T15:04:59.760Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='fusesource'/><title type='text'>FuseSource has launched!</title><content type='html'>Rob has &lt;a href="http://rajdavies.blogspot.com/2010/10/fusesource-has-launched.html"&gt;explained the background&lt;/a&gt;&amp;nbsp;along with Larry's&amp;nbsp;&lt;a href="http://www.masshightech.com/stories/2010/10/25/daily2-Progress-Software-spins-out-open-source-focused-FuseSource.html?ana=twt"&gt;interview&lt;/a&gt;&amp;nbsp;and Dana's&amp;nbsp;&lt;a href="http://briefingsdirect.blogspot.com/2010/10/fusesource-gains-new-autonomy-to-focus.html"&gt;podcast&lt;/a&gt;&amp;nbsp;much better than I could have.&lt;br /&gt;&lt;br /&gt;From a personal perspective I'm really excited about the future of FuseSource; we're growing fast, have some amazing customers &amp;amp; a great team including the folks who created &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt;, &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; and &lt;a href="http://servicemix.apache.org/"&gt;Apache ServiceMix&lt;/a&gt; and now we have autonomy so we can stay nimble &amp;amp; fast like a startup while we innovate and iterate to help our customers solve their integration problems with open source; all the while having the security of being backed by a large company. This is gonna be fun! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-7052335239049709416?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/7052335239049709416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=7052335239049709416' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7052335239049709416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7052335239049709416'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/10/fusesource-has-launched.html' title='FuseSource has launched!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3021204650951955672</id><published>2010-10-08T10:42:00.002Z</published><updated>2010-10-25T14:47:00.340Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='scalate'/><title type='text'>Scalate 1.3 Released</title><content type='html'>&lt;div class="posterous_autopost"&gt;&lt;br /&gt;&lt;div style="color: #666666; font-family: Arial, Verdana, Helvetica, sans-serif; margin-bottom: 0px; padding-left: 10px;"&gt;The&amp;nbsp;&lt;a href="http://scalate.fusesource.org/" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Scalate team&lt;/a&gt;&amp;nbsp;is pleased to announce the availability of Scalate 1.3.&lt;/div&gt;&lt;div style="color: #666666; font-family: Arial, Verdana, Helvetica, sans-serif; margin-bottom: 0px; padding-left: 10px;"&gt;Scalate is a&amp;nbsp;&lt;a href="http://www.scala-lang.org/" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Scala 2.8&lt;/a&gt;&amp;nbsp;based&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Template_engine_(web)" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;template engine&lt;/a&gt;&amp;nbsp;which can be used stand alone, with servlets or web frameworks like&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/jog.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;JAXRS&lt;/a&gt;,&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/lift.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Lift&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href="http://github.com/pk11/play-scalate" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Play&lt;/a&gt;&amp;nbsp;or in integration frameworks like&amp;nbsp;&lt;a href="http://camel.apache.org/scalate.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Apache Camel&lt;/a&gt;.&lt;/div&gt;&lt;div style="color: #666666; font-family: Arial, Verdana, Helvetica, sans-serif; margin-bottom: 0px; padding-left: 10px;"&gt;The following template languages are supported through the same common API:&lt;/div&gt;&lt;ul style="color: #666666; font-family: Arial, Verdana, Helvetica, sans-serif;"&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Ssp&lt;/a&gt;&amp;nbsp;which is like a Scala version of&amp;nbsp;&lt;a href="http://velocity.apache.org/" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Velocity&lt;/a&gt;, JSP or Erb from Rails&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt;&amp;nbsp;which is a Scala dialect of&amp;nbsp;&lt;a href="http://haml-lang.com/" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Haml&lt;/a&gt;&amp;nbsp;for very DRY markup along with the&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html#jade" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt;&amp;nbsp;syntax&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/mustache.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt;&amp;nbsp;which is a Scala dialect of&amp;nbsp;&lt;a href="http://mustache.github.com/" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Mustache&lt;/a&gt;&amp;nbsp;for logic-less templates which also work inside the browser using&amp;nbsp;&lt;a href="http://github.com/janl/mustache.js" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;mustache.js&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="color: #666666; font-family: Arial, Verdana, Helvetica, sans-serif; margin-bottom: 0px; padding-left: 10px;"&gt;All expressions inside&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Ssp&lt;/a&gt;,&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html#jade" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt;&amp;nbsp;benefit from the full power and expressiveness of Scala plus they are typesafe and checked at edit/compile time to ensure you don't leave any mistakes in your templates.&lt;/div&gt;&lt;div style="color: #666666; font-family: Arial, Verdana, Helvetica, sans-serif; margin-bottom: 0px; padding-left: 10px;"&gt;&lt;strong&gt;Scalate 1.3 Highlights&lt;/strong&gt;&lt;/div&gt;&lt;ul style="color: #666666; font-family: Arial, Verdana, Helvetica, sans-serif;"&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html#jade" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt;&amp;nbsp;template syntax is now supported which is a dialect of&amp;nbsp;&lt;a href="http://haml-lang.com/" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Haml&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;New&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/user-guide.html#using_scalate_as_servlet_filter_in_your_web_application" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Servlet Filter&lt;/a&gt;&amp;nbsp;which allows more flexible mapping of templates in a web application. For example you can have the request&amp;nbsp;&lt;em&gt;/foo.xml&lt;/em&gt;&amp;nbsp;automatically bound to&amp;nbsp;&lt;em&gt;/foo.xml.ssp&lt;/em&gt;&amp;nbsp;if the template exists letting you easily implement views without requiring a controller or routing in your MVC layer.&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/jspConvert.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;JSP Converter&lt;/a&gt;&amp;nbsp;helps you migrate your existing JSP web application across to Scalate&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/htmlConvert.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;HTML Converter&lt;/a&gt;&amp;nbsp;lets you migrate your existing HTML files easily to&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Scaml&lt;/a&gt;&amp;nbsp;or&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html#jade" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Jade&lt;/a&gt;&amp;nbsp;for extra DRY markup&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/user-guide.html#dry" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;DRY template imports, values and logic&lt;/a&gt;&amp;nbsp;thanks to Scalate Package objects which allow imports, values and methods to be shared across some or all of your templates to reduce noise inside your templates.&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/siteGen.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Site Generator&lt;/a&gt;&amp;nbsp;lets you generate static or dynamic websites using templates and/or wiki markup together with exporting wiki content from Confluence wikis to migrate to using git/svn as your wiki content repository. You can also use&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/siteGen.html#bootstrapping" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;a common bootstrap approach&lt;/a&gt;&amp;nbsp;now across both static website generation and web applications - such as to configure wiki macros in a canonical way. We now eat our own dog food and generate this site using Scalate.&lt;/li&gt;&lt;li&gt;More filters and pipelines supported such as confluence as well as the existing markdown which are particularly useful for website generation (static or semi-static).&lt;/li&gt;&lt;li&gt;The&amp;nbsp;&lt;a href="http://scalate.fusesource.org/documentation/tool.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Scalate Tool&lt;/a&gt;&amp;nbsp;now comes with a full interactive shell with full tab completion to make it easier to use the tool either for ad hoc or interactive shell use.&lt;/li&gt;&lt;/ul&gt;&lt;div style="color: #666666; font-family: Arial, Verdana, Helvetica, sans-serif; margin-bottom: 0px; padding-left: 10px;"&gt;For more detail see the&amp;nbsp;&lt;a href="http://scalate.assembla.com/spaces/scalate/milestones/208429-1-3" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Full Change Log&lt;/a&gt;&lt;/div&gt;&lt;div style="color: #666666; font-family: Arial, Verdana, Helvetica, sans-serif; margin-bottom: 0px; padding-left: 10px;"&gt;&lt;a href="http://scalate.fusesource.org/community.html" style="color: #990000; font-weight: bold; text-decoration: none;"&gt;Feedback&lt;/a&gt;&amp;nbsp;is always welcome!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3021204650951955672?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3021204650951955672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3021204650951955672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3021204650951955672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3021204650951955672'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/10/scalate-13-released.html' title='Scalate 1.3 Released'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2232404005130579624</id><published>2010-07-30T13:52:00.001Z</published><updated>2010-07-30T13:52:29.686Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='scalate'/><title type='text'>Scalate 1.2 Released</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;p&gt;The &lt;a href="http://scalate.fusesource.org/"&gt;Scalate team&lt;/a&gt; is pleased to announce the availability of Scalate 1.2.&lt;/p&gt; &lt;p&gt;Scalate is a &lt;a href="http://www.scala-lang.org/"&gt;Scala 2.8&lt;/a&gt; based &lt;a href="http://en.wikipedia.org/wiki/Template_engine_%28web%29"&gt;template engine&lt;/a&gt; which can be used stand alone, with servlets or web frameworks like &lt;a href="http://scalate.fusesource.org/documentation/jog.html"&gt;JAXRS&lt;/a&gt;, &lt;a href="http://scalate.fusesource.org/versions/snapshot/blog/%28&lt;a href="http://scalate.fusesource.org/documentation/lift.html"&gt;http://scalate.fusesource.org/documentation/lift.html&lt;/a&gt;"&gt;Lift&lt;/a&gt; or &lt;a href="http://github.com/pk11/play-scalate"&gt;Play&lt;/a&gt; or in integration frameworks like &lt;a href="http://camel.apache.org/scalate.html"&gt;Apache Camel&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The following template languages are supported through the same common API:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax"&gt;Ssp&lt;/a&gt; which is like a Scala version of &lt;a href="http://velocity.apache.org/"&gt;Velocity&lt;/a&gt;, JSP or Erb from Rails&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html"&gt;Scaml&lt;/a&gt; which is a Scala dialect of &lt;a href="http://haml-lang.com/"&gt;Haml&lt;/a&gt; for very DRY markup&lt;/li&gt; &lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/mustache.html"&gt;Mustache&lt;/a&gt; which is a Scala dialect of &lt;a href="http://mustache.github.com/"&gt;Mustache&lt;/a&gt; for logic-less templates which also work inside the browser using &lt;a href="http://github.com/janl/mustache.js"&gt;mustache.js&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;All expressions inside &lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax"&gt;Ssp&lt;/a&gt; and &lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html"&gt;Scaml&lt;/a&gt; benefit from the full power and expressiveness of Scala plus they are typesafe and checked at edit/compile time to ensure you don’t leave any mistakes in your templates.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Scalate 1.2 Highlights&lt;/b&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Scalate now supports the &lt;a href="http://scalate.fusesource.org/documentation/mustache.html"&gt;Mustache&lt;/a&gt; template language which is a Scala dialect of &lt;a href="http://mustache.github.com/"&gt;Mustache&lt;/a&gt; for logic-less templates which also work inside the browser using &lt;a href="http://github.com/janl/mustache.js"&gt;mustache.js&lt;/a&gt;. Support for Mustache uses the same common Scalate API so it works with all the existing Scalate adapters such as servlets, &lt;a href="http://scalate.fusesource.org/documentation/jog.html"&gt;JAXRS&lt;/a&gt;, &lt;a href="http://scalate.fusesource.org/versions/snapshot/blog/%28&lt;a href="http://scalate.fusesource.org/documentation/lift.html"&gt;http://scalate.fusesource.org/documentation/lift.html&lt;/a&gt;"&gt;Lift&lt;/a&gt; or &lt;a href="http://github.com/pk11/play-scalate"&gt;Play&lt;/a&gt; and &lt;a href="http://camel.apache.org/scalate.html"&gt;Apache Camel&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Scalate is &lt;a href="http://scalate.assembla.com/spaces/scalate/tickets/70"&gt;now built&lt;/a&gt; on top of &lt;a href="http://www.scala-lang.org/node/7009"&gt;Scala 2.8.0 final release&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/scuery.html"&gt;Scuery&lt;/a&gt; for jQuery style transformation of HTML or XHTML using CSS3 selectors&lt;/li&gt; &lt;li&gt;the &lt;a href="http://scalate.fusesource.org/documentation/console.html"&gt;console&lt;/a&gt; can be more easily reused in your application &lt;a href="http://scalate.assembla.com/spaces/scalate/tickets/105"&gt;without using WAR overlays&lt;/a&gt; and templates can be loaded via the classloader to help make more modular web applications without relying on WAR overlays&lt;/li&gt; &lt;li&gt;&lt;a href="http://scalate.assembla.com/spaces/scalate/tickets/94"&gt;improvements&lt;/a&gt; in associating different template languages to files/URIs/strings/streams in a more flexible API&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.assembla.com/spaces/scalate/tickets/108"&gt;various&lt;/a&gt; &lt;a href="http://scalate.assembla.com/spaces/scalate/tickets/109"&gt;improvements&lt;/a&gt; in the accuracy of the mapping of scala compiler errors to positions in the template source file which are then shown and linked in the &lt;a href="http://scalate.fusesource.org/documentation/console.html"&gt;console&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;For more detail see the &lt;a href="http://scalate.assembla.com/spaces/scalate/milestones/191841-1-2"&gt;Full Change Log&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://scalate.fusesource.org/community.html"&gt;Feedback&lt;/a&gt; is always welcome!&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://implicit.ly/scalate-12-released"&gt;implicit.ly&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2232404005130579624?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2232404005130579624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2232404005130579624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2232404005130579624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2232404005130579624'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/07/scalate-12-released.html' title='Scalate 1.2 Released'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-9165470820317262700</id><published>2010-05-20T14:57:00.003Z</published><updated>2010-05-20T15:05:09.067Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuse'/><title type='text'>FUSE Community Day in Frankfurt May 25th</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 18px; "&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small; "&gt;&lt;span class="Apple-style-span" style="font-size: 11px; "&gt;&lt;span class="Apple-style-span" style="font-family: Times; "&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;Along with &lt;a href="http://davsclaus.blogspot.com/"&gt;Claus&lt;/a&gt;, &lt;a href="http://rajdavies.blogspot.com/"&gt;Rob&lt;/a&gt; and others, I'll be speaking at the next &lt;a href="http://form.fusesource.com/forms/registergermany2010" style="color: rgb(34, 51, 68); "&gt;FUSE community da&lt;/a&gt;y. If you're in the area please do pop along and say hi.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It will be held on May 25th 2010 in Frankfurt, Germany. We start at 9:00 am and have a full packed day with great speakers.&lt;br /&gt;At 4:30 pm its time for &lt;i&gt;"evaluation"&lt;/i&gt; where you can join us for a drink and a &lt;i&gt;"one-on-one"&lt;/i&gt; chat with the many great minds at &lt;a href="http://fusesource.com/" style="color: rgb(34, 51, 68); "&gt;FUSE&lt;/a&gt; and network/mingle with the other participants.&lt;br /&gt;&lt;br /&gt;You can see the agenda which is listed on the &lt;a href="http://form.fusesource.com/forms/registergermany2010" style="color: rgb(34, 51, 68); "&gt;FUSE site&lt;/a&gt;.&lt;br /&gt;&lt;blockquote style="margin-top: 0.75em; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; border-top-width: 1px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-top-style: dotted; border-right-style: dotted; border-bottom-style: dotted; border-left-style: dotted; border-top-color: rgb(187, 187, 187); border-right-color: rgb(187, 187, 187); border-bottom-color: rgb(187, 187, 187); border-left-color: rgb(187, 187, 187); padding-top: 5px; padding-right: 15px; padding-bottom: 5px; padding-left: 15px; color: rgb(85, 136, 102); line-height: 1.3em; "&gt;Get the latest news on Apache ServiceMix, ActiveMQ, CXF, Camel.&lt;/blockquote&gt;&lt;blockquote style="margin-top: 0.75em; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; border-top-width: 1px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-top-style: dotted; border-right-style: dotted; border-bottom-style: dotted; border-left-style: dotted; border-top-color: rgb(187, 187, 187); border-right-color: rgb(187, 187, 187); border-bottom-color: rgb(187, 187, 187); border-left-color: rgb(187, 187, 187); padding-top: 5px; padding-right: 15px; padding-bottom: 5px; padding-left: 15px; color: rgb(85, 136, 102); line-height: 1.3em; "&gt;Hear from committers, founders like Rob Davies, James Strachan and Claus Ibsen and users who have successfully implemented Apache in projects.&lt;/blockquote&gt;&lt;blockquote style="margin-top: 0.75em; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; border-top-width: 1px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-top-style: dotted; border-right-style: dotted; border-bottom-style: dotted; border-left-style: dotted; border-top-color: rgb(187, 187, 187); border-right-color: rgb(187, 187, 187); border-bottom-color: rgb(187, 187, 187); border-left-color: rgb(187, 187, 187); padding-top: 5px; padding-right: 15px; padding-bottom: 5px; padding-left: 15px; color: rgb(85, 136, 102); line-height: 1.3em; "&gt;Meet and network with peers at this free educational community day.&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;Date&lt;/b&gt;&lt;br /&gt;25th of May&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Time&lt;/b&gt;&lt;br /&gt;9:00AM to 4:30PM&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Location&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.radissonblu.com/hotel-frankfurt" style="color: rgb(68, 85, 102); "&gt;Radisson Blu Hotel&lt;/a&gt;, Franklinstrasse 65, 60486 Frankfurt am Main&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Who Should Attend&lt;/b&gt;&lt;br /&gt;Developers, architects, engineers and IT managers&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to register&lt;/b&gt;&lt;br /&gt;Use this &lt;a href="http://form.fusesource.com/forms/registergermany2010" style="color: rgb(34, 51, 68); "&gt;link&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-9165470820317262700?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/9165470820317262700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=9165470820317262700' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9165470820317262700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9165470820317262700'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/05/fuse-community-day-in-frankfurt-may.html' title='FUSE Community Day in Frankfurt May 25th'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-7935799390037027987</id><published>2010-04-28T17:04:00.001Z</published><updated>2010-04-28T17:04:28.437Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='scalate'/><title type='text'>Scalate 1.1 Released</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;p&gt;The &lt;a href="http://scalate.fusesource.org/"&gt;Scalate team&lt;/a&gt; is pleased to announce the availability of Scalate 1.1.&lt;/p&gt; &lt;p&gt;Scalate is a &lt;a href="http://www.scala-lang.org/"&gt;Scala 2.8&lt;/a&gt; based &lt;a href="http://en.wikipedia.org/wiki/Template_engine_%28web%29"&gt;template engine&lt;/a&gt; which can be used stand alone, with servlets, in JAXRS, with the &lt;a href="http://github.com/pk11/play-scalate"&gt;Play Framework&lt;/a&gt; or in &lt;a href="http://camel.apache.org/scalate.html"&gt;Apache Camel&lt;/a&gt;. (Work on lift integration is &lt;a href="https://liftweb.assembla.com/spaces/liftweb/tickets/475"&gt;in progress&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;All expressions inside Scalate benefit from the full power of Scala plus they are typesafe and checked at edit/compile time to ensure you don’t leave any mistakes in your templates.&lt;/p&gt; &lt;p&gt;Two template languages are currently supported:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax"&gt;Ssp&lt;/a&gt; which is like a Scala version of &lt;a href="http://velocity.apache.org/"&gt;Velocity&lt;/a&gt;, JSP or Erb from Rails&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html"&gt;Scaml&lt;/a&gt; which is a Scala dialect of &lt;a href="http://haml-lang.com/"&gt;Haml&lt;/a&gt; for very DRY markup&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Scalate 1.1 Highlights&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax"&gt;Ssp&lt;/a&gt; now supports &lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#velocity_style_directives"&gt;Velocity style directives&lt;/a&gt; for more concise looping and branching.&lt;/li&gt;&lt;li&gt;new &lt;a href="http://scalate.fusesource.org/blog/releases/documentation/tool.html"&gt;Scalate Tool&lt;/a&gt; for creating new projects with Scalate more easily&lt;/li&gt;&lt;li&gt;improved API for working with templates from different sources (file, URL, Source, String etc) via the helper methods on &lt;a href="http://scalate.fusesource.org/maven/1.2-SNAPSHOT/scalate-core/scaladocs/org/fusesource/scalate/TemplateSource$.html"&gt;TemplateSource object&lt;/a&gt; and methods on &lt;a href="http://scalate.fusesource.org/maven/1.2-SNAPSHOT/scalate-core/scaladocs/org/fusesource/scalate/TemplateEngine.html"&gt;TemplateEngine&lt;/a&gt; which take a &lt;a href="http://scalate.fusesource.org/maven/1.2-SNAPSHOT/scalate-core/scaladocs/org/fusesource/scalate/TemplateSource.html"&gt;TemplateSource&lt;/a&gt;&lt;/li&gt;&lt;li&gt;easier to configure whitespace handling via the &lt;strong&gt;escapeMarkup&lt;/strong&gt; property on &lt;a href="http://scalate.fusesource.org/maven/1.2-SNAPSHOT/scalate-core/scaladocs/org/fusesource/scalate/TemplateEngine.html"&gt;TemplateEngine&lt;/a&gt; and &lt;a href="http://scalate.fusesource.org/maven/1.2-SNAPSHOT/scalate-core/scaladocs/org/fusesource/scalate/RenderContext.html"&gt;RenderContext&lt;/a&gt; so its easy to configure markup escaping for an entire project or enable/disable it within templates.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;For more detail see the &lt;a href="http://scalate.assembla.com/spaces/scalate/milestones/191837-1-1"&gt;Full Change Log&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://scalate.fusesource.org/community.html"&gt;Feedback&lt;/a&gt; is always welcome!&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://implicit.ly/scalate-11-released-0"&gt;implicit.ly&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-7935799390037027987?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/7935799390037027987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=7935799390037027987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7935799390037027987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7935799390037027987'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/04/scalate-11-released.html' title='Scalate 1.1 Released'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-4802507813232318355</id><published>2010-04-06T19:09:00.001Z</published><updated>2010-04-06T19:09:07.224Z</updated><title type='text'>Scalate 1.0 Released</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;p&gt;The &lt;a href="http://scalate.fusesource.org/"&gt;Scalate team&lt;/a&gt; is pleased to &lt;a href="http://scalate.fusesource.org/blog/releases/2010/04/release-1-0.html"&gt;announce&lt;/a&gt; the availability of Scalate 1.0.&lt;/p&gt; &lt;p&gt;&lt;a href="http://scalate.fusesource.org/"&gt;Scalate&lt;/a&gt; is a &lt;a href="http://www.scala-lang.org/"&gt;Scala 2.8&lt;/a&gt; based template engine which can be used stand alone, with servlets, in JAXRS, with the &lt;a href="http://github.com/pk11/play-scalate"&gt;Play Framework&lt;/a&gt; or in &lt;a href="http://camel.apache.org/scalate.html"&gt;Apache Camel&lt;/a&gt;. (Work on lift integration is in progress).&lt;/p&gt; &lt;p&gt;All expressions inside Scalate benefit from the full power of Scala plus they are typesafe and checked at edit/compile time to ensure you don’t leave any mistakes in your templates.&lt;/p&gt; &lt;p&gt;Two template languages are currently supported:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/ssp-reference.html#syntax"&gt;Ssp&lt;/a&gt; which is like a Scala version of JSP or Erb from Rails&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/scaml-reference.html"&gt;Scaml&lt;/a&gt; which is a Scala dialect of &lt;a href="http://haml-lang.com/"&gt;Haml&lt;/a&gt; for very DRY markup&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Further information:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://scalate.assembla.com/spaces/scalate/milestones/191839-1-0"&gt;Change Log&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/community.html"&gt;Community&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/documentation/"&gt;Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://scalate.fusesource.org/download.html"&gt;Download&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;a href="http://scalate.fusesource.org/community.html"&gt;Feedback&lt;/a&gt; is always welcome!&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://implicit.ly/scalate-10-released"&gt;implicit.ly&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-4802507813232318355?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/4802507813232318355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=4802507813232318355' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4802507813232318355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4802507813232318355'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/04/scalate-10-released.html' title='Scalate 1.0 Released'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-6496568432610459397</id><published>2010-02-02T15:52:00.004Z</published><updated>2010-02-02T16:13:14.606Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><title type='text'>if you need an excuse for buying an iPad, try this...</title><content type='html'>There's a ton of noise out there about the new &lt;a href="http://www.apple.com/ipad/"&gt;iPad&lt;/a&gt;. One common response is folks finding it hard to justify buying one if you have a MacBook Pro and an iPhone.&lt;div&gt;&lt;br /&gt;&lt;div&gt;So one thing I really like about the iPad (apart from the speed &amp;amp; bigger screen than the iPhone) is the gap around the screen - which at first I thought looked odd. Let me explain...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm constantly amazed by how easy the iPhone is to use, especially by people who've never really used a computer. My daughters have been able to use my iPhone for drawing &amp;amp; browsing photos for a long time (and they are 3 and 1 year old right now) - without me ever really showing them how. They just picked it up, played with it and figured it all out. (I might have shown them the two finger tap on the drawing app to change the pen). When they are a bit older and can actually read, am sure they'll feel right at home browsing too.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The biggest problem my daughters have found (particularly with my youngest, she was 1 year old in November) is holding the iphone without accidentally pressing one or more fingers on the screen - causing confusion in the multi-touch detection.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You've gotta be quite careful with an iPhone not to touch the screen while using it (something adults master quite quickly). So for kids, the iPad is gonna be so much simpler to use with its nice wide thumb/finger area when holding the device.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lots of cars have DVD screens on the back of the headrests so kids in the back can watch movies while travelling. I can see iPad's being the long term replacement very soon...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So if you're a geek and need a reason to buy an iPad; just say you're getting one for the kids! Thats gonna be my excuse and I'm sticking to it...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-6496568432610459397?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/6496568432610459397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=6496568432610459397' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6496568432610459397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6496568432610459397'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/02/if-you-need-excuse-for-buying-ipad-try.html' title='if you need an excuse for buying an iPad, try this...'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-7050436638517459919</id><published>2010-01-13T12:36:00.004Z</published><updated>2010-01-13T13:10:11.438Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sbt'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Using SBT on your Scala Maven project for continous testing</title><content type='html'>&lt;span style="font-style: italic;"&gt;Continuous testing&lt;/span&gt; is the practice of rerunning test cases whenever you change source code. Its a great way to write code in a mostly test-first way and it gives you very rapid feedback as you change code.&lt;br /&gt;&lt;br /&gt;It can take a while to rebuild &amp;amp; rerun tests on a Scala project when using Maven (and IDEs can be a little slow sometimes too when it comes to continuous testing and scala).&lt;br /&gt;&lt;br /&gt;You can buy &lt;a href="http://improvingworks.com/products/infinitest/"&gt;Infinitest&lt;/a&gt; as an IDE plugin which is triggered whenever you do a build. Though I've found the console view isn't great when running &lt;a href="http://scalatest.org/"&gt;ScalaTests&lt;/a&gt; (there's no way to navigate to the code that fails) - and you have to explicitly hit 'build' when you're editing your code. I prefer tests to just rerun automatically (reusing IDEA's auto-save feature).&lt;br /&gt;&lt;br /&gt;So another approach is to use &lt;a href="http://code.google.com/p/simple-build-tool/"&gt;sbt&lt;/a&gt;, the simple build tool for scala.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Installing sbt&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;I use 0.6.9 (or xsbt as its often called) so I can work with scala 2.8.0.Beta1-RC7 nicely. Basically &lt;a href="http://code.google.com/p/simple-build-tool/wiki/Setup"&gt;download the jar and create script&lt;/a&gt; called  'sbt' or 'xsbt' if you prefer, then you can run sbt from the command line.&lt;br /&gt;&lt;br /&gt;You can then run sbt in the directory of your pom.xml and it'll configure itself with whatever project &amp;amp; version you want to use and version of sbt/scala etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Setting up sbt for maven projects&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;For those new (like me) to sbt, here's a quick way to get your maven build converted to use sbt. If you don't have a maven build for your project you can skip this step.&lt;br /&gt;&lt;br /&gt;To cut corners and not configure all the maven repos you want to use to download your dependencies, you can just let sbt reuse your local maven repo to find jars.&lt;br /&gt;&lt;br /&gt;So create a scala file in the &lt;span style="font-weight: bold;"&gt;project/build&lt;/span&gt; directory. sbt will have created the project directory for you, along with a boot subdirectory but you will need to create the build directory.&lt;br /&gt;&lt;br /&gt;Call the file whatever you like, such as project/build/Foo.scala...&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: courier new;"&gt;import sbt._&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;class FooProject(info: ProjectInfo) extends DefaultProject(info) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  val mavenLocal = "Local Maven Repository" at &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       "file://"+Path.userHome+"/.m2/repository"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;Now you can start sbt and update it to load all the maven dependencies from your project&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;sbt&lt;br /&gt;update&lt;br /&gt;compile&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;The first execution of sbt puts you in the &lt;a href="http://code.google.com/p/simple-build-tool/wiki/RunningSbt"&gt;sbt shell&lt;/a&gt; which has completion and help so you can find the various options available. The 'update' task loads &amp;amp; downloads all the dependencies from your pom.xml. Refer to the docs for more details on r&lt;a href="http://code.google.com/p/simple-build-tool/wiki/LibraryManagement"&gt;epositories and dependencies&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now you've got your dependencies imported, lets do some continuous testing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Continuous Testing&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;From the sbt shell just type&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;~ test&lt;br /&gt;&lt;/blockquote&gt;Now sbt will monitor your code, detect when its changed, rebuild and rerun all the tests for you showing the results in nicely colour coded output in the terminal.&lt;br /&gt;&lt;br /&gt;When you fancy playing in the Scala interactive shell (REPL) just type&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;console-project&lt;/blockquote&gt;&lt;br /&gt;And you're good to go. Enjoy!&lt;br /&gt;&lt;br /&gt;Have you figured out a neater way of doing continuous testing with IDEA and Scala?&lt;br /&gt;&lt;br /&gt;I guess someone could hack a JRebel plugin for Maven so that you could use the &lt;span style="font-weight: bold;"&gt;scala:cc&lt;/span&gt; goal to incrementally compile your scala code as you edit it; then &lt;a href="http://www.zeroturnaround.com/blog/free-javarebel-for-scala-users-zeroturnaround-announces/"&gt;JRebel&lt;/a&gt; automatically reloads the changed classes, then the new continuous testing plugin would just need to use a trigger in the JRebel SDK so that when a class is reloaded it reruns the relevant test cases (or all of them - maybe sorted by previously failed ones first).&lt;br /&gt;&lt;br /&gt;A similar technique works great when running projects with &lt;span style="font-weight: bold;"&gt;jetty:run&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;scala:console&lt;/span&gt; - letting JRebel reload any classes rebuilt via &lt;span style="font-weight: bold;"&gt;scala:cc&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-7050436638517459919?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/7050436638517459919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=7050436638517459919' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7050436638517459919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7050436638517459919'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2010/01/using-sbt-on-your-scala-maven-project.html' title='Using SBT on your Scala Maven project for continous testing'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-649140120641802921</id><published>2009-12-16T12:39:00.005Z</published><updated>2009-12-16T13:12:22.314Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Update: using Time Machine on a network drive with Snow Leopard or Leopard</title><content type='html'>I now have much simpler instructions thanks to &lt;a href="http://www.blogger.com/profile/11867559494404858630"&gt;Jon&lt;/a&gt; who &lt;a href="https://www.blogger.com/comment.g?blogID=637417304187784899&amp;amp;postID=5469266348164683919"&gt;commented&lt;/a&gt; on my &lt;a href="http://macstrac.blogspot.com/2009/12/using-network-drive-with-time-machine.html"&gt;previous blog post&lt;/a&gt;. Forget all those icky complex command lines! Here's the simple way...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;download the &lt;a href="http://backmyfruitup.googlecode.com/files/CreateBackupVolume.zip"&gt;CreateBackupVolume&lt;/a&gt; application from Jon's excellent &lt;a href="http://code.google.com/p/backmyfruitup/"&gt;backmyfruitup project&lt;/a&gt;&lt;/li&gt;&lt;li&gt;run it - tell it how big to make the sparse bundle thingy&lt;/li&gt;&lt;li&gt;a sparse bundle file then gets created on your desktop (the name of the file starts with your machine name)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;mount your network drive if its not already&lt;br /&gt;&lt;/li&gt;&lt;li&gt;drag the sparse bundle onto your network drive (you can delete the local one)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;set TimeMachine to use your network drive&lt;/li&gt;&lt;li&gt;wait :)&lt;/li&gt;&lt;/ul&gt;I've repeated the above now on 3 different macs including one old G4 and it worked like a charm each time. It seemed kinda faster than my previous Time Capsule too :)&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Many thanks Jon! Using Time Machine with a network drive just got loads simpler!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Update: these instructions should work on any Mac with Time Machine, so it works just fine on Leopard too&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-649140120641802921?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/649140120641802921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=649140120641802921' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/649140120641802921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/649140120641802921'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/12/update-using-time-machine-on-network.html' title='Update: using Time Machine on a network drive with Snow Leopard or Leopard'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-5469266348164683919</id><published>2009-12-03T11:49:00.006Z</published><updated>2009-12-03T12:17:36.820Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Using a network drive with Time Machine on Snow Leopard</title><content type='html'>I bought one of &lt;a href="http://www.amazon.co.uk/dp/B001RNNTW0/?tag=jamesstrachas-20"&gt;these&lt;/a&gt; after my TimeMachine died and figured it'd just work with Time Machine. After some messing about it still didn't work &amp;amp; I was left scratching my head so I started to look for backup software alternatives.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then &lt;a href="http://twitter.com/dancres"&gt;@dancres&lt;/a&gt; pointed me at these &lt;a href="http://wiki.qnap.com/wiki/How_to_setup_your_QNAP_NAS_with_Apple_Time_Machine"&gt;awesome instructions&lt;/a&gt; on how to do it. The only trick is the sparse band size needs to be changed on Snow Leopard as mentioned &lt;a href="http://www.naschenweng.info/2008/07/15/os-x-time-machine-backup-to-synology-ds1"&gt;here&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So the only change from the &lt;a href="http://wiki.qnap.com/wiki/How_to_setup_your_QNAP_NAS_with_Apple_Time_Machine"&gt;above instructions&lt;/a&gt; is the big meaty command I used to create the sparse bundle was this (my changes in bold)...&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;HN=`hostname | cut -f1 -d.`;MA=`ifconfig en0 | grep ether | sed "s|:||g" | cut -f2 -d' '`;hdiutil create -size 350g &lt;b&gt;-tgtimagekey sparse-band-size=262144&lt;/b&gt; -fs HFS+J -volname "TM_$HN" $HN\_$MA.sparsebundle &lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;Then rsync it to your network drive as per the instructions above and it just works - yay! &lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;rsync -avE mymachinename_12345.sparsebundle /Volumes/Whatever&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;(in the above you use the real generated sparse bundle name, and the real name of your network drive volume :)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-5469266348164683919?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/5469266348164683919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=5469266348164683919' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5469266348164683919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5469266348164683919'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/12/using-network-drive-with-time-machine.html' title='Using a network drive with Time Machine on Snow Leopard'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-5533458871051863333</id><published>2009-12-01T16:05:00.004Z</published><updated>2009-12-01T16:17:29.418Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><category scheme='http://www.blogger.com/atom/ns#' term='fuse'/><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>Fuse Community days in NY &amp; SF next week - come hear about ActiveMQ, Camel and ServiceMix</title><content type='html'>Next week we're hosting two Fuse Community day events in the states&lt;div&gt;&lt;ul&gt;&lt;li&gt;Tuesday 8th December - &lt;a href="http://form.fusesource.com/forms/registerny2009"&gt;New York at the Hyatt Hotel in New York City&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Thursday 10th December - &lt;a href="http://form.fusesource.com/forms/registersf2009"&gt;San Francisco at the Hyatt Hotel in Burlingame&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;If you're in the area pop by and say hello - you'll need to register on the above links. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We'll have a bunch of presentations on various popular open source Apache projects like &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt;, &lt;a href="http://camel.apache.org/"&gt;Camel&lt;/a&gt; and &lt;a href="http://servicemix.apache.org/"&gt;ServiceMix&lt;/a&gt;. Schedule in the links above. See you there if you can make it!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's a flavour of what to expect, the &lt;a href="http://bit.ly/6rFZsd"&gt;devoxx talk I did recently&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-5533458871051863333?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/5533458871051863333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=5533458871051863333' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5533458871051863333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5533458871051863333'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/12/fuse-community-days-in-ny-sf-next-week.html' title='Fuse Community days in NY &amp; SF next week - come hear about ActiveMQ, Camel and ServiceMix'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2267714275580057173</id><published>2009-07-10T08:26:00.004Z</published><updated>2009-07-10T09:40:11.942Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>a groovy scala example</title><content type='html'>So my last post caused a bit of a stir (though some excellent &lt;a href="http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html"&gt;comments&lt;/a&gt;!). Sorry about that! :) I think a few folks got the wrong end of the stick thinking my post was some kinda put down of dynamically typed languages. I still like Groovy/Ruby/JavaScript etc. I tried to focus the blog post purely on folks who were hacking statically typed code in javac; that Scala was a natural long term replacement which is a much better, powerful &amp;amp; more elegant statically typed language. If you've already stopped using javac and using Groovy/Ruby/JavaScript/Clojure/whatever then the post wasn't really meant for you as you don't need a javac replacement as you've already stopped using javac :)&lt;br /&gt;&lt;br /&gt;Charles Nutter &lt;a href="http://blog.headius.com/2009/04/future-part-one.html"&gt;explains&lt;/a&gt; what I was trying to say way more elegantly&lt;br /&gt;&lt;blockquote&gt;Scala, it must be stated, is the current heir apparent to the Java throne. No other language on the JVM seems as capable of being a "replacement for Java" as Scala, and the momentum behind Scala is now unquestionable&lt;/blockquote&gt;Anyway the reason for this post was to show how Scala is very Groovy based a nice example posted to the &lt;a href="http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html"&gt;comments&lt;/a&gt; by &lt;a href="http://james-iry.blogspot.com/"&gt;James Iry&lt;/a&gt;. Here's the Scala code first&lt;br /&gt;&lt;blockquote&gt;val (minors, adults) = people partition (_.age &amp;lt; 18 )&lt;/blockquote&gt;I'm sure most of you will agree its pretty clean, concise code and easy to read. It partitions a collection of people into two collections of minor and adults based on age.&lt;br /&gt;&lt;br /&gt;Guillaume LaForge &lt;a href="http://twitter.com/glaforge/status/2538812058"&gt;posted&lt;/a&gt; the Groovy equivalent&lt;br /&gt;&lt;blockquote&gt;def (minors, adults) = people.split { it.age &amp;lt; 18 }&lt;/blockquote&gt;Notice how apart from some pretty minor surface syntax differences they are kinda identical to read. Mostly Groovy forces the dot between people and the split method (I think thats still true?) and uses 'it' for the default parameter name in a closure block rather than the Scala equivalent of _ if no name is specified. (Scala the _ is the wildcard symbol in various parts of the language as * is an operator on lots of objects like numbers).&lt;br /&gt;&lt;br /&gt;So Scala and Groovy code can look about the same; nice concise, easy to read - describing the intention of the developer, rather than lots of noisy lines of code, or maybe ugly anonymous inner class noise using non-standard helper libraries to try simulate having nice core language support for working with very common data structures in a powerful expressive way.&lt;br /&gt;&lt;br /&gt;There's a ton of Java libraries out there trying to tack on the ability to work with common collections &amp;amp; data structures in the modern Scala/Groovy/Ruby/Python/C#/VB way (dare I use the monad word here?) - I even helped create &lt;a href="http://commons.apache.org/collections/api-release/org/apache/commons/collections/Predicate.html"&gt;one&lt;/a&gt; many years ago. FWIW if you're stuck on Javac, do take a look at &lt;a href="http://code.google.com/p/google-collections/"&gt;google collections&lt;/a&gt; which is really good.&lt;br /&gt;&lt;br /&gt;My main criticism of these approaches in Java is they are non-standard (there's a ton of them out there - which to use?) and they are separate to the objects you want to work with. You can't just use a List, Set, Array or Map directly - you have to remember the separate class in a separate package you need to import so you can just do simple basic operations on data structures concisely. This kinda stuff is so basic, it should be a core feature of the programming language you use IMHO.&lt;br /&gt;&lt;br /&gt;So both the Scala and Groovy examples above are a big improvement IMHO over their Java equivalents. I just wanted to demonstrate one of the additional benefits the Scala version has. While the code looks about the same, the Scala one creates immutable variables (which are great for concurrency) but the main difference is that the values are all statically typed. That means the compiler / IDE / documentation tool knows the exact types of the variables (minors, adults, people). Big deal I hear some of you say.&lt;br /&gt;&lt;br /&gt;Well here's a handy example of why that is useful. Imagine you exposed this line of code as an API folks could invoke. Here's a &lt;a href="http://jstrachan.github.com/scamples/scaladocs/scamples/PeopleThingy$object.html"&gt;PersonThingy object&lt;/a&gt; which defines a method minorsAndAdults as follows&lt;br /&gt;&lt;blockquote&gt;def minorsAndAdults() = people partition (_.age &amp;lt; 18)&lt;/blockquote&gt;Now notice how the generated API documentation describes the return type of minorsAndAdults() as being &lt;span style="font-weight: bold;"&gt;(List(Person),List(Person))&lt;/span&gt;. i.e. you know its gonna return a 2 value tuple with a list of people for both values. This is very handy when you want to expose your code to other people; you don't have to write documentation (which gets out of date fast) describing what it is you return, the compiler can do all this for you. Plus when folks try to invoke your method their compiler &amp;amp; IDE will type check their code as they type it to ensure its used correctly (e.g. in case the user forgot to extract the first value from the tuple etc).&lt;br /&gt;&lt;br /&gt;This also works nicely when using map. For example here is a &lt;a href="http://jstrachan.github.com/scamples/scaladocs/scamples/MapExample$object.html"&gt;little example&lt;/a&gt; which defines two methods &lt;span style="font-style: italic;"&gt;greetings&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;lengths&lt;/span&gt; using the same value and a map method call but just using different expressions in the function passed&lt;br /&gt;&lt;blockquote&gt;def greetings = names map ("Hello " + _)&lt;br /&gt;&lt;br /&gt;def lengths = names map (_.size)&lt;br /&gt;&lt;/blockquote&gt;which return &lt;notice how="" generated="" documentation="" describes="" exact="" types="" of="" the="" return="" values="" as=""&gt;&lt;span style="font-weight: bold;"&gt;List[String]&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;List[Int]&lt;/span&gt; respectively.&lt;br /&gt;&lt;br /&gt;So while dynamically typed languages and Scala can look as equally as concise; being statically typed can save you yet more typing explaining stuff the compiler/IDE/documentation generator already knows - and it avoids documentation going stale after refactoring - for example to change the data structure.&lt;br /&gt;&lt;br /&gt;One closing observation. A common put down (usually from folks who've never read a good Scala book or really tried using Scala in earnest) is "oh its too complex". Yet the code you frequently write when working with objects, collections and data structures often looks very similar to the Ruby/Groovy/JavaScript/Python equivalents - yet folks rarely use the complexity word with those languages.&lt;br /&gt;&lt;br /&gt;I wonder if part of the problem is, Scala &amp;amp; its community tends to describe Scala code and what the language is in terms of various (slightly academic) programming language concepts so that you can understand how the language works internally so advanced users can see how you can bend it to do what you need in a more concise &amp;amp; expressive way. For example back to James Iry's example&lt;br /&gt;&lt;blockquote&gt;val (minors, adults) = people partition (_.age &amp;lt; 18)&lt;/blockquote&gt;That one example uses a tuple, pattern matching, a lambda, and partial function application. Describing how the language works tends to make it sound more complex (especially if you use the monad word) than just saying 'here's how to partion a collection'. If you were to take the similar Groovy/Ruby/Python code and tried to explain how the language actually implemented that line of code it would sound about as complex (often with meta object programming in there somewhere).&lt;br /&gt;&lt;br /&gt;Scala is frequently described as a unification of functional programming and OO programming language concepts. A common push back from OO folks is, "I don't like functional programming, I just wanna do OO". Yet those same OO folks seem to really like closures, lambdas, for/list comprehensions and so forth. For example &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163362.aspx"&gt;VB has lambdas&lt;/a&gt;, C# them too and has &lt;a href="http://stackoverflow.com/questions/130898/introduction-to-c-list-comprehensions"&gt;list comprehensions&lt;/a&gt;. Folks tend to really like them - whether they are developers using VB, C#, Ruby, Python, Groovy, JavaScript etc.&lt;br /&gt;&lt;br /&gt;i.e. it seems most of us all really like an OO language with functional language features; we just don't like to think of ourselves as functional language developers :) Microsoft BTW is doing really well at turning C# and VB into OO and functional languages - but just avoiding using the 'f' word to avoid scaring folks off. I wonder if the Scala community should use the 'f' word a little less? :)&lt;br /&gt;&lt;br /&gt;&lt;/notice&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2267714275580057173?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2267714275580057173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2267714275580057173' title='31 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2267714275580057173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2267714275580057173'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/07/groovy-scala-example.html' title='a groovy scala example'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3527883757609346542</id><published>2009-07-06T08:50:00.004Z</published><updated>2009-07-09T08:12:20.992Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scala as the long term replacement for java/javac?</title><content type='html'>Don't get me wrong - I've written tons of Java over the last decade or so &amp;amp; think its been a great evolutionary step from C++ and Smalltalk  (lots of other languages have helped too like JavaScript, Ruby, Groovy, Python etc). However I've long wanted a long term replacement to javac. I even created a &lt;a href="http://groovy.codehaus.org/"&gt;language&lt;/a&gt; to scratch this itch.&lt;br /&gt;&lt;br /&gt;Java is a surprisingly complex language (the spec is 600 pages and does anyone really grok generics in Java?), with its autoboxing (and lovely NPE's hiding in there), primitive types, icky arrays which are not collections &amp;amp; general lack of polymorphism across strings/text/buffers/collections/arrays along with extremely verbose syntax for working with any kind of data structure &amp;amp; bean properties and still no closures (even in JDK7) which leads to tons of icky try/catch/finally crapola unless you use frameworks with new custom APIs &amp;amp; yet more complexity. Java even has &lt;a href="http://james-iry.blogspot.com/2009/04/java-has-type-inference-and-refinement.html"&gt;type inference, it just refuses to use it&lt;/a&gt; to let us save any typing/reading.&lt;br /&gt;&lt;br /&gt;This issue becomes even more pressing with there being &lt;a href="http://www.jroller.com/scolebourne/entry/no_more_java_7"&gt;no Java7&lt;/a&gt; (which is even more relevant after Snorcle - I wonder if javac is gonna be replaced with jdkc? :). So I guess javac has kinda reached its pinacle; closures look unlikely as does any kind of simplification or progression.&lt;br /&gt;&lt;br /&gt;So whats gonna be the long term replacement for javac? Certainly the dynamic languages like Ruby, Groovy, Python, JavaScript have been getting very popular the last few years - lots of folks like them.&lt;br /&gt;&lt;br /&gt;Though my tip though for the long term replacement of javac is &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;. I'm very impressed with it! I can honestly say if someone had shown me the &lt;a href="http://www.amazon.com/Programming-Scala-Comprehensive-Step-step/dp/0981531601/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240563267&amp;amp;sr=8-1"&gt;Programming in Scala&lt;/a&gt; book by by Martin Odersky, Lex Spoon &amp;amp; Bill Venners back in 2003 I'd probably have never created Groovy.&lt;br /&gt;&lt;br /&gt;So why Scala? Scala is statically typed and compiles down to the same fast bytecode as Java so its usually about as fast as Java (sometimes a little faster sometimes a little slower). e.g. compare how well &lt;a href="http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&amp;amp;lang=scala&amp;amp;lang2=java&amp;amp;box=1"&gt;Scala does&lt;/a&gt; in some benchmarks with &lt;a href="http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&amp;amp;lang=groovy&amp;amp;lang2=java&amp;amp;box=1"&gt;groovy&lt;/a&gt; or &lt;a href="http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&amp;amp;lang=jruby&amp;amp;lang2=java&amp;amp;box=1"&gt;jruby&lt;/a&gt;. Or &lt;a href="http://stronglytypedblog.blogspot.com/2009/07/java-vs-scala-vs-groovy-performance.html"&gt;this&lt;/a&gt;. Note speed isn't everything - there are times when you might want to trade code thats 10x slower for more productivity and conciseness; but for a long term replacement for javac speed is important.&lt;br /&gt;&lt;br /&gt;Yet Scala has type inference - so its typically as concise as Ruby/Groovy but that everything has static types. This is a good thing; it makes code comprehension, navigation &amp;amp; documentation much simpler. Any token/method/symbol you can click on to navigate to the actual implementation code &amp;amp; documentation. No wacky monkey patching involved, or doubting of who added a method, when and how - which is great for large projects with lots of folks working on the same code over long periods of time. Scala seems to hit the perfect sweet spot between the consise feel of a dynamic language, while actually being completely statically typed. So I never have to remember the magic methods that are available - or run a script in a shell then inspect the object to see what it really looks like - the IDE/compiler just knows while you edit.&lt;br /&gt;&lt;br /&gt;Scala has high order functions and closure support along with &lt;a href="http://www.scala-lang.org/node/111"&gt;sequence comprehensions&lt;/a&gt; so you can write beautifully concise code. Scala also unifies functional and OO paradigms beautifully together into a language thats considerably simpler than Java (though the type system is of a similar order to truly understand than generics - but then thats usually an issue for framework creators rather than application code developers). It also lets folks gradually migrate from a traiditional OO/Java way of coding to a more functional way - which is particularly relevant for folks writing concurrent or asynchronous code (which due to the GHz of chips no longer going up but instead we're getting more cores is becoming more necessary). You can start the OO way and migrate to using immutable state if/when you need its benefits. Increasingly functional programming is becoming more and more important as we try and make things more concise and higher level (e.g. closures, higher order functions, pattern matching, monads etc) as well as dealing with concurrency and asynchrony via immutable state etc.&lt;br /&gt;&lt;br /&gt;Scala also has proper mixins (traits) so you don't have to muck about with AOP wackiness to get nice modular code. There's even structural types in case you really do need some duck typing.&lt;br /&gt;&lt;br /&gt;The thing which most impresses me is the core language syntax is pretty small and simple (the spec is about a quarter the size of Java's); but its way more powerful and flexible and is very easy to extend in &lt;span style="font-weight: bold;"&gt;libraries&lt;/span&gt; to add new semantics and features. For example see the &lt;a href="http://www.scala-lang.org/node/242"&gt;Scala Actors&lt;/a&gt;. So its ideal for creating either embedded DSLs or external DSLs. There's really no need to have Java , XPath, XSLT, XQuery, JSP, JSTL, EL and SQL - you can just use Scala with some DSLs here and there (examples of this later...).&lt;br /&gt;&lt;br /&gt;Scala does take a little bit of getting used to - I confess the first few times I looked at Scala it wasn't that pleasing on the eye - with Java you're kinda used to dumb verbose code which doesn't do very much - it can be quite a shock to see quite a few symbols at first. (It took me a while to get over the use of _ in scala which is the 'wildcard' symbol since * is an identifier/method).&lt;br /&gt;&lt;br /&gt;If you've been doing lots of Java then Scala does feel quite different at first - (e.g. the order of types &amp;amp; identifiers in method/variable/parameter declarations - though the reason for that is to make it easy to miss out redundant type information).&lt;br /&gt;&lt;br /&gt;e.g. in Java&lt;br /&gt;&lt;blockquote&gt;List&amp;lt;String&amp;gt;&lt;string&gt;&lt;string&gt; list = new ArrayList&lt;/string&gt;&lt;/string&gt;&amp;lt;String&amp;gt;&lt;string&gt;&lt;string&gt;&lt;string&gt;&lt;string&gt;()&lt;br /&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/blockquote&gt;in Scala&lt;br /&gt;&lt;blockquote&gt;val list = new List[String]&lt;/blockquote&gt;or if you want to specify exact typing&lt;br /&gt;&lt;blockquote&gt;val list : List[String] = new List[String]&lt;br /&gt;&lt;/blockquote&gt;However if you keep at it, the beauty of Scala soon becomes apparent; its simplified so many of the gremlins in the Java language, allows you to write very concise code describing the intent behind the code rather than the implementation cruft - together with providing a nice migration path to elegant functional programming which is awesome for building concurrent or distributed software.&lt;br /&gt;&lt;br /&gt;I highly recommend you take a look at Scala - with an open mind - and see if (once you're brain adjusts) you can see its beauty too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Some scala links and online presentations&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I can highly recommend the &lt;a href="http://www.amazon.com/Programming-Scala-Comprehensive-Step-step/dp/0981531601/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240563267&amp;amp;sr=8-1"&gt;Programming in Scala&lt;/a&gt; book by by Martin Odersky, Lex Spoon &amp;amp; Bill Venners - its a great read and describes the features of Scala and design choices very well. Its a &lt;span style="font-style: italic;"&gt;big&lt;/span&gt; book - but you can skip chunks and come back to it later.&lt;/li&gt;&lt;li&gt;I've only skim read it a little so far but the  &lt;a href="http://programming-scala.labs.oreilly.com/"&gt;O'Reilly Scala book&lt;/a&gt; looks great too&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the &lt;a href="http://www.scala-lang.org/node/104"&gt;Tour of Scala&lt;/a&gt; is a good read if you're short on time and want a quick look at its syntax; though it can take a little while to truly appreciate why things are different to Java&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Martin Odersky's &lt;a href="http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5165.pdf"&gt;Scala talk at JavaOne 2008&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jonasboner.com/"&gt;Jonas Bonér&lt;/a&gt;'s presentation on &lt;a href="http://www.slideshare.net/jboner/pragmatic-real-world-scala-45-min-presentation"&gt;Real-World Scala&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Gert's &lt;a href="http://www.anova.be/files/camel-scala.pdf"&gt;presentation&lt;/a&gt; on how he created the &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; &lt;a href="http://camel.apache.org/scala-dsl.html"&gt;DSL for Scala&lt;/a&gt;&lt;/li&gt;&lt;li&gt;speaking of internal cool DSLs try this blog post on &lt;a href="http://pragmaticdesign.blogspot.com/2009/04/scala-program-like-you-mean-it.html"&gt;program like you mean it&lt;/a&gt; with links to some other great internal DSLs for Scala&lt;/li&gt;&lt;li&gt;a scala version of LINQ for &lt;a href="http://szeiger.de/blog/2008/12/21/a-type-safe-database-query-dsl-for-scala/"&gt;type safe querying of JDBC&lt;/a&gt; also check out &lt;a href="http://scala.sygneca.com/libs/dbc"&gt;dbc&lt;/a&gt;&lt;/li&gt;&lt;li&gt;a great presentation on using &lt;a href="http://osgilook.com/2009/05/08/osgi-on-scala/"&gt;Scala and OSGi&lt;/a&gt; with DSLs&lt;br /&gt;&lt;/li&gt;&lt;li&gt;how to work with &lt;a href="http://www.ibm.com/developerworks/library/x-scalaxml/"&gt;Scala and XML&lt;/a&gt; (kinda embedded XML, XPath, XSLT, XQuery in neat syntax in the language :) more &lt;a href="http://www.scala-lang.org/node/131"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scala-lang.org/docu/files/ScalaByExample.pdf"&gt;Scala by example&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.geekontheloose.com/images/stories/programming/Scala_Cheatsheet.pdf"&gt;Scala cheat sheet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;an example showing how to &lt;a href="http://www.scala-lang.org/node/29"&gt;create bean style properties&lt;/a&gt; (or C# style getters)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;creating a &lt;a href="http://liftweb.blip.tv/"&gt;chat demo using Lift&lt;/a&gt; or more on the &lt;a href="http://liftweb.net/"&gt;Lift site&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;If you have a spare hour or so these video talks are great to watch&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.parleys.com/display/PARLEYS/Home#talk=27131945;slide=1;title=The%20Feel%20Of%20Scala"&gt;The Feel of Scala&lt;/a&gt; by Bill Venners&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/presentations/jaoo-spoon-scala"&gt;Scala: Bringing Future Languages&lt;/a&gt; to the JVM by Lex Spoon&lt;/li&gt;&lt;/ul&gt;Handy Scala frameworks and libraries&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://liftweb.net/"&gt;liftweb&lt;/a&gt; the rails of scala&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/specs/"&gt;specs&lt;/a&gt; and &lt;a href="http://www.artima.com/scalatest/"&gt;ScalaTest&lt;/a&gt; for BDD and more literate testing showing how a typesafe DSL can help you write more consise and expressive code that is very IDE friendly&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/scalaz/"&gt;scalaz&lt;/a&gt; a handy library of utilities&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://databinder.net/dispatch/Guide"&gt;dispatch&lt;/a&gt; for working with HTTP/JSON services&lt;/li&gt;&lt;/ul&gt;BTW for those like me who &lt;a href="http://macstrac.blogspot.com/2009/01/jax-rs-as-one-web-framework-to-rule.html"&gt;love JAXRS&lt;/a&gt; you can now use &lt;a href="http://liftweb.net/"&gt;lift&lt;/a&gt; templates with &lt;a href="https://jersey.dev.java.net/"&gt;Jersey&lt;/a&gt; via the new &lt;a href="http://n2.nabble.com/Lift-support-for-Jersey-checked-into-trunk-td3007414.html#a3007414"&gt;jersey-lift&lt;/a&gt; module.&lt;br /&gt;&lt;br /&gt;As an example of this in action you can check out &lt;a href="http://restmq.fusesource.org/"&gt;RestMQ&lt;/a&gt; which is an open source project I've been working on lately to provide a RESTful API and web console to message orientated middleware which is built on JAXRS (Jersey), Scala and Lift.&lt;br /&gt;&lt;br /&gt;From a tooling perspective there's Ant/Maven plugins, an interactive Scala console (REPL) and IDE plugins for IDEA, Eclipse, NetBeans along with the usual editors (TextMate/Emacs etc). The IDE plugins are not yet up to the Java grade, but they are very useful with good code navigation &amp;amp; completion.&lt;br /&gt;&lt;br /&gt;I've tried the plugins for NetBeans, Eclipse and IDEA they all have strengths and weaknesses; it seems Scala folks are split between them all. For code navigation and completion along with maven support I've found IDEA to be quite good. When you open a Maven pom.xml it seems to grok the code nicely, finding the scala source so you can navigate through any type/method to see its documentation/source etc. (You do typically have to manually add the Scala facet to run/debug stuff). Though IDEA is not always the best at highlighting syntax errors as you type. They could all use some work to bring them up to line with their Java counterparts though - try them out and see which you prefer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Scala nits&lt;br /&gt;&lt;/span&gt;With any language there's gonna be bits you love and bits you're not so keen on. Early impressions of Scala do seem like there's a bit of an attempt to use a few too many symbols :-; but you don't have to use them all - you can stick to the Java-ish OO side of the fence if you like. But then I guess longer term its probably better to use symbols for the 'special stuff' to avoid clashing with identifiers etc.&lt;br /&gt;&lt;br /&gt;I'm not a massive fan of the nested import statement, using _root_.java.util.List to differentiate a 'global' import from a relative import. I'd have preferred a child prefix. e.g. if you have imported com.acme.cheese.model.Foo then to import model.impl.FooImpl i'd prefer an explicit relative prefix, say: import _.impl.FooImpl which would simplify things a little and more in keeping with Scala's attempt at simplifying things and removing cruft (being polymorphic to import java.util._).&lt;br /&gt;&lt;br /&gt;However compared to all the massive hairy warts in Java, these downsides of Scala are tiny compared to the beauty, simplicity and power of Scala.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Conclusion&lt;br /&gt;&lt;/span&gt;Given that &lt;a href="http://www.adam-bien.com/roller/abien/entry/java_net_javaone_which_programming"&gt;MrJava&lt;/a&gt;, &lt;a href="http://blog.headius.com/2009/04/future-part-one.html"&gt;MrJRuby&lt;/a&gt; and &lt;a href="http://macstrac.blogspot.com/"&gt;MrGroovy&lt;/a&gt; are all tipping Scala as javac's long term replacement, there might be something in it. So what are you waiting for; get the &lt;a href="http://www.amazon.com/Programming-Scala-Comprehensive-Step-step/dp/0981531601/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240563267&amp;amp;sr=8-1"&gt;Programming in Scala&lt;/a&gt; book or the &lt;a href="http://programming-scala.labs.oreilly.com/"&gt;O'Reilly Scala book&lt;/a&gt; and start having fun :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3527883757609346542?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3527883757609346542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3527883757609346542' title='118 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3527883757609346542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3527883757609346542'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html' title='Scala as the long term replacement for java/javac?'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>118</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1732682428667693191</id><published>2009-05-08T12:12:00.003Z</published><updated>2009-05-08T12:58:00.337Z</updated><title type='text'>thoughts on the new @Inject JSR</title><content type='html'>There's been some interesting &lt;a href="http://in.relation.to/Bloggers/CommentsOnAnnotationsForDependencyInjection"&gt;feedback from JSR299&lt;/a&gt; folks on the new &lt;a href="http://code.google.com/p/atinject/"&gt;@Inject proposal&lt;/a&gt;. (Though there is a bit of argument for argument sake in there :).&lt;br /&gt;&lt;br /&gt;I can understand 299 folks wanting there to be just one spec that talks about IoC. However IoC is a large complex area that is still undergoing quite a bit of innovation (e.g. see the changes in Guice 2 and the JavaConfig which is part of Spring 3).&lt;br /&gt;&lt;br /&gt;For me the great thing about the new @Inject JSR is that its small, simple and focusses on the common well understood part of IoC (the annotations you add to your objects so that popular IoC containers can inject your objects). This is the thing I most want - a standard set of annotations I can use everywhere in objects - then consumers of those objects can choose whatever IoC container they wish to wire things together be it Spring or Guice or a JSR 299 provider or whatever. The actual wiring code (in Java, XML or some other script/language) tends to be kinda small stuff relative to the tons of Java code for the objects themselves. Given the large variety and constant innovation in the wiring side of things, its probably a bad time to try lock that part down as I don't think there's consensus on how that part should look (though Guice 2 and Spring JavaConfig seem to get closer all the time).&lt;br /&gt;&lt;br /&gt;299 however standardizes lots of things which only seem to be done in Seam; I don't see Spring, Guice or Pico implementing 299 any time soon as its a bit too big - however all IoC containers should be able to implement @Inject pretty easily; most IoC containers have already got something like @Inject in them today.&lt;br /&gt;&lt;br /&gt;So as a practical kinda guy at heart, the best way forward IMHO to be able to write IoC container agnostic objects that can then be injected by Spring, Guice, Pico, Tapestry or indeed a 299 provider seems to be the @Inject JSR.&lt;br /&gt;&lt;br /&gt;This doesn't mean 299 isn't useful; there's some interesting stuff in there particularly relating to eventing and JEE integration to IoC; but I see getting @Inject done and adopted by Spring, Guice &amp;amp; Pico (and hopefully the JSR 299 RI too!) to be most important for IoC in the Java ecosystem as a whole.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1732682428667693191?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1732682428667693191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1732682428667693191' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1732682428667693191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1732682428667693191'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/05/thoughts-on-new-inject-jsr.html' title='thoughts on the new @Inject JSR'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-9092604429274980893</id><published>2009-04-17T08:21:00.002Z</published><updated>2009-04-17T08:44:16.340Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><title type='text'>If you are using OSGi then give Pax Exam a try</title><content type='html'>&lt;a href="http://wiki.ops4j.org/display/paxexam/Pax+Exam"&gt;Pax Exam&lt;/a&gt; is a great piece of work! It makes it super easy to write JUnit4 tests which can then be run in multiple OSGi containers like Felix &amp;amp; Equinox using the exact bundles you require - plus it lets you inject BundleListener and so forth. Here's the &lt;a href="http://wiki.ops4j.org/display/paxexam/Pax+Exam+-+Tutorial+1"&gt;tutorial&lt;/a&gt; which should get you started pretty quick.&lt;br /&gt;&lt;br /&gt;I recently &lt;a href="http://www.nabble.com/-Heads-Up--added-an-OSGi-system-test-for-running-Camel-in-Felix----Equinox-td23080774.html"&gt;added&lt;/a&gt; an OSGi integration test to &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt;, here's the &lt;a href="http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/OSGiIntegrationTest.java?view=markup"&gt;test case&lt;/a&gt; if you're interested. Notice how the versions of the bundles added to Felix and Equinox are not mentioned in this test case - they are inherited from the pom.xml from Maven.&lt;br /&gt;&lt;br /&gt;The depends-maven-plugin from &lt;a href="http://servicemix.apache.org/SMX4KNL/index.html"&gt;ServiceMix Kernel&lt;/a&gt; (soon to be &lt;a href="http://gnodet.blogspot.com/2009/04/apache-karaf.html"&gt;Apache Karaf&lt;/a&gt;) generates the file &lt;b&gt;target/classes/META-INF/maven/dependencies.properties&lt;/b&gt; which Pax Exam can then use to resolve the version dependencies of groupId/artifactIds. This lets you keep all your version information in your pom.xml and avoid having to update all your test cases whenever your pom.xml changes - keeping things nice and DRY!&lt;br /&gt;&lt;br /&gt;Great stuff Pax-folks, keep up the good work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-9092604429274980893?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/9092604429274980893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=9092604429274980893' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9092604429274980893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9092604429274980893'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/04/if-you-are-using-osgi-then-give-pax.html' title='If you are using OSGi then give Pax Exam a try'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3853173273382954783</id><published>2009-04-01T07:38:00.005Z</published><updated>2009-04-01T12:17:39.552Z</updated><title type='text'>Apache Camel switching from Java to BPEL, WSDL and RDF XML (with some XSLT)!</title><content type='html'>The &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; team has always strived to make complex integration challenges as easy as possible connecting pretty much all &lt;a href="http://camel.apache.org/components.html"&gt;transports, protocols and middleware&lt;/a&gt; together easily using any of the &lt;a href="http://camel.apache.org/enterprise-integration-patterns.html"&gt;enterprise integration patterns&lt;/a&gt; typically in a single line of Java code.&lt;br /&gt;&lt;br /&gt;However our users have often said that Java is way too complex to understand. So to tackle that need we're dropping support for Java due to its complexity and instead we're switching to a combination of &lt;a href="http://www.w3.org/TR/wsdl"&gt;BPEL&lt;/a&gt;, &lt;a href="http://www.w3.org/TR/wsdl"&gt;WSDL&lt;/a&gt; and &lt;a href="http://www.w3.org/TR/rdf-syntax-grammar/"&gt;RDF XML Syntax &lt;/a&gt;instead (with maybe some XSLT too).&lt;br /&gt;&lt;br /&gt;We're hopeful that a single XML document with 6 or 7 namespaces along with 2 or 3 spring ones should just about be able to route from one endpoint to another in a similar way to using a line of Java code - but using all the power of the various XML specifications; making it easy to add any WS-* specifications you fancy too!&lt;br /&gt;&lt;br /&gt;One downside of this approach is that the XML header to define all the namespaces and their prefixes is about page or so of text but we're hoping a netbeans plugin will be completed soon that just hides the first page of your XML - making development much more agile!&lt;br /&gt;&lt;br /&gt;We've also got a signed CLA on file so we can reuse Opera's new &lt;a href="http://labs.opera.com/news/2009/04/01/"&gt;face gestures&lt;/a&gt; technologies to help typing in all those pointy brackets and XML namespaces; while giving yourself a great face workout at the same time. Agile integration and fitness in one!&lt;br /&gt;&lt;br /&gt;More detailed design notes are available &lt;a href="http://tinyurl.com/camelrdf"&gt;here from our new technical architect on the project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Go Camel! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3853173273382954783?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3853173273382954783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3853173273382954783' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3853173273382954783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3853173273382954783'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/04/apache-camel-swithing-to-bpel-wsdl-and.html' title='Apache Camel switching from Java to BPEL, WSDL and RDF XML (with some XSLT)!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-339712379446355483</id><published>2009-03-19T13:08:00.004Z</published><updated>2009-03-19T13:33:26.499Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='gosling'/><category scheme='http://www.blogger.com/atom/ns#' term='jwebpane'/><title type='text'>I met James Gosling last night &amp; more on JWebPane</title><content type='html'>James Gosling was giving a talk at BT on the future of Java (the evening was very well organised by &lt;a href="http://www.linkedin.com/pub/0/292/6a7"&gt;Philip Milne&lt;/a&gt; - thanks for the invite &amp;amp; lovely curry! :) - and James is a thoroughly nice chap &amp;amp; much taller than he looks online :)&lt;br /&gt;&lt;br /&gt;In the Q&amp;amp;A I asked, if he had a magic wand and could change anything in the Java ecosystem (platform, language etc) what would it be? His answer was getting WebKit into the Java platform via JWebPane! Awesome - go James! Along with closures in the Java language that would be mine too as&lt;a href="http://macstrac.blogspot.com/2009/01/how-sun-could-fix-swing-and-promote.html"&gt; I've mentioned before&lt;/a&gt;. Apparently work is still progressing on JWebPane - so despite the total silence for nearly a year, it may hopefully one day see the light of day. I just hope Sun releases &lt;span style="font-style: italic;"&gt;something&lt;/span&gt; soon - it doesn't have to be perfect, then we can fix it in open source as a community.&lt;br /&gt;&lt;br /&gt;I do wonder if the JWebPane guys have been a bit too ambitious for the first release (e.g. all the stuff about using Java2D and Swing JTextField widgets within a web kit pane etc). Just having a webkit panel which you can communicate with via Java &amp;amp; interact with the DOM via Java would be rocking! The other stuff I'm less sure on how important that is (e.g. the super tight integration of swing widgets with the DOM widgets - just being able to place swing widgets inside the DOM would be fine).&lt;br /&gt;&lt;br /&gt;Incidentally I've been meaning to follow up from &lt;a href="http://macstrac.blogspot.com/2009/01/how-sun-could-fix-swing-and-promote.html"&gt;my previous post on webkit&lt;/a&gt; in the JVM. I got alot of great comments and feedback either privately or on the blog. Some were from Swing folks who didn't wanna touch all this new fangled web stuff with DOM/HTML/CSS/JavaScript. Thats fine - if you wanna stick to pure Swing please be my guest I didn't wanna imply we should remove anything from Swing.&lt;br /&gt;&lt;br /&gt;For the others, they all pretty much agreed we need awesome browse integration in the JVM - it would open up a massive amount of potential for rich applications which embrace the web but work around the limitations of browsers (networking &amp;amp; security limitations) and above all the biggest issue with developing on the web - dealing with the zillions of ancient crappy browsers. Instead building rich applications on the JVM using a modern embedded webkit wouldn't have those issues &amp;amp; would make creating web apps way more fun :)&lt;br /&gt;&lt;br /&gt;Quite a few folks replied with links to existing projects similar in scope to JWebPane which I should just mention...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://weblogs.java.net/blog/alex2d/archive/2008/12/jwebpane_projec.html"&gt;JWebPane&lt;/a&gt; which hopefully will see the light of day one day, though its been eerily quiet for nearly a year...&lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.trolltech.com/blogs/2008/01/11/who-needs-a-browser-qt-jambi-just-got-one/"&gt;Qt has a WebKit&lt;/a&gt; component in its UI library&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SWT has a browser (FireFox) see the &lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.5M4-200812111908/eclipse-news-M4.html"&gt;changelog&lt;/a&gt; and this &lt;a href="http://www.eclipsecon.org/2009/sessions?id=636"&gt;eclipse con talk&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jroller.com/myeclipseblog/entry/chromius"&gt;CB4J&lt;/a&gt; bundles Chromium WebKit in a Java widget&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sparseware.com/sage/"&gt;Sage browser&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I love competition; though I'd like to see a standard webkit component in the JVM and some consolitation though in APIs. I wonder if we could have some kinda JWebPane like API to interact with a 'Swing browser component' but let folks try different approaches to implementing that (e.g. using FireFox v WebKit etc)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-339712379446355483?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/339712379446355483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=339712379446355483' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/339712379446355483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/339712379446355483'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/03/i-met-james-gosling-last-night-more-on.html' title='I met James Gosling last night &amp; more on JWebPane'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1256966640386723138</id><published>2009-03-17T12:28:00.005Z</published><updated>2009-03-17T12:43:23.004Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='jsr299'/><category scheme='http://www.blogger.com/atom/ns#' term='guice'/><category scheme='http://www.blogger.com/atom/ns#' term='camel spring testing'/><title type='text'>JSR 299 (Contexts and Dependency Injection for Java) looks pretty good</title><content type='html'>I remember looking at an early draft of what used to be called the &lt;a href="http://jcp.org/en/jsr/detail?id=299"&gt;Web Beans JSR&lt;/a&gt; and it kinda looked a bit like '&lt;span style="font-style: italic;"&gt;hey lets try standardize Seam&lt;/span&gt;'. It didn't strike me as being too relevant or useful to folks typically using Spring/Guice to build their applications.&lt;br /&gt;&lt;br /&gt;However I've just had another look at the lastest draft and its now looking pretty good. The rename to &lt;span style="font-style: italic;"&gt;Contexts and Dependency Injection for Java&lt;/span&gt; certainly helps.&lt;br /&gt;&lt;br /&gt;Dependency Injection is such a cross cutting concern throughout the Java ecosystem - its also a very well understood problem space with a small number of popular implementations. We really should have a set of standard annotations for Dependency Injection above the basics in &lt;a href="http://jcp.org/en/jsr/detail?id=250"&gt;JSR 250&lt;/a&gt; so we really can write framework agnostic code that can work in more than one DI container. So far &lt;a href="http://jcp.org/en/jsr/detail?id=299"&gt;JSR 299&lt;/a&gt; is the best effort I've seen to try come up with a standard.&lt;br /&gt;&lt;br /&gt;Ironcially the annotations used in JSR 299 are almost exactly the same as those used in Guice 2 (@Produces/@Provides, @Named, @BindingAnnotation/@BindingType etc). Also Spring has started adding more and more annotation based dependency injection support of late; so the various approaches are kinda unifying a little.&lt;br /&gt;&lt;br /&gt;So with a bit of effort it should be pretty easy to implement the dependency injection parts of JSR 299 in both Guice and Spring; so then we'd have a real, useful, dependency injection standard working across all the main DI frameworks.&lt;br /&gt;&lt;br /&gt;I wonder if the Spring &amp;amp; Guice folks will put petty politics aside and really get behind JSR 299 for the good of the Java ecosystem?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1256966640386723138?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1256966640386723138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1256966640386723138' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1256966640386723138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1256966640386723138'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/03/jsr-299-contexts-and-dependency.html' title='JSR 299 (Contexts and Dependency Injection for Java) looks pretty good'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8504584559797659197</id><published>2009-02-18T11:01:00.004Z</published><updated>2009-02-18T11:08:57.342Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><title type='text'>Apache Camel 1.6.0 released - 2.0 not far away!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://camel.apache.org/images/camel-box-small.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 204px;" src="http://camel.apache.org/images/camel-box-small.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Both &lt;a href="http://davsclaus.blogspot.com/"&gt;Claus&lt;/a&gt; and &lt;a href="http://janstey.blogspot.com/"&gt;Jon&lt;/a&gt; beat me too it, so being lazy am just gonna link to &lt;a href="http://davsclaus.blogspot.com/2009/02/apache-camel-160-released.html"&gt;their&lt;/a&gt; &lt;a href="http://janstey.blogspot.com/2009/02/apache-camel-160-released.html"&gt;posts&lt;/a&gt;. You can grab the latest &lt;a href="http://camel.apache.org/camel-160-release.html"&gt;Apache Camel 1.6.0 release&lt;/a&gt; with its 169 improvements on top of the 266 improvements from the &lt;a href="http://camel.apache.org/camel-150-release.html"&gt;1.5 version&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Get it while its hot! Work is &lt;a href="http://issues.apache.org/activemq/browse/CAMEL?report=com.atlassian.jira.plugin.system.project:roadmap-panel"&gt;progressing well on 2.0&lt;/a&gt; which will hopefully be out soon too! Great work Camel Riders!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8504584559797659197?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8504584559797659197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8504584559797659197' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8504584559797659197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8504584559797659197'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/02/apache-camel-160-released-20-not-far.html' title='Apache Camel 1.6.0 released - 2.0 not far away!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1812523432810398496</id><published>2009-01-30T09:56:00.015Z</published><updated>2009-01-30T14:25:23.751Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='jwebpane'/><category scheme='http://www.blogger.com/atom/ns#' term='swing'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><title type='text'>How Sun could fix Swing and promote innovation and unification in the UI space</title><content type='html'>I saw Jonathan's post on &lt;a href="http://www.jogiles.co.nz/blog/?p=207"&gt;Swing 2.0&lt;/a&gt; and it was late, I'd had a nice glass of wine so I fired off a &lt;a href="http://twitter.com/jstrachan/status/1156604462"&gt;wacky idea&lt;/a&gt; on twitter which got some &lt;a href="http://friendfeed.com/e/462a9e54-d1d4-9e5e-46de-3458a339decf/wacky-idea-rather-than-swing-2-0-just-add-webkit/"&gt;interesting feedback&lt;/a&gt;. I'd like to just expand on the background of the idea some more as I'm not so sure it is so wacky an idea afterall. Its feeling more and more like a no brainer and complete win win.&lt;br /&gt;&lt;br /&gt;I'm afraid this post is gonna be quite long. (Holy crap - no blogging for ages and then &lt;span style="font-style: italic;"&gt;two&lt;/span&gt; big posts in a week!) - first some background...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Programming  Rich Java Applications Is Sucky&lt;/span&gt;&lt;br /&gt;Imagine the scene. You're part of a team of Java developers; you're tasked to write a rich application. It might be a commerical app or some intranet enterprisey thing, or some rich application to improve the user experience of some web app (like the iphone versions of facebook/twitter/gmail etc) - whatever. So what do you do?&lt;br /&gt;&lt;br /&gt;You've a mindnumbingly broad choice to choose from - here's just a few options...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Swing&lt;/li&gt;&lt;li&gt;SWT/JFace/EclipseRCP&lt;/li&gt;&lt;li&gt;web app with some combination of Ajax/JavaScript/GWT libraries&lt;br /&gt;&lt;/li&gt;&lt;li&gt;JavaFX?&lt;/li&gt;&lt;li&gt;Flex/Flash&lt;/li&gt;&lt;/ul&gt;Each have their own strengths and weakesss. Though they all totally different. Write for one of those then later on you're requirements change (making one of the other options more attractive) and you've gotta scrap it all and start over.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Write once and run everywhere&lt;/span&gt; - except if your application has any kind of user interface.&lt;br /&gt;&lt;br /&gt;This is maybe why so many Java folks like writing server side apps; as the client side in the Java ecosystem is such a mess.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Helping Swing Developers&lt;/span&gt;&lt;br /&gt;Lets imagine you pick Swing to develop rich applications. In its day, Swing was a good piece of work by Sun. However that day was in the nineties :)&lt;br /&gt;&lt;br /&gt;I've done a fair bit of Swing in my time and worked on Swing projects; in my experience you can spend years trying to tart up a swing app and it still looks - well like Swing. You can get a day of a good web designers time and make any web application look stunning via HTML/CSS/images. It just seems so much easier to hack up HTML/CSS to look great. Just compare some great web 2.0 applications out there to your typical Swing UI. As an end user which would you rather use?&lt;br /&gt;&lt;br /&gt;As a developer one of the big PITAs with Swing is layouts, styling and working with images and links. The standard layout managers suck. (&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/GridBagLayout.html"&gt;GridBagLayout&lt;/a&gt; anyone?). Yes I know there's a zillion layout manager implementations out there - all doing different things well with different results &amp;amp; rendering bugs - and which one do you choose?&lt;br /&gt;&lt;br /&gt;Generalizing hugely but most of the work that goes into most data entry-ish rich applications is creating loads of screens which are full of text, images, links and some rich widgets with plenty of documentation, popup help, cheat sheets and then laying it all out and styling it nicely. Swing is lousy at these UI basics. Sure its got a good &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTable.html"&gt;JTable&lt;/a&gt; and &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTree.html"&gt;JTree&lt;/a&gt;, something that many a web developer will probably have been envious of at some point or other when hitting gremlins in their JavaScript table/tree - but at laying out forms, dialogs, help screens,  documentation and working with links and images - well its kinda sucky.&lt;br /&gt;&lt;br /&gt;Swing developers should be using HTML/CSS for this - its great at it. The web browser is the best layout manager we have - and HTML/CSS is the best &lt;span style="font-weight: bold;"&gt;standard&lt;/span&gt; for laying out widgets. With HTML/CSS there's a ton of tooling out there too for viewing/editing/styling. You can then pass the HTML/CSS to your web designer while the Java Swing hacker focusses on the business logic or the complex widgets.&lt;br /&gt;&lt;br /&gt;Plus any time you spend hacking HTML/CSS - being a simple, standard text format used inside web browsers means you can reuse your work in web applications as well as rich applications. You don't spend your time hacking up some Swing Java code thats only useful inside a Swing application.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;My Proposal &lt;/span&gt;&lt;br /&gt;So my proposal is, in Java 7 we integrate WebKit into the JVM. Why WebKit? Well its smaller and easier to integrate than Gecko; Apple chose it for Safari &amp;amp; iTunes and the iPhone and Google chose it for Chrome and Android. If its good enough for a cell phone surely we can fit it into a JDK/JRE for a rich desktop application?&lt;br /&gt;&lt;br /&gt;If Sun wanted to get clever, the browser engine could be pluggable; letting folks pick different versions of WebKit or FireFox/Opera/IE - but lets not go there right now - lets just assume a recent WebKit version is baked into the JRE/JDK.&lt;br /&gt;&lt;br /&gt;Some would argue it should be optional; but then given the size of the JDK/JRE there's a ton of not-that-useful stuff in there; I'd rather include it by default over loads of whats there :) But then the JDK/JRE is getting more modular right - so lets leave the optional nature of WebKit for when the JDK/JRE is truly modular - right now its huge; so if a cell phone can include it, so can a JDK/JRE :)&lt;br /&gt;&lt;br /&gt;Next we have a standard Java API for creating a BrowserPanel which can be hosted inside any AWT/Swing/SWT/JFace based UI. So a browser window becomes a standard embeddable widget in Swing and SWT/JFace/Eclipse. There should also be an API for controlling the browser (loading/saving URLs and interacting with the DOM).&lt;br /&gt;&lt;br /&gt;Finally I'd like any AWT/Swing/SWT/JFace/JavaFX component to be usable within the DOM of WebKit. So I could create a nice HTML page with nicely formatted and CSS'd text, images, tables but then include, say, a JTable and JTree in the middle somewhere; letting the browser do the layout stuff.&lt;br /&gt;&lt;br /&gt;This last requirement might seem complex but thats exactly what Flash and JavaFX are already; plugins which create custom UI widgets within the DOM.&lt;br /&gt;&lt;br /&gt;For those that are aware of &lt;a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&amp;amp;s=google-web-toolkit-doc-1-5&amp;amp;t=DevGuideHostedMode"&gt;GWT Hosted Mode;&lt;/a&gt; this proposal is very similar - embedding a web brower inside the JVM as a single process. The main differences are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;we need a standard API to spin up browser windows and embed them inside any Panel and to be able to bind any UI Panel inside the DOM easily (e.g. finding a div by ID and binding it to a JTable)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;we don't need the restriction of being able to turn the Java bytecode into JavaScript - as for standalone Swing/rich apps you can  can leave it as it is :). So any Java code could work with the browser. So none of the GWT restrictions would apply - plus you could use Groovy/Ruby/Python/JavaScript/whatever&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Benefits for Swing Developers&lt;/span&gt;&lt;br /&gt;Swing would instantly get an awesome, standards based layout engine capable of easily rendering styled text, images and widgets while dealing with other kinds of media. Through the use of CSS Swing applications would be easily styled using all the existing HTML/CSS tooling.&lt;br /&gt;&lt;br /&gt;Swing developers would then have the best of both worlds; their Swing widgets still working when they want to use them - but having the great power of the browser window around the widgets to make the layout easy, powerful and great looking.&lt;br /&gt;&lt;br /&gt;Since the JVM would now have a standards based browser; and it can already run JavaScript (and pretty much all other languages) easily - any Swing application could make use of any of the current GWT or JavaScript frameworks out there. There's a ton of innovation happening in the JavaScript/GWT space right now leading to ever better UI capabilities. e.g. take a look at &lt;a href="http://code.google.com/p/smartgwt/"&gt;SmartGWT&lt;/a&gt; and &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; to name but 2.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Benefits for Web Developers&lt;/span&gt;&lt;br /&gt;So how will this move - aimed at helping Swing developers help Web developers? The common PITA for web folks is often the browser imposes restrictions (for good reason) such as&lt;br /&gt;&lt;ul&gt;&lt;li&gt;only being able to interact nicely with the single domain that serves the web page&lt;/li&gt;&lt;li&gt;not able to interact with the file system&lt;br /&gt;&lt;/li&gt;&lt;li&gt;only having 2 threads for communication&lt;/li&gt;&lt;li&gt;limited connectivity (kinda hard to use native sockets, Java web stacks, JMS, native JDBC etc)&lt;/li&gt;&lt;li&gt;unable to use things like Java2D/3D without via plugins&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Plus there's dealing with the large number of different browsers of different capabilities &amp;amp; configurations &amp;amp; versions to support.&lt;br /&gt;&lt;br /&gt;Now if you're making a public application; you're probably gonna have to deal with this (though now we're seeing custom apps for the iphone and android - maybe rich applications for public web sites are gonna be more common?).  However loads of folks build web applications when they are really building internal, intranet applications.&lt;br /&gt;&lt;br /&gt;So why not turn that web application into a desktop application making it run in a JVM? You can then package up your application with the exact, known browser you use and test with - and have access to all the features of the Java platform in your UI; whether its Java2D/3D, Swing/JFace, JavaFX or JMS/JDBC/JAX-WS etc&lt;br /&gt;&lt;br /&gt;How this application is then made available to your users could come in different flavours; an application they install, Java Web Start (which might become cool again) or maybe even via JavaFX inside a browser?&lt;br /&gt;&lt;br /&gt;So this could give a big safety net to folks building web applications. If you hit a browser limitation such as (say) a Canvas limitation? Just provide a Java2D version and ship a desktop application or Java WebStart it? It could end up that the JVM turns out to be the best place to host a web application reusing HotSpot?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Benefits for UI Developers&lt;/span&gt;&lt;br /&gt;This single act of unifying the browser with Swing (and SWT/JFace) would provide a massive unification of &lt;span style="font-style: italic;"&gt;standards&lt;/span&gt; based technologies for most UI development. More of the time spent building UIs would lead to creating more reusable standard artefacts (e.g. HTML and CSS) which are reusable in other contexts (e.g. transform HTML into PDFs or reuse the embedded microformats etc).&lt;br /&gt;&lt;br /&gt;In these days of &lt;span style="font-style: italic;"&gt;Dependency Injection&lt;/span&gt;; we're used to having a single code base then switching component implementations in different circumstances and environments; so we can start building more UIs which can be both web application &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; rich UI with each UI making the best use of its platform (zero install for web app, no limitations for desktop app).&lt;br /&gt;&lt;br /&gt;Previously changing an application from a web application to a desktop application or vice versa was a massive undertaking (near total rewrite). Now it'll be pretty trivial to switch from one to the other as your requirements change. Applications will no longer be locked into one UI technology unable to move. UI code will become more aligned with the &lt;span style="font-style: italic;"&gt;Write Once Run Anywhere&lt;/span&gt; mantra.&lt;br /&gt;&lt;br /&gt;If folks create rich applications &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; web applications - there could be massive code reuse. While a web application and a Swing/JFace application are clearly going to have differences; they may use different views, components and features - there could be a huge amout of reuse of code. Even if the code reuse is only 30-50% its is big a saving; and we all need to do more with less these days. Though I can see - as UI frameworks improve, more and more chance of better code reuse across both.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Benefits for Sun&lt;/span&gt;&lt;br /&gt;Folks have often said things in the past about Sun like&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sun doesn't get the desktop, its not its core business&lt;/li&gt;&lt;li&gt;Sun can't compete with Microsoft in its back yard (the desktop)&lt;/li&gt;&lt;/ul&gt;Sun is tightening its belt as is prudent for any company to do in the current climate. Sun has already &lt;a href="http://www.javaworld.com/community/node/1820"&gt;de-funded SwingX&lt;/a&gt;. Also so far all the feedback and responses I hear from non Sun folks about JavaFX is at best lukewarm.&lt;br /&gt;&lt;br /&gt;This move however would be a massive, positive move in the UI space and earn Sun a lot of kudos IMHO. Sun could then leverage all the innovation thats taking place in the browsers and WebKit in particular (HTML5, SVG, microformats et al) along with in the JavaScript worlds.&lt;br /&gt;&lt;br /&gt;It would also mean there's not that much for Sun to do (other that integrate WebKit and provide APIs to control the browser and expose the DOM). All the innovation can then happen &lt;span style="font-style: italic;"&gt;above&lt;/span&gt; this layer by the Swing, JFace &amp;amp; web developers and the WebKit &amp;amp; JavaScript communities. Immediately the Java ecosystem could then reuse all of the amazing work being done by the webby folks in JavaScript or by the GWT ecosystem.&lt;br /&gt;&lt;br /&gt;i.e. the Java platform would then become a cool place to develop applications for (removing all the limiations with web browsers) with loads of buzz -and Sun doesn't really have to do much other than take all the credit :)&lt;br /&gt;&lt;br /&gt;Heck they could even brand the WebKit-in-JVM as part of the JavaFX brand; so JavaFX doesn't have to beat Flash/Flex &amp;amp; Silverlight in the market to avoid looking like a turkey. &lt;span style="font-style: italic;"&gt;JavaFX&lt;/span&gt; &lt;span style="font-style: italic;"&gt;Platform&lt;/span&gt; (or whatever we call it - basically Java7 + WebKit) could turn into an instant success (anyone doing Swing or JFace would probably start using the embedded browser for better layouts &amp;amp; rendering) and if that helped the &lt;span style="font-style: italic;"&gt;JavaFX Plugin&lt;/span&gt; (the JavaFX-as-browser-plugin) make some inroads to Flash/Silverlight its an added bonus. (Whereas right now JavaFX as just a browser plugin looks setup for failure to be honest, I don't see it ever eclipsing Flash).&lt;br /&gt;&lt;br /&gt;Note its worth mentioning that there's similar moves to DOMs and whatnot being experimented with in the Eclipse ecosystem; who knows we could maybe finally unify on a single DOM?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Benefits for the Java Platform&lt;/span&gt;&lt;br /&gt;Being able to build rich desktop and web applications in any language - without any browser limitations would be a massive boost to the Java platform; allowing folks to reuse all the good stuff from the OpenWeb and the Java platform (language diversity, IDEs and tooling, connectivity, Java2D/3D and even JavaFX).&lt;br /&gt;&lt;br /&gt;We'd also hopefully see significant cross-pollination of the Swing / JFace folks and web folks to help UI innovation (which Sun doesn't have to try do itself).&lt;br /&gt;&lt;br /&gt;If nothing else hopefully it will encourage more folks to write web applications &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; desktop applications to take advantage of both environments to provide better user interfaces for our users and customers for less effort.&lt;br /&gt;&lt;br /&gt;Sounds like a win win for everyone doesn't it?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update - JWebPane&lt;/span&gt;&lt;br /&gt;So I should probably pay more attention to the JavaFX stuff :)&lt;br /&gt;&lt;br /&gt;It seems that there is such a thing called &lt;span style="font-weight: bold;"&gt;JWebPane&lt;/span&gt; (see &lt;a href="http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-6610.pdf"&gt;page 27 onwards of this presentation&lt;/a&gt;)  which has been &lt;a href="http://weblogs.java.net/blog/alex2d/archive/2008/12/jwebpane_projec_1.html"&gt;announced&lt;/a&gt; - so maybe this is gonna actually happen soon! :).&lt;br /&gt;&lt;br /&gt;IMHO JWebPane sounds &lt;span style="font-style: italic;"&gt;way&lt;/span&gt; more important to the Java ecosystem than JavaFX - I really hope it gets enough backing and funding from Sun to get completed and released real soon! Its not good to see nothing at all being released to the community despite it &lt;a href="http://weblogs.java.net/blog/ixmal/archive/2008/05/introducing_jwe_1.html"&gt;being announced about 7-8 months ago&lt;/a&gt; - so fingers crossed that whatever the legal/licensing issues are holding it back get resolved really soon.&lt;br /&gt;&lt;br /&gt;We've just gotta lobby Sun to release it ASAP - then include it in Java 7... :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1812523432810398496?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1812523432810398496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1812523432810398496' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1812523432810398496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1812523432810398496'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/01/how-sun-could-fix-swing-and-promote.html' title='How Sun could fix Swing and promote innovation and unification in the UI space'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-826622922212868141</id><published>2009-01-27T07:40:00.010Z</published><updated>2009-01-27T22:45:48.801Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='jersey'/><category scheme='http://www.blogger.com/atom/ns#' term='jaxrs'/><title type='text'>JAX-RS as the one Java web framework to rule them all?</title><content type='html'>One of the things about Java that sometimes gets made fun of is the huge number of Java based web frameworks. There certainly are many, of all shapes and sizes! I suppose there are quite a lot of different shapes and sizes of web applications out there but it sometimes seems like there's a 1-1 mapping between applications and frameworks :).&lt;br /&gt;&lt;br /&gt;Picking the right web framework is probably a managers nightmare (Which one to pick? Pick the wrong one and we might end up using a duff dead framework that few developers know etc?). But it has lead to a ton of innovation in the web framework space. On balance I think competition and innovation are good things.&lt;br /&gt;&lt;br /&gt;I'm a big Rails fan, I think its a stunning piece of work and one of the most impressive open source frameworks created in the last 10 years which together with Ruby, Erb and Rake is a good alternative to Servlets + JSP + JSTL + Spring + Hibernate + WebFrameworkOfYourChoice + SiteMesh/Tiles + Ant/Maven + a few other bits all in a surpringly small and easy to grok codebase.&lt;br /&gt;&lt;br /&gt;JAX-RS came along initially as a way of writing RESTful services on the Java platform; using annotations and loose coupling to bind resource beans and their public methods to URIs, HTTP methods and MIME content type negotiation.  I've said before I think its &lt;a href="http://macstrac.blogspot.com/2009/01/jax-rs-as-basis-of-dry-web-framework.html"&gt;awesome&lt;/a&gt;, one of the most impressive JSRs we've had.&lt;br /&gt;&lt;br /&gt;From the perspective of the controller layer I actually prefer JAX-RS to Rails routes.rb &amp;amp; controllers as&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the URI bindings are local to the resource beans which can be arbitrarily nested which makes refactoring much easier and avoids the complex routes.rb file with regex switches (I try and avoid regex whenever I can :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the loose coupling between the objects returned by the resource methods and the actual entity providers is clean; helping the application programmer focus on returning DTOs and letting the framework deal with the XML / JSON /Atom / multi-part-form marshalling &amp;amp; data binding stuff really helps. e.g. its easy to drop in support for new representations in a DRY way without changing the code of your resource beans (controllers), you can just modify an annotation&lt;br /&gt;&lt;/li&gt;&lt;li&gt;static typing can be a handy thing when binding URIs and parameters to your controller. e.g. having String, integer, Date fields and parameters helps you having to explicitly convert things in your controller&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There's lots of other stuff thats great in Rails though :-) but this post isn't a JAX-RS versus Rails post really - its focussing on the world of Java web frameworks for Java developers and the impact of JAX-RS.&lt;br /&gt;&lt;br /&gt;So whats interesting is - if you want to build a web application with RESTful services (e.g. a human facing website with computer facing XML/JSON APIs) why would you use JAX-RS &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; another web framework? Why not &lt;span style="font-style: italic;"&gt;just&lt;/span&gt; use JAX-RS as &lt;span style="font-style: italic;"&gt;the&lt;/span&gt; web framework? So recently I've been musing, could JAX-RS be the one Java web framework to rule them all?&lt;br /&gt;&lt;br /&gt;JAX-RS works well with dependency injection frameworks such as &lt;a href="http://www.springframework.org/"&gt;Spring&lt;/a&gt;, &lt;a href="http://code.google.com/p/google-guice/"&gt;Guice&lt;/a&gt;, &lt;a href="http://code.google.com/p/guiceyfruit/"&gt;GuiceyFruit&lt;/a&gt; or &lt;a href="http://www.jboss.org/jbossmc/"&gt;JBossMC&lt;/a&gt; - you can basically pick whichever one you prefer. It also does all the heavily lifting of binding URIs and HTTP methods to resource beans and their methods along with supporting content type negotiation, headers and etags elegantly. For implementing great RESTful services in Java I've never seen anything close to touching it. The main question is what features are missing from JAX-RS being &lt;span style="font-style: italic;"&gt;the&lt;/span&gt; main web framework?&lt;br /&gt;&lt;br /&gt;Incidentally in this post I'm ignoring the server-side UI type frameworks like Wicket, Tapestry, JSF et al. I'm focussing on web frameworks that spend most of their time rendering HTML / XML / JSON and not building complex server side UI stuff and treating the browser as a kinda dumb terminal with the real UI work being done on the server side. Having had a horrid time using Tapestry and Hibernate together on some projects in the past, I'm kinda over the whole concept of server side UI web frameworks personally (I'm putting my flame-proof suite on now). I kinda think if you want to do complex rich web UIs, use wizards or complex flows, just use GWT or JavaScript on the client (or Flex/Flash for video or crazy highly graphical widgets) and keep the server side fairly simple and very RESTful. (But lets leave that discussion for another day... :)&lt;br /&gt;&lt;br /&gt;In this post I'm only really considering frameworks like Struts, Stripes, SpringMVC etc. Thankfully WebWork and Struts merged together so at least there's been some consolidation in the space - and certainly Struts and Stripes are now kinda similar (and not too disimilar from SpringMVC). I wonder if JAX-RS will lead to further consolidation with web frameworks adding themselves as JAX-RS extensions?&lt;br /&gt;&lt;br /&gt;So whats is missing from JAX-RS to be able to use just it for your entire web app and set of RESTful services and not have to use it with Struts/Stripes/SpringMVC and have to map some URIs into the web framework and some to JAX-RS?&lt;br /&gt;&lt;br /&gt;Right now today there are definitely some holes; though currently I don't think there's &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; much missing. Here's my list of things I think are missing and how we could add them - I'm very interested in hearing if there's anything you'd particularly miss from Struts/Stripes/SpringMVC/whatever; please blog about it or post a comment and I'll do a follow up post!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Implict &amp;amp; Explicit Views&lt;/span&gt;&lt;br /&gt;One great feature of &lt;a href="https://jersey.dev.java.net/"&gt;Jersey&lt;/a&gt; is the support for Implicit and Explicit Views. &lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;: here's a &lt;a href="http://blogs.sun.com/sandoz/entry/mvcj"&gt;link describing implict/explicit views&lt;/a&gt;. It basically allows the controller to delegate to the view layer (JSP/Velocity/Freemarker/&lt;a href="http://code.google.com/p/gxp/"&gt;GXP&lt;/a&gt; or whatever) using a default naming convention to find the template files in a directory named after the resource bean's class name and if required - the URI being requested. So a given Resource bean could have an index.jsp and edit.jsp templates for example - and referring to ${it.foo} inside the template would extract the foo property of the resource bean (you can override what 'it' is if you like but the resource bean is a very reasonable default).&lt;br /&gt;&lt;br /&gt;Maybe the easiest way to understand implicit/explicit views is to look at the &lt;span style="font-weight: bold;"&gt;bookstore&lt;/span&gt; example in the Jersey distro; its basically the glue between JAX-RS resources and templates.&lt;br /&gt;&lt;br /&gt;However there are some issues (which are being addressed particularly by the helpful folks on the Jersey list, particularly Marc and Paul) which basically revolve around having implicit/explicit views and (say) XML/JSON representations on the same resource bean using the same URIs and getting JAX-RS to pick the right one.&lt;br /&gt;&lt;br /&gt;For example the URI "&lt;span style="font-style: italic;"&gt;/customers"&lt;/span&gt; might return a HTML page for most web browsers but return XML/JSON if folks want to specify those MIME types in their Accept header. Right now Jersey tends to favour returning XML/JSON (long story but basically more specific URI paths are preferred over implicit views).&lt;br /&gt;&lt;br /&gt;I'm pretty sure some kind of @ImplicitProduces annotation to allow implicit views to be associated to MIME types along with a higher priority/quality ranking specified in the next feature would solve pretty much all the issues with implicit/explicit views though am sure folks can think of other improvements...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Better Content Negotiation Support&lt;/span&gt;&lt;br /&gt;It would be nice to see &lt;a href="https://jsr311.dev.java.net/issues/show_bug.cgi?id=46"&gt;these&lt;/a&gt; &lt;a href="https://jsr311.dev.java.net/issues/show_bug.cgi?id=65"&gt;issues&lt;/a&gt; resolved to be able to use &lt;a href="http://gewis.win.tue.nl/%7Ekoen/conneg/rfc2296.txt"&gt;RFC 2296&lt;/a&gt; to be able to raise and lower the priorities (or quality) of the different representations.&lt;br /&gt;&lt;br /&gt;e.g. you might want to prefer to return HTML over XML/JSON so unless folks ask specifically just for XML or JSON you return HTML.&lt;br /&gt;&lt;br /&gt;Bizarrely Safari uses an Accept header of&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;which kinda means it prefers to render XML over HTML (despite rendering XML as plain text!  Truly bizarre - what was Steve smoking that day :). Most web apps I know of would rather return HTML by default :)&lt;br /&gt;&lt;br /&gt;So you might want to specify something like this on a resource to declare that you want to return HTML by default for most users...&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;@ImplicitProduces("text/html;q=1.0")&lt;br /&gt;@Produces("text/xml;q=0.5, application/xml;q=0.5; application/json;q=0.5")&lt;br /&gt;public class MyResource {&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;Those MIME Strings could be static final constants BTW to keep things DRY and not have to repeat a ton of MIME expressions throughout your resource beans and making it real easy to add a new MIME type to your code without changing your controller methods.&lt;br /&gt;&lt;br /&gt;You could argue the out of the box rankings for HTML should be 1.0 and XML/JSON something lower, say 0.9 or 0.5 as thats what most folks would want.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dealing with static content&lt;/span&gt;&lt;br /&gt;The Servlet spec is a tad smelly in this area (and even in servlet 3.0) of not easily allowing you to mark URI patterns as being handled by the container (e.g. for static content or for JSP files etc) and &lt;a href="http://n2.nabble.com/Static-references-from-JSP-td794843.html"&gt;mapping all of the rest to your default servlet&lt;/a&gt;. Hopefully as &lt;a href="http://n2.nabble.com/Static-references-from-JSP-td794843.html#a2223598"&gt;Paul suggests&lt;/a&gt; we can get around this using servlet filters in Jersey; but it'd be nicer if there was a better fix for this. (Rails wins here hands down with using regex to map URIs to controllers). But this is more a servlet issue than JAX-RS / web framework.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Multipart support&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Having support for Struts style form beans; binding a multipart to a bean is very handy. &lt;a href="http://n2.nabble.com/Hello-World%21-and-Welcome-to-jersey-multipart-td1343189.html#a1343189"&gt;MrStruts himself has contributed jersey-multipart&lt;/a&gt; which goes most of the way there.  Allowing direct binding with any bean to avoid having to use the MultiPart class directly would certainly help.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Standard JAX-RS client API like Jersey's&lt;/span&gt;&lt;br /&gt;While not that relevant directly to web applications; being able to implement a REST service by invoking other RESTful services - or being able to test easily any RESTful service using an API like Jersey's client - while reusing the cool entity providers on both client and server side - would rock.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;GWT and JAX-RS client integration&lt;/span&gt;&lt;br /&gt;If you're building JAX-RS services and want a rich web client then &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt; is a great solution; you can reuse all your Java code on the client and server side and its very easy to debug the whole application in a single JVM in your Java IDE.&lt;br /&gt;&lt;br /&gt;GWT ships with its own RPC mechanism and there are various REST libraries for GWT such as &lt;a href="http://code.google.com/p/gwt-rest/"&gt;gwt-rest&lt;/a&gt; it'd be nice if there was an easy way to reuse the same DTOs used on the server side like you can with Jersey's client library from inside GWT. Using JAXB inside GWT is probably non-feasaible :) but it should be pretty easy to just use GWT serialization and then support it as an entity provider in the JAX-RS runtime. (Is there a MIME type for GWT serialisation I wonder :).&lt;br /&gt;&lt;br /&gt;Basically as an application developer it should be trivial to be able to reuse RESTful resources in JAX-RS inside the GWT client reusing all those DTOs if you want to.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update: some other suggestions&lt;br /&gt;&lt;/span&gt;Julio Faerman &lt;a href="http://n2.nabble.com/JAX-RS---Jersey-as-the-main-Java-web-framework-going-forward...-td2226448.html#a2227796"&gt;mentioned&lt;/a&gt; on the Jersey list mentioned the need for better validation. So maybe we could integrate the validation layer from Struts/Stripes into JAX-RS? Or use the the Bean Validation API (&lt;a href="http://jcp.org/en/jsr/detail?id=303"&gt;JSR 303&lt;/a&gt;)?&lt;br /&gt;&lt;br /&gt;Also Julio and Jon in the comments mentioned the need for managing conversational state so integrating Web Beans (&lt;a href="http://jcp.org/en/jsr/detail?id=299"&gt;JSR 299&lt;/a&gt;) as an option for bijection of conversational state on resource beans sounds a good possibility.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What else?&lt;/span&gt;&lt;br /&gt;Those are the things I can think of so far. Can you think of any others? What are there features in your favourite Struts/Stripes/SpringMVC/whatever framework on the server that you really can't live without?&lt;br /&gt;&lt;br /&gt;I'd love to hear others thoughts; do you think I'm smoking crack or do you agree? :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-826622922212868141?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/826622922212868141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=826622922212868141' title='37 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/826622922212868141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/826622922212868141'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/01/jax-rs-as-one-web-framework-to-rule.html' title='JAX-RS as the one Java web framework to rule them all?'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>37</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-4199533778380743531</id><published>2009-01-20T10:45:00.003Z</published><updated>2009-01-20T10:48:07.258Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><title type='text'>Apache Camel goes top level!</title><content type='html'>&lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; is &lt;a href="http://camel.apache.org/2009/01/19/camel-is-now-a-tlp-project.html"&gt;now&lt;/a&gt; a top level project at &lt;a href="http://www.apache.org/"&gt;Apache&lt;/a&gt; - you can find it at &lt;a href="http://camel.apache.org/"&gt;http://camel.apache.org/&lt;/a&gt;. Yay! &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Many thanks to all the Camel Riders who made this happen!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-4199533778380743531?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/4199533778380743531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=4199533778380743531' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4199533778380743531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4199533778380743531'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/01/apache-camel-goes-top-level.html' title='Apache Camel goes top level!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-6056148578435625498</id><published>2009-01-07T13:28:00.005Z</published><updated>2009-01-07T14:38:26.812Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='jaxrs'/><title type='text'>JAX-RS as the basis of a DRY web framework</title><content type='html'>I'm &lt;a href="http://www.javarants.com/2008/12/25/using-jax-rs-jersey-to-build-a-jpajaxb-backed-json-rest-api/"&gt;with Sam&lt;/a&gt; that JAX-RS rocks and is a great basis for a RESTful framework for writing services. As I've &lt;a href="http://macstrac.blogspot.com/2008/06/im-liking-jax-rs-and-jersey.html"&gt;said before&lt;/a&gt;, I think its the best JSR output since servlets and JPA. There's a &lt;a href="http://www.innoq.com/blog/st/presentations/2007/2007-11-06-JSR-311-W-JAX.pdf"&gt;great presentation by Stefan&lt;/a&gt; on it if you want to get up to speed fast.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd like to see something like the Jersey client standardised in JAX-RS - after all many restful resources are mashups of other resources and it makes testing of RESTful resources super simple. Also I love the implicit views in Jersey and hope they are kinda standardised some more; making the mapping between templates and resources more well defined across providers. But even in its current form, its great stuff.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Update&lt;/span&gt;: this is a &lt;a href="http://wikis.sun.com/display/Jersey/Overview+of+JAX-RS+1.0+Features"&gt;good overview of JAX-RS&lt;/a&gt; I stumbled on the other day&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-6056148578435625498?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/6056148578435625498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=6056148578435625498' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6056148578435625498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6056148578435625498'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2009/01/jax-rs-as-basis-of-dry-web-framework.html' title='JAX-RS as the basis of a DRY web framework'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-275109342807148384</id><published>2008-10-14T10:39:00.001Z</published><updated>2008-10-14T10:41:26.489Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><title type='text'>Liking the File language in Camel 1.5.0</title><content type='html'>&lt;a href="http://davsclaus.blogspot.com/"&gt;Claus&lt;/a&gt; has a great write up on the &lt;a href="http://davsclaus.blogspot.com/2008/10/file-language-new-feature-in-upcoming.html"&gt;new File language feature in Camel 1.5.0&lt;/a&gt; - cool stuff! I'm really looking forward to the next release!&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: 'Trebuchet MS'; font-size: 13px; line-height: 18px; "&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: 'Trebuchet MS'; font-size: 13px; line-height: 18px; "&gt;&lt;blockquote&gt;A favorite feature of mine in the next &lt;a href="http://activemq.apache.org/camel/" style="color: rgb(34, 51, 68); "&gt;Apache Camel&lt;/a&gt; is a new feature to use &lt;a href="http://activemq.apache.org/camel/file-language.html" style="color: rgb(34, 51, 68); "&gt;file name patterns&lt;/a&gt; in the &lt;a href="http://activemq.apache.org/camel/file.html" style="color: rgb(34, 51, 68); "&gt;file component&lt;/a&gt;. What we have introduced is a new language, the &lt;a href="http://activemq.apache.org/camel/file-language.html" style="color: rgb(34, 51, 68); "&gt;file language&lt;/a&gt;, so you can leverage this feature anywhere in Camel where it uses Expressions, Languages etc. The file language currently support both the &lt;a href="http://activemq.apache.org/camel/file.html" style="color: rgb(34, 51, 68); "&gt;file&lt;/a&gt; and the &lt;a href="http://activemq.apache.org/camel/ftp.html" style="color: rgb(34, 51, 68); "&gt;FTP component&lt;/a&gt; as well.&lt;br /&gt;&lt;br /&gt;As a lot of integrations is file based you need to be able to read (consume) or write (produce) files. Then you need to be able to specify file names. What's new in Camel 1.5.0 is that you can express this using patterns, for instance directly in the configuration of your endpoints. Prior you had to do this in Java code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new'; "&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;Simple example&lt;/span&gt;&lt;br /&gt;Lets image you need to move consumed files into a backup folder after processing.&lt;br /&gt;&lt;br /&gt;Now you can express this using the pattern: &lt;span style="font-family: 'courier new'; "&gt;backup/${file:name}&lt;/span&gt;&lt;br /&gt;Well then you need to use .bak as extension, and the pattern is:&lt;span style="font-family: 'courier new'; "&gt;backup/${file:name}.bak&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Okay next issue is that the backup folder should be grouped by dates using the &lt;span style="font-family: 'courier new'; "&gt;yyyyMMdd&lt;/span&gt; pattern. Well the expression support the&lt;span style="font-family: 'courier new'; "&gt;java.text.SimpleDateFormat&lt;/span&gt; patterns also.&lt;br /&gt;The pattern is:&lt;span style="font-family: 'courier new'; "&gt;backup/${date:now:yyyyMMdd}/${file:name}.bak&lt;/span&gt; where&lt;span style="font-weight: bold; "&gt;now&lt;/span&gt; means current date. You can substitute this with different commands such as &lt;span style="font-weight: bold; "&gt;file &lt;/span&gt;for using the timestamp on the file instead.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; "&gt;Advanced example&lt;/span&gt;&lt;br /&gt;In this sample you need to produce files (save) and you need to save the file using a generate unique filename. We use the divide and conquer pattern for this so you create a POJO class that generates the unique filename, then you as the developer have the full power how to do this. And then its very easy to unit test as its plain POJO that can be tested very easily with JUnit. Next step is to express this as a file pattern. As your POJO is a bean we use the &lt;a href="http://activemq.apache.org/camel/bean-language.html" style="color: rgb(34, 51, 68); "&gt;bean langauge&lt;/a&gt; to invoke your pojo.&lt;br /&gt;&lt;br /&gt;So the pattern is: &lt;span style="font-family: 'courier new'; "&gt;myfile&lt;/span&gt;&lt;span class="code-quote"&gt;&lt;span style="font-family: 'courier new'; "&gt;-${bean:myguidgenerator.generateid}.txt&lt;/span&gt;&lt;br /&gt;Where &lt;/span&gt;&lt;span class="code-quote"&gt;&lt;span style="font-weight: bold; "&gt;myguidgenerator &lt;/span&gt;is the bean id of your POJO and &lt;/span&gt;&lt;span class="code-quote"&gt;&lt;span style="font-weight: bold; "&gt;generateid&lt;/span&gt;is the method name. You can omit the method name if there is no ambiguity which method Camel should invoke.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; "&gt;Camel routes&lt;/span&gt;&lt;br /&gt;This feature is configurable directly in camel routing on your endpoints. So what we can do now is:&lt;br /&gt;&lt;span style="font-family: 'courier new'; "&gt;&lt;br /&gt;from("file://inbox?expression=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new'; "&gt;&lt;span style="font-family: 'courier new'; "&gt;backup/${date:now:yyyyMMdd}/${file:name}.bak").to("bean:processFile");&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="code-quote"&gt;The route will consume files and process the files in the processFile bean, that is a plain POJO class. After processing the files is moved (renamed) using the pattern in the expression. So the file is moved to the backup subfolder, for example: backup/20081014/report-october-2008.bak&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; "&gt;More to come&lt;/span&gt;&lt;br /&gt;Well there is a ton of new features and improvements in Camel 1.5.0. Check out the &lt;a href="http://activemq.apache.org/camel/camel-150-release.html" style="color: rgb(68, 85, 102); "&gt;current release note&lt;/a&gt;.&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="code-quote"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-275109342807148384?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/275109342807148384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=275109342807148384' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/275109342807148384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/275109342807148384'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/10/liking-file-language-in-camel-150.html' title='Liking the File language in Camel 1.5.0'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3666478628129801984</id><published>2008-10-09T11:51:00.005Z</published><updated>2008-10-09T12:00:04.623Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='guice'/><title type='text'>Using Guice as a JNDI provider</title><content type='html'>In many ways a Dependency Injection framework is a replacement for looking things up in a registry like JNDI; but sometimes having some kind of registry or JNDI provider can be useful such as if you want to work with JSR250/EJB3 or some legacy code which expects JNDI to be used - or you want to use JNDI as a kinda loosely coupled registry between completely different modules of your system.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've &lt;a href="http://code.google.com/p/google-guice/issues/detail?id=259"&gt;hacked up a simple JNDI provider&lt;/a&gt; which just uses Guice to create all the objects; so you stick to pure Java code for writing your Guice Modules to depenency inject your objects together then have a &lt;a href="http://code.google.com/p/camel-extra/wiki/GuiceJndi"&gt;little properties file to enable/disable/tweak things&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When looking at Guice through spring-tinted glasses the most glaring difference (apart from the lack of XML) tends to be the absence of the ApplicationContext and a registry where you can look things up by name. This JNDI provider provides a more standard alternative to the ApplicationContext, as JNDI is in the JDK and it kinda gives you that crutch to lean on until you figure out the guicier way of doing your dependency injection :). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One neat thing is it combines &lt;a href="http://code.google.com/p/camel-extra/wiki/GuiceJndi"&gt;JNDI naming with the @Named injection points in Guice and allows @Resource from JSR250/EJB3 all configured via the same jndi.properties file&lt;/a&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3666478628129801984?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3666478628129801984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3666478628129801984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3666478628129801984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3666478628129801984'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/10/using-guice-as-jndi-provider.html' title='Using Guice as a JNDI provider'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-5791318862018947604</id><published>2008-10-07T16:28:00.002Z</published><updated>2008-10-07T16:37:20.546Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='guice'/><title type='text'>Adding support for @PostConstruct, @PreDestroy and @Resource to Guice</title><content type='html'>I do like &lt;a href="http://code.google.com/p/google-guice/"&gt;guice&lt;/a&gt; as a Dependency Injection engine; I think it has a lot of promise; particularly if 2.0 is released soon :)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I still struggle sometimes, coming from a spring framework mindset, figuring out how to do some stuff. Though I love the @Provides support in trunk of Guice. Here's hoping 2.0 is out soon! :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've &lt;a href="http://code.google.com/p/google-guice/issues/detail?id=78"&gt;experimented recently adding support for ConstructorInterceptors&lt;/a&gt; into guice so you can add custom lifecycles like @PostContruct from JSR250/EJB3 or Spring's InitializingBean etc. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've also created a &lt;a href="http://code.google.com/p/google-guice/issues/detail?id=62"&gt;patch to support closing of singletons such as via @PreDestroy&lt;/a&gt; or spring's DisposableBean.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Slightly more wacky is a &lt;a href="http://code.google.com/p/google-guice/issues/detail?id=258"&gt;patch adding support for custom injection point annotations&lt;/a&gt; which allows you to easily support things like &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;@Resource from JSR 250/EJB3&lt;/li&gt;&lt;li&gt;@PersistenceContext from JPA&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the various JAX-RS annotations like @Context, @PathParam etc&lt;/li&gt;&lt;li&gt;WebBeans @In&lt;/li&gt;&lt;li&gt;Spring's @Autowire&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/"&gt;Apache Camel&lt;/a&gt;'s injection annotations like &lt;a href="http://activemq.apache.org/camel/bean-injection.html"&gt;@EndpointInject&lt;/a&gt; or &lt;a href="http://activemq.apache.org/camel/pojo-producing.html"&gt;@Produce&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Feedback greatly appreciated!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-5791318862018947604?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/5791318862018947604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=5791318862018947604' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5791318862018947604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5791318862018947604'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/10/adding-support-for-postconstruct.html' title='Adding support for @PostConstruct, @PreDestroy and @Resource to Guice'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2404001764223035786</id><published>2008-10-07T10:59:00.003Z</published><updated>2008-10-07T11:03:10.784Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='designer'/><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><category scheme='http://www.blogger.com/atom/ns#' term='eip'/><category scheme='http://www.blogger.com/atom/ns#' term='tooling'/><title type='text'>Enterprise Integration Designer preview</title><content type='html'>From &lt;a href="http://oisinh.wordpress.com/"&gt;Oisin's&lt;/a&gt; blog.&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(75, 93, 103); font-family: Verdana; font-size: 11px; line-height: 15px; "&gt;&lt;p style="font-size: 100%; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 24px; "&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(75, 93, 103); font-family: Verdana; font-size: 11px; line-height: 15px; "&gt;&lt;p style="font-size: 100%; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 24px; "&gt;Thanks to &lt;a href="http://www.enterpriseintegrationpatterns.com/" style="font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.4em; color: rgb(127, 29, 29); text-decoration: none; "&gt;Enterprise Integration Patterns&lt;/a&gt;, architects have a clear and succinct way to describe integration within complex systems. It certainly beats a lot of MS-Word documents and monster integration architecture diagrams. And, with &lt;a href="http://activemq.apache.org/camel" style="font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.4em; color: rgb(127, 29, 29); text-decoration: none; "&gt;Apache Camel&lt;/a&gt;, we’ve got an open source runtime that allows us to create routes by chaining EIPs together, using Spring XML or Java fluent builders. That’s fantastic, but EIPs are as much about sharing pictures as creating message routing graphs, and where are the pictures?  &lt;/p&gt;&lt;p style="font-size: 100%; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 24px; "&gt;We’ve made some tools that will allow you to load up Camel Spring XML files into Eclipse for visual inspection and editing. You can also create EIP diagrams in your Workbench and save them as Camel configurations. Finally, we’ve put in some debugging capabilities to allow you trace through the paths a message will take through your EIP graph.  &lt;/p&gt;&lt;p style="font-size: 100%; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 24px; "&gt;We are earnestly seeking feedback - check out the &lt;a href="http://open.iona.com/products/fuse-integration-designer/#documentation" style="font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.4em; color: rgb(127, 29, 29); text-decoration: none; "&gt;FUSE Integration Designer Preview page&lt;/a&gt; to download the Eclipse plugins, or check out the video links under the &lt;strong style="font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.4em; "&gt;Training Videos&lt;/strong&gt; at the bottom of the page.&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;Looks great! Feedback greatly appreciated&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2404001764223035786?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2404001764223035786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2404001764223035786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2404001764223035786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2404001764223035786'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/10/enterprise-integration-designer-preview.html' title='Enterprise Integration Designer preview'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-7010336192293227810</id><published>2008-09-29T10:33:00.002Z</published><updated>2008-09-29T10:36:40.664Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>Using Camel with ServiceMix Kernel</title><content type='html'>&lt;a href="http://gertvanthienen.blogspot.com/"&gt;Gert&lt;/a&gt; has a great post on &lt;a href="http://gertvanthienen.blogspot.com/2008/09/servicemix-kernel-and-camel.html"&gt;ServiceMix Kernel and Camel&lt;/a&gt; showing how easy it is to take ServiceMix Kernel, install Camel into it and then deploy a route using a simple Spring XML file. Nice job Gert!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-7010336192293227810?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/7010336192293227810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=7010336192293227810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7010336192293227810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7010336192293227810'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/09/using-camel-with-servicemix-kernel.html' title='Using Camel with ServiceMix Kernel'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2151837682848015739</id><published>2008-09-18T12:56:00.003Z</published><updated>2008-09-18T13:07:21.781Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>Apache ServiceMix Kernel 1.0.0 released!</title><content type='html'>via &lt;a href="http://gnodet.blogspot.com/"&gt;Guillaume&lt;/a&gt;'s &lt;a href="http://gnodet.blogspot.com/2008/09/apache-servicemix-kernel-100-released.html"&gt;post&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Apache ServiceMix Kernel 1.0.0 has just been released.&lt;br /&gt;&lt;br /&gt;Apache ServiceMix Kernel is a small OSGi based runtime which provides&lt;br /&gt;a lightweight container onto which various bundles can be deployed.&lt;br /&gt;Amongst the list of supported features, Apache ServiceMix Kernel supports:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hot deployment of OSGi bundles, exploded bundles or custom artifacts (spring xml configuration files support is provided)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;services configuration stored as property files are monitored and provided as standard OSGi configurations&lt;br /&gt;&lt;/li&gt;&lt;li&gt;a centralized logging back end supported by Log4J, ServiceMix Kernel supports a number of different APIs (JDK 1.4, JCL, SLF4J, Avalon, Tomcat, OSGi)&lt;/li&gt;&lt;li&gt;provisioning of libraries or applications can be done using simple commands via simple xml descriptors&lt;br /&gt;&lt;/li&gt;&lt;li&gt;native OS integration as a service so that the lifecycle will be bound to your Operating System.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;an extensible shell console to manage services, applications and libraries&lt;/li&gt;&lt;li&gt;operations on the console can be done remotely via a secured and encrypted channel&lt;br /&gt;&lt;/li&gt;&lt;li&gt;a security framework based on JAAS&lt;/li&gt;&lt;li&gt;new instances can be created using a single command line&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;This release, with the detailed release notes, is available at:&lt;br /&gt;&lt;a href="http://servicemix.apache.org/kernel/servicemix-kernel-100.html" style="color: rgb(102, 181, 255);"&gt;http://servicemix.apache.org/kernel/servicemix-kernel-100.html&lt;/a&gt;.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I'm particularly pleased to get the 1.0.0 release out; it makes it really easy to have hot-redeployable &lt;a href="http://activemq.apache.org/camel/"&gt;Camel&lt;/a&gt; routing rules - just edit your Spring XML when using the expanded bundle mode and ServiceMix will auto-redeploy your routing rules dynamically!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2151837682848015739?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2151837682848015739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2151837682848015739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2151837682848015739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2151837682848015739'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/09/apache-servicemix-kernel-100-released.html' title='Apache ServiceMix Kernel 1.0.0 released!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-768314991666150298</id><published>2008-09-09T11:07:00.002Z</published><updated>2008-09-09T11:10:45.385Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel servicemix'/><title type='text'>Whats new in ServiceMix 4 and Camel</title><content type='html'>Rod Biresch has posted a nice blog post about &lt;a href="http://soatechlab.blogspot.com/2008/09/whats-new-in-servicemix-4x.html"&gt;what's new in ServiceMix 4.x&lt;/a&gt; which is definitely worth a read! &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also &lt;a href="http://davsclaus.blogspot.com/"&gt;Claus Ibsen&lt;/a&gt; has added to the &lt;a href="http://activemq.apache.org/camel/tutorials.html"&gt;collection of tutorials&lt;/a&gt; on Camel, this time &lt;a href="http://davsclaus.blogspot.com/2008/09/camel-tutorial-using-axis-with-camel.html"&gt;on using Axis with Camel&lt;/a&gt;. Nice work guys!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-768314991666150298?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/768314991666150298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=768314991666150298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/768314991666150298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/768314991666150298'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/09/whats-new-in-servicemix-4-and-camel.html' title='Whats new in ServiceMix 4 and Camel'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-4801137730289795131</id><published>2008-09-01T11:33:00.004Z</published><updated>2008-09-01T11:43:28.924Z</updated><title type='text'>better stack traces in Java with log4j - including the jar file and version number!</title><content type='html'>&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;When problems occur in open source software users tend to get stack traces. They often fire them off to some open source mailing list or forum asking for help; often without providing much in the way of detail. One of the first questions asked by support teams is often 'OK, what version are you using'.&lt;br /&gt;&lt;br /&gt;Given that its possible to figure out the actual version being used of each class - either using the package information from the MANIFEST or by finding the jar the class came from, it seems logical to include the version information into a stack trace at the end of the line.&lt;br /&gt;&lt;br /&gt;One day the JVM might actually do this for us :)&lt;br /&gt;&lt;br /&gt;In the meantime, I've created a patch for log4j to add this feature; it appends an optional String to stack traces printed via log4j which includes the jar file name if it can be deduced plus the Java Package version the line of code comes from.&lt;br /&gt;&lt;br /&gt;Here's an example...&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;org.apache.log4j.config.PropertySetterException: Hello&lt;br /&gt;   at org.apache.log4j.spi.ThrowableInformationTest.testStackTracePackageName(ThrowableInformationTest.java:306)&lt;br /&gt;   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) &lt;span style="font-weight: bold;"&gt;[1.5.0]&lt;/span&gt;&lt;br /&gt;   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [1.5.0]&lt;br /&gt;   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [1.5.0]&lt;br /&gt;   at java.lang.reflect.Method.invoke(Method.java:585) [1.5.0]&lt;br /&gt;   at junit.framework.TestCase.runTest(TestCase.java:154) &lt;span style="font-weight: bold;"&gt;[junit-3.8.1.jar]&lt;/span&gt;&lt;br /&gt;   at junit.framework.TestCase.runBare(TestCase.java:127) [junit-3.8.1.jar]&lt;br /&gt;   at junit.framework.TestResult$1.protect(TestResult.java:106) [junit-3.8.1.jar]&lt;br /&gt;   at junit.framework.TestResult.runProtected(TestResult.java:124) [junit-3.8.1.jar]&lt;br /&gt;   at junit.framework.TestResult.run(TestResult.java:109) [junit-3.8.1.jar]&lt;br /&gt;   at junit.framework.TestCase.run(TestCase.java:118) [junit-3.8.1.jar]&lt;br /&gt;   at junit.textui.TestRunner.doRun(TestRunner.java:116) [junit-3.8.1.jar]&lt;br /&gt;   at com.intellij.rt.execution.junit.IdeaTestRunner.doRun(IdeaTestRunner.java:94) [idea_rt.jar]&lt;br /&gt;   at junit.textui.TestRunner.doRun(TestRunner.java:109) [junit-3.8.1.jar]&lt;br /&gt;   at com.intellij.rt.execution.junit.IdeaTestRunner.startRunnerWithArgs(IdeaTestRunner.java:22) [idea_rt.jar]&lt;br /&gt;   at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:118) [idea_rt.jar]&lt;br /&gt;   at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40) [idea_rt.jar]&lt;br /&gt;&lt;/blockquote&gt;So you can see what version of junit is being used (despite there being no manifest information) along with the JDK implementation version.&lt;br /&gt;e.g.&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;  at java.lang.reflect.Method.invoke(Method.java:585) [1.5.0]&lt;br /&gt;&lt;/blockquote&gt;means we found the package number but couldn't find the jar file but we found the implementation version of java.lang.reflect to be 1.5.0. Whereas&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;  at junit.framework.TestCase.run(TestCase.java:118) [junit-3.8.1.jar]&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;means we found the jar file but the jar file has no manifest version information.&lt;br /&gt;&lt;br /&gt;Am hoping one day this gets into some log4j release! You can find the &lt;a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=45721"&gt;patch here if you're interested&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-4801137730289795131?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/4801137730289795131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=4801137730289795131' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4801137730289795131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4801137730289795131'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/09/better-stack-traces-in-java-with-log4j.html' title='better stack traces in Java with log4j - including the jar file and version number!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-7863096520540107962</id><published>2008-08-29T10:21:00.006Z</published><updated>2008-08-29T10:47:47.795Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='pimp'/><category scheme='http://www.blogger.com/atom/ns#' term='messaging'/><title type='text'>am loving Beyond REST and the PIMP protocol</title><content type='html'>I really enjoyed reading &lt;a href="http://joshua.schachter.org/"&gt;Joshua Schachter&lt;/a&gt;'s post &lt;a href="http://joshua.schachter.org/2008/07/beyond-rest.html"&gt;beyond rest&lt;/a&gt; today - and particularly the comments. The basic idea is how to get a kinda publish/subscribe system to work on the web for processing real time updates to things like social sites at internet scale without introducing some really complex new protocol; but reusing the lovely RESTful web endpoints.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I posted a comment in the thread but figured it was quite big so figured I'd post it here too :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm really liking the PIMP protocol and like &lt;a href="http://www.javarants.com/"&gt;Sam&lt;/a&gt;'s strawman of using caching headers to implement it...&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;My suggestion is to think of this instead as another form of caching. All we really want is a header that tells the server that we are interested when a particular resource has been updated and how to tell us. The server can then either understand that header and acknowledge in the response that it will notify me. Here is my strawman:Request:&lt;br /&gt;...&lt;br /&gt;X-Cache-Callback:http://www.javarants.com/notify/joshua.schachter.org/atom.xml;SECRET&lt;br /&gt;Response:&lt;br /&gt;...&lt;br /&gt;X-Cache-Callback: OK&lt;br /&gt;&lt;br /&gt;Then if that resource is updated the service is expected to either HEAD the callback as a notification or POST the new contents of the resource, servers choice. You could later add semantics for merely updating the resource vs replacing it wholesale. I would also think about adding the ability for the server to specify a timeout after which you are free to poll again if you haven't heard anything on the assumption that sometimes the service may lose the state associated with your subscription. &lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Am thinking rather than returning OK the server returns the amount of time before the client has to re-issue the subscription to keep it alive. So the server can decide the maximum subscription time. Good PIMP servers (PIMPS :) might wanna make this quite long to reduce the polling overhead.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I also love the simplicity of the HEAD or POST to differentiate a notification of change to a notification-with-the-data. &lt;/p&gt;&lt;p&gt;I've long wanted a 'SUBSCRIBE' verb in HTTP for doing this kinda thing; but I think your cache-header approach is cleaner - as folks can either keep polling and/or subscribe for the update notification. &lt;/p&gt;&lt;p&gt;The nice thing too is that it allows easy migration to PIMP without introducing any overhead or new traffic; that clients continue to poll as normal - but they advertise themselves as being PIMP aware. Then eventually when one day the server becomes PIMP aware the clients receive their notifications (and then hopefully they scale back their polling :) - otherwise they can stick to polling.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Also webmasters can monitor their traffic looking for PIMP headers to know when it'll make sense to upgrade to PIMP. Not everyone is gonna need PIMP and it'll be a no brainer from looking at your logs to determine both when you've sufficient mass of PIMP enabled pollers along with knowing what the reduction in polling traffic upgrading to PIMP would save you.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I'm with Sam in the thinking of this as another form of caching.  In implementing PIMP some folks might be able to create update notifications internally in their system when resources change to push out change messages into some kinda queue for posting to the callback URL. This would involve significant work for many sites though. &lt;/p&gt;&lt;p&gt;However it'll surely be pretty trivial to just install a PIMP-enabled caching web proxy inside your data centre in front of your servers - that does the usual cache thing, but also detects these extra PIMP cache headers and does a background poll of resources (respecting your existing cache &amp;amp; time to live headers) to detect changes both to update the cluster of front web caches (so non-PIMP pollers get more real time data) but also to drive the pushing of updates out to PIMP subscribers. &lt;/p&gt;&lt;p&gt;i.e. I can see this as a pretty easy upgrade to most web sites - folks just update their front end web proxies to a PIMP-enabled version and hey presto you can now support PIMP consumers. Am sure the web proxies could include an XMPP firehose too pretty easily for heavy hitters.&lt;/p&gt;&lt;p&gt;It should be pretty easy to hack the web proxies to do this I'd have thought? Even the problem thats been noted earlier in this thread - of trying to push updates to a URL endpoint might be slow, unresponsive or unavailable - the web proxies have to deal with already right in case a *local* server is borked.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Anyway - its a very interesting blog post and particularly the comments. Interesting stuff.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-7863096520540107962?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/7863096520540107962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=7863096520540107962' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7863096520540107962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7863096520540107962'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/08/am-loving-beyond-rest-and-pimp-protocol.html' title='am loving Beyond REST and the PIMP protocol'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-9124622820857526029</id><published>2008-08-28T09:43:00.006Z</published><updated>2008-08-29T08:10:15.496Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='nexus'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Running Nexus with launchd on OS X</title><content type='html'>I've finally got &lt;a href="http://nexus.sonatype.org/"&gt;Nexus&lt;/a&gt; running for &lt;a href="http://maven.apache.org/"&gt;maven&lt;/a&gt; builds to help boost the speed downloading and checking repos etc.&lt;br /&gt;&lt;br /&gt;This gave me the excuse to finally take a quick look at using &lt;a href="http://developer.apple.com/macosx/launchd.html"&gt;launchd&lt;/a&gt; which is the preferred OS X way to run daemons and services. First look it appears cool and much nicer than rc/init.d/xinit.d et al.&lt;br /&gt;&lt;br /&gt;Here's a really simple always-run nexus script, &lt;a href="http://people.apache.org/%7Ejstrachan/sonatype.nexus.plist"&gt;&lt;span style="font-weight: bold;"&gt;sonatype.nexus.plist&lt;/span&gt;&lt;/a&gt;. Just drop it into your &lt;span style="font-weight: bold;"&gt;~/Library/LaunchAgents/&lt;/span&gt; directory and you should be good to go.&lt;br /&gt;&lt;br /&gt;From the command line you can then do this if you want to boot it up straight away - but it should restart on reboot (which I'll test out next time I've gotta reboot :)&lt;br /&gt;&lt;div&gt;&lt;blockquote style="font-family: courier new;"&gt;launchctl start sonatype.nexus&lt;/blockquote&gt;I did try get clever and wait for port 8081 to be used before booting up nexus but couldn't get it to work properly so figured just starting it up on boot was easier :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Update&lt;/span&gt;: BTW the script is available under the Apache License 2.0 if anyone wants to copy it or include it in any distro of Nexus&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-9124622820857526029?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/9124622820857526029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=9124622820857526029' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9124622820857526029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9124622820857526029'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/08/running-nexus-with-launchd-on-os-x.html' title='Running Nexus with launchd on OS X'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8117789972722589535</id><published>2008-08-27T17:00:00.001Z</published><updated>2008-08-27T17:01:38.496Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><title type='text'>Neat eclipse templates for working with the Java or Spring DSLs for Camel</title><content type='html'>If you're an &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; user who works with &lt;a href="http://activemq.apache.org/camel/"&gt;Camel&lt;/a&gt; you might be interested in the &lt;a href="http://janstey.blogspot.com/2008/08/eclipse-templates-for-apache-camel.html"&gt;Eclipse templates&lt;/a&gt; that Jon has just created - nice work &lt;a href="http://janstey.blogspot.com/"&gt;Jon&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8117789972722589535?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8117789972722589535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8117789972722589535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8117789972722589535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8117789972722589535'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/08/neat-eclipse-templates-for-working-with.html' title='Neat eclipse templates for working with the Java or Spring DSLs for Camel'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-6737385032183206608</id><published>2008-08-27T08:17:00.003Z</published><updated>2008-08-27T08:18:53.501Z</updated><title type='text'>Another great Camel tutorial from Claus</title><content type='html'>&lt;a href="http://davsclaus.blogspot.com/"&gt;Claus&lt;/a&gt; has done it again with &lt;a href="http://davsclaus.blogspot.com/2008/08/camel-tutorial-part-4.html"&gt;part 4&lt;/a&gt; of his excellent &lt;a href="http://activemq.apache.org/camel/tutorial-example-reportincident.html"&gt;Camel tutorial&lt;/a&gt;. Check it out if you are interested in &lt;a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html"&gt;Enterprise Integration Patterns&lt;/a&gt; or &lt;a href="http://activemq.apache.org/camel/"&gt;Camel&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-6737385032183206608?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/6737385032183206608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=6737385032183206608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6737385032183206608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6737385032183206608'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/08/another-great-camel-tutorial-from-claus.html' title='Another great Camel tutorial from Claus'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1949725120576562487</id><published>2008-07-24T10:04:00.003Z</published><updated>2008-07-24T10:16:34.891Z</updated><title type='text'>Apache Camel 1.4.0 released with 261 new features, improvements and fixes</title><content type='html'>&lt;a href="http://davsclaus.blogspot.com/"&gt;Claus&lt;/a&gt; beat me to it, so being lazy I'm just gonna quote his post :)&lt;div&gt;&lt;span class="Apple-style-span"  style="border-collapse: collapse;  font-family:arial;"&gt;&lt;blockquote&gt;Just after 3½ months since release 1.3.0 of &lt;a href="http://activemq.apache.org/camel/" target="_blank" style="font-weight: bold; color: rgb(51, 102, 204); "&gt;Apache Camel&lt;/a&gt; we have been very busy and have resolved 261 tickets.&lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://activemq.apache.org/camel/camel-140-release.html" target="_blank" style="font-weight: bold; color: rgb(51, 102, 204); "&gt;release notes&lt;/a&gt; and go grab it from the &lt;a href="http://activemq.apache.org/camel/download.html" target="_blank" style="font-weight: bold; color: rgb(51, 102, 204); "&gt;download&lt;/a&gt; page.&lt;br /&gt;&lt;br /&gt;If you are not familiar with Apache Camel then check out the &lt;a href="http://activemq.apache.org/camel/faq.html" target="_blank" style="font-weight: bold; color: rgb(51, 102, 204); "&gt;FAQ&lt;/a&gt; or the &lt;a href="http://activemq.apache.org/camel/getting-started.html" target="_blank" style="font-weight: bold; color: rgb(51, 102, 204); "&gt;Getting Started&lt;/a&gt; guide.&lt;br /&gt;&lt;br /&gt;If you have more time and a fresh brew of coffee then I encourage you to read a somewhat &lt;a href="http://activemq.apache.org/camel/tutorial-example-reportincident.html" target="_blank" style="font-weight: bold; color: rgb(51, 102, 204); "&gt;different tutorial&lt;/a&gt; that focus on introducing Camel into an existing project step by step. The tutorial is work in progress, so check it out from time to time. The tutorial is based on a real life use-case.&lt;br /&gt;&lt;br /&gt;If you have less time check out the &lt;a href="http://activemq.apache.org/camel/tutorial-jmsremoting.html" target="_blank" style="font-weight: bold; color: rgb(51, 102, 204); "&gt;regular tutorial&lt;/a&gt; that demonstrates how Camel easily work well together with Spring for message exchanges over JMS.&lt;br /&gt;&lt;br /&gt;If you have questions about Camel then please check out &lt;a href="http://activemq.apache.org/camel/discussion-forums.html" target="_blank" style="font-weight: bold; color: rgb(51, 102, 204); "&gt;the forums/mailinglists&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And then the &lt;a href="http://activemq.apache.org/camel/why-the-name-camel.html" target="_blank" style="font-weight: bold; color: rgb(51, 102, 204); "&gt;answer to the mother of all questions&lt;/a&gt; about Camel.&lt;/blockquote&gt;There's tons of stuff in there. One of the most trivial changes to implement but one of my '&lt;span class="Apple-style-span" style="font-style: italic;"&gt;DOH why didn't we do that a long time ago&lt;/span&gt;' changes is the new &lt;a href="http://activemq.apache.org/camel/tracer.html"&gt;tracer&lt;/a&gt;; very handy! Great work camel riders!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="border-collapse: collapse; font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="border-collapse: collapse; font-family:arial;"&gt;Incidentally its interesting to see how popular Camel is getting. For example looking at the &lt;a href="http://www.nabble.com/Apache-f90.html"&gt;Apache mailing list activity at nabble &lt;/a&gt;there's currently &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt; in first place, &lt;a href="http://servicemix.apache.org/"&gt;ServiceMix&lt;/a&gt; in second and Camel doing a pretty respectable 7th behind Wicket, Maven, Struts and Lucene. Pretty good - particularly as its way above all of the Incubator projects combined (including a fair few that have graduated a while ago :), all Apache Web Services projects combined, Tomcat and Gerornimo etc&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial;"&gt;ActiveMQ, Camel and ServiceMix are doing pretty well in the &lt;a href="http://www.nabble.com/Java-Software-f787.html"&gt;Java software community rankings too&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1949725120576562487?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1949725120576562487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1949725120576562487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1949725120576562487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1949725120576562487'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/07/apache-camel-140-released-with-261-new.html' title='Apache Camel 1.4.0 released with 261 new features, improvements and fixes'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8040199465842616154</id><published>2008-06-23T18:53:00.001Z</published><updated>2008-06-23T18:54:53.394Z</updated><title type='text'>Are people blogging less?</title><content type='html'>Maybe its a bug with google reader or something but for the first time in ages my great and good folders of feeds I track (my kinda 2 tier way of keeping on top of blogs) are nearly empty. Do folks just twitter now or something?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8040199465842616154?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8040199465842616154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8040199465842616154' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8040199465842616154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8040199465842616154'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/06/are-people-blogging-less.html' title='Are people blogging less?'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3139702497407886364</id><published>2008-06-17T09:23:00.002Z</published><updated>2008-06-17T09:24:42.717Z</updated><title type='text'>Setting your bash command prompt to subversion or git repo info</title><content type='html'>I love this tip to &lt;a href="http://muness.blogspot.com/2008/06/stop-presses-bash-said-to-embrace.html"&gt;set your bash command prompt to the svn/git repo, branch and version&lt;/a&gt; - its installed. Neat!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3139702497407886364?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3139702497407886364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3139702497407886364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3139702497407886364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3139702497407886364'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/06/setting-your-bash-command-prompt-to.html' title='Setting your bash command prompt to subversion or git repo info'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-5398123873350251465</id><published>2008-06-03T08:27:00.002Z</published><updated>2008-06-03T08:35:20.699Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx backup'/><title type='text'>TimeCapsule &amp; TimeMachine saved my ass!</title><content type='html'>My MacBookPro died on me. It kinda kept freezing so I did a hard reboot then after that it wouldn't boot at all :) Took it to the Apple Store; they figured out it was some kinda disc corruption; so wiped the disk (after managing to restore the files I was hacking on, bless that genius at the bar), reinstalled Leopard and things are OK (the disk may be faulty, we'll see soon).&lt;br /&gt;&lt;br /&gt;Luckily the TimeCapsule had all my stuff so I could use the Migration Assistant to restore my apps &amp;amp; user accounts from the backup on the Time Machine. The UI did freak me out a bit - when the thing started it kept saying 'connecting...' then hanging for ages. I kept thinking it wasn't working so trying all kinds of things. Turns out, its just wacky slow. The next screen shows the list of user accounts - again thats wacky slow - takes maybe an hour for a 100Gb backup to show the few user accounts in the backup!&lt;br /&gt;&lt;br /&gt;The 2 massive delays in the UI are kinda irritating; I mean why can't it keep a little index of what machines &amp;amp; users its got in the backup and let me pick 'em in a second then leave the thing for a few hours while it restores?&lt;br /&gt;&lt;br /&gt;Anyway - all is well - once I got past the 2nd screen, chose the things to restore I left it chugging away for a few hours and I'm now restored. The only thing I've missed so far is I had to reinstall my VPN client as it shoved stuff in /System and maven is hardwired in /usr/bin to point to mvn 2.0.6 in /usr/share - other than that it worked fine.&lt;br /&gt;&lt;br /&gt;One final tip if you try and restore from Time Capsule/Time Machine; when you reinstall Leopard don't create a user account with the same ID as the one you are gonna restore - as the Migration Assistant forced me to rename the restored one (which caused some problems that took me a little while and some 'chown'ing to fix :).&lt;br /&gt;&lt;br /&gt;Other than those little gremlins; nice job Apple! If I ever have another catastrophic failure, the next restore should be pretty painless&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-5398123873350251465?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/5398123873350251465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=5398123873350251465' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5398123873350251465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5398123873350251465'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/06/timecapsule-timemachine-saved-my-ass.html' title='TimeCapsule &amp; TimeMachine saved my ass!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2767736657722871021</id><published>2008-06-03T08:18:00.003Z</published><updated>2008-06-03T08:27:46.681Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><title type='text'>I'm liking JAX-RS and Jersey</title><content type='html'>A great post by &lt;a href="http://blogs.sun.com/sandoz/entry/mvcj"&gt;Paul Sandoz on MVCJ&lt;/a&gt;. Jersey rocks!&lt;br /&gt;&lt;br /&gt;I'm loving the simple JAX-RS POJO based programming model (quite Rails-ish) for writing controllers and models which work beautifully in a hi-RESTful way which also now support a rails-like way of implicit templates via JSP/Velocity/whatever with a minimal amount of fuss.&lt;br /&gt;&lt;br /&gt;I'm liking the controller-is-the-model-facade option with implicit MVC too; so the model is totally decoupled from the web and the controller just has a few annotations to deal with binding methods nicely to the URI/REST/content types and so forth - then you can have as many representations of a model as you want - just write views (e.g. index.jsp, detail.jsp, brief.jsp or whatever). Lovely and Rails-ish&lt;br /&gt;&lt;br /&gt;Its now pretty easy to write hi-rest web apps in Java which render content as (X)HTML, XML, JSON with nice RESTful content negotiation and using good URIs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2767736657722871021?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2767736657722871021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2767736657722871021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2767736657722871021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2767736657722871021'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/06/im-liking-jax-rs-and-jersey.html' title='I&apos;m liking JAX-RS and Jersey'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-6041802477068088578</id><published>2008-05-14T17:28:00.004Z</published><updated>2008-05-14T17:40:30.402Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq servicemix'/><title type='text'>Apache ActiveMQ 5.1 and Apache ServiceMix Kernel 1.0-m3 Released!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://activemq.apache.org/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://activemq.apache.org/activemq-500-release.data/activemq-5.x-box-reflection.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;a href="http://activemq.apache.org/activemq-510-release.html"&gt;Apache ActiveMQ 5.1.0 is now out&lt;/a&gt;. Both &lt;a href="http://bsnyderblog.blogspot.com/2008/05/apache-activemq-51-released.html"&gt;Bruce&lt;/a&gt; and &lt;a href="http://hiramchirino.com/blog/2008/05/activemq-510-release.html"&gt;Hiram&lt;/a&gt; cover this nicely - if you use ActiveMQ I'd recommend upgrading, its got tons of bug fixes.&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also things are really hotting up in the spiffy new OSGi based &lt;a href="http://servicemix.apache.org/SMX4KNL/index.html"&gt;ServiceMix Kernel&lt;/a&gt; that has just released 1.0-m3. Both &lt;a href="http://gnodet.blogspot.com/2008/05/apache-servicemix-kernel-10-m3.html"&gt;Guillaume&lt;/a&gt; and &lt;a href="http://bsnyderblog.blogspot.com/2008/05/apache-servicemix-40-kernel-milestone.html"&gt;Bruce&lt;/a&gt; have the low down. &lt;a href="http://servicemix.apache.org/kernel/download.html"&gt;Grab it&lt;/a&gt; while its hot!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully soon ActiveMQ may come built on ServiceMix Kernel by default which will certainly really help make it easy to hot-redeploy &lt;a href="http://activemq.apache.org/enterprise-integration-patterns.html"&gt;Enterprise Integration Patterns&lt;/a&gt; routing rules within the broker.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-6041802477068088578?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/6041802477068088578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=6041802477068088578' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6041802477068088578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6041802477068088578'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/05/apache-activemq-51-and-apache.html' title='Apache ActiveMQ 5.1 and Apache ServiceMix Kernel 1.0-m3 Released!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-818654236778718288</id><published>2008-05-12T18:56:00.002Z</published><updated>2008-05-12T18:58:36.480Z</updated><title type='text'>Squawk (simple queues using awk)</title><content type='html'>I loved &lt;a href="http://latrz.com/2586"&gt;this article on using awk to work with message queues&lt;/a&gt; (via &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt;) by &lt;a href="http://www.nobugs.org/blog/"&gt;Andrew Birkett&lt;/a&gt;. Just shows you can be unixy and enterprisey at the same time :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-818654236778718288?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/818654236778718288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=818654236778718288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/818654236778718288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/818654236778718288'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/05/squawk-simple-queues-using-awk.html' title='Squawk (simple queues using awk)'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-5941318552977270280</id><published>2008-04-21T13:49:00.008Z</published><updated>2008-04-25T06:50:46.335Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>Getting hooked on twitter</title><content type='html'>For a while I kept seeing twitter being mentioned and kinda thought: &lt;span class="Apple-style-span" style="font-style: italic;"&gt;why would I wanna know what some random person on the internet had for lunch?&lt;/span&gt;&lt;div&gt;I just didn't get it. I'm not totally sure I do get it yet - but I've kinda convinced myself of twitter by just thinking of it as an open IRC where you subscribe to &lt;span class="Apple-style-span" style="font-style: italic;"&gt;people&lt;/span&gt; rather than chat &lt;span class="Apple-style-span" style="font-style: italic;"&gt;rooms&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To use messaging middleware speak, I've not been the biggest fan of IM as it tends to lead to loads of point-to-point conversations with lots of duplication. I find myself saying the same thing again and again to people on IM. Plus IM feels way too invasive; I tend to hide away from IM to avoid getting hassled these days :). With IRC I can say stuff to the room instead which avoids me having to say the same thing again. Plus IRC tends to feel less invasive; I can read it when I feel like it but otherwise kinda ignore it&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Twitter so far is kinda feeling like a combination of blogs, IRC and SMS; where you subscribe to people rather than rooms which helps cut down the noise. If someone's getting annoying or boring, just stop following them. The brevity of posts (140 characters) also helps trim down the noise and fluff leaving a mostly interesting stream of kinda mini-blog-posts and banter. So far I'm hooked! :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are on OS X try out &lt;a href="http://iconfactory.com/software/twitterrific"&gt;twitterific&lt;/a&gt; as a Twitter client. While IM is a pretty reasonable way to work with twitter - I do like not running my IM client and using twitterific instead :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you have an iphone there's a bunch of clients available; so far I'm liking &lt;a href="http://www.gearlive.com/news/article/q208-twinkle-the-iphone-twitter-client/"&gt;twinkle&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Feel free to &lt;a href="http://twitter.com/jstrachan"&gt;follow me&lt;/a&gt; if you like. Also check out &lt;a href="http://twubble.net/"&gt;twubble&lt;/a&gt; as a great way to find new folks to follow - nice work crazybob!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-5941318552977270280?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/5941318552977270280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=5941318552977270280' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5941318552977270280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5941318552977270280'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/04/getting-hooked-on-twitter.html' title='Getting hooked on twitter'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-7361795192996329046</id><published>2008-04-18T13:47:00.008Z</published><updated>2008-04-18T14:03:54.600Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='appengine'/><title type='text'>Google AppEngine is very impressive!</title><content type='html'>After never having hacked any python before or looked closely at django and never having used BigTable, I spent a little over a day and managed to hack up, what is (to me anyway!)- is a very useful little web app I've wanted for a long time: &lt;a href="http://latrz.appspot.com/"&gt;http://latrz.appspot.com&lt;/a&gt;. Its highly scalable &amp;amp; available and resilient thanks to BigTable. Its kinda amazing really.&lt;br /&gt;&lt;br /&gt;Sure Amazon has lots of similar stuff at the bits and bytes level. EC2, S3, SimpleDB and the new file system stuff are cool too, don't get me wrong. For some things the power and flexibility of the Amazon offerings are great. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Though for creating web apps I love how AppEngine takes all the hassle out of figuring out how to host, load balance, deploy and manage your app. I didn't have to mess with elastic IPs or DNS or web proxies or figure out some load balancing stuff, get scalr to work or install some ninja unix file system into a vmware image that mirrors itself onto S3 or anything. I just hacked up some simple python on my laptop, tested it locally with the AppEngine SDK, typed a command into my terminal (while on a train :) and within seconds its live on googles infrastructure and working really well.&lt;br /&gt;&lt;br /&gt;I guess some web developers are gonna push back on the use of python but I'm sure google will release Java / JavaScript flavours of AppEngine soon making it not much of an issue. Who knows maybe even PHP too - not sure about Ruby though, I dunno if they've figured out how to make a ruby sandbox yet.&lt;br /&gt;&lt;br /&gt;I'm sure ultimately this is gonna be a big game changer for those making public web applications; it takes so much hassle out of making web apps - and makes creating highly scalable &amp;amp; available web apps very rapid &amp;amp; fun. Well done googlers; I'm very impressed.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-7361795192996329046?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/7361795192996329046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=7361795192996329046' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7361795192996329046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7361795192996329046'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/04/google-appengine-is-very-impressive.html' title='Google AppEngine is very impressive!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3417821979216737848</id><published>2008-04-16T12:28:00.007Z</published><updated>2008-04-16T12:39:59.224Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='latrz'/><title type='text'>Latrz - a handy web app for reading stuff later (latrz)</title><content type='html'>I've wanted something like this for the longest time! I've found when surfing, chatting online, working with email that I keep stumbling on loads of links to interesting stuff I wanna read - but just not right now - &lt;span style="font-style: italic;"&gt;later&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I've often kept open loads of FireFox windows for stuff I should read soon (which then means I struggle to find what I am currently reading/working on from stuff I wanna read later). Then I've been through phases of cutting and pasting interesting articles into files/wikis for later. I've always felt this was sucky and wanted a nicer solution.&lt;br /&gt;&lt;br /&gt;Now there's &lt;a href="http://latrz.appspot.com/"&gt;latrz&lt;/a&gt; and I confess to being totally hooked already :).&lt;br /&gt;&lt;a href="http://latrz.appspot.com/"&gt;&lt;img src="http://latrz.appspot.com/images/logo-and-text.png"/&gt;&lt;/a&gt;&lt;br /&gt;Basically if I'm on a page I know I wanna read, I click the Read Latrz bookmarket, then close the browser or carry on doing what I'm doing. Then when I've time I just click on the &lt;a href="http://latrz.appspot.com/"&gt;latrz&lt;/a&gt; site to read whatever takes my fancy, then mark it as read when I'm done to remove it from my reading list.&lt;br /&gt;&lt;br /&gt;Go on, give it a try or subscribe to the &lt;a href="http://latrz.blogspot.com/"&gt;Latrz Blog&lt;/a&gt;, you know you want to :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3417821979216737848?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3417821979216737848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3417821979216737848' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3417821979216737848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3417821979216737848'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/04/latrz-handy-web-app-for-reading-stuff.html' title='Latrz - a handy web app for reading stuff later (latrz)'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1468323498975606723</id><published>2008-04-16T12:23:00.003Z</published><updated>2008-04-16T13:18:01.013Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel scala dsl'/><title type='text'>Using Scala to create a better Camel DSL for Enterprise Integration Patterns</title><content type='html'>Gert Vanthienen has been doing some amazing work creating a &lt;a href="http://cwiki.apache.org/CAMEL/scala-dsl.html"&gt;DSL for Camel using Scala&lt;/a&gt;. I'm amazed at how neat and concise it is. Go Gert! :).&lt;br /&gt;&lt;br /&gt;I'd previously experimented with Groovy and Ruby DSLs and found them to be little more verbose (e.g. having issues of needing to pass 2 closures/blocks to methods like when or filter, one for the predicate and one for the block to execute if its true).&lt;br /&gt;&lt;br /&gt;You can grab &lt;a href="http://www.anova.be/files/camel-scala.pdf"&gt;his slides from the recent ApacheCon talk&lt;/a&gt;. I'm really liking it. The Scala use of separate syntax for functions/predicates and blocks helps improve the Camel DSL hugely&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1468323498975606723?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1468323498975606723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1468323498975606723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1468323498975606723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1468323498975606723'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/04/using-scala-to-create-camel-enterprise.html' title='Using Scala to create a better Camel DSL for Enterprise Integration Patterns'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-802986498535876917</id><published>2008-04-10T10:37:00.002Z</published><updated>2008-04-10T10:42:40.075Z</updated><title type='text'>Apache Camel 1.3.0 released with 208 new features &amp; improvements</title><content type='html'>&lt;div class="wiki-content"&gt;          &lt;p&gt;Its taken a while to get there but we've finally got the new &lt;a href="http://activemq.apache.org/camel/camel-130-release.html" title="Camel 1.3.0 Release"&gt;Camel 1.3.0 Release&lt;/a&gt; out of the door which includes 208 new features, improvements and bug fixes described below. Also as &lt;a href="http://www.davidgreco.it/MySite/Blog/Blog.html"&gt;David&lt;/a&gt; has blogged recently we've &lt;a href="http://www.davidgreco.it/MySite/Blog/Entries/2008/4/2_Camel%3A_the_MSMQ_rider.html"&gt;MSMQ support&lt;/a&gt; now along with &lt;a href="http://activemq.apache.org/camel/esper.html"&gt;Esper&lt;/a&gt; and an &lt;a href="http://code.google.com/p/camel-extra/wiki/EsperDemo"&gt;Esper Demo&lt;/a&gt;. Many thanks to all those who helped ride this beast out the door. Enjoy!&lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;improved &lt;a href="http://activemq.apache.org/camel/bean-integration.html" title="Bean Integration"&gt;Bean Integration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;improved testing via &lt;a href="http://activemq.apache.org/camel/spring-testing.html" title="Spring Testing"&gt;Spring Testing&lt;/a&gt; along with the &lt;a href="http://activemq.apache.org/camel/mock.html" title="Mock"&gt;Mock&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/test.html" title="Test"&gt;Test&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/dataset.html" title="DataSet"&gt;DataSet&lt;/a&gt; components&lt;/li&gt;&lt;li&gt;browsing of endpoints via the &lt;a href="http://activemq.apache.org/camel/browsableendpoint.html" title="BrowsableEndpoint"&gt;BrowsableEndpoint&lt;/a&gt; with support in the &lt;a href="http://activemq.apache.org/camel/jms.html" title="JMS"&gt;JMS&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/list.html" title="List"&gt;List&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/mock.html" title="Mock"&gt;Mock&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/seda.html" title="SEDA"&gt;SEDA&lt;/a&gt; and &lt;a href="http://activemq.apache.org/camel/vm.html" title="VM"&gt;VM&lt;/a&gt; components&lt;/li&gt;&lt;li&gt;improved support for message exchange patterns such as InOut for JMS&lt;/li&gt;&lt;li&gt;various improvements in &lt;a href="http://activemq.apache.org/camel/cxf.html" title="CXF"&gt;CXF&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/ibatis.html" title="iBATIS"&gt;iBatis&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/jetty.html" title="Jetty"&gt;Jetty&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/mina.html" title="MINA"&gt;MINA&lt;/a&gt; components&lt;/li&gt;&lt;li&gt;improved &lt;a href="http://activemq.apache.org/camel/xpath.html" title="XPath"&gt;XPath&lt;/a&gt; and &lt;a href="http://activemq.apache.org/camel/xquery.html" title="XQuery"&gt;XQuery&lt;/a&gt; support in Spring XML and with easier namespace configuration&lt;/li&gt;&lt;li&gt;default to more efficient JMS usage when working with &lt;span class="nobr"&gt;&lt;a href="https://issues.apache.org/activemq/browse/CAMEL-294" title="Visit page outside Confluence" rel="nofollow"&gt;Spring 2.5.x to avoid a previous Spring bug&lt;sup&gt;&lt;img class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;various improvements in the DSL and with error handling&lt;/li&gt;&lt;li&gt;improved automatic &lt;a href="http://activemq.apache.org/camel/type-converter.html" title="Type Converter"&gt;Type Converter&lt;/a&gt; implementations&lt;/li&gt;&lt;li&gt;method invocations now supported in &lt;a href="http://activemq.apache.org/camel/el.html" title="EL"&gt;EL&lt;/a&gt; expressions&lt;/li&gt;&lt;li&gt;&lt;span class="nobr"&gt;&lt;a href="http://cwiki.apache.org/CAMEL/camel-transport-for-cxf.html" title="Visit page outside Confluence" rel="nofollow"&gt;CXF transport API&lt;sup&gt;&lt;img class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt; now supported in &lt;a href="http://activemq.apache.org/camel/cxf.html" title="CXF"&gt;CXF&lt;/a&gt; component, you could leverage the power of Camel mediation in Apache CXF&lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;&lt;a name="ApacheCamel1.3.0Released!-NewComponents"&gt;&lt;/a&gt;New &lt;a href="http://activemq.apache.org/camel/components.html" title="Components"&gt;Components&lt;/a&gt;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/amqp.html" title="AMQP"&gt;AMQP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/dataset.html" title="DataSet"&gt;DataSet&lt;/a&gt; for easier load testing&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/jcr.html" title="JCR"&gt;JCR&lt;/a&gt; for JSR 170 support&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/list.html" title="List"&gt;List&lt;/a&gt; for UI and tooling integration&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/stream.html" title="Stream"&gt;Stream&lt;/a&gt; for working with input/output streams&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/test.html" title="Test"&gt;Test&lt;/a&gt; for easier functional testing&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/xquery.html" title="XQuery"&gt;XQuery&lt;/a&gt; for easy XQuery based transforms for &lt;a href="http://activemq.apache.org/camel/templating.html" title="Templating"&gt;Templating&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;&lt;a name="ApacheCamel1.3.0Released!-NewDataFormatsDataFormat"&gt;&lt;/a&gt;New &lt;a href="http://activemq.apache.org/camel/data-format.html" title="Data Format"&gt;Data Formats&lt;/a&gt;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/csv.html" title="CSV"&gt;CSV&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/xmlbeans.html" title="XmlBeans"&gt;XmlBeans&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/xstream.html" title="XStream"&gt;XStream&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;&lt;a name="ApacheCamel1.3.0Released!-NewLanguages"&gt;&lt;/a&gt;New &lt;a href="http://activemq.apache.org/camel/languages.html" title="Languages"&gt;Languages&lt;/a&gt;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/bean-language.html" title="Bean Language"&gt;Bean Language&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/jxpath.html" title="JXPath"&gt;JXPath&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;&lt;a name="ApacheCamel1.3.0Released!-NewEnterpriseIntegrationPatterns"&gt;&lt;/a&gt;New &lt;a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html" title="Enterprise Integration Patterns"&gt;Enterprise Integration Patterns&lt;/a&gt;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/load-balancer.html" title="Load Balancer"&gt;Load Balancer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/routing-slip.html" title="Routing Slip"&gt;Routing Slip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;p&gt;Please see &lt;a href="http://activemq.apache.org/camel/camel-130-release.html" title="Camel 1.3.0 Release"&gt;Release Notes&lt;/a&gt; for more details. &lt;a href="http://activemq.apache.org/camel/download.html" title="Download"&gt;Download&lt;/a&gt; it now while is hot to trot! &lt;img class="emoticon" src="http://cwiki.apache.org/confluence/images/icons/emoticons/smile.gif" alt="" align="absmiddle" border="0" height="20" width="20" /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-802986498535876917?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/802986498535876917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=802986498535876917' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/802986498535876917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/802986498535876917'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/04/apache-camel-130-released-with-208-new.html' title='Apache Camel 1.3.0 released with 208 new features &amp; improvements'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-541180452117111719</id><published>2008-03-27T18:06:00.002Z</published><updated>2008-03-27T18:10:44.621Z</updated><title type='text'>[LazyWeb] a maven plugin to find resources on your maven dependency path</title><content type='html'>Every now and again I get the dreaded log4j.properties / log4j.xml maven transitive dependency hell. Some resource is included in multiple jars so the one you think you're meant to be using isn't found first. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;e.g. you try changing the log4j levels and nothing happens. Much scratching of head occurs. Normally through frustration you shove a load of System.out.println() calls in your app :)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So the idea is how about being able to do something like&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;mvn classpath:find -Dresource=log4j.properties&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;and the plugin would search all the test scoped jars on the classpath, including transitive dependencies letting you know all the jars (and the dependency path to them) which included the resource you specified.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It'd be handy right? Any volunteers... :)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-541180452117111719?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/541180452117111719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=541180452117111719' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/541180452117111719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/541180452117111719'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/03/lazyweb-maven-plugin-to-find-resources.html' title='[LazyWeb] a maven plugin to find resources on your maven dependency path'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1977447775605915325</id><published>2008-03-18T19:14:00.004Z</published><updated>2008-03-18T19:23:36.966Z</updated><title type='text'>Writing unit tests? Give hamcrest a try</title><content type='html'>I'm not sure if its that well known but if you are writing unit tests in JUnit 3.x, 4.x or TestNG take a &lt;a href="http://code.google.com/p/hamcrest/wiki/Tutorial"&gt;look at the tutorial&lt;/a&gt;, add hamcrest-all.jar to your classpath/project/pom.xml then give &lt;a href="http://code.google.com/p/hamcrest/"&gt;hamcrest&lt;/a&gt; a spin. I think you'll like it. Here's the pom.xml change...&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;dependency&gt;&lt;/dependency&gt;&lt;/span&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;    &amp;lt;groupId&amp;gt;org.hamcrest&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;hamcrest-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;assertThat! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1977447775605915325?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1977447775605915325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1977447775605915325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1977447775605915325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1977447775605915325'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/03/writing-unit-tests-give-hamcrest-try.html' title='Writing unit tests? Give hamcrest a try'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-7105710200543899167</id><published>2008-03-14T10:14:00.004Z</published><updated>2008-03-14T10:17:56.177Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><title type='text'>If you are tinkering with VMWare on OS X</title><content type='html'>then a few links to save you a little googling. If you wanna use some of the public VMWAre images such as &lt;a href="http://jars.de/linux/ubuntu-710-vmware-image-download-english"&gt;Ubuntu 7.10 desktop&lt;/a&gt; then you might wanna use &lt;a href="http://www.bittorrent.com/"&gt;BitTorrent&lt;/a&gt; to download it, then to unpack the RAR file try &lt;a href="http://www.unrarx.com/"&gt;UnRarX&lt;/a&gt;.  I've found the nicest way to use VMWare on Leopard is to run each VM image in a separate Space in full screen mode which is pretty neat...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-7105710200543899167?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/7105710200543899167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=7105710200543899167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7105710200543899167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7105710200543899167'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/03/if-you-are-tinkering-with-vmware-on-os.html' title='If you are tinkering with VMWare on OS X'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-9023044303474060741</id><published>2008-03-07T12:01:00.002Z</published><updated>2008-03-07T12:04:18.329Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='uface'/><title type='text'>UFace getting hotter</title><content type='html'>Check out &lt;a href="http://tom-eclipse-dev.blogspot.com/"&gt;Tom&lt;/a&gt;'s report on the &lt;a href="http://tom-eclipse-dev.blogspot.com/2008/03/uface-update.html"&gt;latest improvements in UFace&lt;/a&gt; - pretty neat eh. Also using CSS cross web apps, Swing and Eclipse is hot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-9023044303474060741?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/9023044303474060741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=9023044303474060741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9023044303474060741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/9023044303474060741'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/03/uface-getting-hotter.html' title='UFace getting hotter'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2604251973660242179</id><published>2008-02-15T13:27:00.006Z</published><updated>2008-02-15T16:14:18.980Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel spring testing'/><title type='text'>Easier Integration &amp; Pattern testing with Camel and Spring 2.5</title><content type='html'>I'm really liking the &lt;a href="http://static.springframework.org/spring/docs/2.5.x/reference/testing.html#testcontext-framework"&gt;testing features in Spring 2.5.x&lt;/a&gt; for easier unit testing with JUnit 3.8, 4.x or TestNG using Spring to do all your dependency injection before invoking your test classes.&lt;br /&gt;&lt;br /&gt;I've just created a little document to show &lt;a href="http://cwiki.apache.org/CAMEL/spring-testing.html"&gt;how to use Spring Testing with Camel, using the Camel Mock and Test endpoints&lt;/a&gt; for easier &lt;a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html"&gt;Enterprise Integration Pattern&lt;/a&gt; based testing. Incidentally Camel now has a new little &lt;a href="http://cwiki.apache.org/CAMEL/test.html"&gt;Test&lt;/a&gt; endpoint which creates a &lt;a href="http://cwiki.apache.org/CAMEL/mock.html"&gt;Mock&lt;/a&gt; endpoint that automatically pulls its expected message bodies from another endpoint and auto-wires up the expectations for easier testing with minimal coding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2604251973660242179?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2604251973660242179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2604251973660242179' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2604251973660242179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2604251973660242179'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/02/easier-eip-testing-with-camel-and.html' title='Easier Integration &amp; Pattern testing with Camel and Spring 2.5'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2712159158653472107</id><published>2008-02-15T13:23:00.002Z</published><updated>2008-02-15T13:27:10.565Z</updated><title type='text'>Public Training on Apache ActiveMQ and Apache ServiceMix</title><content type='html'>As Bruce &lt;a href="http://bsnyderblog.blogspot.com/2008/02/public-training-for-activemq-and.html"&gt;mentioned&lt;/a&gt; IONA is offering some public &lt;a href="http://open.iona.com/enterprise-support/public-training/"&gt;training courses on Apache ActiveMQ and Apache ServiceMix&lt;/a&gt; on the following dates for the first two...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;London,UK - March 11-14&lt;/li&gt;&lt;li&gt;Waltham, MA - March 17-20&lt;/li&gt;&lt;/ul&gt;If you're using either ActiveMQ or ServiceMix then these training courses are highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2712159158653472107?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2712159158653472107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2712159158653472107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2712159158653472107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2712159158653472107'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/02/public-training-on-apache-activemq-and.html' title='Public Training on Apache ActiveMQ and Apache ServiceMix'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8296305247724201325</id><published>2008-02-06T18:05:00.000Z</published><updated>2008-02-08T07:28:41.602Z</updated><title type='text'>Using Apache Camel, ActiveMQ and Esper for Complex Event Processing</title><content type='html'>David Greco just checked in a &lt;a href="http://code.google.com/p/camel-extra/wiki/EsperDemo"&gt;cute little demo&lt;/a&gt; that shows how to work with &lt;a href="http://activemq.apache.org/camel/"&gt;Apache Camel&lt;/a&gt; for &lt;a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html"&gt;Enterprise Integration Patterns&lt;/a&gt;, &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt; as the message broker and Esper for &lt;a href="http://en.wikipedia.org/wiki/Complex_event_processing"&gt;Complex Event Processing&lt;/a&gt;. Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;: &lt;a href="http://www.davidgreco.it/MySite/Blog/Blog.html"&gt;David&lt;/a&gt; bas &lt;a href="http://www.davidgreco.it/MySite/Blog/Entries/2008/2/4_I%C3%A2%C2%80%C2%99m_a_Camel_rider_%21.html"&gt;blogged&lt;/a&gt; about this too :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8296305247724201325?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8296305247724201325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8296305247724201325' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8296305247724201325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8296305247724201325'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/02/using-apache-camel-activemq-and-esper.html' title='Using Apache Camel, ActiveMQ and Esper for Complex Event Processing'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-795609368547722757</id><published>2008-02-04T09:25:00.000Z</published><updated>2008-02-04T09:28:48.305Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='relaxng'/><category scheme='http://www.blogger.com/atom/ns#' term='wsdl'/><title type='text'>rest-ws looks great</title><content type='html'>I've long been a &lt;a href="http://macstrac.blogspot.com/2007/05/why-isnt-relaxng-compact-syntax-more.html"&gt;fan&lt;/a&gt; of &lt;a href="http://relaxng.org/compact-tutorial-20030326.html"&gt;RelaxNG Compact Syntax&lt;/a&gt; (I guess RNC is the abbreviation) over XSDs. Now to avoid folks struggling with XSDs and WSDLs in nasty verbose angle brackets, there's the rather nice looking &lt;a href="http://code.google.com/p/relax-ws/"&gt;relax-ws&lt;/a&gt;. Now we just need a nice eclipse plugin... Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-795609368547722757?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/795609368547722757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=795609368547722757' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/795609368547722757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/795609368547722757'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/02/rest-ws-looks-great.html' title='rest-ws looks great'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-6311962021572031746</id><published>2008-01-21T10:37:00.000Z</published><updated>2008-01-21T10:37:32.096Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='confluence'/><title type='text'>[LazyWeb] using Subversion as a front end to Confluence?</title><content type='html'>I hack a lot of Confluence spaces as part of my &lt;a href="http://open.iona.com/"&gt;job&lt;/a&gt;. I've been working on the &lt;a href="http://code.google.com/p/uface/"&gt;UFace&lt;/a&gt; project at Google Code so I've been getting used to the Google way.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the great things about &lt;a href="http://code.google.com/p/"&gt;google code&lt;/a&gt; is that the wiki is in subversion as *.wiki files; so you can edit them in any text editor (and &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; comes with great MoinMoin syntax support, you just have to install the bundle...). So you can grab your wiki content, jump on a plane, hack it with your favourite editor then check in your changes when you're next online.&lt;br /&gt;&lt;br /&gt;I wonder how hard it'd be to sync Confluence content with a subversion repo; so folks could still use the online Confluence site to edit content, which would get mirrored to an svn repo as *.wiki files - then folks could commit to the svn repo to update the confluence database? Anyone ever tried?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-6311962021572031746?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/6311962021572031746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=6311962021572031746' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6311962021572031746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6311962021572031746'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/12/lazyweb-using-subversion-as-front-end.html' title='[LazyWeb] using Subversion as a front end to Confluence?'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-894861794982052587</id><published>2008-01-18T17:03:00.001Z</published><updated>2008-01-18T17:04:58.717Z</updated><title type='text'>bored of your OS X desktop? Try DeskLickr</title><content type='html'>&lt;a href="http://www.apple.com/downloads/macosx/icons_screensavers/desklickr.html"&gt;DeskLickr rocks!&lt;/a&gt; Have your desktop change every few minutes/hours using a nice new picture from &lt;a href="http://flickr.com/"&gt;flickr&lt;/a&gt; using tagged queries. Neat!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-894861794982052587?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/894861794982052587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=894861794982052587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/894861794982052587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/894861794982052587'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/01/bored-of-your-os-x-desktop-try.html' title='bored of your OS X desktop? Try DeskLickr'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-234848723275924494</id><published>2008-01-17T10:27:00.000Z</published><updated>2008-01-17T12:30:15.015Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Quick review of Leopard, the latest OS X</title><content type='html'>I finally bought and upgraded to &lt;a href="http://www.apple.com/macosx/"&gt;Leopard&lt;/a&gt;. Am liking it so far; Spaces is nice (though with a 30" and my 17" screens, I don't need many spaces, am mostly using a separate space for mail). The neatest thing of Spaces is when you use Expose to view your spaces (I'm using the move the mouse to the bottom right corner gesture), it shows both my 2 screens aligned for each space where I can drag and drop between both screens and spaces.&lt;br /&gt;&lt;br /&gt;I love the new look and Cover Flow on Finder; don't much use the Dock as I use &lt;a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver"&gt;QuickSilver&lt;/a&gt; so the Stacks stuff doesn't get used.&lt;br /&gt;&lt;br /&gt;I've gotta wait for me to buy a &lt;a href="http://www.apple.com/timecapsule/"&gt;TimeCapsule&lt;/a&gt; before I can try out TimeMachine which does look cool. Apple are so good at sucking money out of my pocket :). Am gonna have to buy an Apple TV now too.... Wonder how long before they'll support the UK on movie rentals.&lt;br /&gt;&lt;br /&gt;So far I still prefer &lt;a href="http://iterm.sourceforge.net/"&gt;iTerm&lt;/a&gt; to Terminal due to it being able to have preconfigured named shells &amp;amp; starting directories (I've often got tons of shells open).&lt;br /&gt;&lt;br /&gt;The upgrade was great; I just installed the DVD, kicked off the install and came back later and it was all completed.&lt;br /&gt;&lt;br /&gt;So far the only real nit was bash shells lost their prompt, so I had to add this to my .bashrc&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;export PS1="\w&gt; "&lt;/blockquote&gt;Not an amazing upgrade or anything, but I am preferring Leopard.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt; : I've just noticed &lt;a href="http://en.wikipedia.org/wiki/TextEdit"&gt;TextEdit now opens OpenDoc files natively&lt;/a&gt; - nice!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-234848723275924494?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/234848723275924494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=234848723275924494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/234848723275924494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/234848723275924494'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/01/quick-review-of-leopard-latest-os-x.html' title='Quick review of Leopard, the latest OS X'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-5369982418560074007</id><published>2008-01-16T16:41:00.000Z</published><updated>2008-01-17T10:40:52.450Z</updated><title type='text'>OpenSnoop is pretty handy!</title><content type='html'>See the &lt;a href="http://theappleblog.com/2008/01/14/hidden-gems-in-leopard-opensnoop/"&gt;details of how to use it&lt;/a&gt; on &lt;a href="http://www.apple.com/macosx/"&gt;Leopard&lt;/a&gt;. I just used it to track the progress of my &lt;a href="http://macstrac.blogspot.com/2007/11/s3sync-rocks.html"&gt;S3 online backup&lt;/a&gt; which was most useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-5369982418560074007?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/5369982418560074007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=5369982418560074007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5369982418560074007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5369982418560074007'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/01/opensnoop-is-pretty-handy.html' title='OpenSnoop is pretty handy!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1473248799999035887</id><published>2008-01-10T21:58:00.000Z</published><updated>2008-01-10T22:01:31.202Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='uface'/><category scheme='http://www.blogger.com/atom/ns#' term='jface'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='swing'/><category scheme='http://www.blogger.com/atom/ns#' term='mygwt'/><category scheme='http://www.blogger.com/atom/ns#' term='gwtext'/><title type='text'>Develop rich UI applications in Eclipse/JFace, Swing, GWT, GWT-Ext or MyGWT using the same code via UFace</title><content type='html'>&lt;a href="http://code.google.com/p/uface/"&gt;UFace&lt;/a&gt; is hot! Its early days &amp;amp; needs more work, but check out &lt;a href="http://tom-eclipse-dev.blogspot.com/"&gt;Tom&lt;/a&gt;'s post on &lt;a href="http://tom-eclipse-dev.blogspot.com/2008/01/one-month-of-ufacekit-development.html"&gt;UFace progress&lt;/a&gt; - or even better come along and join the fun :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1473248799999035887?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1473248799999035887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1473248799999035887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1473248799999035887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1473248799999035887'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2008/01/develop-rich-ui-applications-in.html' title='Develop rich UI applications in Eclipse/JFace, Swing, GWT, GWT-Ext or MyGWT using the same code via UFace'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-7260734462174910878</id><published>2007-12-17T12:04:00.001Z</published><updated>2007-12-17T12:06:58.085Z</updated><title type='text'>Apache ActiveMQ 5.0.0 Released!</title><content type='html'>As Rob &lt;a href="http://rajdavies.blogspot.com/2007/12/apache-activemq-50-released.html"&gt;mentioned&lt;/a&gt;, its taken quite a while but I'm very pleased to say that the Apache &lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/ActiveMQ+5.0.0+Release" title="ActiveMQ 5.0.0 Release"&gt;ActiveMQ 5.0.0 Release&lt;/a&gt; has been made! Its packed with &lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/New+Features+in+5.0" title="New Features in 5.0"&gt;a ton of new features&lt;/a&gt;; I'm most happy about the awesome integrated support for &lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/Enterprise+Integration+Patterns" title="Enterprise Integration Patterns"&gt;Enterprise Integration Patterns&lt;/a&gt; via the &lt;span class="nobr"&gt;&lt;a href="http://activemq.apache.org/camel/" title="Visit page outside Confluence" rel="nofollow"&gt;Camel Integration&lt;/a&gt;&lt;/span&gt;. There's a bunch of other new features...&lt;br /&gt;&lt;div class="wiki-content"&gt;  &lt;ul&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/AMQ+Message+Store" title="AMQ Message Store"&gt;AMQ Message Store&lt;/a&gt; (Faster Persistence!)&lt;/li&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/Message+Cursors" title="Message Cursors"&gt;Message Cursors&lt;/a&gt; (Producers don't block if you have a slow consumer)&lt;/li&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/Blob+Messages" title="Blob Messages"&gt;Blob Messages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/Command+Agent" title="Command Agent"&gt;Command Agent&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/Enterprise+Integration+Patterns" title="Enterprise Integration Patterns"&gt;Enterprise Integration Patterns&lt;/a&gt; via &lt;span class="nobr"&gt;&lt;a href="http://activemq.apache.org/camel/" title="Visit page outside Confluence" rel="nofollow"&gt;Camel Integration&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/Logging+a+warning+if+you+forget+to+start+a+Connection" title="Logging a warning if you forget to start a Connection"&gt;Logging a warning if you forget to start a Connection&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/Message+Transformation" title="Message Transformation"&gt;Message Transformation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/Mirrored+Queues" title="Mirrored Queues"&gt;Mirrored Queues&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/ACTIVEMQ/Producer+Flow+Control" title="Producer Flow Control"&gt;Producer Flow Control&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-7260734462174910878?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/7260734462174910878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=7260734462174910878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7260734462174910878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/7260734462174910878'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/12/apache-activemq-500-released.html' title='Apache ActiveMQ 5.0.0 Released!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8229545519512812995</id><published>2007-12-10T15:23:00.000Z</published><updated>2007-12-10T17:22:21.703Z</updated><title type='text'>Apache Camel Integration Framework webcast tomorrow!</title><content type='html'>If you fancy popping by, do checkout tomorrow's WebCast I'll be giving with &lt;a href="http://rajdavies.blogspot.com/"&gt;Rob&lt;/a&gt; on &lt;a href="http://www.iona.com/forms/ossp3.htm"&gt;Apache Camel, the Spring based Integration Framework&lt;/a&gt; and implementation of the &lt;a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html"&gt;Enterprise Integration Patterns&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'll post a link to the archive once its available...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8229545519512812995?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8229545519512812995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8229545519512812995' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8229545519512812995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8229545519512812995'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/12/apache-camel-integration-framework.html' title='Apache Camel Integration Framework webcast tomorrow!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2385882507899668766</id><published>2007-11-29T09:27:00.000Z</published><updated>2007-11-29T10:28:38.344Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='ikvm'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>.Net, web browsers and Android should be certified Java Kernel platforms</title><content type='html'>So I saw &lt;a href="http://apsblog.burtongroup.com/2007/11/why-microsoft-l.html"&gt;Why Microsoft Loves Google's Android&lt;/a&gt; (via &lt;a href="http://www.innoq.com/blog/st/"&gt;Stefan&lt;/a&gt;) and I couldn't help thinking of the complete opposite position.&lt;br /&gt;&lt;br /&gt;Imagine something totally different for a second. You're working at a software house making business applications for your users. You want your stuff to run everywhere, so you use Java on the server. Though you need to do some Office hackery, or maybe you wanna do some Windows specific Silverlight stuff or you've bought in to the MS hype about any day now the words really gonna go Rich Client so you better ditch Java and do .Net or else. So the .Net platform gets more tempting as a development platform to get all the MS crack.&lt;br /&gt;&lt;br /&gt;So what do you do? Use Java and .Net and hire both .Net guys and Java guys then deal with rewriting code on both languages/platforms and training your folks on both stuff? Or have two different teams? Or just pick one standard language/platform/IDE etc. The temptation might be to go with more and more .Net - maybe even just .Net. And you know what - thats what MS want! To tempt you with all this Office / Windows / Silverlight crack so you stray from your nice open Java platform to be locked into this Windows / Office monopoly. They want you to leave the Java ecosystem and move over to the dark side.&lt;br /&gt;&lt;br /&gt;However there's this thing called &lt;a href="http://ikvm.net/"&gt;IKVM&lt;/a&gt; which is awesome - it effectively turns .Net into a Java Platform. Yes you read that right. You can take any Java bytecode and turn it into a normal .Net assembly of IL stuff and it runs like any other .Net thing. With .Net glasses on it looks just like .Net. However with your Java glasses on, its still standard Java code and it looks just like a Java platform. What IKVM does is take Java bytecode and translate it into .Net IL. For years its been able to run &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt; (via &lt;a href="http://dotnetjunkies.com/WebLog/csteen/archive/2004/08/20/22813.aspx"&gt;Christopher Steen&lt;/a&gt; back in 2004!), &lt;a href="http://tomcat.apache.org/"&gt;Tomcat&lt;/a&gt; and yes, even &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; (think of all that native stuff in there for JFace, SWT).&lt;br /&gt;&lt;br /&gt;Indeed with a bit of work (and particularly if Harmony and IKVM got together), .Net could actually get certified as a Java platform! Imagine that for a second. One of the main monopolies trying to tempt developers away from Java to lock them in to their proprietary windows/office platform could actually be a certified Java platform!&lt;br /&gt;&lt;br /&gt;What would be really cool is if someone started to build open source APIs to abstract all the Windows / Office stuff using interfaces; so you could deploy on native .Net and use the real MS goodies - but folks could implement those APIs using open source or open alternatives like OpenOffice or Google Docs / Sheet or whatnot. i.e. remove the lock-in and reasons for switching to .Net.&lt;br /&gt;&lt;br /&gt;I remember having a bit of a heated discussion with Graham Hamilton on this point at the first &lt;a href="http://www.tbray.org/ongoing/When/200x/2004/12/08/DynamicJava"&gt;Sun Dynamic Language conference&lt;/a&gt;; his oppinion was that Java should remain 100% pure and be a single certified platform. I certainly see the value in this.&lt;br /&gt;&lt;br /&gt;However another perspective to think of is the developer; and extending the Java platform to as many environments as is possible so that developers never have to leave the Java ecosystem even if they wish to develop on some platform which is not 100% pure and certified to run the "entire Java platform" - e.g. say you don't need AWT, Swing, RMI and CORBA. (Though now I work for &lt;a href="http://open.iona.com/"&gt;IONA&lt;/a&gt; I now realise - CORBA rocks! :-)&lt;br /&gt;&lt;br /&gt;As a developer in the Java platform ecosystem, its awesome to be able to use a Java IDE and tooling (with other languages for the JVM too like Groovy &amp;amp; Ruby etc) then deploy that same Java code on any certified Java platform &lt;span style="font-weight: bold;"&gt;plus&lt;/span&gt; these other huge platforms:-&lt;br /&gt;&lt;ul&gt;&lt;li&gt;.Net via IKVM which also means inside Office / WCF etc&lt;br /&gt;&lt;/li&gt;&lt;li&gt;inside any modern web browser without a JVM via JavaScript using &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;as a C library using &lt;a href="http://gcc.gnu.org/java/"&gt;gcj&lt;/a&gt; so folks in unix/c land can use your stuff&lt;/li&gt;&lt;li&gt;on a mobile phone via &lt;a href="http://code.google.com/android/"&gt;Android&lt;/a&gt; on a platform optimised for phones&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;In each case today, these different platforms are huge and extremely useful. They extend the reach of the Java ecosystem (basically the bytecode) to run all over the place and avoid lock in by folks like MS to their proprietary platforms. They extend the reach of what it means to "write once and run everywhere" to more and more places including .Net, JavaScript browsers, mobile phones and shared libraries for C hackers. In each case, they take Java code written to a subset of the Java Platform and translate the code to run on another platform.&lt;br /&gt;&lt;br /&gt;However today none of these are certified Java platforms.&lt;br /&gt;&lt;br /&gt;Now lets talk a little bit about the "Java Platform"; its got a ton of stuff in there that noone really cares about any more. e.g. AWT / Swing is of no value to any of these 4 platforms I just mentioned. (I personally see GWT as a long term replacement for AWT / Swing / SWT)&lt;br /&gt;&lt;br /&gt;The Java ecosystem is huge and diverse. IMHO core of Java (java.lang and java.util) should be separated out and made easily certifiable - say called the Java Kernel to indicate its the core language / VM only and not stuff on top like AWT/Swing/RMI/CORBA (that few folks care about any more).&lt;br /&gt;&lt;br /&gt;Then we could say that any web browser with JavaScript, the .Net platform, C libraries and Android &amp;amp; mobile phones are all certified Java Kernel platforms; so there's not really any fragmentation like Richard thinks - and its a win-win for the Java ecosystem, extending the reach of the ecosystem to more and more places and further reducing the chances of fragmenting the Java ecosystems (since its not really a fork as Richard thinks - its just a smaller subset).&lt;br /&gt;&lt;br /&gt;So I'm all for different platforms which might not support all of J2SE - but do support  java.lang and java.util and the Java bytecodes - and I fail to see how tempting more and more folks to stick inside the Java ecosystem, whether its JRuby on Rails, Grails, Android, GWT or whatnot - is nothing but a good thing for the Java ecosystem and a very bad thing for the MS lock-in strategy.&lt;br /&gt;&lt;br /&gt;While I'm on a long ramble - I thought I'd mention another of my long term irritations with this 100% pure approach. The Java platform (or Java Kernel platform :) should have amazing C integration for those rare cases when you really need it. There's a ton of great stuff available in  native libraries only thats a total PITA to work with in the Java ecosystem. Platforms like Python, Ruby and .NET are still leagues ahead of the Java ecosystem at working with native libraries and sometimes you really need to. Of course we try to stick to 100% pure when we can but you know, sometimes the real world jumps in and we need to step outside the 100% pure mantra.&lt;br /&gt;&lt;br /&gt;So in summary - I salute IKVM, gcj, GWT and Android - I hope more and more people figure out neat ways of expanding the reach so the same Java bytecode can run in more and more places than we previously thought possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2385882507899668766?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2385882507899668766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2385882507899668766' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2385882507899668766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2385882507899668766'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/net-should-be-certified-java-platform.html' title='.Net, web browsers and Android should be certified Java Kernel platforms'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3472200883885167609</id><published>2007-11-26T14:15:00.001Z</published><updated>2007-11-27T14:19:59.961Z</updated><title type='text'>Prism rocks! (Create desktop apps for web apps)</title><content type='html'>Many thanks to &lt;a href="http://www.nighttale.net/"&gt;Dejan&lt;/a&gt; who &lt;a href="http://www.nighttale.net/links/links-for-2007-10-26.html"&gt;blogged about this&lt;/a&gt; - but &lt;a href="http://labs.mozilla.com/featured-projects/#prism"&gt;Prism&lt;/a&gt; rocks. I can now use Expose /  Tab to switch between Gmail windows and other FireFox/Safari windows. I've been using it for a day so far and am really liking it. I've often got a ton of windows open in safari/firefox and frequently just wanna switch back to GMail.&lt;br /&gt;&lt;br /&gt;Changes I'd like to see&lt;br /&gt;&lt;ul&gt;&lt;li&gt;support multiple Prism executables to run concurrently. e.g. GMail, GoogleReader, GCal, JIRA could all be apps&lt;/li&gt;&lt;li&gt;allow the icons to be easily customized for when switching with TAB or adding things to the dock.&lt;/li&gt;&lt;/ul&gt;But so far, its looking good!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt; - many thanks to &lt;a href="profile/04987092211724707506" onclick="" rel="nofollow"&gt;Dave Brondsema&lt;/a&gt;  who mentioned in the comments that you can have multiple webapps running with custom icons using the provided bundes from &lt;a href="http://wiki.mozilla.org/Prism#Bundles" rel="nofollow"&gt;http://wiki.mozilla.org/Prism#Bundles&lt;/a&gt;&lt;br /&gt;Though I tried them and they didn't wor for me too well on the Mac (I've not upgraded to Leopard yet :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3472200883885167609?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3472200883885167609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3472200883885167609' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3472200883885167609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3472200883885167609'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/prism-rocks-create-desktop-apps-for-web.html' title='Prism rocks! (Create desktop apps for web apps)'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-597595982330434286</id><published>2007-11-26T08:46:00.000Z</published><updated>2007-11-26T08:49:10.354Z</updated><title type='text'>ActiveMQ webinar archive available</title><content type='html'>Our &lt;a href="http://macstrac.blogspot.com/2007/11/webcast-today-on-apache-activemq.html"&gt;previously announced webinar on ActiveMQ&lt;/a&gt; is now available on &lt;a href="http://open.iona.com/resources/video-archived-webinars/"&gt;IONA's webinar and screencast archive&lt;/a&gt;. You can &lt;a href="https://cc.readytalk.com/play?id=go5pfj81"&gt;view it here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-597595982330434286?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/597595982330434286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=597595982330434286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/597595982330434286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/597595982330434286'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/activemq-webinar-archive-available.html' title='ActiveMQ webinar archive available'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2200301118864344169</id><published>2007-11-26T08:44:00.000Z</published><updated>2007-11-26T08:46:18.836Z</updated><title type='text'>Nicer iPhone URLs for google stuff...</title><content type='html'>I still prefer reading email via the web client for gmail on my iphone; for fellow iphoners, you might wanna try the &lt;a href="http://mail.google.com/mail/x/"&gt;optimised gmail client for mobiles&lt;/a&gt;. There's also a nice Google Reader &lt;a href="http://www.google.com/reader/m/view/"&gt;specialised for mobile browsers&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2200301118864344169?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2200301118864344169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2200301118864344169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2200301118864344169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2200301118864344169'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/nicer-iphone-urls-for-google-stuff.html' title='Nicer iPhone URLs for google stuff...'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-6948835939296895803</id><published>2007-11-14T14:18:00.001Z</published><updated>2007-11-14T19:43:38.291Z</updated><title type='text'>More thoughts on RESTful Message Queues</title><content type='html'>Just a small follow up on my previous &lt;span style="font-size:100%;"&gt;&lt;a style="font-weight: normal;" href="http://macstrac.blogspot.com/2007/08/pure-restful-api-to-activemq-via.html"&gt;Pure RESTful API to ActiveMQ via AtomPub&lt;/a&gt;&lt;/span&gt;. AtomPub rocks and all - I was thinking whats the easiest possible RESTful client to subscribe to a message queue.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;GET queues/foo.bar?user=myUniqueId&amp;amp;timeout=5000&lt;/blockquote&gt;This would activate my subscription to the queue &lt;span style="font-style: italic;"&gt;foo.bar&lt;/span&gt; (or help to keep it alive) and return my own list of messages as an Atom feed that I am allowed to view and DELETE when I have consumed them.&lt;br /&gt;&lt;br /&gt;This operation is idempotent and would work great with proxies and caches (assuming the right HTTP headers / ETags stuff) letting clients to keep GETing as often as they like. Though if you don't use the subscription for period of time, your subscription can go stale and timeout; any messages in your message collection could be removed.&lt;br /&gt;&lt;br /&gt;The slightly smelly thing here is we need to either use cookies (such as for HTTP session handling with servlets) or use a custom session ID header in the URL to uniquely differentiate the subscriptions. Anyone got a better idea?&lt;br /&gt;&lt;br /&gt;I guess we could demand that clients PUT/POST to get a new Location URL on which to GET their subscriptions; but this would require a custom REST client.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-6948835939296895803?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/6948835939296895803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=6948835939296895803' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6948835939296895803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/6948835939296895803'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/more-thoughts-on-restful-message-queues.html' title='More thoughts on RESTful Message Queues'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8132857663967818867</id><published>2007-11-13T15:30:00.000Z</published><updated>2007-11-13T16:40:47.166Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><title type='text'>Feedback on my Camel talk at the IJTC conference</title><content type='html'>Thanks to &lt;a href="http://capedcrusading.blogspot.com/"&gt;John&lt;/a&gt; for the &lt;a href="http://capedcrusading.blogspot.com/2007/11/ijtc-conference-spring-grails-camel.html"&gt;great feedback on my Camel talk&lt;/a&gt; (and other talks too). I started to write a huge reply and figured I'd post it here instead then link to it as its easier to reply to different parts.&lt;br /&gt;&lt;blockquote&gt;Camel itself is not an ESB per-se, it is a component of an ESB &lt;/blockquote&gt;Agreed. The idea is Camel does the routing and &lt;a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html" title="Enterprise Integration Patterns"&gt;Enterprise Integration Patterns&lt;/a&gt; - you can then use it inside a web service stack like &lt;span class="nobr"&gt;&lt;/span&gt;&lt;a href="http://incubator.apache.org/cxf/" title="Visit page outside Confluence" rel="nofollow"&gt;Apache CXF&lt;/a&gt;, a message broker like &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;span class="nobr"&gt;&lt;a href="http://activemq.apache.org/" title="Visit page outside Confluence" rel="nofollow"&gt;Apache ActiveMQ&lt;/a&gt;&lt;/span&gt; or an ESB like&lt;span class="nobr"&gt;&lt;a href="http://incubator.apache.org/servicemix/" title="Visit page outside Confluence" rel="nofollow"&gt; Apache ServiceMix&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;1. One of the key messages that came out of the session was how Java-centric the Camel solution is - Strachan went so far as to articulate the view that coding in XML was a fundamentally bad idea.&lt;br /&gt;&lt;/blockquote&gt;Maybe being the author of &lt;a href="http://commons.apache.org/jelly/"&gt;Jelly&lt;/a&gt; and hating writing XSLT has made me a bit too sensitive to the idea of programming by XML. Quite a few customers I talk with report frustration of too much XML hacking with Spring (which is being addressed in Guice and Spring 2.5). But heck if you like programming in XML be my guest :)&lt;br /&gt;&lt;blockquote&gt;He went on to cast aspersions on graphical tools also. His clear preference was that integration logic should be written in Java. Given that I have worked with highly skilled Java developers for many years now I was not too surprised to hear this - many good developers shy away from tooling, seeing it as compromising their style or the power of the underlying framework - hence the longevity of vi and emacs I suppose.&lt;br /&gt;&lt;/blockquote&gt;I didn't mean to cast aspersions on graphical tools; more that pretty much all developers understand Java these days, its pretty universal - whereas most complex graphical tools require a fair amount of learning to get used to them.&lt;br /&gt;&lt;br /&gt;Personally I totally prefer writing in Java rather than XML or using visual tooling but one of the main requirements of Camel is that you can configure and specify routes in any way you like - via a graphical IDE (e.g. Cimero) or via XML or Java or Groovy or Ruby or one day hopefully a real DSL. Using XML is quite useful as you can just drop your routing rules inside a spring XML file such as inside the &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;span class="nobr"&gt;&lt;a href="http://activemq.apache.org/" title="Visit page outside Confluence" rel="nofollow"&gt;Apache ActiveMQ&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So we're working hard to allow folks to specify routing rules however they like - despite what I prefer :). Irrespective of how you write your routing rules, we can &lt;a href="http://activemq.apache.org/camel/visualisation.html"&gt;visualise them&lt;/a&gt; so anyone can easily understand them.&lt;br /&gt;&lt;blockquote&gt;However it is important to note that all developers are not middleware experts and have no wish to be. Indeed the enterprises they work for want their developers to spend as little time and effort as possible on middleware plumbing. They need and demand tools which will enable them to get at least 80% of patterns done without having to understand the middleware architecture, it's threading model,&lt;br /&gt;&lt;/blockquote&gt;Thats one of the main things we're trying to attempt with Camel - letting folks who are not middleware experts easily use the &lt;a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html" title="Enterprise Integration Patterns"&gt;Enterprise Integration Patterns&lt;/a&gt;  using a single line of Java code - using &lt;a href="http://activemq.apache.org/camel/components.html"&gt;any transport or component &lt;/a&gt;with minimal configuration required.&lt;br /&gt;&lt;blockquote&gt;it's support for configurable expression languages etc.&lt;br /&gt;&lt;/blockquote&gt;I find it hard to understand how any tool can be usable by folks without some kind of expression language that they understand - whether its Java or SQL or XPath/XQuery or whatnot. Even a visual query definer is a language that users need to know.&lt;br /&gt;&lt;blockquote&gt;Most people express their requirements in a declarative way- I have data at A that needs to get to B, on it's way I need to perform transformation, validation, logging etc. (indeed the EIP book itself does this) . However Camel has taken a very Java centric approach and I think this increases it's complexity unnecessarily.&lt;br /&gt;&lt;/blockquote&gt;We are actually trying to be as declarative as possible - don't let the fact that you can use Java as the DSL confuse you. e.g. here's what you just described in Camel using a single line of Java code...&lt;br /&gt;&lt;blockquote&gt;from(a).&lt;br /&gt;to("xsd:org/cheese/something.xsd").&lt;br /&gt;to("xslt:com/acme/mytransform.xsl").&lt;br /&gt;to("log:com.acme.MyLogger").&lt;br /&gt;to(b);&lt;br /&gt;&lt;/blockquote&gt;Its hard to be more concise than that in Java code. But sure - you could use some other language or XML or UI tool etc&lt;br /&gt;&lt;blockquote&gt;2. Camel presents transports as nice-simple looking endpoint URIs in Java. However configuration of these transports may not be as simple as it seems. There appears to me to be a potential disconnection between the Camel processors and the Camel Components in terms of configuration.&lt;br /&gt;&lt;/blockquote&gt;You can always configure anything in Camel via Java or Spring; a component, endpoint, processor etc. The URI is just a shorthand notation for configurating things; which tends to work well with endpoints as usually all the smart configuration is in the component.&lt;br /&gt;&lt;blockquote&gt;In the presentation processors use endpoints which can be configured using Spring within Camel. However it would appear that many of the component implementations are inherited from ServiceMix and these properties will need to be set presumably within the ServiceMix container configuration? &lt;/blockquote&gt;Not so - all the components are configured in Spring via Camel. If you want to talk to ServiceMix components and endpoints you can use the NMR and the &lt;a href="http://activemq.apache.org/camel/jbi.html"&gt;JBI endpoint&lt;/a&gt;.&lt;br /&gt;&lt;blockquote&gt;When you have multiple XML configurations to use a transport then the pretty looking URI is hiding a lot of complexity under the hood.&lt;br /&gt;&lt;/blockquote&gt;I hear you. We've tried very hard to make things as easy as is possible with minimal configuration; for example most configuration tends to be on the Component rather than the Endpoint. But you can configure things however you like in Java code or Guice or Spring.&lt;br /&gt;&lt;blockquote&gt;3. Some of the pattern implementations look a little short on credibility - take the aggregator pattern for example the "aggregator" pattern does not seem to have the concept of a store - so in essence one must have access to all of the messages which require aggregation or must hold aggregations in memory for the configurable timeout period. This will clearly not work in a scalable way. Likewise as regards clustering - if you are looking to aggregate 2 messages and they turn up on different servers you gotta problem.&lt;/blockquote&gt;You're right I purposely missed out some of the detail on a few slides (such as specifying some kind of persistence store or strategy for aggregator or for idempotent consumer) but that is easily done via a pluggable strategies Spring beans. However just because I missed out some detail on some slides (its kinda hard in an hour to present all the detail in all the patterns as well as the rest of Camel) please don't think that somehow Camel isn't short on capabilities.&lt;br /&gt;&lt;blockquote&gt;To summarise Camel is clearly a worthy set of widgets and they will work for very simple applications without Enterprise requirements.&lt;br /&gt;&lt;/blockquote&gt;Ouch :). We've actually lots of customers using Camel today in production with very Enterprise requirements. &lt;span class="nobr"&gt;&lt;/span&gt;&lt;a href="http://activemq.apache.org/" title="Visit page outside Confluence" rel="nofollow"&gt;Apache ActiveMQ&lt;/a&gt; 5.0 actually ships &lt;a href="http://activemq.apache.org/enterprise-integration-patterns.html"&gt;fully integrated with Camel&lt;/a&gt; so we've tons of users in production using Camel today.&lt;br /&gt;&lt;br /&gt;I hope I've managed to straighten out some misunderstandings on Camel; its definitely a great fit for enterprise requirements. Thanks for your great feedback - I'll definitely take it on board on future presentations and try and avoid confusing other folks :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8132857663967818867?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8132857663967818867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8132857663967818867' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8132857663967818867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8132857663967818867'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/feedback-on-my-camel-talk-at-ijtc.html' title='Feedback on my Camel talk at the IJTC conference'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2980017428692756666</id><published>2007-11-13T13:33:00.000Z</published><updated>2007-11-13T13:35:25.014Z</updated><title type='text'>webcast today on Apache ActiveMQ</title><content type='html'>Sorry for the really late notice - bad James! - but I&lt;a href="http://open.iona.com/resources/news/#webinar"&gt;'m doing a webinar today&lt;/a&gt; on &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt; with my fellow committer &lt;a href="http://hiramchirino.com/index.html"&gt;Hiram Chirino&lt;/a&gt;. Feel free to pop by and join us - or if you're snowed you can catch the recording later on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2980017428692756666?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2980017428692756666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2980017428692756666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2980017428692756666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2980017428692756666'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/webcast-today-on-apache-activemq.html' title='webcast today on Apache ActiveMQ'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8437027470203977326</id><published>2007-11-13T13:10:00.000Z</published><updated>2007-11-13T13:32:23.119Z</updated><title type='text'>my slides on ActiveMQ and Camel from last weeks Dublin Conference</title><content type='html'>They are not that useful if you missed me talk, as they are low on bullet points and high on pictures :) But if you were there, here are the slides in PDF format...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;pre&gt;&lt;a href="http://people.apache.org/%7Ejstrachan/talks/ActiveMQ-Dublin07.pdf"&gt;ActiveMQ-Dublin07.pdf&lt;/a&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre&gt;&lt;a href="http://people.apache.org/%7Ejstrachan/talks/Camel-Dublin07.pdf"&gt;Camel-Dublin07.pdf&lt;/a&gt;  &lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8437027470203977326?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8437027470203977326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8437027470203977326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8437027470203977326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8437027470203977326'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/my-slides-on-activemq-and-camel-from.html' title='my slides on ActiveMQ and Camel from last weeks Dublin Conference'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-4574479486073739581</id><published>2007-11-13T13:09:00.000Z</published><updated>2007-11-13T13:10:23.292Z</updated><title type='text'>a great presentation on REST, JAX-WS and JSR 311</title><content type='html'>A great &lt;a href="http://www.innoq.com/blog/st/presentations/2007/2007-11-06-JSR-311-W-JAX.pdf" class="jive-link-external"&gt;presentation&lt;/a&gt; from &lt;a href="http://www.innoq.com/blog/st/" class="jive-link-external"&gt;Stefan Tilkov&lt;/a&gt; on REST, JAX-WS and JSR 311; highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-4574479486073739581?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/4574479486073739581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=4574479486073739581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4574479486073739581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4574479486073739581'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/great-presentation-on-rest-jax-ws-and.html' title='a great presentation on REST, JAX-WS and JSR 311'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-459928383168678386</id><published>2007-11-05T10:34:00.000Z</published><updated>2007-11-05T10:46:07.867Z</updated><title type='text'>Speaking at the Irish Java Technology Conference on Thursday and Friday</title><content type='html'>I'll be &lt;a href="http://ijtc.firstport.ie/bio.aspx?sid=33"&gt;speaking&lt;/a&gt; this week at the &lt;a href="http://ijtc.firstport.ie/"&gt;&lt;span id="cmsContent"&gt;&lt;/span&gt;Irish Java Technology Conference&lt;/a&gt; this week on Thursday and Friday. My talks are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ijtc.firstport.ie/lecture.aspx?lid=34"&gt;Enterprise Messaging With Apache ActiveMQ&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ijtc.firstport.ie/lecture.aspx?lid=14"&gt;Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Do pop along and say hi if you're gonna be in the Dublin area this week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-459928383168678386?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/459928383168678386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=459928383168678386' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/459928383168678386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/459928383168678386'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/speaking-at-irish-java-technology.html' title='Speaking at the Irish Java Technology Conference on Thursday and Friday'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3785176431667925729</id><published>2007-11-05T10:14:00.000Z</published><updated>2007-11-05T10:21:56.726Z</updated><title type='text'>s3sync rocks!</title><content type='html'>I finally got off my fat ass and setup an offsite backup of all my photos and other documents on &lt;a href="http://aws.amazon.com/s3"&gt;Amazon S3&lt;/a&gt;. S3 is very impressive; very quick to setup and get going. I guess I'll find out in a month or so how cheap it really is :) but on paper it does look pretty cheap.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.eberly.org/2006/10/09/how-automate-your-backup-to-amazon-s3-using-s3sync/"&gt;This article&lt;/a&gt; was a great overview of how to create backups using &lt;a href="http://s3sync.net/"&gt;s3sync&lt;/a&gt; which is a ruby version of rsync which uses &lt;a href="http://aws.amazon.com/s3"&gt;Amazon S3&lt;/a&gt; under the covers. Neat! Add a little &lt;a href="http://members.cox.net/18james/anacron-tiger.html"&gt;Anacron&lt;/a&gt; and hey presto, incremental online backups on all the macs in my house; and my wife won't kill me for loosing all the pictures of our daughter :).&lt;br /&gt;&lt;br /&gt;(Yes I know &lt;a href="http://flickr.com/"&gt;flickr&lt;/a&gt; might be a better online backup for pictures; I just figured I wanted a general purpose backup mechanism that backed up anything I fancy, not just pictures).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3785176431667925729?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3785176431667925729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3785176431667925729' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3785176431667925729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3785176431667925729'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/s3sync-rocks.html' title='s3sync rocks!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3613737378608794237</id><published>2007-11-05T08:55:00.001Z</published><updated>2007-11-05T08:56:47.721Z</updated><title type='text'>Johnny CORBA</title><content type='html'>In case you'd missed it &lt;a href="http://www.youtube.com/watch?v=eZHK2d7wwIo"&gt;here's Johnny&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3613737378608794237?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3613737378608794237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3613737378608794237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3613737378608794237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3613737378608794237'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/jonny-corba.html' title='Johnny CORBA'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-748269160147300719</id><published>2007-11-02T06:40:00.001Z</published><updated>2007-11-02T07:04:08.520Z</updated><title type='text'>AtomPub services and auto-detecting the schema type of XML based collections &amp; feeds</title><content type='html'>&lt;a href="http://bitworking.org/projects/atom/rfc5023.html"&gt;AtomPub&lt;/a&gt; rocks, its an excellent way of building RESTful services that are easy to discover, consume &amp;amp; they avoid the developer having to figure out for themselves a nice RESTful protocol for reliably exposing resources with all operations being idempotent etc. (Most developers miss that bit out :). I like the extra constraints AtomPub adds above REST; less mistakes for us developers to make :)&lt;br /&gt;&lt;br /&gt;The content of Atom feeds can be text, XHTML or XML (entries can also link to arbitrary media types too). When using XML for the atom:content, it might be nice to be able to discover the schema up front - which could help tooling / UIs / frameworks.&lt;br /&gt;&lt;br /&gt;e.g. from the AtomPub service document when looking at each collection provide an easy way to get the schema document. I've been googling to see if anyone has done such a thing; I've not yet found an obvious answer.&lt;br /&gt;&lt;br /&gt;One idea is to use content types; something like&lt;br /&gt;&lt;blockquote&gt;&amp;lt;collection&amp;gt;&lt;br /&gt; &amp;lt;accept&amp;gt;application+xml; type=someSchemaURI&amp;lt;/accept&amp;gt;&lt;br /&gt;&amp;lt;/collection&amp;gt;&lt;/blockquote&gt;another could be to add a new kind of link to the feed&lt;br /&gt;&lt;blockquote&gt;&amp;lt;feed&amp;gt;&lt;br /&gt;&amp;lt;link rel="content-schema" type="application/relax-ng-compact-syntax" href="/schemas/something.rnc"&amp;gt;&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/feed&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;I guess a tool could always just look at the content of the feed and look at the namespaces then do some out of band google search for schemas for those namespaces :) but it might be nice to be able to make it a little easier to auto-detect the schema - particularly as AtomPub has gone to great lengths to make everything else (system, workspace, collections, entries) easily discoverable and navigable.&lt;br /&gt;&lt;br /&gt;Anyone else figure out a neat way to expose the schema of the XML inside the content for collections or feeds?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-748269160147300719?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/748269160147300719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=748269160147300719' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/748269160147300719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/748269160147300719'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/atompub-services-and-auto-detecting.html' title='AtomPub services and auto-detecting the schema type of XML based collections &amp; feeds'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8706193117556583466</id><published>2007-11-01T07:19:00.000Z</published><updated>2007-11-01T07:29:37.563Z</updated><title type='text'>Apache Camel 1.2 Released!</title><content type='html'>We've recently released &lt;a href="http://activemq.apache.org/camel/camel-120-release.html"&gt;Apache Camel 1.2&lt;/a&gt;, take it for a ride! The release includes 61 new features, improvements and bug fixes such as...  &lt;ul&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/data-format.html" title="Data Format"&gt;Data Format&lt;/a&gt; to support pluggable marshalling and unmarshalling of data in various formats like &lt;a href="http://activemq.apache.org/camel/jaxb.html" title="JAXB"&gt;JAXB&lt;/a&gt;, &lt;span class="nobr"&gt;&lt;a href="http://activemq.apache.org/camel/xmlbeans.html"&gt;XML Beans&lt;/a&gt;&lt;/span&gt;, &lt;a href="http://activemq.apache.org/camel/serialization.html" title="Serialization"&gt;Serialization&lt;/a&gt; or &lt;a href="http://activemq.apache.org/camel/artix-data-services.html" title="Artix Data Services"&gt;Artix Data Services&lt;/a&gt; (ADS). Having great ADS support allows us to work natively with things like SWIFT, SEPA, FpML, TWIST, ISO 20022, CREST and FIX messages - or any binary, fixed width or delimeted file format.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;hugely improved &lt;a href="http://activemq.apache.org/camel/cxf.html" title="CXF"&gt;CXF&lt;/a&gt; integration for working with JAX-WS and &lt;span class="nobr"&gt;&lt;a href="http://incubator.apache.org/cxf"&gt;Apache CXF&lt;/a&gt;&lt;/span&gt; while reusing powerful Camel routing.&lt;/li&gt;&lt;li&gt;improved support for &lt;a href="http://activemq.apache.org/camel/asynchronous-processing.html" title="Asynchronous Processing"&gt;Asynchronous Processing&lt;/a&gt; within components such as for &lt;a href="http://activemq.apache.org/camel/http.html" title="HTTP"&gt;HTTP&lt;/a&gt; and &lt;a href="http://activemq.apache.org/camel/seda.html" title="SEDA"&gt;SEDA&lt;/a&gt;&lt;/li&gt;&lt;li&gt;improved OSGi support with both component discovery using the OSGi registry and turning Camel into OSGi bundles.&lt;/li&gt;&lt;li&gt;improved &lt;a href="http://activemq.apache.org/camel/visualisation.html" title="Visualisation"&gt;Visualisation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;support for the full WSDL Message Exchange Patterns&lt;/li&gt;&lt;li&gt;more powerful &lt;a href="http://activemq.apache.org/camel/bean-integration.html" title="Bean Integration"&gt;Bean Integration&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;&lt;a name="Camel1.2.0Release-NewComponents"&gt;&lt;/a&gt;New Components&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/ibatis.html" title="iBATIS"&gt;iBatis&lt;/a&gt; for easy integration with JDBC in addition to the &lt;a href="http://activemq.apache.org/camel/jpa.html" title="JPA"&gt;JPA&lt;/a&gt; component&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/stringtemplate.html" title="StringTemplate"&gt;StringTemplate&lt;/a&gt; for template based services&lt;/li&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/velocity.html" title="Velocity"&gt;Velocity&lt;/a&gt; for template based services&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8706193117556583466?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8706193117556583466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8706193117556583466' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8706193117556583466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8706193117556583466'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/apache-camel-12-released.html' title='Apache Camel 1.2 Released!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1233923988358482689</id><published>2007-11-01T07:15:00.000Z</published><updated>2007-11-01T07:18:49.518Z</updated><title type='text'>GridGain now usable by Apache projects!</title><content type='html'>Thanks to &lt;a href="http://www.jroller.com/nivanov/entry/gridgain_1_6_lgpl_and"&gt;Nikita&lt;/a&gt; and his team the core APIs of &lt;a href="http://gridgain.com/"&gt;GridGain&lt;/a&gt; are now Apache Licensed, so we can build software at Apache for GridGain such as plugins in &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/"&gt;Camel&lt;/a&gt; or &lt;a href="http://servicemix.apache.org/"&gt;ServiceMix&lt;/a&gt;. Cool! BTW ServiceMix now really is top level at &lt;a href="http://servicemix.apache.org/"&gt;http://servicemix.apache.org&lt;/a&gt;. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1233923988358482689?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1233923988358482689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1233923988358482689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1233923988358482689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1233923988358482689'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/11/gridgain-now-usable-by-apache-projects.html' title='GridGain now usable by Apache projects!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2174678234382927753</id><published>2007-10-31T14:52:00.001Z</published><updated>2007-10-31T16:35:20.205Z</updated><title type='text'>free ringtones are really easy on hacked iphones...</title><content type='html'>So this &lt;a href="http://macstrac.blogspot.com/2007/10/iphones-rock-even-in-uk.html"&gt;friend who hacked his iphone&lt;/a&gt; was telling me, you just use &lt;a href="http://rsug.itd.umich.edu/software/fugu/"&gt;Fugu&lt;/a&gt; as an FTP client and copy any MP3 / AAC files you want into&lt;br /&gt;&lt;blockquote&gt;/Library/Ringtones&lt;br /&gt;&lt;/blockquote&gt;And hey presto, they just work as ringtones on your phone. Neat!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2174678234382927753?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2174678234382927753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2174678234382927753' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2174678234382927753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2174678234382927753'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/10/ringtones-are-really-easy-on-hacked.html' title='free ringtones are really easy on hacked iphones...'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8557580074508098656</id><published>2007-10-31T14:08:00.000Z</published><updated>2007-10-31T14:16:14.146Z</updated><title type='text'>[LazyWeb] maven pom trimmer plugin idea...</title><content type='html'>So its so easy for maven pom.xml files to get a little large; full of stuff they don't really need - or more importantly, full of stuff the end user doesn't really need to use your library. Its even easier for the stuff you depend on to pull in heaps of stuff you don't need.&lt;br /&gt;&lt;br /&gt;e.g. ever picked the wrong clogging pom.xml section and shoved in a dependency on log4j, logkit and avalon on your project? (Its such a shame sun messed up the clogging space btw).&lt;br /&gt;&lt;br /&gt;Its way too easy in maven to not really see or care what dependencies you really have, including those transitive ones - and we end up with lots of unnecessary crap. It can be a bit scary to run '&lt;span style="font-style: italic;"&gt;mvn site&lt;/span&gt;' then look at dependencies.html to see all the stuff maven's pulling in.&lt;br /&gt;&lt;br /&gt;So here's the idea. Its a bit like &lt;a href="http://jester.sourceforge.net/"&gt;Jester&lt;/a&gt;. When all your tests pass; you run the pom-trimmer; what it does is try removing bits of your pom to see if your tests pass. It tries all the permutations to figure out how much crap it can miss out. (So commenting out &lt;dependency&gt; sections/&gt;).&lt;br /&gt;&lt;br /&gt;Next though is it should walk the transisitve dependency graphs and find all the transitive dependencies and try avoid those (using &lt;exclusion&gt; tags on the dependency) so it can clean your pom down to just what you really need.&lt;br /&gt;&lt;br /&gt;We should try get into the habit of running this before a release so we can all try keep released pom's as free from junk as possible.&lt;br /&gt;&lt;br /&gt;So any volunteers to hacking up this little Mojo?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8557580074508098656?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8557580074508098656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8557580074508098656' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8557580074508098656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8557580074508098656'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/10/lazyweb-maven-pom-trimmer-plugin-idea.html' title='[LazyWeb] maven pom trimmer plugin idea...'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-610823342395146733</id><published>2007-10-19T15:52:00.000Z</published><updated>2007-10-19T16:04:56.925Z</updated><title type='text'>iPhones rock, even in the UK!</title><content type='html'>This blog post is obviously about a friend of mine; as I'd never be naughty and hack an iphone. So i've got this friend right, he's a bit of a geek and lives in London m'kay. A friend of his showed him his iphone working beautifully in the UK with a normal UK SIM card. My friend was super jealous and got another friend to buy him an iphone while in the states.&lt;br /&gt;&lt;br /&gt;The iphone then turned up in the usual gorgeous Apple packaging. After following &lt;a href="http://www.hacktheiphone.com/74/iphone_step1_mac_74.html"&gt;these instructions&lt;/a&gt; (as it was a 1.0.2 firmware) it was activated and jailbreaked like a charm with some neato apps on it (and openssh etc).  I love 'Sketch' BTW! :). Colloquy is pretty good for IRC too&lt;br /&gt;&lt;br /&gt; Then these instructions were followed to unlock the SIM...&lt;br /&gt;&lt;blockquote&gt;From your phone, open Safari and visit the following website: http://i.unlock.no - a dialog will appear and ask if you want to add a new package source. Tap on Yes. The Installer application will now automaticly launch, and it will refresh the list (if it doesn't refresh, tap the refresh button).&lt;br /&gt;&lt;br /&gt;In the list of applications, scroll down almost to the bottom. Under the category "Utilities" you should now have "anySIM" there. Tap on it and install it (hit yes on the warning dialog). When done, press the home key, and wait for the phone to refresh. Now you should see an anySIM icon on your phone.&lt;br /&gt;&lt;br /&gt;Before you start anySIM, go to Settings ? General ? Autolock and set it to Never. Now you can press home button, and tap on the anySIM icon.&lt;br /&gt;&lt;br /&gt;Slide to unlock, and read to the bottom and tap the red button. This process will take some time, so just sit back and relax. When it's done, you get a message telling the result. If it's an error make note of that error, but don't worry yet.&lt;br /&gt;&lt;br /&gt;Insert a SIM from a carrier of your choice.&lt;br /&gt;If you get signal, your phone is unlocked and you are done!&lt;br /&gt;See iphone.unlock.no for additional reference notes.&lt;/blockquote&gt;Finally &lt;a href="http://www.mobilewhack.com/how-to-change-the-sim-card-on-the-apple-iphone/"&gt;these instructions&lt;/a&gt; were used to change the SIM card and hey presto - a totally working iphone in the UK with a normal SIM card.&lt;br /&gt;&lt;br /&gt;My friend is &lt;span style="font-weight: bold;"&gt;really really happy&lt;/span&gt; with his iphone - and is especially glad he accidentally broke his previous phone by dropping it which meant he just &lt;span style="font-weight: bold;"&gt;had&lt;/span&gt; to get an iphone to replace it :). Other tips from this friend of mine is to surf your gmail use&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://mail.google.com/mail/x/"&gt;http://mail.google.com/mail/x/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Though you didn't hear any of this from me m'kay. I've gotta say am really impressed with the iphone - its an awesome device.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-610823342395146733?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/610823342395146733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=610823342395146733' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/610823342395146733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/610823342395146733'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/10/iphones-rock-even-in-uk.html' title='iPhones rock, even in the UK!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-4853200295726639322</id><published>2007-10-03T14:45:00.001Z</published><updated>2007-10-03T15:02:41.636Z</updated><title type='text'>Update: Screencast of Apache Camel and EIP - now for windows! :)</title><content type='html'>Some folks on windows reported issues watching the &lt;a href="http://macstrac.blogspot.com/2007/10/ive-created-short-podcast-introducing.html"&gt;screencasts&lt;/a&gt; (thanks James and Chuck for your feedback!). Well you could always treat yourself and just buy a Mac! :)&lt;br /&gt;&lt;br /&gt;For those still waiting for their Mac who are still stuck on a windows box there's now some &lt;a href="http://repo.open.iona.com/podcasts/camel/intro/"&gt;WMV formats of the quicktime movies&lt;/a&gt;. For example&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Intro to Apache Camel and Enterprise Integration Patterns (high res) &lt;a href="http://repo.open.iona.com/podcasts/camel/intro/camel-intro-high.wmv" type="audio/x-ms-wmv"&gt;camel-intro.wmv&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Intro to Apache Camel and Enterprise Integration Patterns (medium res) &lt;a href="http://repo.open.iona.com/podcasts/camel/intro/camel-intro-medium.wmv" type="audio/x-ms-wmv"&gt;camel-intro-medium.wmv&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Also thanks to &lt;a href="http://www.dankulp.com/blog/"&gt;Dan&lt;/a&gt; for converting them :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-4853200295726639322?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/4853200295726639322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=4853200295726639322' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4853200295726639322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4853200295726639322'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/10/update-screencast-of-apache-camel-and.html' title='Update: Screencast of Apache Camel and EIP - now for windows! :)'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8844623167804480996</id><published>2007-10-01T08:32:00.000Z</published><updated>2007-10-01T08:36:19.918Z</updated><title type='text'>Screencast: An introduction to Apache Camel and the Enterprise Integration Patterns</title><content type='html'>I've created a short screencast introducing  &lt;a href="http://activemq.apache.org/camel"&gt;Apache Camel&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="256" width="320"&gt;&lt;param name="src" value="http://repo.open.iona.com/podcasts/camel/intro/camel-intro-medium.mov"&gt;&lt;param name="autoplay" value="false"&gt;&lt;param name="type" value="video/quicktime" height="256" width="320"&gt;&lt;embed src="http://repo.open.iona.com/podcasts/camel/intro/camel-intro-medium.mov" autoplay="false" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/" height="256" width="320"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://repo.open.iona.com/podcasts/camel/intro/camel-intro-high.mov"&gt;high quality version&lt;/a&gt; of the screencast also available.&lt;br /&gt;&lt;br /&gt;Hopefully I'll get a chance to create another screencast soon walking through a demo and showing the various &lt;a href="http://activemq.apache.org/camel/visualisation.html"&gt;visualisation tooling&lt;/a&gt; etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8844623167804480996?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8844623167804480996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8844623167804480996' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8844623167804480996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8844623167804480996'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/10/ive-created-short-podcast-introducing.html' title='Screencast: An introduction to Apache Camel and the Enterprise Integration Patterns'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3439120825318788270</id><published>2007-09-25T16:45:00.001Z</published><updated>2007-09-25T16:45:53.966Z</updated><title type='text'>Great message from bob :)</title><content type='html'>See &lt;a href="http://blog.pepperdust.org/2007/9/25/bob-dylan-has-a-message-for-you"&gt;this short film&lt;/a&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3439120825318788270?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3439120825318788270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3439120825318788270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3439120825318788270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3439120825318788270'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/09/great-message-from-bob.html' title='Great message from bob :)'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-4673299076066007336</id><published>2007-09-20T04:31:00.000Z</published><updated>2007-09-20T04:33:25.613Z</updated><title type='text'>ServiceMix is now a top level Apache project!</title><content type='html'>From Guillaume's &lt;a href="http://gnodet.blogspot.com/2007/09/servicemix-has-graduated.html"&gt;post&lt;/a&gt;...&lt;br /&gt;&lt;blockquote&gt;I'm really pleased to announce that the ASF Board has approved &lt;a href="http://incubator.apache.org/servicemix/"&gt;Apache ServiceMix&lt;/a&gt; graduation :-) This means that ServiceMix now becomes a full Apache Top Level Project. So we will soon make our first official release of ServiceMix 3.1.2 and 3.2 coming later. This also means that the resource will be moved to their final location: the website will be moved to http://servicemix.apache.org/ and the svn repo to https://svn.apache.org/repos/asf/servicemix/.&lt;br /&gt;&lt;br /&gt;In addition, I'm honored to have been voted as the Apache ServiceMix &lt;a href="http://www.apache.org/foundation/how-it-works.html#pmc-chair"&gt;PMC Chair&lt;/a&gt;. The PMC (Project Management Commitee) is the group of people responsible for the project oversight, and its Chair is the interface between the Board and the project.&lt;br /&gt;&lt;br /&gt;I just want to remind people the purpose of the &lt;a href="http://incubator.apache.org/"&gt;Apache Incubator&lt;/a&gt;: its main responsibility is to watch new projects at the ASF to make sure that no IP problems remains and that there is a vibrant, diverse and sustainable community around the project that goes the "Apache Way". This is in no case about the quality or maturity of the software itself, as incubating projects greatly vary in these areas (from brand new projects to very mature projects joining the ASF).&lt;/blockquote&gt;&lt;br /&gt;Yay! Congrats to the entire ServiceMix team!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-4673299076066007336?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/4673299076066007336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=4673299076066007336' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4673299076066007336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/4673299076066007336'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/09/servicemix-is-now-top-level-apache.html' title='ServiceMix is now a top level Apache project!'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-5028555092527673709</id><published>2007-09-04T12:33:00.000Z</published><updated>2007-09-04T11:36:06.726Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>Pure RESTful API to ActiveMQ via AtomPub</title><content type='html'>Here's &lt;a href="http://activemq.apache.org/restful-queue.html"&gt;an early draft&lt;/a&gt; of an attempt at describing a purely RESTful API to ActiveMQ using &lt;a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-17.html"&gt;AtomPub&lt;/a&gt;. Mapping a message broker to REST and AtomPub turns out to be &lt;a href="http://tech.groups.yahoo.com/group/rest-discuss/message/8955"&gt;much harder than it looks&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The trick I've used in this draft is that consumers subscribe by creating a new subscription Entry (as a new Entry in the subscriptions Collection) which times out eventually if the consumer goes away. Then each consumer consumes from its own Feed, so that things are nicely load balanced etc.&lt;br /&gt;&lt;br /&gt;As usual - any feedback most welcome&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-5028555092527673709?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/5028555092527673709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=5028555092527673709' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5028555092527673709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/5028555092527673709'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/08/pure-restful-api-to-activemq-via.html' title='Pure RESTful API to ActiveMQ via AtomPub'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8619258014092198686</id><published>2007-09-04T11:00:00.000Z</published><updated>2007-09-04T11:34:53.300Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsd'/><category scheme='http://www.blogger.com/atom/ns#' term='relaxng'/><title type='text'>10 reasons to model XML with RELAX NG , not W3C XML Schema</title><content type='html'>A great post by &lt;a href="http://www.griffinbrown.co.uk/blog/default.aspx"&gt;Griffin Brown&lt;/a&gt; is    &lt;a class="TitleLinkStyle" rel="bookmark" href="http://www.griffinbrown.co.uk/blog/PermaLink,guid,9aebb083-a961-42b1-9748-a57e06a0f19a.aspx"&gt;10 reasons to model XML with RELAX NG , not W3C XML Schema&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;I'm really pleased to see the move away from J2EE to simpler POJO models; away from complex WS-deathstar to simpler REST, to JSON away from complex XML + namespaces + XSDs etc. Am hoping the trend continues with more and more people moving to &lt;a href="http://relaxng.org/compact-tutorial-20030326.html"&gt;RelaxNG Compact Syntax&lt;/a&gt; away from XSDs...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8619258014092198686?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8619258014092198686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8619258014092198686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8619258014092198686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8619258014092198686'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/08/10-reasons-to-model-xml-with-relax-ng.html' title='10 reasons to model XML with RELAX NG , not W3C XML Schema'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1538905853507195999</id><published>2007-09-03T14:53:00.001Z</published><updated>2007-09-03T15:04:06.423Z</updated><title type='text'>Got a Mac? Use TextMate? Try GetBundle</title><content type='html'>If you've a Mac then do try &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;; its an awesome editor and part of my &lt;a href="http://macstrac.blogspot.com/2007/07/my-favourite-os-x-software.html"&gt;favourite OS X software&lt;/a&gt;. Its not a replacement for your Java IDE; but is very handy for editing everything else :). I often type this into the command line...&lt;div&gt;&lt;blockquote&gt;  mate someFolderName&lt;br /&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;To browse a Java project quickly, without doing the whole Java IDE create project thing; which can sometimes take a while...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today I stumbled on the &lt;a href="http://projects.validcode.net/getbundle"&gt;GetBundle bundle&lt;/a&gt; which is a really nice way of adding new bundles. Also the &lt;a href="http://docs.codehaus.org/display/GROOVY/TextMate"&gt;Groovy/Grails bundle&lt;/a&gt; looks good!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1538905853507195999?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1538905853507195999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1538905853507195999' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1538905853507195999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1538905853507195999'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/09/got-mac-use-textmate-try-getbundle.html' title='Got a Mac? Use TextMate? Try GetBundle'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-2571149837931866125</id><published>2007-08-31T11:23:00.001Z</published><updated>2007-08-31T11:29:52.893Z</updated><title type='text'>Whats happening with FUSE ESB</title><content type='html'>&lt;a href="http://gnodet.blogspot.com/"&gt;Guillaume&lt;/a&gt; has a &lt;a href="http://gnodet.blogspot.com/2007/08/fuse-esb.html"&gt;great post&lt;/a&gt; on &lt;a href="http://open.iona.com/products/fuse-esb/"&gt;FUSE ESB&lt;/a&gt;...&lt;br /&gt;&lt;blockquote&gt;My company &lt;a href="http://www.iona.com/"&gt;IONA&lt;/a&gt; provides support on &lt;a href="http://incubator.apache.org/servicemix/"&gt;Apache ServiceMix&lt;/a&gt; via a distribution called &lt;a href="http://open.iona.com/products/fuse-esb/"&gt;FUSE ESB&lt;/a&gt; available from the &lt;a href="http://open.iona.com/"&gt;Open Source IONA site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What's in FUSE ESB right now? Well, it's roughly a distribution of ServiceMix trunk. This implies that FUSE ESB is released ahead of the Apache ServiceMix distribution (the latest release is 3.1.1, whereas FUSE ESB is based on 3.2).&lt;br /&gt;&lt;br /&gt;Why are you using the latest trunk instead of the most stable branch? Well, mostly because our customers needs some of the latest features available. We take great care of what is in our Fuse branch: we do not necessarily backport all new stuff from trunk. We may also add some specific customer needs inside our own distribution, features that are not present in the trunk version.&lt;br /&gt;&lt;br /&gt;So is that a fork? Certainly not :-) We have always supported Apache ServiceMix and we will continue to do so. But our customers have specific needs, so we may need to do custom development or have custom branches for them to fullfill these needs. Over time, we put the features that we consider generic enough back to the community. But this level of support can not be provided in a community driven environment such as the Apache Software Foundation. Let alone the fact that our customers often require privacy regarding their issues or their specific needs, environments and projects, so that it becomes difficult to use the open mailing lists of the community.&lt;br /&gt;&lt;br /&gt;So is that a closed source version? No. The Apache License would allow that (quite the opposite of the GPL), but this is not what we aim for. Our process is quite open: as an example, I've recently developed an AsyncBridge EIP pattern for FUSE ESB (see the &lt;a href="http://open.iona.com/issues/browse/ESB-18"&gt;issue&lt;/a&gt;) that will certainly be contributed back to the community...&lt;br /&gt;&lt;br /&gt;Hopefully, this blog entry will clarify a bit the IONA policy with respect to the Apache projects it supports and the relationship between FUSE ESB and ServiceMix. Feel free to &lt;a href="http://open.iona.com/downloads/"&gt;download&lt;/a&gt; it and give it a try...&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-2571149837931866125?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/2571149837931866125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=2571149837931866125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2571149837931866125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/2571149837931866125'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/08/whats-happening-with-fuse-esb.html' title='Whats happening with FUSE ESB'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-1234008255495808366</id><published>2007-08-17T09:15:00.000Z</published><updated>2007-08-17T09:28:23.165Z</updated><title type='text'>Podcast on Apache Camel, Enterprise Integration Patterns and 1.1.0 release</title><content type='html'>I had the pleasure to be interviewed by  &lt;a href="http://www.zoominfo.com/Search/PersonDetail.aspx?PersonID=338181&amp;QueryID=0b37845a-9e13-492a-92e6-7ac8ac9707b7"&gt;Dana Gardner&lt;/a&gt;, principal analyst at &lt;a href="http://www.interarbor-solutions.com/home.html"&gt;Interarbor Solutions&lt;/a&gt; about &lt;a href="http://activemq.apache.org/camel/"&gt;Apache Camel&lt;/a&gt; recently. You can listen to the &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://interarbor.libsyn.com/index.php?post_id=245998"&gt;podcast&lt;/a&gt; or read the &lt;a href="http://briefingsdirect.blogspot.com/2007/08/apache-camel-addresses-need-for.html"&gt;online transcript&lt;/a&gt;. Apologies in advance for any rambling :) - I did enjoy it though.&lt;br /&gt;&lt;br /&gt;In related &lt;a href="http://activemq.apache.org/camel/"&gt;Camel&lt;/a&gt; news, the &lt;a href="http://activemq.apache.org/camel/camel-110-release.html"&gt;Camel 1.1.0 Release&lt;/a&gt; has been cut and voted; its just about to move to the maven repo &amp; Apache mirror system any moment now. Cool beans! It contains numerous new features...  &lt;ul&gt;&lt;li&gt;hugely improved &lt;a href="http://activemq.apache.org/camel/bean-integration.html" title="Bean Integration"&gt;Bean Integration&lt;/a&gt; to work nicely with beans and Camel; making Camel even less intrusive&lt;/li&gt;&lt;li&gt;improved &lt;a href="http://activemq.apache.org/camel/spring.html" title="Spring"&gt;Spring&lt;/a&gt; XML support using JAXB2 and code-generating a nice &lt;a href="http://activemq.apache.org/camel/xml-reference.html" title="Xml Reference"&gt;XML Schema&lt;/a&gt;&lt;/li&gt;&lt;li&gt;new &lt;a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html" title="Enterprise Integration Patterns"&gt;Enterprise Integration Patterns&lt;/a&gt; like &lt;a href="http://activemq.apache.org/camel/aggregator.html" title="Aggregator"&gt;Aggregator&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/throttler.html" title="Throttler"&gt;Throttler&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/delayer.html" title="Delayer"&gt;Delayer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;new &lt;a href="http://activemq.apache.org/camel/languages-supported.html" title="Languages Supported"&gt;Languages Supported&lt;/a&gt; such as &lt;a href="http://activemq.apache.org/camel/el.html" title="EL"&gt;EL&lt;/a&gt; and &lt;a href="http://activemq.apache.org/camel/ognl.html" title="OGNL"&gt;OGNL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;new &lt;a href="http://activemq.apache.org/camel/components.html" title="Components"&gt;Components&lt;/a&gt; like &lt;a href="http://activemq.apache.org/camel/vm.html" title="VM"&gt;VM&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/event.html" title="Event"&gt;Event&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/log.html" title="Log"&gt;Log&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/validation.html" title="Validation"&gt;Validation&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/jing.html" title="Jing"&gt;Jing&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/msv.html" title="MSV"&gt;MSV&lt;/a&gt;&lt;/li&gt;&lt;li&gt;new &lt;a href="http://activemq.apache.org/camel/examples.html" title="Examples"&gt;Examples&lt;/a&gt; such as &lt;a href="http://activemq.apache.org/camel/spring-example.html" title="Spring Example"&gt;Spring Example&lt;/a&gt;, &lt;a href="http://activemq.apache.org/camel/etl-example.html" title="ETL Example"&gt;ETL Example&lt;/a&gt; and &lt;a href="http://activemq.apache.org/camel/bam.html" title="BAM"&gt;BAM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;improved distributed testing with via the &lt;a href="http://activemq.apache.org/camel/mock.html" title="Mock"&gt;Mock&lt;/a&gt; component&lt;/li&gt;&lt;li&gt;new &lt;a href="http://activemq.apache.org/camel/camel-maven-plugin.html" title="Camel Maven Plugin"&gt;Camel Maven Plugin&lt;/a&gt; for easier running of Camel routes and &lt;a href="http://activemq.apache.org/camel/examples.html" title="Examples"&gt;Examples&lt;/a&gt; in Maven&lt;/li&gt;&lt;/ul&gt;Incidentally I really love the new &lt;a href="http://cwiki.apache.org/CAMEL/visualisation.html"&gt;Visualisation&lt;/a&gt; plugin that can be easily integrated into your maven site generation as &lt;a href="http://activemq.apache.org/camel/maven/camel-spring/cameldoc/index.html"&gt;this example shows&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-1234008255495808366?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/1234008255495808366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=1234008255495808366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1234008255495808366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/1234008255495808366'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/08/podcast-on-apache-camel-enterprise.html' title='Podcast on Apache Camel, Enterprise Integration Patterns and 1.1.0 release'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-3268013330442450948</id><published>2007-07-30T14:04:00.000Z</published><updated>2007-07-30T14:07:25.800Z</updated><title type='text'>OpenJPA no longer requires mandatory bytecode postprocessing</title><content type='html'>See &lt;a href="http://www.jroller.com/pcl/entry/openjpa_no_longer_requires_bytecode"&gt;OpenJPA no longer requires bytecode processing&lt;/a&gt; from &lt;a href="http://www.jroller.com/pcl/"&gt;Patrick&lt;/a&gt;.&lt;br /&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;br /&gt;Awesome! This makes it pretty trivial to switch Hibernate &lt;-&gt; OpenJPA&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-3268013330442450948?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/3268013330442450948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=3268013330442450948' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3268013330442450948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/3268013330442450948'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/07/openjpa-no-longer-requires-mandatory.html' title='OpenJPA no longer requires mandatory bytecode postprocessing'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-637417304187784899.post-8150381816217896193</id><published>2007-07-10T11:03:00.000Z</published><updated>2007-07-26T09:44:08.671Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><title type='text'>a pure RESTful way of working with ActiveMQ queues</title><content type='html'>I've been snowed with the day job but really wanted to reply to &lt;a href="http://protocol7.com/"&gt;niklas&lt;/a&gt;'s post on &lt;a href="http://protocol7.com/archives/2007/06/13/a-restful-queue/"&gt;A RESTful queue&lt;/a&gt;. It looks a great suggestion; I need to catch up on the &lt;a href="http://permalink.gmane.org/gmane.comp.web.services.rest/6149"&gt;discussion&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://activemq.apache.org/rest.html"&gt;REST support in ActiveMQ&lt;/a&gt; isn't really pure REST; as it uses non-idempotent GETs as a bit of a hack - though it does make it very easy to work with :).  I’d &lt;span style="font-weight: bold;"&gt;LOVE&lt;/span&gt; a nice, proper, RESTful &lt;acronym title="Application Programming Interface"&gt;API&lt;/acronym&gt; to ActiveMQ. Though properly exposing message queues efficiently over REST while handling concurrency is a tricky problem, but its looking like some consensus is emerging. Niclas's suggestion sounds about right to me too.&lt;br /&gt;&lt;br /&gt;Though I guess a proper REST API would involve more complexity on the client side (e.g. having to do a POST then follow a Location header to then do a DELETE or whatever). So even if we had the worlds most RESTful API, some folks might still want to use the non-idempotent GET hack (particularly if they no there's no caches in between :).&lt;br /&gt;&lt;p&gt;Ideally I was also thinking we should expose the entire broker on the &lt;a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-16.html"&gt;Atom Publishing Protocol&lt;/a&gt;; so an APP client could discover all the queues &amp;amp; topics etc.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Am a bit snowed right now but ASAP I'd love to get a proper REST and APP protocol for ActiveMQ...&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637417304187784899-8150381816217896193?l=macstrac.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://macstrac.blogspot.com/feeds/8150381816217896193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=637417304187784899&amp;postID=8150381816217896193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8150381816217896193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/637417304187784899/posts/default/8150381816217896193'/><link rel='alternate' type='text/html' href='http://macstrac.blogspot.com/2007/07/pure-restful-way-of-working-with.html' title='a pure RESTful way of working with ActiveMQ queues'/><author><name>James Strachan</name><uri>http://www.blogger.com/profile/12591119339035350067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_AXIOiFke5rQ/SLZ0jlEkYZI/AAAAAAAAA1o/ej3pjQeYsLE/S220/James+Strachan.png'/></author><thr:total>0</thr:total></entry></feed>
