<?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:blogger='http://schemas.google.com/blogger/2008' 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-2123901513613960343</id><updated>2024-11-01T10:38:12.452+01:00</updated><category term="jcaps"/><category term="OpenESB"/><category term="SOA"/><category term="Glassfish"/><category term="JMS"/><category term="Netbeans"/><category term="java"/><category term="Alfresco"/><category term="EAI"/><category term="project management"/><category term="GlassfishESB"/><category term="JEE"/><category term="architecture"/><category term="BPEL"/><category term="Fluxology"/><category term="SeeBeyond"/><category term="Web Services"/><category term="business"/><category term="design patterns"/><category term="distributed"/><category term="strategy"/><category term="BPM"/><category term="EJB"/><category term="ICAN"/><category term="JBI"/><category term="REST"/><category term="SOAP"/><category term="WSDL"/><category term="XML"/><category term="agile"/><category term="book"/><category term="eventdriven"/><category term="maven"/><category term="security"/><category term="test"/><category term="transactions"/><category term="tutorial"/><category term="Activiti"/><category term="CamelSE"/><category term="EDA"/><category term="ESB"/><category term="Fuji"/><category term="Google peopleware"/><category term="Groovy"/><category term="IMAP"/><category term="IT"/><category term="JDBC"/><category term="JMX"/><category term="JUnit"/><category term="MDA"/><category term="Methodology"/><category term="Mockrunner"/><category term="Mural"/><category term="OSGi"/><category term="OTD"/><category term="Object Oriented"/><category term="OpenMQ"/><category term="PLM"/><category term="POJO"/><category term="Quality"/><category term="Ruby"/><category term="SAP"/><category term="Spring"/><category term="Sun"/><category term="WebDAV"/><category term="Weblogic"/><category term="apache"/><category term="cloud"/><category term="clustering"/><category term="collaboration"/><category term="consistency"/><category term="consulting"/><category term="database"/><category term="eInsight"/><category term="email"/><category term="gigaspaces"/><category term="governance"/><category term="high availability"/><category term="javaee"/><category term="javascript"/><category term="jvm"/><category term="macosx"/><category term="management"/><category term="mysql"/><category term="nodejs"/><category term="opensource"/><category term="parser"/><category term="partition tolerance"/><category term="review"/><category term="sales"/><category term="vertx"/><category term="video"/><category term="web development"/><title type='text'>CamelCase</title><subtitle type='html'>This blog has moved to http://maurizioturatti.com</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-6089443141504463457</id><published>2014-10-20T14:13:00.003+02:00</published><updated>2014-10-20T14:13:53.134+02:00</updated><title type='text'>This blog is moving</title><content type='html'>After several years using the Blogger platform I&#39;ve decided to freeze this blog and move my writing efforts elsewhere. In the last few days I&#39;ve tested several options, mainly looking at &lt;a href=&quot;https://www.openshift.com/quickstarts/wordpress-4&quot; target=&quot;_blank&quot;&gt;Wordpress running on Openshift&lt;/a&gt;. But I have found Wordpress a bit overkill for a simple personal blog, so I discovered &lt;a href=&quot;http://octopress.org/&quot; target=&quot;_blank&quot;&gt;Octopress&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;background-color: #f8f8f8; color: #222222; font-family: &#39;PT Serif&#39;, Georgia, Times, &#39;Times New Roman&#39;, serif; font-size: 18px; line-height: 27.599998474121094px;&quot;&gt;Octopress is a framework designed by&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://brandonmathis.com/&quot; style=&quot;-webkit-transition: color 0.3s; border: 0px; color: #751590; font-family: &#39;PT Serif&#39;, Georgia, Times, &#39;Times New Roman&#39;, serif; font-size: 18px; line-height: 27.599998474121094px; margin: 0px; padding: 0px; transition: color 0.3s; vertical-align: baseline; white-space: pre-wrap; word-wrap: break-word;&quot;&gt;Brandon Mathis&lt;/a&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #222222; font-family: &#39;PT Serif&#39;, Georgia, Times, &#39;Times New Roman&#39;, serif; font-size: 18px; line-height: 27.599998474121094px;&quot;&gt;&amp;nbsp;for&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://github.com/mojombo/jekyll&quot; style=&quot;-webkit-transition: color 0.3s; border: 0px; color: #751590; font-family: &#39;PT Serif&#39;, Georgia, Times, &#39;Times New Roman&#39;, serif; font-size: 18px; line-height: 27.599998474121094px; margin: 0px; padding: 0px; transition: color 0.3s; vertical-align: baseline; white-space: pre-wrap; word-wrap: break-word;&quot;&gt;Jekyll&lt;/a&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #222222; font-family: &#39;PT Serif&#39;, Georgia, Times, &#39;Times New Roman&#39;, serif; font-size: 18px; line-height: 27.599998474121094px;&quot;&gt;, the blog aware static site generator powering&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://pages.github.com/&quot; style=&quot;-webkit-transition: color 0.3s; border: 0px; color: #751590; font-family: &#39;PT Serif&#39;, Georgia, Times, &#39;Times New Roman&#39;, serif; font-size: 18px; line-height: 27.599998474121094px; margin: 0px; padding: 0px; transition: color 0.3s; vertical-align: baseline; white-space: pre-wrap; word-wrap: break-word;&quot;&gt;Github Pages&lt;/a&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #222222; font-family: &#39;PT Serif&#39;, Georgia, Times, &#39;Times New Roman&#39;, serif; font-size: 18px; line-height: 27.599998474121094px;&quot;&gt;. To start blogging with Jekyll, you have to write your own HTML templates, CSS, Javascripts and set up your configuration. But with Octopress All of that is already taken care of. Simply&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/imathis/octopress&quot; style=&quot;-webkit-transition: color 0.3s; border: 0px; color: #751590; font-family: &#39;PT Serif&#39;, Georgia, Times, &#39;Times New Roman&#39;, serif; font-size: 18px; line-height: 27.599998474121094px; margin: 0px; padding: 0px; transition: color 0.3s; vertical-align: baseline; white-space: pre-wrap; word-wrap: break-word;&quot;&gt;clone or fork Octopress&lt;/a&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #222222; font-family: &#39;PT Serif&#39;, Georgia, Times, &#39;Times New Roman&#39;, serif; font-size: 18px; line-height: 27.599998474121094px;&quot;&gt;, install dependencies and the theme, and you&#39;re set.&lt;/span&gt;&lt;/blockquote&gt;
The main reasons for this move are:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Blogger has become slow and heavy: the preview takes forever and sometimes it doesn&#39;t show up at all&lt;/li&gt;
&lt;li&gt;Octopress serves static files and can be quickly tested locally&lt;/li&gt;
&lt;li&gt;I can use Git for pushing all my changes and I can rollback easily&lt;/li&gt;
&lt;li&gt;I want to be in total control of the typography and html&lt;/li&gt;
&lt;li&gt;My main domain and blog pages are all hosted on Github&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;text-align: center;&quot;&gt;
Here it is: &lt;a href=&quot;http://www.maurizioturatti.com/&quot;&gt;www.maurizioturatti.com&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So, goodbye Blogger.com and thank you for all the blogging fish. Welcome Jekyll and Octopress!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-m7zAs4SZ4gk/VET7FO9GJ6I/AAAAAAAADG0/OyPqD02jRjc/s1600/octopress-avatar_400x400.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-m7zAs4SZ4gk/VET7FO9GJ6I/AAAAAAAADG0/OyPqD02jRjc/s1600/octopress-avatar_400x400.png&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/6089443141504463457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2014/10/this-blog-is-moving.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/6089443141504463457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/6089443141504463457'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2014/10/this-blog-is-moving.html' title='This blog is moving'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-m7zAs4SZ4gk/VET7FO9GJ6I/AAAAAAAADG0/OyPqD02jRjc/s72-c/octopress-avatar_400x400.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-5459356033296887111</id><published>2014-10-09T12:13:00.000+02:00</published><updated>2014-10-09T14:26:01.327+02:00</updated><title type='text'>The Brodzinski&#39;s estimation scale for a task</title><content type='html'>&lt;a href=&quot;https://twitter.com/pawelbrodzinski&quot; target=&quot;_blank&quot;&gt;Pawel Brodzinski&lt;/a&gt;, lean and agile coach, suggests a good estimation scale for a task:&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;1: 1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;TFB: Too Fucking Big&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;NFC: No Fucking Clue&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Despite the fact this could initially looks like a joke, it&#39;s actually a serious way to handle too large user stories and, from my point of view, it&#39;s very close to what has been suggested by other agile coaches like &lt;a href=&quot;https://twitter.com/neil_killick&quot; target=&quot;_blank&quot;&gt;Neil Killick&lt;/a&gt; (&lt;a href=&quot;http://neilkillick.com/2014/07/16/my-slicing-heuristic-concept-explained/&quot; target=&quot;_blank&quot;&gt;My Slicing Heuristic Concept Explained&lt;/a&gt;), especially popular within &lt;a href=&quot;https://twitter.com/hashtag/NoEstimates&quot; target=&quot;_blank&quot;&gt;#NoEstimates&lt;/a&gt; practioners.&lt;br /&gt;
&lt;br /&gt;
The idea, at least at high level, is very simple: slice down your tasks until they are all more or less of the same size (1 story point), then your final estimation is just a matter of summing the total number of stories. Of course, it&#39;s easier said than done: too many misunderstand the NoEstimate practice, dismissing it as just a way to avoid the &quot;hard work&quot;, but in reality the slicing activity forces a very accurate analysis of requirements, to be able to slim them down to a common size. The easy part is the final sum, but that&#39;s not the point.&lt;br /&gt;
&lt;br /&gt;
In my opinion this method suggests that, when somebody says a user story is 5, 8 or 13 points in size, this implies a good amount of&amp;nbsp;delusion, because in reality going beyond a 1, 2 or 3 size is so close to pure guessing that it is usually a waste of time. Using only a single size (one) it&#39;s even more effective, because forces a serious decomposition of tasks: if you can&#39;t achieve this level of decomposition then you should acknowledge that your requirements are not clear enough yet: drastic, but effective.&lt;br /&gt;
&lt;br /&gt;
A practical approach to this kind of user stories slicing could be &lt;a href=&quot;http://gojko.net/2012/01/23/splitting-user-stories-the-hamburger-method/&quot; target=&quot;_blank&quot;&gt;Gojko Adzic&#39;s hamburger method&lt;/a&gt;, when adding the constraint that each task composing the hamburger must be of size 1.&lt;br /&gt;
&lt;br /&gt;
Many years ago I did something vaguely similar in a project: I decided that every user story had to fit into a week and every Friday was release / demo day. Not exactly &lt;a href=&quot;http://en.wikipedia.org/wiki/Continuous_delivery&quot; target=&quot;_blank&quot;&gt;continuous delivery&lt;/a&gt;, but I think it was even before the term &quot;agile&quot; was invented...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBRJWLKED_tTYsGvXZ-c5riSpMrAd5hikz4KogPgUY25PhwrPW-IMiO5ZIqoioNdIFjjQaB02Ci1g86WQDUY2s0CIYhg_ruszLCaiTqB9yEK1nPI-ENNb97WUCGhnXGSx2f-QlpF3F-T0/s1600/Schermata+2014-10-09+alle+11.22.26.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBRJWLKED_tTYsGvXZ-c5riSpMrAd5hikz4KogPgUY25PhwrPW-IMiO5ZIqoioNdIFjjQaB02Ci1g86WQDUY2s0CIYhg_ruszLCaiTqB9yEK1nPI-ENNb97WUCGhnXGSx2f-QlpF3F-T0/s1600/Schermata+2014-10-09+alle+11.22.26.png&quot; height=&quot;320&quot; width=&quot;234&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/5459356033296887111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2014/10/the-brodzinskis-estimation-scale-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/5459356033296887111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/5459356033296887111'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2014/10/the-brodzinskis-estimation-scale-for.html' title='The Brodzinski&#39;s estimation scale for a task'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBRJWLKED_tTYsGvXZ-c5riSpMrAd5hikz4KogPgUY25PhwrPW-IMiO5ZIqoioNdIFjjQaB02Ci1g86WQDUY2s0CIYhg_ruszLCaiTqB9yEK1nPI-ENNb97WUCGhnXGSx2f-QlpF3F-T0/s72-c/Schermata+2014-10-09+alle+11.22.26.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-2650030952803516388</id><published>2014-10-07T11:49:00.000+02:00</published><updated>2014-10-07T11:52:42.902+02:00</updated><title type='text'>Extremely Bad Advice for Remote Workers</title><content type='html'>As I have a long-term experience as a remote worker, also dealing with and managing remote teams in different timezones, I am always interested in experiences on this subject. Today I stumbled upon an article on TheNextWeb:&amp;nbsp;&lt;a href=&quot;http://thenextweb.com/entrepreneur/2014/10/05/3-radical-habits-highly-successful-remote-teams/&quot; target=&quot;_blank&quot;&gt;3 radical habits of highly successful remote teams&lt;/a&gt;. Despite the article seems to be nice with remote workers, it actually contains what I think are some of the worst possibile anti-patterns for remote work. In summary:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Total transparency about yourself with your remote team&lt;/li&gt;
&lt;li&gt;Leave your webcam on all day&lt;/li&gt;
&lt;li&gt;Replace physical space with software — lots of it&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Let&#39;s rephrase the meaning:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;I don&#39;t care about your privacy at all, so I want to know even when you are sleeping or pooping (&quot;&lt;i&gt;For example, every Buffer employee receives a Jawbone UP wristband that tracks how you’re sleeping and shares that with the team.&quot;&lt;/i&gt;)&lt;/li&gt;
&lt;li&gt;I don&#39;t trust you at all, so I want to check that you are always staring at a computer screen, all day long (&lt;i&gt;&quot;This provides a persistent, passive view of your colleagues that makes you feel like you’re in the same room, working together at the same table.&quot;&lt;/i&gt;). So you are even required to broadcast you scratching your nose or your privates: I can only imagine the level of anxiety!&lt;/li&gt;
&lt;li&gt;Additionally, I also want to mess up with your work by asking you to install, learn an manage a lot of different software doing, more or less, the same thing (&quot;lots of it&quot;). So that I can annoy you from even more different angles!&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
I, instead, suggest the following:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Hire people you trust&lt;/b&gt; and let them organize their daily routine and priorities&lt;/li&gt;
&lt;li&gt;Adopt few, useful, simple software like Skype, Google Hangout and Slack for communication, Google Docs and/or Confluence for shared documentation.&lt;/li&gt;
&lt;li&gt;If you want a social life go to the gym or to the pub, switching off your mobile email notifications. &lt;b&gt;Get a life outside your work&lt;/b&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Managing a remote team like being into a modern edition of Orwell 1984? No, thanks. A remote, distributed team is not an assembly line: I suggest to move toward measuring people by the actual value they generate instead of the time they sit in front a PC.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A team made of knowledge workers must generate tangible value: if you can do that while playing tennis or having a shower, I don&#39;t really care.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/2650030952803516388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2014/10/extremely-bad-advice-for-remote-workers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2650030952803516388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2650030952803516388'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2014/10/extremely-bad-advice-for-remote-workers.html' title='Extremely Bad Advice for Remote Workers'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-508046371494935110</id><published>2014-09-22T12:30:00.001+02:00</published><updated>2014-09-22T12:30:11.466+02:00</updated><title type='text'>The Programmer</title><content type='html'>&lt;blockquote class=&quot;tr_bq&quot;&gt;







&lt;div class=&quot;p1&quot;&gt;
&lt;i&gt;&quot;The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures.&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;i&gt;Yet the program construct, unlike the poet&#39;s words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. It prints results, draws pictures, produces sounds, moves arms. The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.&quot;&lt;/i&gt;&lt;/div&gt;
&lt;/blockquote&gt;
Frederick Brooks, &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Mythical_Man-Month&quot; target=&quot;_blank&quot;&gt;The Mythical Man Month&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/508046371494935110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2014/09/the-programmer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/508046371494935110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/508046371494935110'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2014/09/the-programmer.html' title='The Programmer'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-7407218004388735866</id><published>2014-09-04T13:33:00.000+02:00</published><updated>2014-09-04T13:48:33.444+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Glassfish"/><category scheme="http://www.blogger.com/atom/ns#" term="javaee"/><category scheme="http://www.blogger.com/atom/ns#" term="opensource"/><title type='text'>The Java EE ecosystem keeps shrinking</title><content type='html'>Less than a year ago Oracle announced the&amp;nbsp;&lt;a href=&quot;https://blogs.oracle.com/theaquarium/entry/java_ee_and_glassfish_server&quot;&gt;Java EE and GlassFish Server Roadmap Update&lt;/a&gt;, which defined the end of commercial support for the &lt;a href=&quot;http://www.oracle.com/us/products/middleware/cloud-app-foundation/glassfish-server/overview/index.html&quot;&gt;Oracle Glassfish Server&lt;/a&gt;, which is (was) the fully supported release of the &lt;a href=&quot;https://glassfish.java.net/&quot;&gt;GlassFish Server Open Source Edition&lt;/a&gt;. In the last few months there has been plenty of comments about this move, some of the most remarkable are:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://jaxenter.com/glassfish-reduced-to-toy-product-as-commercial-offering-axed-48729.html&quot;&gt;GlassFish reduced to “toy product” as commercial offering axed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.arungupta.me/2013/11/glassfish-commercial-is-dead-wildfly-and-jboss-eap-to-rescue/comment-page-1/#comment-63611&quot;&gt;GlassFish Commercial is Dead, WildFly and JBoss EAP to the Rescue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/arungupta/status/405392239020359681&quot;&gt;Oracle removed GlassFish plugin for Eclipse&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The motivation around this move are probably about Oracle not being keen on supporting two full app server implementations, Glassfish and Weblogic, which apparently makes sense from a commercial point of view. The problem here is that the two products are &lt;b&gt;very different&lt;/b&gt;, and if you liked Glassfish usually hated Weblogic (but has somebody ever genuinely liked Weblogic anyway?). Glassfish is a lightweight, easy to install, fast to start, open source product, with a community around, while Weblogic is IMO one of the most bloated piece of software ever: the two products were addressing two very different Java EE markets, being Weblogic&#39;s the most lucrative one.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A &lt;a href=&quot;https://blogs.oracle.com/theaquarium/entry/java_ee_and_glassfish_server#comment-1383630673031&quot;&gt;reply to community&#39;s concerns&lt;/a&gt;, apparently from an Oracle representative:&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&quot;... GlassFish and WebLogic share quite a bit of code, and that helps with application and configuration portability between the two. So, organizations can &lt;i&gt;continue to develop on GlassFish&lt;/i&gt; and leverage that development by &lt;i&gt;deploying on WebLogic&lt;/i&gt;.&quot;&lt;/blockquote&gt;
&lt;div&gt;
This is one of the &lt;b&gt;most laughable sentences I have read in years&lt;/b&gt;: can anyone seriously think a company could develop and test in one application server but then deploy in production with another? Can anyone really assert that Glassfish and Weblogic are that similar? Just try to install both and judge yourself: you could start developing your first Glassfish application while Weblogic installer is still downloading...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Glassfish has always been a minor commercial player, but reducing the available options has never been a successful strategy for any ecosystem, and Oracle is supposed to lead this one. Below are the results of this leadership:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;width: 540px;&quot;&gt;
&lt;a href=&quot;http://www.indeed.com/jobtrends?q=glassfish%2C+jboss%2C+weblogic%2C+websphere&quot; title=&quot;glassfish, jboss, weblogic, websphere Job Trends&quot;&gt;
&lt;img alt=&quot;glassfish, jboss, weblogic, websphere Job Trends graph&quot; border=&quot;0&quot; src=&quot;http://www.indeed.com/trendgraph/jobgraph.png?q=glassfish%2C+jboss%2C+weblogic%2C+websphere&quot; height=&quot;300&quot; width=&quot;540&quot; /&gt;
&lt;/a&gt;
&lt;br /&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot; style=&quot;font-size: 80%; width: 100%px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://www.indeed.com/jobtrends?q=glassfish%2C+jboss%2C+weblogic%2C+websphere&quot;&gt;glassfish, jboss, weblogic, websphere Job Trends&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;http://www.indeed.com/jobs?q=Glassfish&quot;&gt;Glassfish jobs&lt;/a&gt; - &lt;a href=&quot;http://www.indeed.com/jobs?q=Jboss&quot;&gt;Jboss jobs&lt;/a&gt; - &lt;a href=&quot;http://www.indeed.com/jobs?q=Weblogic&quot;&gt;Weblogic jobs&lt;/a&gt; - &lt;a href=&quot;http://www.indeed.com/jobs?q=Websphere&quot;&gt;Websphere jobs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
If you care about open source but want / need to deploy into a commercially supported Java EE app server, you now have basically only a couple of options left: RedHat&#39;s&amp;nbsp;&lt;a href=&quot;http://www.jboss.org/products/eap/overview/&quot;&gt;JBoss EAP&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;http://www.tomitribe.com/&quot;&gt;Tomtribe&lt;/a&gt;&#39;s&amp;nbsp;&lt;a href=&quot;http://tomee.apache.org/apache-tomee.html&quot;&gt;TomEE&lt;/a&gt;. Despite both are fine options, pulling out a minor but strategic member doesn&#39;t help arresting the progressive shrinking of the Java EE ecosystem, as differentiation and competition are king.&lt;br /&gt;
&lt;br /&gt;
This is a pity, because&amp;nbsp;&lt;a href=&quot;http://www.adam-bien.com/roller/abien/entry/javaone_session_lean_and_opinionated&quot;&gt;Java EE is becoming more and more lean and easy&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/7407218004388735866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2014/09/the-java-ee-ecosystem-keeps-shrinking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/7407218004388735866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/7407218004388735866'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2014/09/the-java-ee-ecosystem-keeps-shrinking.html' title='The Java EE ecosystem keeps shrinking'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-2213516027704568131</id><published>2014-01-15T03:05:00.000+01:00</published><updated>2014-01-15T03:05:52.388+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sales"/><title type='text'>Sales are Good for You</title><content type='html'>I have just published the below presentation on Slideshare: half it&#39;s serious content, half it&#39;s just for fun.&lt;br /&gt;
&lt;br /&gt;
Some of my best friends are present or former colleagues, most are developers but many of them are sales or marketing people. I was thinking about describing the often difficult relationship between software developers and sales people since many years now. Maybe I should give a talk about this, one of these days.&lt;br /&gt;
&lt;br /&gt;
I am lucky I had the opportunity to work with very smart people, both on sales or IT, with the exception of some occasional moron, of course.&lt;br /&gt;
&lt;br /&gt;
Hopefully you can recognize some common, funny patterns here.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;355&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/30023114?rel=0&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; width=&quot;425&quot;&gt; &lt;/iframe&gt; &lt;/div&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/mkjsix/sales-are-good-for-you&quot; target=&quot;_blank&quot; title=&quot;Sales are good for you&quot;&gt;Sales are good for you&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/mkjsix&quot; target=&quot;_blank&quot;&gt;Maurizio Turatti&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/2213516027704568131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2014/01/sales-are-good-for-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2213516027704568131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2213516027704568131'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2014/01/sales-are-good-for-you.html' title='Sales are Good for You'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-4606218406167350417</id><published>2014-01-04T14:47:00.000+01:00</published><updated>2014-01-05T01:23:31.742+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="distributed"/><category scheme="http://www.blogger.com/atom/ns#" term="eventdriven"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="nodejs"/><category scheme="http://www.blogger.com/atom/ns#" term="vertx"/><category scheme="http://www.blogger.com/atom/ns#" term="web development"/><title type='text'>Book Review: &quot;Real-time Web Application Development using Vert.x 2.0&quot; </title><content type='html'>&lt;h2&gt;
About Vert.x&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I am following the evolution of the &lt;a href=&quot;http://vertx.io/&quot;&gt;Vert.x&lt;/a&gt; project since its inception and I was expecting to see some books coming about the subject sooner or later. First of all, some explanation on what&#39;s Vert.x:&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;b&gt;&quot;Vert.x is a lightweight, high performance application platform for the JVM that&#39;s designed for modern mobile, web, and enterprise applications.&quot;&lt;/b&gt;&lt;/i&gt;&lt;/blockquote&gt;
The product is 100% open source, licensed under the business friendly Apache Software License 2.0 and&amp;nbsp;&lt;a href=&quot;http://vertx.io/docs.html&quot; target=&quot;_blank&quot;&gt;well documented&lt;/a&gt;. The project&#39;s founder and main maintainer is &lt;a href=&quot;https://twitter.com/timfox&quot;&gt;Tim Fox&lt;/a&gt;, of &lt;a href=&quot;http://en.wikipedia.org/wiki/HornetQ&quot;&gt;HornetQ&lt;/a&gt; fame.&lt;br /&gt;
Vert.x characteristics are nicely summarized in the related &lt;a href=&quot;http://en.wikipedia.org/wiki/Vert.x&quot;&gt;Wikipedia entry&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b style=&quot;font-family: sans-serif; font-size: 13px; line-height: 19.1875px;&quot;&gt;Vert.x&lt;/b&gt;&lt;span style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.1875px;&quot;&gt;&amp;nbsp;is a&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Polyglot_(computing)&quot; style=&quot;background-image: none; color: #0b0080; font-family: sans-serif; font-size: 13px; line-height: 19.1875px; text-decoration: none;&quot; title=&quot;Polyglot (computing)&quot;&gt;polyglot&lt;/a&gt;&lt;span style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.1875px;&quot;&gt;&amp;nbsp;event-driven application framework that runs on the Java Virtual Machine.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.1875px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
Similar environments written in other programming languages include&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Node.js&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Node.js&quot;&gt;Node.js&lt;/a&gt;&amp;nbsp;for&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/JavaScript&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;JavaScript&quot;&gt;JavaScript&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Twisted_(software)&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Twisted (software)&quot;&gt;Twisted&lt;/a&gt;&amp;nbsp;for&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Python_(programming_language)&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Python (programming language)&quot;&gt;Python&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Perl_Object_Environment&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Perl Object Environment&quot;&gt;Perl Object Environment&lt;/a&gt;&amp;nbsp;for&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Perl&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Perl&quot;&gt;Perl&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Libevent&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Libevent&quot;&gt;libevent&lt;/a&gt;&amp;nbsp;for&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/C_(programming_language)&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;C (programming language)&quot;&gt;C&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/EventMachine&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;EventMachine&quot;&gt;EventMachine&lt;/a&gt;&amp;nbsp;for&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_(programming_language)&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Ruby (programming language)&quot;&gt;Ruby&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.1875px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
Vert.x exposes the API currently in&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Java_(programming_language)&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Java (programming language)&quot;&gt;Java&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/JavaScript&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;JavaScript&quot;&gt;JavaScript&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Groovy_(programming_language)&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Groovy (programming language)&quot;&gt;Groovy&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_(programming_language)&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Ruby (programming language)&quot;&gt;Ruby&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Python_(programming_language)&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Python (programming language)&quot;&gt;Python&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.1875px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Scala_(programming_language)&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Scala (programming language)&quot;&gt;Scala&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Clojure&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Clojure&quot;&gt;Clojure&lt;/a&gt;&amp;nbsp;support is on the roadmap.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.1875px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
The application framework includes these features:&lt;/div&gt;
&lt;ul style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.1875px; list-style-image: url(data:image/png; margin: 0.3em 0px 0px 1.6em; padding: 0px;&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;&lt;b&gt;Polyglot&lt;/b&gt;. Application components can be written in Java, JavaScript, Groovy, Ruby or Python.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;&lt;b&gt;Simple concurrency model&lt;/b&gt;. All code is single threaded, freeing from the hassle of multi-threaded programming.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;Simple, &lt;b&gt;asynchronous programming model&lt;/b&gt; for writing truly scalable &lt;b&gt;non-blocking&lt;/b&gt; applications.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;&lt;b&gt;Distributed event bus&lt;/b&gt; that spans the client and server side. The event bus even penetrates into in-browser JavaScript allowing to create so-called real-time web applications.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;&lt;b&gt;Module system&lt;/b&gt; and public module repository, to re-use and share components.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
Few days ago I decided to purchase a recent book from &lt;a href=&quot;http://www.packtpub.com/&quot;&gt;Packt Publishing&lt;/a&gt; about the subject.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
The Book&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Title:&amp;nbsp;&lt;a href=&quot;http://www.packtpub.com/real-time-web-application-development-using-vert-x-2-0/book&quot;&gt;Real-time Web Application Development using Vert.x 2.0&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Language : English&lt;/div&gt;
&lt;div&gt;
Paperback : 122 pages&lt;/div&gt;
&lt;div&gt;
Release Date : September 2013&lt;/div&gt;
&lt;div&gt;
ISBN : 1782167951&lt;/div&gt;
&lt;div&gt;
ISBN 13 : 9781782167952&lt;/div&gt;
&lt;div&gt;
Author(s) : &lt;a href=&quot;http://teropa.info/&quot; target=&quot;_blank&quot;&gt;Tero Parviainen&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyrrJ66rq7HpXeK3wx7TYSamjynEsQehYpIm9VmHllnXPR8XeAMqYHq-NnRdnIqnA-hb_O_fayy5huNUjPxH0oETl-vhZImEf_fFmAkE2EM3uNcKV-YjBMxnARixthyphenhyphen4xa4BETImsGbxs/s1600/7952OS.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyrrJ66rq7HpXeK3wx7TYSamjynEsQehYpIm9VmHllnXPR8XeAMqYHq-NnRdnIqnA-hb_O_fayy5huNUjPxH0oETl-vhZImEf_fFmAkE2EM3uNcKV-YjBMxnARixthyphenhyphen4xa4BETImsGbxs/s1600/7952OS.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
I bought the eBook format only and I read it in both my iPad and computer screen, especially because the narration is mainly about building a fairly complete Web application, so I wanted to read and experiment at the same time, by entering the code by hand and running it step by step.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Below I provide a short summary of the book&#39; sections and I will write some final comments about it.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Preface&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The preface introduces clearly the content and objectives of the book&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&quot;Real-Time Web Application Development using Vert.x 2.0 will show you how to build a real-time web application with Vert.x. During the course of the book, you will go from the very first &quot;Hello, World&quot; to publishing a fully featured application on the Internet.&quot;&lt;/i&gt;&lt;/blockquote&gt;
The scope is to build an editor with which people can create &lt;a href=&quot;http://en.wikipedia.org/wiki/Mind_maps&quot; target=&quot;_blank&quot;&gt;mind maps&lt;/a&gt;&amp;nbsp;collaboratively. So, it is neither a too trivial application, nor something too complex. A good, balanced choice, with the additional bonus of learning a few of&amp;nbsp;&lt;a href=&quot;http://jquery.com/&quot; target=&quot;_blank&quot;&gt;jQuery&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://d3js.org/&quot; target=&quot;_blank&quot;&gt;D3 JavaScript library&lt;/a&gt; and &lt;a href=&quot;http://www.mongodb.org/&quot; target=&quot;_blank&quot;&gt;MongoDB&lt;/a&gt; on the road.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
What the book covers&amp;nbsp;&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;page&quot; title=&quot;Page 14&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Chapter 1&lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Getting Started with Vert.x&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, guides you through the installation of the Vert.x
&lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;2.0 platform and its prerequisites. In this chapter, you&#39;ll also write your very first
Vert.x application: the web equivalent of &quot;Hello, World&quot;.
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;

     &lt;b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Chapter 2&lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Developing a Vert.x Web Application&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, covers the development of a full-fledged
&lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;Vert.x web application, including both the server and browser components. You will
become familiar with the architecture of a typical Vert.x application.
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;

     &lt;b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Chapter 3&lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Integrating with a Database&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, extends the web application from the previous
chapter by adding support for persisting data in a MongoDB database, using one
of the available open source Vert.x modules: the MongoDB Persistor.
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;

     &lt;b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Chapter 4&lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Real-time Communication&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, builds on everything you&#39;ve learned so far&lt;br /&gt;
to deliver the secret sauce: real-time communication. You will develop a real-time,
collaborative, browser-based mind map editor.
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;

     &lt;b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Chapter 5&lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Polyglot Development and Modules&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, presents some of the polyglot features
of Vert.x, as well as the development of reusable and distributable modules,&lt;br /&gt;
by creating a Java module that is used to save mind maps as PNG images.
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;

     &lt;b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Chapter 6&lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt; font-style: italic;&quot;&gt;Deploying and Scaling Vert.x&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &#39;BookAntiqua&#39;; font-size: 11.000000pt;&quot;&gt;, shows how to deploy your Vert.x application
on Internet, by setting up a Linux server with continuous deployment. Finally, we
discuss the basics of scaling Vert.x for growing amounts of users and data.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
My comments&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
One might argue that the official Vert.x documentation is already quite comprehensive and this book doesn&#39;t add much, but conversely&amp;nbsp;I feel this book allows for a smoother approach to learning, without the need to browse and search too much around the Web site. Maybe somebody with already a working experience with Vert.x wouldn&#39;t gain a lot of new knowledge here, at the end I feel the book is more focused on Vert.x beginners, but anyway it contains a good amount of advanced tips to make it valuable for a wide audience.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Vert.x is a polyglot framework, so one can choose among a set of popular programming languages, with even more on the move, but the code in the book is mainly Javascript, also server side. On one hand this seems to restrict a bit the potential audience, as to fully understand the source code and the logic behind the mind map application a decent knowledge of Javascript is advisable, but on the other hand this could be very appealing to &lt;a href=&quot;http://nodejs.org/&quot;&gt;node.js&lt;/a&gt; developers, as they could immediately compare it with Vert.x. Then, also a client-side Javascript developer can easily follow the content and learn some server-side programming. I&#39;m not sure on my side if I would pick Javascript for developing complex server-side logic, but adopting the same language for both client and server development undoubtedly has its own advantages, as the growing popularity of node.js testifies.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
What I especially like in this book is the capacity to explain &quot;full stack&quot; concepts in small, easy steps. You learn about Vert.x and asynchronous message exchanges via the event bus, but also some client side programming techniques in Javascript. The bridge between client and server is built using the &lt;a href=&quot;http://sockjs.org/&quot;&gt;SockJS library&lt;/a&gt;, which provides real-time, full duplex, client-server communication through HTML5 WebSockets and other&amp;nbsp;fallback mechanisms for older browsers.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Another plus of this book resides in its two last chapters, about modules and deployment. Chapter 5 provides a clear description of distributing and managing Vert.x applications through modules, while Chapter 6 goes into the fundamental topic of real deployment and scaling of Vert.x applications. As Vert.x applications are not distributed as standard Java EE packages, these final chapters are really a bonus and I wish to see more books that include at least some basic information about development, scaling and lifecycle management.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
Conclusions&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The book is very well written and readable. It is balanced, as it can support both the novice and the expert developer in exploring this excellent Web framework. I can definitely recommend buying it if you want to start&amp;nbsp;studying in deep Vert.x.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;b&gt;Note&lt;/b&gt;: I actually bought this book by myself and not asked to review it by Packt or anybody else, so this article reflects my own&amp;nbsp;independent&amp;nbsp;opinion only.&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
References&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vertx.io/&quot;&gt;http://vertx.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Vert.x&quot;&gt;http://en.wikipedia.org/wiki/Vert.x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.packtpub.com/real-time-web-application-development-using-vert-x-2-0/book&quot;&gt;http://www.packtpub.com/real-time-web-application-development-using-vert-x-2-0/book&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/4606218406167350417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2014/01/book-review-real-time-web-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/4606218406167350417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/4606218406167350417'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2014/01/book-review-real-time-web-application.html' title='Book Review: &quot;Real-time Web Application Development using Vert.x 2.0&quot; '/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyrrJ66rq7HpXeK3wx7TYSamjynEsQehYpIm9VmHllnXPR8XeAMqYHq-NnRdnIqnA-hb_O_fayy5huNUjPxH0oETl-vhZImEf_fFmAkE2EM3uNcKV-YjBMxnARixthyphenhyphen4xa4BETImsGbxs/s72-c/7952OS.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-2013481063635217465</id><published>2013-06-27T12:11:00.002+02:00</published><updated>2013-06-27T12:23:01.562+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><title type='text'>Apache Maven Starter - my first, little book</title><content type='html'>Today&amp;nbsp;&lt;a href=&quot;http://www.packtpub.com/&quot; target=&quot;_blank&quot;&gt;Packt Publishing&lt;/a&gt; has published a &lt;a href=&quot;http://www.packtpub.com/apache-maven-starter/book&quot; target=&quot;_blank&quot;&gt;little book&lt;/a&gt; I have written in the last few months together with &lt;a href=&quot;http://about.me/maoo&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Maurizio Pillitu&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The book is titled &lt;a href=&quot;http://www.packtpub.com/apache-maven-starter/book&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Apache Maven Starter&lt;/b&gt;&lt;/a&gt; and it&#39;s part of the Instant collection by Packt Publishing. Instant books are concise and focused technical guides, usually no more than 50 or 60 pages, providing the maximum amount of information in the quickest and most effective way.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.packtpub.com/apache-maven-starter/book&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;393&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkyXhPT9knqCCakZW0S7sCYpT1s6PBt6vnO_tm9C-OAwdtfT3l3uLjmIhuAFsqJjPqW7Qutq3D7zDiOsG7oljJlTRzMmZ1qdzunWkaMYqGbjPLS3ZxaylD9NVD30uryB4l3c2nTp1O3Bk/s640/Apache_Maven_Starter.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;Get to grips with a new technology, understand what it is and what it can do for you, and then get to work with the most important features and tasks.The book follows a starter approach for using Maven to create and build a new Java application or Web project from scratch.&lt;/i&gt;&lt;/blockquote&gt;
I accepted the invite to write this book because, despite the huge amount of information already available on this subject, in form of other books and online material, when I started learning &lt;a href=&quot;http://maven.apache.org/&quot; target=&quot;_blank&quot;&gt;Maven&lt;/a&gt; I was searching for more concise information. The book actually doesn&#39;t aim to be a complete reference, but a place to start from and a collection of pointers to additional information. So, it is the book I wished I could read years ago.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;Maven ultimately allows for the automation of the build lifecycle and independence from any IDE. You must always be able to build and test any Java project from the command line, using your favorite editor for coding. It is important to control exactly what libraries get distributed with Java projects and to have a standard project template and build process.&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;Instant Apache Maven Starter will concentrate the most useful information into one single, very compact source.&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;h3&gt;
What you will learn from this book&lt;/h3&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Download, install, and configure Apache Maven with the minimum fuss&lt;/li&gt;
&lt;li&gt;Make your own Java project templates and reuse them&lt;/li&gt;
&lt;li&gt;Deploy to Tomcat or run an embedded Tomcat with Maven&lt;/li&gt;
&lt;li&gt;Perform unit and integration testing with Maven and JUnit&lt;/li&gt;
&lt;li&gt;Manage dependencies and project coordinates, adopting best practices&lt;/li&gt;
&lt;li&gt;Create and manage multi-modules projects&lt;/li&gt;
&lt;li&gt;Use Maven from your favorite IDE: Netbeans, Eclipse, or IDEA&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
I want to especially thank Maurizio Pillitu and the Packt Publishing editorial team, it has been great to work together guys!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
The book is already available on &lt;a href=&quot;http://www.amazon.com/dp/1782167609/?tag=packtpubli-20&quot; target=&quot;_blank&quot;&gt;Amazon&lt;/a&gt;, &lt;a href=&quot;http://www.packtpub.com/apache-maven-starter/book&quot; target=&quot;_blank&quot;&gt;Packt&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;http://my.safaribooksonline.com/9781782167600?cid=packt-cat-readnow-9781782167600&quot; target=&quot;_blank&quot;&gt;Safari Online&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/2013481063635217465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2013/06/apache-maven-starter-my-first-little.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2013481063635217465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2013481063635217465'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2013/06/apache-maven-starter-my-first-little.html' title='Apache Maven Starter - my first, little book'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkyXhPT9knqCCakZW0S7sCYpT1s6PBt6vnO_tm9C-OAwdtfT3l3uLjmIhuAFsqJjPqW7Qutq3D7zDiOsG7oljJlTRzMmZ1qdzunWkaMYqGbjPLS3ZxaylD9NVD30uryB4l3c2nTp1O3Bk/s72-c/Apache_Maven_Starter.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-6093587797047364242</id><published>2013-05-30T20:15:00.000+02:00</published><updated>2013-05-30T20:15:27.716+02:00</updated><title type='text'>Open source products: the big misunderstanding</title><content type='html'>While reading an article on ZDNet titled &quot;&lt;a href=&quot;http://www.zdnet.com/open-source-its-true-cost-and-where-its-going-awry-by-monty-widenius-7000016024/&quot; target=&quot;_blank&quot;&gt;Open source: Its true cost and where it&#39;s going awry by Monty Widenius&lt;/a&gt;&quot; I think I have realized why most people, even those tightly involved in the open-source ecosystem, are often misunderstanding its &lt;i&gt;business&lt;/i&gt; &lt;i&gt;model&lt;/i&gt;. In a sentence:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;The open source model is about creating collaborations, not building products.&lt;/i&gt;&lt;/blockquote&gt;
Advocating open source software since the early 90s, from my point of view an open-source business model related to products can be misleading.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&quot;The problem is — I saw this very clearly with MariaDB — I created a company where I took the original people who were creating the product, [but] I couldn&#39;t get anybody to fund us,&quot;&lt;/i&gt; Widenius said.&lt;/blockquote&gt;
Before being bought by Sun for an&amp;nbsp;astronomical&amp;nbsp;amount of money (1 billion $), &lt;a href=&quot;http://www.mysql.com/&quot; target=&quot;_blank&quot;&gt;MySQL&lt;/a&gt; was profitable but in the range of few tens millions per year. You don&#39;t meet every day somebody putting billions on the table...&lt;br /&gt;
&lt;br /&gt;
My question is: what would force a company to pay for a product if they can have it for free? I guess &lt;a href=&quot;http://www.redhat.com/&quot; target=&quot;_blank&quot;&gt;RedHat&lt;/a&gt; owners asked themselves the same questions when they practically closed the RHEL product line source code, moving the community toward the &lt;a href=&quot;http://fedoraproject.org/&quot; target=&quot;_blank&quot;&gt;Fedora&lt;/a&gt; project. And now RedHat is making an huge amount of money from a product that is, by all means, the (almost) closed version of an open source effort.&lt;br /&gt;
&lt;br /&gt;
So, it is really hard to build open source products, like RedHat or Alfresco, for example, because, despite all the efforts to justify a dual licensing model, you cab grasp only a very small percentage of users available to pay for a commercial edition of any open-source software. Stressing the fact that going into production requires paid support can be helpful, but it&#39;s very hard to demonstrate where the break-even is. Somebody coud argue: is that product so buggy that I need to pay a lot of money for support? Very few companies have been&amp;nbsp;successful&amp;nbsp;in this.&lt;br /&gt;
&lt;br /&gt;
Instead of selling standalone products, I see an easier&amp;nbsp;path in building solutions and services on top of an open source ecosystem: companies and their developers collaborate in growing a set of tools, frameworks, libraries with an open source development model and communities. This allows to dramatically decrease R&amp;amp;D costs, sharing the benefits. Today I could build a whole enterprise platform with open source software only, from the operating system to middleware and client applications, probably with better quality than a closed counterpart. But, as&amp;nbsp;Widenius seems is learning the hard way, building an open source product and having paying customers is a different story: &lt;a href=&quot;http://www.alfresco.com/&quot; target=&quot;_blank&quot;&gt;not impossible&lt;/a&gt;, of course, but very hard.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Widenius again: &quot;&lt;i&gt;Open source is successful for &lt;a href=&quot;http://www.openstack.org/&quot; target=&quot;_blank&quot;&gt;OpenStack&lt;/a&gt; where you have a consortium of companies that are all putting money into developing it.&lt;/i&gt;&quot;&lt;/blockquote&gt;
Exactly what I mean: join to develop the common parts, share the costs and then compete in selling some unique services. But a stand-alone, open source product, created and supported by a single company, is a different story.</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/6093587797047364242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2013/05/open-source-products-big.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/6093587797047364242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/6093587797047364242'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2013/05/open-source-products-big.html' title='Open source products: the big misunderstanding'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-6584003240577571690</id><published>2012-11-13T11:38:00.000+01:00</published><updated>2012-12-08T10:48:46.719+01:00</updated><title type='text'>RESTful API memo: PUT and POST differences</title><content type='html'>Before start designing a RESTful API, have a look at&amp;nbsp;&lt;a href=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#&quot; target=&quot;_blank&quot;&gt;Hypertext Transfer Protocol -- HTTP/1.1, section 9&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&quot;&lt;i&gt;The &lt;b&gt;POST&lt;/b&gt; method is used to request that the origin server accept the entity enclosed in the request as a &lt;b&gt;new subordinate of the resource identified by the Request-URI&lt;/b&gt; in the Request-Line.&lt;/i&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
In other terms,&amp;nbsp;POST is meant to handle appends to existing resources or incremental creations of subordinate resources:&lt;br /&gt;
&lt;br /&gt;
&quot;&lt;i&gt;The actual function performed by the POST method is determined by the server and is usually dependent on the Request-URI. &lt;b&gt;The posted entity is subordinate to that URI in the same way that a file is subordinate to a directory containing it&lt;/b&gt;, a news article is subordinate to a newsgroup to which it is posted, or a record is subordinate to a database.&lt;/i&gt;&quot;&lt;br /&gt;
&lt;br /&gt;
PUT&amp;nbsp;instead&amp;nbsp;&lt;strike&gt;seems&lt;/strike&gt;&amp;nbsp;is more appropriate to handle one-shot creations, creating or replacing an entire resource in one single transaction:&lt;br /&gt;
&lt;br /&gt;
&quot;&lt;i&gt;The &lt;b&gt;PUT&lt;/b&gt; method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI.&lt;/i&gt;&quot;&lt;br /&gt;
&lt;br /&gt;
Differences between PUT and POST:&lt;br /&gt;
&lt;br /&gt;
&quot;&lt;i&gt;The fundamental difference between the POST and PUT requests is reflected in the different meaning of the Request-URI. &lt;b&gt;The URI in a POST request identifies the resource that will handle the enclosed entity&lt;/b&gt;. That resource might be a data-accepting process, a gateway to some other protocol, or a separate entity that accepts annotations. In contrast, &lt;b&gt;the URI in a PUT request identifies the entity enclosed with the request &lt;/b&gt;-- the user agent knows what URI is intended and the server MUST NOT attempt to apply the request to some other resource.&lt;/i&gt;&quot;&lt;br /&gt;
&lt;br /&gt;
Another remarkable difference is that PUT requests are required to be &lt;b&gt;idempotent&lt;/b&gt;, while POST are not:&lt;br /&gt;
&lt;br /&gt;
&quot;&lt;i&gt;Methods can also have the property of &#39;idempotence&#39; in that (aside from error or expiration issues) &lt;b&gt;the side-effects of N &amp;gt; 0 identical requests is the same as for a single request&lt;/b&gt;. The methods GET, HEAD, PUT and DELETE share this property. Also, the methods OPTIONS and TRACE SHOULD NOT have side effects, and so are inherently idempotent.&lt;/i&gt;&quot;&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/6584003240577571690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2012/11/restful-api-memo-put-and-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/6584003240577571690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/6584003240577571690'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2012/11/restful-api-memo-put-and-post.html' title='RESTful API memo: PUT and POST differences'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-2132988134732432304</id><published>2012-11-10T14:39:00.000+01:00</published><updated>2012-11-10T14:39:21.762+01:00</updated><title type='text'>Creating your private Git repository on Dropbox in less than 5 minutes</title><content type='html'>&lt;a href=&quot;https://github.com/&quot; target=&quot;_blank&quot;&gt;Github&lt;/a&gt; is the tool I use daily to manage my public software projects, I love it. But sometimes I have to quickly and temporarily share private projects with colleagues or maybe even in a mixed environment, with customers and consultants from other companies. When there is no time / money to buy private remote repos from Github or even install a local Git repo on some server, &amp;nbsp;and for privacy constraints it is not possibile to&amp;nbsp;publish&amp;nbsp;the code on a public Github repo, then &lt;a href=&quot;https://www.dropbox.com/&quot; target=&quot;_blank&quot;&gt;Dropbox&lt;/a&gt; comes to the rescue.&lt;br /&gt;
&lt;br /&gt;
In this example I&#39;m working on a simple Web application in&amp;nbsp;&lt;a href=&quot;http://flask.pocoo.org/&quot; target=&quot;_blank&quot;&gt;Flask&lt;/a&gt;, which is a cool&amp;nbsp;&lt;a href=&quot;http://python.org/&quot; target=&quot;_blank&quot;&gt;Python&lt;/a&gt;&amp;nbsp;micro-framework. I created a &quot;flask_sample&quot; folder which contains the code I want to version with Git and share with other colleagues.&lt;br /&gt;
&lt;br /&gt;
I promised it will take less than 5 minutes, so let&#39;s start.&lt;br /&gt;
&lt;br /&gt;
Move to your Dropbox folder (in my case it&#39;s in &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/Users/mturatti/Dropbox/&lt;/span&gt;) and create a folder to host all your remote git repositories:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ cd&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;/Users/mturatti/Dropbox/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$&amp;nbsp;mkdir git&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
Then create here the folder to host this remote repository:&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ cd git&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ mkdir flask_sample.git&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ cd flask_sample.git&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It&#39;s time to create a &lt;a href=&quot;http://www.gitguys.com/topics/shared-repositories-should-be-bare-repositories/&quot; target=&quot;_blank&quot;&gt;bare Git repository&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ git init --bare&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
You&#39;ll see it creates a structure similar to the following:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mturatti:~/Dropbox/git/flask_sample.git$ ls -l&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;total 24&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;-rw-r--r-- &amp;nbsp; 1 mturatti &amp;nbsp;staff &amp;nbsp; 23 &amp;nbsp;9 Nov 18:38 HEAD&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;-rw-r--r-- &amp;nbsp; 1 mturatti &amp;nbsp;staff &amp;nbsp;112 &amp;nbsp;9 Nov 18:38 config&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;-rw-r--r-- &amp;nbsp; 1 mturatti &amp;nbsp;staff &amp;nbsp; 73 &amp;nbsp;9 Nov 18:38 description&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;drwxr-xr-x &amp;nbsp;10 mturatti &amp;nbsp;staff &amp;nbsp;340 &amp;nbsp;9 Nov 18:38 hooks&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;drwxr-xr-x &amp;nbsp; 3 mturatti &amp;nbsp;staff &amp;nbsp;102 &amp;nbsp;9 Nov 18:38 info&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;drwxr-xr-x &amp;nbsp;11 mturatti &amp;nbsp;staff &amp;nbsp;374 &amp;nbsp;9 Nov 19:09 objects&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;drwxr-xr-x &amp;nbsp; 4 mturatti &amp;nbsp;staff &amp;nbsp;136 &amp;nbsp;9 Nov 18:38 refs&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now you have in place a git structure which can act as a shareable remote repository, even if in practice it&#39;s local to your hard disk. &lt;b&gt;Being a Dropbox folder will do the magic&lt;/b&gt; in terms of backups, sharing and synchronization.&lt;br /&gt;
&lt;br /&gt;
Initialize Git in your software project as usual (in my case the local project stays in&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/Users/mturatti/src/flask_sample)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ git init&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This creates the usual hidden .git folder.&lt;br /&gt;
The last configuration step is to add locally the previously created remote Git repository:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ git remote add origin file:///Users/mturatti/Dropbox/git/flask_sample.git&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Note we are using the &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;file://&lt;/span&gt; protocol for the remote Git repository here.&lt;br /&gt;
If you check the content of &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;.git/config&lt;/span&gt; file you&#39;ll see the new origin (in bold below):&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mturatti:~/src/flask_sample$ cat .git/config&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;[core]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;repositoryformatversion = 0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;filemode = true&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;bare = false&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;logallrefupdates = true&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;ignorecase = true&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;precomposeunicode = false&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;[remote &quot;origin&quot;]&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;url = file:///Users/mturatti/Dropbox/git/flask_sample.git&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;fetch = +refs/heads/*:refs/remotes/origin/*&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can start the &lt;a href=&quot;http://git-scm.com/book/ch2-2.html&quot; target=&quot;_blank&quot;&gt;usual Git lifecycle&lt;/a&gt;. For example, after you have added and committed all your files locally, you can &quot;push to origin&quot;, which will push your code to your remote Git repository saved on Dropbox:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ git push origin master&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The last step will be to &lt;a href=&quot;https://www.dropbox.com/help/19/en&quot; target=&quot;_blank&quot;&gt;share the Dropbox folder&lt;/a&gt; with your colleagues, so that they can also add this as a remote repository and start cloning / pulling / pushing from this origin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-UfyzqifY8sg/UJ5VEYlKZCI/AAAAAAAAAow/DcPyyL2LOAI/s1600/share.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;371&quot; src=&quot;http://2.bp.blogspot.com/-UfyzqifY8sg/UJ5VEYlKZCI/AAAAAAAAAow/DcPyyL2LOAI/s640/share.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/2132988134732432304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2012/11/creating-your-private-git-repository-on.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2132988134732432304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2132988134732432304'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2012/11/creating-your-private-git-repository-on.html' title='Creating your private Git repository on Dropbox in less than 5 minutes'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-UfyzqifY8sg/UJ5VEYlKZCI/AAAAAAAAAow/DcPyyL2LOAI/s72-c/share.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-2625692159709192642</id><published>2012-09-29T16:53:00.000+02:00</published><updated>2012-12-15T13:54:29.883+01:00</updated><title type='text'>Time, Cost, Quality and Agile Consulting</title><content type='html'>&lt;h3&gt;
Types of Consulting Engagements&lt;/h3&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;background-color: white; color: #181818; font-family: georgia, serif; font-size: 14px; line-height: 18px; text-align: left;&quot;&gt;&lt;i&gt;“Sometimes it&#39;s a little better to travel than to arrive”&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #181818; font-family: georgia, serif; font-size: 14px; line-height: 18px; text-align: left;&quot;&gt;―&amp;nbsp;&lt;/span&gt;Robert M. Pirsig&lt;span style=&quot;background-color: white; color: #181818; font-family: georgia, serif; font-size: 14px; line-height: 18px; text-align: left;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;i style=&quot;background-color: white; color: #181818; font-family: georgia, serif; font-size: 14px; line-height: 18px; text-align: left;&quot;&gt;Zen and the Art of Motorcycle Maintenance: An Inquiry Into Values&lt;/i&gt;&lt;/blockquote&gt;
In my software consulting experience I have been engaged in many different kind of projects, but in all cases they fall into two main categories:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Time and Material (T&amp;amp;M)&lt;/li&gt;
&lt;li&gt;Fixed Price (FP)&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
In most situations it happens than to decide that option #2 is achievable, then &lt;b&gt;a quantity of T&amp;amp;M analysis must be performed in&amp;nbsp;advance&lt;/b&gt;,&amp;nbsp;in order to define the context and the scope for a possible, successive FP engagement. That&#39;s not always possible: for example, when the project is part of a public tender, you have to bid for the lowest possible price, trying to balance the need for adding a good amount of contingency, staying into the safe path, without self-sabotaging the possibility of winning the tender.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
What marks the difference between T&amp;amp;M and fixed price? In T&amp;amp;M a customer is basically &lt;b&gt;paying for your time,&lt;/b&gt; because deliverables and scope can&#39;t be clearly set in advance, or because it&#39;s already established that requirements are going to change in a way that a Fixed Price engagement is out of question, because it&#39;s too risky. A Fixed Price project is based on a set of much more stringent assumptions, in terms of context, requirements, functional and technical, which (hopefully) allows for a &lt;b&gt;very accurate estimate of deliverables&lt;/b&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Usually customers are more keen on FP because, of course, they think it will constraint the final price &lt;b&gt;by putting much more responsibilities on the consultant&lt;/b&gt;, while T&amp;amp;M seems a way to create a continuos stream of expenses. However, in reality, there is a more fundamental law which regulates any kind of software project, despite the rules of engagement, and it is related to the existing and unavoidable strong relationship among three distinct, fundamental quantities: Time, Cost and Quality.&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
The Basic Conjecture of&amp;nbsp;Time, Cost and Quality&lt;/h3&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;background-color: white; color: #181818; font-family: georgia, serif; font-size: 14px; line-height: 18px; text-align: left;&quot;&gt;&lt;i&gt;“When analytic thought, the knife, is applied to experience, something is always killed in the process.”&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #181818; font-family: georgia, serif; font-size: 14px; line-height: 18px; text-align: left;&quot;&gt;―&amp;nbsp;&lt;/span&gt;Robert M. Pirsig&lt;span style=&quot;background-color: white; color: #181818; font-family: georgia, serif; font-size: 14px; line-height: 18px; text-align: left;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;i style=&quot;background-color: white; color: #181818; font-family: georgia, serif; font-size: 14px; line-height: 18px; text-align: left;&quot;&gt;Zen and the Art of Motorcycle Maintenance: An Inquiry Into Values&lt;/i&gt;&lt;/blockquote&gt;
&lt;div&gt;
It&#39;s almost incredible how many people actually think they can leverage Fixed Price to be in total control, at the same time, of these three quantities:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;The elapsed &lt;b&gt;time&lt;/b&gt; spent from start to finish, so the final delivery date;&lt;/li&gt;
&lt;li&gt;The total &lt;b&gt;cost&lt;/b&gt;, in terms of direct money and indirect materials;&lt;/li&gt;
&lt;li&gt;The overall &lt;b&gt;quality&lt;/b&gt; of the final product.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
This assumption has been historically proven false by practice, for &lt;b&gt;&lt;i&gt;any non-trivial software project or consulting engagement&lt;/i&gt;&lt;/b&gt;. It&#39;s a conjecture and not a theorem or a physical law, but reality has taught me that, in software development and software consulting, &lt;b&gt;it is possible to accurately be in control of only two over three of these quantities&lt;/b&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Some examples are needed: if a project has a fixed delivery date and a fixed price, then the only left quantity one can possibly control is quality. Would it maybe explains why so many FP projects suffer from poor perceived quality?&lt;/div&gt;
&lt;div&gt;
On the other hand there is another fundamental speculation which states that &lt;b&gt;&lt;i&gt;&quot;Nine women can&#39;t deliver a baby in one month&quot;&lt;/i&gt;&lt;/b&gt;. It means that, if delivery dates and quality are fixed, one is tempted to keep adding resources, in terms of people and infrastructure, loosing control about costs. In practice this tactic even leads to also increasing delivery time, because&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/The_Mythical_Man-Month&quot; target=&quot;_blank&quot;&gt;adding people on a late project usually delays it even more&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
A third case is when we try to fix both cost and quality, but then we accept that elapsed time can&#39;t be predicted accurately. This is the case, for example, of companies trying to outsource development to offshore facilities, where cheaper labor force can easily be&amp;nbsp;hired. Statistically this strategy has led many projects to both an indefinite development time but also poorer quality.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It&#39;s all about one single truth: &lt;b&gt;software development is inherently not a traditional engineering activity&lt;/b&gt;. Actually,&amp;nbsp;&lt;a href=&quot;http://www.artima.com/intv/garden.html&quot; target=&quot;_blank&quot;&gt;Programming is Gardening, not Engineering&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Agile Development and Agile Consulting&lt;/h3&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&quot;Simplicity is the ultimate sophistication&quot;&lt;/i&gt;. ~ Leonardo da Vinci.&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;div&gt;
So, at first sight, it seams there is no escape from the T, C &amp;amp; Q rule. But we are not doomed. In fact, as I wrote before, the rule applies for&amp;nbsp;&lt;i&gt;any non trivial software project&lt;/i&gt;.&amp;nbsp;So the trick here is: to transform big projects or big consulting engagements into a finite sequence of very focused, well defined, little activities or mini-engagements. This is why &lt;a href=&quot;http://en.wikipedia.org/wiki/Scrum_(development)&quot; target=&quot;_blank&quot;&gt;time-boxing&lt;/a&gt; or &lt;a href=&quot;http://www.infoq.com/articles/hiranabe-lean-agile-kanban&quot; target=&quot;_blank&quot;&gt;feature-boxing&lt;/a&gt;&amp;nbsp;usually work effectively, and that&#39;s what actually Agile Methodologies are, more or less, trying to achieve:&amp;nbsp;&lt;b&gt;transforming complexity into something more manageable and predictable, by splitting big activities into little, possibly trivial, short tasks, which can be handled in few hours or days by very few people.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I think that &lt;a href=&quot;http://agilemanifesto.org/&quot; target=&quot;_blank&quot;&gt;agile methodologies&lt;/a&gt; can and should be successfully applied also to pure software consulting, so to the kind of engagement usually performed in T&amp;amp;M. The main pillars of this strategy are nothing new and can be summarized as:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Focus on &lt;a href=&quot;http://www.mountaingoatsoftware.com/topics/user-stories&quot; target=&quot;_blank&quot;&gt;User Stories&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;Short iterations, usually no more than two or three weeks long;&lt;/li&gt;
&lt;li&gt;Continuos Integration and Continuos Delivery of valuable pieces of software;&lt;/li&gt;
&lt;li&gt;Acceptance tests at the end of each iteration or when a single deliverable is ready.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As a side note: &lt;b&gt;if you are strictly required to be on-site then that is not a Fixed Price project by definition&lt;/b&gt;! Fixed Price engagements MUST be off-site, exactly because you don&#39;t want to waste time renegotiating the scope each single moment. It is necessary to have customers involved daily and keep things very flexible, but&amp;nbsp;asynchronous interruptions must be avoided at all costs. The main objective is to understand what final users want and adapt when requirements are changing, but &lt;b&gt;this must be addressed by the process&lt;/b&gt;, not individuals. T&amp;amp;M is very different: as customer pays for your time he is entirely entitled to interrupt you and change tasks even in the middle of them. That&#39;s why &lt;b&gt;committing on any detailed deliverable in a T&amp;amp;M assignment is extremely dangerous&lt;/b&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
The Need for Good Architectural Decisions&lt;/h3&gt;
&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&quot;We are searching for some kind of harmony between two intangibles: a form which we have not yet designed and a context which we cannot properly describe.&quot;&amp;nbsp;&lt;/i&gt;~&amp;nbsp;Christopher Alexander.&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;div&gt;
The missing piece, for a &lt;a href=&quot;http://martinfowler.com/bliki/UseCasesAndStories.html&quot; target=&quot;_blank&quot;&gt;Use Case made of several User Stories&lt;/a&gt;, is a comprehensive and reasonably complete &lt;b&gt;Technical Architecture&lt;/b&gt;. In other words, I do believe in that kind of bottom up, emerging software design coming from an Agile, iterative process, but I think this must be developed within the frame of a clear up-front Architecture.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I mean that refactoring code and design is not only necessary, but even desirable. Then, in my experience,&lt;b&gt; refactoring wrong initial architectural decisions can be extremely expensive and usually leads to big failures&lt;/b&gt;. I strongly believe that the role of an experienced architect is key to produce quality software systems, and this fact sounds to me to be often&amp;nbsp;too&amp;nbsp;underestimated in the field of Agile Methodologies. Do not fool yourself by believing your so-called &quot;rockstar developers&quot; (horrible term!) alone can also actually imagine, design and implement a complete and working technical architecture.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Speaking of consulting, even a short T&amp;amp;M engagement should be performed in the context of a well designed architecture, because even the best expert can be unable to deliver anything useful if the architectural context is broken. Focus your first steps at customer site on two main things: &lt;b&gt;understanding their existing architecture and development process&lt;/b&gt;, and start fixing them if they are clearly broken. Otherwise the risk of failing and not get paid will be too high, despite the fact it&#39;s T&amp;amp;M or FP.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/2625692159709192642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2012/09/time-cost-quality-and-agile-consulting.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2625692159709192642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2625692159709192642'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2012/09/time-cost-quality-and-agile-consulting.html' title='Time, Cost, Quality and Agile Consulting'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-2564357352240102821</id><published>2012-04-10T01:10:00.000+02:00</published><updated>2013-04-09T15:51:15.688+02:00</updated><title type='text'>Managing Multiple JDK on Mac OS X</title><content type='html'>Recently I had to install the&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/OpenJDK&quot; target=&quot;_blank&quot;&gt;OpenJDK&lt;/a&gt; 7 on my Apple MacBook, but keeping the original JDK 6 as my main Java environment. After browsing the Internet I came to a decent set of instructions (Tested with OS X Lion 10.7.3).&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;In summary:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strike&gt;Get the OpenJDK from&amp;nbsp;&lt;a href=&quot;http://code.google.com/p/openjdk-osx-build/&quot;&gt;http://code.google.com/p/openjdk-osx-build/&lt;/a&gt;&amp;nbsp;(I chose&amp;nbsp;&lt;a href=&quot;http://code.google.com/p/openjdk-osx-build/wiki/OpenJDK7JDK7U4&quot; target=&quot;_blank&quot;&gt;JDK 7u4&lt;/a&gt;, which at present seems to be the latest stable build);&lt;/strike&gt;&amp;nbsp;The JDK 7 is now a regular download by Oracle:&amp;nbsp;&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot;&gt;http://www.oracle.com/technetwork/java/javase/downloads/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Install the downloaded &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;.dmg&lt;/span&gt; package;&lt;/li&gt;
&lt;li&gt;Change your Java Preferences&amp;nbsp;accordingly, by moving on top the &quot;OpenJDK 7&quot; item (by default Java SE 6 is the first item - see below picture);&lt;/li&gt;
&lt;li&gt;Automatically set the&amp;nbsp;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;JAVA_HOME&lt;/span&gt;&amp;nbsp;variable, so that shell tools work.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-bKA5bdAPLmnCKerjSquldxoi2WmhnkcrFs4mvu3rvGM409CTklJ4f4TUcul4RMP9BSUWFTWAq9cjAyAtvGxkcRu73-4AmMJLqQI4YTUz4WJM9XUcr60cu6CZbNRYnZ0NYWidFtl14-w/s1600/Schermata+04-2456028+alle+00.36.50.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;492&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-bKA5bdAPLmnCKerjSquldxoi2WmhnkcrFs4mvu3rvGM409CTklJ4f4TUcul4RMP9BSUWFTWAq9cjAyAtvGxkcRu73-4AmMJLqQI4YTUz4WJM9XUcr60cu6CZbNRYnZ0NYWidFtl14-w/s640/Schermata+04-2456028+alle+00.36.50.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
To automatically setup the &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;JAVA_HOME&lt;/span&gt; variable it&#39;s necessary to add few lines to the &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;.profile&lt;/span&gt;.&lt;/div&gt;
&lt;div&gt;
So, edit this file (it&#39;s in your home directory) adding the following lines:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;# Change your JAVA_HOME
function setjdk() {
   if [ $# -ne 0 ];
      then export JAVA_HOME=`/usr/libexec/java_home -v $@`;
   fi;
   java -version;
}
# Automatically set the JAVA_HOME
export JAVA_HOME=`/usr/libexec/java_home` 
echo &#39;JAVA_HOME=&#39;$JAVA_HOME
&lt;/pre&gt;
&lt;br /&gt;
Note that the optional&amp;nbsp;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;setjdk&lt;/span&gt; function allows for&amp;nbsp;dynamically&amp;nbsp;changing the &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;JAVA_HOME&lt;/span&gt; if you switch items in your &quot;Java Preferences&quot;, otherwise many Java tools won&#39;t work if &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;JAVA_HOME&lt;/span&gt; is not in synch with the System settings.&lt;br /&gt;
&lt;br /&gt;
Whenever you change the default JDK using the &quot;Java Preferences&quot; tool, then any new terminal will automatically pick-up the new &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;JAVA_HOME&lt;/span&gt; by executing &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;/usr/libexec/java_home&lt;/span&gt;, so executing the&amp;nbsp;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;setjdk&lt;/span&gt;&amp;nbsp;function is not usually necessary, unless you really don&#39;t want to close and re-open the terminal (opening the terminal reloads the &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;.profile&lt;/span&gt;).&amp;nbsp;Alternatively issue the command &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;source .profile&lt;/span&gt; in you shell.&lt;br /&gt;
&lt;br /&gt;
That&#39;s it, now you can install multiple JDKs and select them&amp;nbsp;dynamically, by just using the &quot;Java Preferences&quot; tool, without touching any system file by hand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/2564357352240102821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2012/04/managing-multiple-jdk-on-mac-os-x.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2564357352240102821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/2564357352240102821'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2012/04/managing-multiple-jdk-on-mac-os-x.html' title='Managing Multiple JDK on Mac OS X'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-bKA5bdAPLmnCKerjSquldxoi2WmhnkcrFs4mvu3rvGM409CTklJ4f4TUcul4RMP9BSUWFTWAq9cjAyAtvGxkcRu73-4AmMJLqQI4YTUz4WJM9XUcr60cu6CZbNRYnZ0NYWidFtl14-w/s72-c/Schermata+04-2456028+alle+00.36.50.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-649584015935222060</id><published>2012-04-07T16:28:00.000+02:00</published><updated>2012-10-08T00:54:30.141+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><title type='text'>XML Schema and WSDL modules for Netbeans 7.x</title><content type='html'>A couple of years ago I wrote a &lt;a href=&quot;http://camelcase.blogspot.it/2010/07/xml-schema-and-wsdl-modules-for.html&quot; target=&quot;_blank&quot;&gt;blog entry&lt;/a&gt; about how to install the missing &lt;a href=&quot;http://xml.netbeans.org/&quot; target=&quot;_blank&quot;&gt;XML Schema Editor&lt;/a&gt; and related utilities from the dev update center in Netbeans 6.9. Now there is a unofficial update center:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://deadlock.netbeans.org/hudson/job/xml/lastSuccessfulBuild/artifact/build/updates/updates.xml&quot;&gt;http://deadlock.netbeans.org/hudson/job/xml/lastSuccessfulBuild/artifact/build/updates/updates.xml&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
It contains the development branches of these and &lt;a href=&quot;https://blogs.oracle.com/geertjan/entry/xml_schema_editor_in_netbeans&quot; target=&quot;_blank&quot;&gt;instructions on how to install&lt;/a&gt;, thanks to Geertjan Wielenga.&lt;br /&gt;
&lt;br /&gt;
I installed the plugin on Netbeans 7.1 [update: I installed it also in 7.2]&amp;nbsp;and it seems to work, even if I did not test it intensively, primarily because these days I&#39;m no more working that much with XML Schemas and WSDL files.&lt;br /&gt;
&lt;br /&gt;
There is an apparently disabled &lt;a href=&quot;http://deadlock.netbeans.org/hudson/job/xml/&quot; target=&quot;_blank&quot;&gt;Hudson project&lt;/a&gt; for the XML Tools. Now, if you want to put this nice plugin back into the regular plugin repository,&lt;b&gt; &lt;a href=&quot;http://netbeans.org/bugzilla/show_bug.cgi?id=184379&quot; target=&quot;_blank&quot;&gt;please vote for this issue&lt;/a&gt;&lt;/b&gt;!</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/649584015935222060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2012/04/xml-schema-and-wsdl-modules-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/649584015935222060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/649584015935222060'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2012/04/xml-schema-and-wsdl-modules-for.html' title='XML Schema and WSDL modules for Netbeans 7.x'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-196881643633162851</id><published>2011-11-24T11:41:00.001+01:00</published><updated>2012-07-29T18:35:23.270+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alfresco"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><title type='text'>Starting with CMIS and Maven</title><content type='html'>This post aims to be an short how-to for setting up a&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services&quot; target=&quot;_blank&quot;&gt;CMIS&lt;/a&gt; development environment based on &lt;a href=&quot;http://maven.apache.org/&quot; target=&quot;_blank&quot;&gt;Maven&lt;/a&gt; and &lt;a href=&quot;http://chemistry.apache.org/&quot; target=&quot;_blank&quot;&gt;Apache Chemistry&lt;/a&gt;, specifically the OpenCMIS Java API, part of the Chemistry project.&lt;br /&gt;
&lt;br /&gt;
I won&#39;t cover Maven installation and configuration here, so I assume you have Maven 2 or 3 &lt;a href=&quot;http://maven.apache.org/run-maven/index.html&quot; target=&quot;_blank&quot;&gt;up and running&lt;/a&gt;. With Maven you&#39;ll be independent from any specific IDE, so that you can manage your development cycle from the command line only.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Glossary&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services&quot; target=&quot;_blank&quot;&gt;CMIS&lt;/a&gt; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services&quot; target=&quot;_blank&quot;&gt;Content Management Interoperability Services&lt;/a&gt;) =&amp;gt;&quot;is a specification for improving interoperability between Enterprise Content Management systems. OASIS, a web standards consortium, approved CMIS as an OASIS Specification on May 1, 2010.&amp;nbsp;CMIS provides a common data model covering typed files, folders with generic properties that can be set or read. In addition there may be an access control system, and a checkout and version control facility, and the ability to define generic relations. There is a set of generic services for modifying and querying the data model, and several protocol bindings for these services, including SOAP and Representational State Transfer (REST), using the Atom convention. The model is based on common architectures of document management systems.&quot;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://chemistry.apache.org/&quot; target=&quot;_blank&quot;&gt;Apache Chemistry&lt;/a&gt; =&amp;gt; &quot;Apache Chemistry provides open source implementations of the Content Management Interoperability Services (CMIS) specification.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://chemistry.apache.org/java/opencmis.html&quot; target=&quot;_blank&quot;&gt;OpenCMIS&lt;/a&gt; =&amp;gt; &quot;Apache Chemistry OpenCMIS is a collection of Java libraries, frameworks and tools around the CMIS specification.&amp;nbsp;The goal of OpenCMIS is to make CMIS simple for Java client and server developers. It hides the binding details and provides APIs and SPIs on different abstraction levels. It also includes test tools for content repository developers and client application developers.&quot;&lt;/li&gt;
&lt;li&gt;Apache &lt;a href=&quot;http://maven.apache.org/&quot; target=&quot;_blank&quot;&gt;Maven&lt;/a&gt; =&amp;gt; &quot;Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project&#39;s build, reporting and documentation from a central piece of information.&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Ingredients&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;A simple text editor or any decent Java IDE&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Maven 2 or 3&lt;/li&gt;
&lt;li&gt;A CMIS server for real-world testing&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
In my case I&#39;m using IntelliJ IDEA, which is excellent. I&#39;m an old &lt;a href=&quot;http://netbeans.org/&quot; target=&quot;_blank&quot;&gt;Netbeans&lt;/a&gt; guy and both IDEs offer superior Maven integration, but it happens that I&#39;m just having a look at IntelliJ these days.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To cover point # 3 I have selected the reference CMIS server implementation so far, which is&amp;nbsp;&lt;a href=&quot;http://alfresco.com/&quot; target=&quot;_blank&quot;&gt;Alfresco&lt;/a&gt;. &amp;nbsp;OpenCMIS offers a basic CMIS server implementation for your self-contained unit tests, but for end-to-end integration testing I prefer to link to a real ECM system.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You can download the latest Alfresco Community Edition for free from &lt;a href=&quot;http://wiki.alfresco.com/wiki/Download_Community_Edition&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. At present the brand new 4.0 is available.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Setup&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;Note: I won&#39;t cover Alfresco&#39;s installation and configuration here because it&#39;s not in the scope of this post. You can already find plenty of&amp;nbsp;&lt;a href=&quot;http://docs.alfresco.com/4.0/index.jsp&quot; target=&quot;_blank&quot;&gt;excellent online resources&lt;/a&gt; for that.&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Just open a shell, place into a folder and run the following Maven command, to create a very basic Java project through the &lt;a href=&quot;http://maven.apache.org/archetype/maven-archetype-bundles/maven-archetype-quickstart/&quot; target=&quot;_blank&quot;&gt;quickstart archetype&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;mvn archetype:generate -DgroupId=com.myapps \
                       -DartifactId=my-first-cmis \
                       -Dversion=1.0-SNAPSHOT \
                       -DarchetypeArtifactId=maven-archetype-quickstart \
                       -DinteractiveMode=false
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
You&#39;ll end having the following usual project structure:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;source-code&quot;&gt;&lt;code&gt;project
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- App.java
    `-- test
        `-- java
            `-- AppTest.java
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
The pom.xml file is the center of the Maven&#39;s universe. We need to edit it for adding a few lines of XML so that we can build with OpenCMIS libraries.&lt;br /&gt;
Here is the default pom.xml created by the archetype:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;
  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
  &amp;lt;groupId&amp;gt;com.myapps&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;my-first-cmis&amp;lt;/artifactId&amp;gt;
  &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;
  &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;
  &amp;lt;name&amp;gt;my-first-cmis&amp;lt;/name&amp;gt;
  &amp;lt;url&amp;gt;http://maven.apache.org&amp;lt;/url&amp;gt;
  &amp;lt;dependencies&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;3.8.1&amp;lt;/version&amp;gt;
      &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
  &amp;lt;/dependencies&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Now we need to put the following XML snippet into pom.xml to activate the OpenCMIS libraries:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;org.apache.chemistry.opencmis&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;chemistry-opencmis-client-impl&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;0.6.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
At present the latest stable OpenCMIS release is 0.6.0, you can modify the pom.xml file accordingly whenever a new version is released.&lt;br /&gt;
&lt;br /&gt;
This is the final POM file:&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;
  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
  &amp;lt;groupId&amp;gt;com.myapps&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;my-first-cmis&amp;lt;/artifactId&amp;gt;
  &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;
  &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;
  &amp;lt;name&amp;gt;my-first-cmis&amp;lt;/name&amp;gt;
  &amp;lt;url&amp;gt;http://maven.apache.org&amp;lt;/url&amp;gt;
  &amp;lt;dependencies&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.apache.chemistry.opencmis&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;chemistry-opencmis-client-impl&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;0.6.0&amp;lt;/version&amp;gt;
    &amp;lt;/dependency&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;3.8.1&amp;lt;/version&amp;gt;
      &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
  &amp;lt;/dependencies&amp;gt;
&amp;lt;/project&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Now that your development environment is ready and you can build both from the shell and the IDE, you can start &lt;a href=&quot;http://chemistry.apache.org/java/examples/index.html&quot; target=&quot;_blank&quot;&gt;exploring some examples&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Issuing a&amp;nbsp;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mvn clean compile&lt;/span&gt;&amp;nbsp;command in your shell will start the process.&lt;br /&gt;
If it&#39;s the first time you run Maven then it will try to download many dependencies, but don&#39;t worry and be patient, all successive runs will be very fast.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/196881643633162851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2011/11/starting-with-cmis-and-maven.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/196881643633162851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/196881643633162851'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2011/11/starting-with-cmis-and-maven.html' title='Starting with CMIS and Maven'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-838829864938019951</id><published>2011-03-04T11:54:00.004+01:00</published><updated>2011-03-07T11:55:33.203+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alfresco"/><title type='text'>Purge Alfresco archived nodes</title><content type='html'>I was looking for a way to&amp;nbsp;automatically purge the Alfresco trashcan and, after a while I think I came out to what looks like a decent solution.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;DISCLAIMER&lt;/b&gt;: The procedure described in this article has not been tested intensively and comes without any implied warranty of fitness for a particular purpose. You should check the code, test it and decide yourself if fits your needs, saving all your data before any experiment.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;The problem&lt;/span&gt;&lt;br /&gt;
After some time, deleting contents can fill the Alfresco&#39;s trashcan and removing nodes manually with the UI can be&amp;nbsp;unpractical (users always forget about this). Alfresco does not actually delete content, but moves deleted nodes into the archive store, which is like a trashcan. Deleted contents can stay there forever, until users decide to clean-up the trashcan. In a big repository this could lead to a huge waste of resources.&lt;br /&gt;
&lt;br /&gt;
I need a service I can invoke programmatically to empty the trashcan, for example by scheduling a task with an external job. I don&#39;t like to deploy into Alfresco a scheduled task controlled by the embedded Quartz, I think it&#39;s cleaner to move the scheduling outside and deploy into Alfresco always the bare minimum.&lt;br /&gt;
&lt;br /&gt;
Even after the trashcan has been emptied, this just means nodes are only marked as &quot;orphans&quot;, moved into &lt;code&gt;alf_data/contentstore.deleted&lt;/code&gt; and can be phisically removed by a &lt;a href=&quot;http://dev.alfresco.com/resource/docs/java/repository/org/alfresco/repo/content/cleanup/ContentStoreCleaner.html&quot;&gt;contentStoreCleaner&lt;/a&gt;&amp;nbsp;asynchronous task. So there is a safety net in Alfresco to avoid at all costs accidental deletions.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://lh6.googleusercontent.com/-qbFghMC26xw/TW0Z4iHKhyI/AAAAAAAAAMM/zI17KoBKW3I/s1600/2011-03-01+04.15.27+pm.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;482&quot; src=&quot;https://lh6.googleusercontent.com/-qbFghMC26xw/TW0Z4iHKhyI/AAAAAAAAAMM/zI17KoBKW3I/s640/2011-03-01+04.15.27+pm.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Cleaning-up archived nodes&lt;/span&gt;&lt;br /&gt;
I have developed a simple &lt;a href=&quot;http://wiki.alfresco.com/wiki/Java-backed_Web_Scripts_Samples&quot;&gt;Java-backed Web Script&lt;/a&gt; for Alfresco 3.4 (It should work with Alfresco 3.2+) which can be invoked to clean-up the archived nodes. Below its major components:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;purge.get.desc.xml&lt;/b&gt;&lt;br /&gt;
Web Script descriptor&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&lt;webscript&gt;
    &lt;shortname&gt;Purge all&lt;/shortname&gt;
    &lt;description&gt;Purge all archived nodes&lt;/description&gt;
    &lt;url&gt;/purge&lt;/url&gt;
    &lt;authentication&gt;user&lt;/authentication&gt;
    &lt;transaction&gt;none&lt;/transaction&gt;
&lt;/webscript&gt;
&lt;/pre&gt;&lt;b&gt;purge.get.html.ftl&lt;/b&gt;&lt;br /&gt;
Freemarker template&lt;br /&gt;
&lt;script class=&quot;brush:html&quot; type=&quot;syntaxhighlighter&quot;&gt;
&lt;![CDATA[
&lt;html&gt; 
    &lt;head&gt;
        &lt;title&gt;Purge all&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
Alfresco ${server.edition} Edition v${server.version} :
&lt;p&gt;Purged all archived nodes. Elapsed time: ${elapsed} ms.&lt;/p&gt;&lt;/body&gt;
&lt;/html&gt;
]]&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;b&gt;purge-context.xml&lt;/b&gt;&lt;br /&gt;
Spring bean&#39;s configuration&lt;br /&gt;
&lt;script class=&quot;brush:xml&quot; type=&quot;syntaxhighlighter&quot;&gt;
&lt;![CDATA[
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE beans PUBLIC &quot;-//SPRING//DTD BEAN 2.0//EN&quot; &quot;http://www.springframework.org/dtd/spring-beans-2.0.dtd&quot;&gt;
&lt;beans&gt;
    &lt;bean id=&quot;webscript.it.alfresco.util.purge.get&quot;
          class=&quot;it.alfresco.util.Purge&quot; parent=&quot;webscript&quot;&gt;
        &lt;property name=&quot;nodeArchiveService&quot; ref=&quot;nodeArchiveService&quot;/&gt;
    &lt;/bean&gt;
&lt;/beans&gt;
]]&gt;
&lt;/script&gt;&lt;br /&gt;
I created &lt;code&gt;it/alfresco/utils&lt;/code&gt; folders under &lt;code&gt;/Company Home/Data Dictionary/Web Scripts Extensions&lt;/code&gt; where I created both &lt;code&gt;purge.get.desc.xml&lt;/code&gt; and &lt;code&gt;purge.get.html.ftl&lt;/code&gt;. &lt;br /&gt;
&lt;br /&gt;
The Spring context file &lt;code&gt;purge-context.xml&lt;/code&gt; goes under &lt;code&gt;/tomcat/shared/classes/alfresco/extension&lt;/code&gt; in the main alfresco installation folder.&lt;br /&gt;
&lt;br /&gt;
Our bean makes use of &lt;a href=&quot;http://dev.alfresco.com/resource/docs/java/repository/org/alfresco/repo/node/archive/NodeArchiveService.html&quot;&gt;&lt;code&gt;nodeArchiveService&lt;/code&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Here&#39;s the Java Code:&lt;br /&gt;
&lt;br /&gt;
&lt;script class=&quot;brush:java&quot; type=&quot;syntaxhighlighter&quot;&gt;
&lt;![CDATA[
package it.alfresco.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

import org.alfresco.repo.node.archive.NodeArchiveService;
import org.springframework.extensions.webscripts.Cache;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.DeclarativeWebScript;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.alfresco.service.cmr.repository.StoreRef;

/**
 *
 * @author mturatti
 */
public class Purge extends DeclarativeWebScript {

    final Logger logger = LoggerFactory.getLogger(Purge.class);
    private NodeArchiveService nodeArchiveService;

    public void setNodeArchiveService(NodeArchiveService nodeArchiveService) {
        this.nodeArchiveService = nodeArchiveService;
    }

    @Override
    protected Map&lt;String, Object&gt; executeImpl(WebScriptRequest req, Status status, Cache cache) {
        logger.info(&quot;@@@ Purging all archived nodes... &quot;);
        final long start = System.currentTimeMillis();
        try {
            this.nodeArchiveService.purgeAllArchivedNodes(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
        } catch (Throwable t) {
            logger.error(&quot;@@@ Error executing purge &quot;, t);
            errorMessage(status, Status.STATUS_INTERNAL_SERVER_ERROR,
                    &quot;Runtime error: &quot; + t.getMessage() + &quot;. Cause: &quot; + t.getCause());
            return null;
        }
        final long elapsed = System.currentTimeMillis() - start;
        Map&lt;String, Object&gt; model = new HashMap&lt;String, Object&gt;();
        model.put(&quot;elapsed&quot;, elapsed);
        logger.info(&quot;@@@ Elapsed time (ms): &quot; + elapsed);
        return model;
    }

    private void errorMessage(Status status, int code, final String message) {
        status.setCode(code);
        status.setMessage(message);
        status.setRedirect(true);
    }
}
]]&gt;
&lt;/script&gt;&lt;br /&gt;
The Purge project under &lt;a href=&quot;http://netbeans.org/&quot;&gt;Netbeans&lt;/a&gt; 6.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-k6I6956QhAw/TW0lrt0qCiI/AAAAAAAAAMQ/sFafXhuCadI/s1600/2011-03-01%2B05.55.21%2Bpm.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;451&quot; src=&quot;http://4.bp.blogspot.com/-k6I6956QhAw/TW0lrt0qCiI/AAAAAAAAAMQ/sFafXhuCadI/s640/2011-03-01%2B05.55.21%2Bpm.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The bean is injected with nodeArchiveService and calls method &lt;a href=&quot;http://dev.alfresco.com/resource/docs/java/repository/org/alfresco/repo/node/archive/NodeArchiveService.html#purgeAllArchivedNodes(org.alfresco.service.cmr.repository.StoreRef)&quot;&gt;&lt;code&gt;purgeAllArchivedNodes&lt;/code&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The single most important line of code is:&lt;br /&gt;
&lt;pre&gt;this.nodeArchiveService.purgeAllArchivedNodes(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
&lt;/pre&gt;&lt;br /&gt;
We are passing the &lt;code&gt;STORE_REF_WORKSPACE_SPACESSTORE&lt;/code&gt; constant, which is &quot;&lt;i&gt;the store that the items originally came from&lt;/i&gt;&quot;, as per JavaDocs:&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;purgeAllArchivedNodes&lt;/h3&gt;&lt;pre&gt;void &lt;b&gt;purgeAllArchivedNodes&lt;/b&gt;(org.alfresco.service.cmr.repository.StoreRef&amp;nbsp;originalStoreRef)&lt;/pre&gt;&lt;dl&gt;&lt;dd&gt;Permanently delete all archived nodes.&lt;/dd&gt;&lt;dd&gt;
&lt;dl&gt;&lt;dt&gt;&lt;b&gt;Parameters:&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;code&gt;originalStoreRef&lt;/code&gt;&amp;nbsp;- the store that the items originally came from&lt;/dd&gt;&lt;/dl&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Calling the WebScript&lt;/span&gt;&lt;br /&gt;
After starting Alfresco, to get a list of available &lt;a href=&quot;http://wiki.alfresco.com/wiki/Web_Scripts&quot;&gt;Web Scripts&lt;/a&gt; and check if this new one has been installed correctly, point the browser to&amp;nbsp;&lt;a href=&quot;http://localhost:8080/alfresco/service/index&quot;&gt;http://localhost:8080/alfresco/service/index&lt;/a&gt;&amp;nbsp;and then press link &quot;Browse all Web Scripts&quot;. &lt;b&gt;Remember to authenticate as admin&lt;/b&gt;, so that the Web Script can be ran with administrator privileges.&lt;br /&gt;
&lt;br /&gt;
The &quot;Purge&quot; Web Script should be the first one&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-5Si2BbHP4wQ/TW0p1ecV8wI/AAAAAAAAAMY/r3fWmz4hpI4/s1600/2011-03-01%2B06.14.41%2Bpm.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;328&quot; src=&quot;http://2.bp.blogspot.com/-5Si2BbHP4wQ/TW0p1ecV8wI/AAAAAAAAAMY/r3fWmz4hpI4/s640/2011-03-01%2B06.14.41%2Bpm.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;To invoke its execution and clean-up the trashcan you can call:&lt;br /&gt;
&lt;a href=&quot;http://localhost:8080/alfresco/service/purge&quot;&gt;http://localhost:8080/alfresco/service/purge&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
If everything went fine you should see the following response page:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: yellow;&quot;&gt;Alfresco Community Edition v3.4.0 (c 3335) :&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: yellow;&quot;&gt;Purged all archived nodes. Elapsed time: 438 ms.&lt;/span&gt;&lt;/blockquote&gt;Then verify all users&#39; trashcans are now empty:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://lh6.googleusercontent.com/-qME0YiDD1zs/TW0q7kWO2FI/AAAAAAAAAMg/mZOduYox-YA/s1600/2011-03-01+06.20.32+pm.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;482&quot; src=&quot;https://lh6.googleusercontent.com/-qME0YiDD1zs/TW0q7kWO2FI/AAAAAAAAAMg/mZOduYox-YA/s640/2011-03-01+06.20.32+pm.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
As we now have our RESTful purge Web Script in place, it&#39;s easy to call it from an external script, maybe scheduled via a cron job for a periodical clean-up. In alternative it&#39;s possible to use the Quartz engine embedded into Alfresco, but my personal preference is to avoid putting into Alfresco too many responsibilities: if you need to change the scheduling it&#39;s easier for maintenance to have an external scheduler.</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/838829864938019951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2011/03/purge-alfresco-archived-nodes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/838829864938019951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/838829864938019951'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2011/03/purge-alfresco-archived-nodes.html' title='Purge Alfresco archived nodes'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-qbFghMC26xw/TW0Z4iHKhyI/AAAAAAAAAMM/zI17KoBKW3I/s72-c/2011-03-01+04.15.27+pm.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-3998513903241842921</id><published>2011-02-10T16:01:00.001+01:00</published><updated>2011-10-01T13:10:14.499+02:00</updated><title type='text'>My Career Path</title><content type='html'>At least twice a &lt;strike&gt;year&lt;/strike&gt;&amp;nbsp;day I&#39;m thinking about my career path, I know it&#39;s a masochist attitude I can&#39;t prevent. I have changed many companies in the last few years and I have spent a lot of time traveling and consulting abroad, somehow until complete exhaustion. This year I&#39;m settling down a little and this can help thinking clearly and planning for the next move.&lt;br /&gt;
&lt;br /&gt;
However, you don&#39;t have many options if you leave in a mid-technical environment like Italy, where my natural attitude for freelance consulting is not easily sustainable. On the other hand, taking an airplane each Monday morning and sleeping in hotels five days out of seven is no more in my top list of wet dreams... I realized that after suddenly awaking in the middle of the night without knowing in what city or even nation I was: if you did consulting for more than few weeks per year, you know what I mean.&lt;br /&gt;
&lt;br /&gt;
At the end, even if one is in the middle of a transition, the most important thing is to know who you are and where you want to go in the next following years. I then was re-reading an &lt;a href=&quot;http://dannorth.net/classic-soa/&quot;&gt;old, beautiful article&lt;/a&gt; from Dan North when, in his blog, I have found the &lt;a href=&quot;http://dannorth.net/2010/02/06/time-for-a-change/&quot;&gt;best possibile definition&lt;/a&gt; for what I want to go (back) next:&lt;br /&gt;
&lt;blockquote&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #555555; font-family: Verdana, &#39;BitStream vera Sans&#39;, Helvetica, sans-serif; font-size: 12px; line-height: 17px;&quot;&gt;[...] In particular I found I had moved away from the things I really enjoyed – writing software that matters and building high-performing software teams – more towards big organisational change, which, while it arguably has a bigger impact on an organisation, isn’t really where I wanted to be. So my criteria for what to do next came down to: &lt;b&gt;writing business-critical software in a small, high-performing team, in an organisation that trusts its people and encourages them to excel. Having a great relationship with the consumers of that software and having them closely engaged with its delivery would be a huge plus&lt;/b&gt;.&lt;/span&gt;&lt;/blockquote&gt;
The above bold sentence should fly into my CV under the section &quot;Career Objectives&quot;.</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/3998513903241842921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2011/02/my-career-path.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/3998513903241842921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/3998513903241842921'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2011/02/my-career-path.html' title='My Career Path'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-387169161666879078</id><published>2011-01-16T14:02:00.002+01:00</published><updated>2011-01-20T10:48:03.854+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="business"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><title type='text'>It&#39;s time to apply consumer&#39;s design models to Enterprise systems</title><content type='html'>I&#39;m an happy Apple Mac user since one year now. I have never used a Mac before one year ago, when I decided to make the &lt;i&gt;quantum leap&lt;/i&gt;, also because most of my &lt;a href=&quot;http://www.alfresco.com/&quot;&gt;Alfresco&lt;/a&gt; colleagues run a Mac and I have been always curious to try it. Before my idea was that Macs were cool but too much of a closed platform, now I think Macs are just the best way to have my work done. I do not want to judge some Apple&#39;s very&amp;nbsp;restrictive&amp;nbsp;policies here, everybody has a different opinion (I think the idea of forcing Objective-C on the iPhone is moving millions of Java developers toward Google Android, for example).&lt;br /&gt;
&lt;br /&gt;
I had my MacBook Pro stolen few months ago but I also have an older PC-compatible laptop as a backup: after two days using it I felt the urgency to run to the very first Apple store to buy a new Mac. Back home, I opened the box, switch on it and after a few seconds it was able to recognize there is a NAS with &lt;a href=&quot;http://www.apple.com/macosx/what-is-macosx/time-machine.html&quot;&gt;Time-Machine&lt;/a&gt; backups: it offered me to restore the last backup and, after few hours, it was like my previous Mac was never stolen, as every piece of software was in its place, even the same desktop wallpaper and icons.&lt;br /&gt;
&lt;br /&gt;
I never have to run anti-virus software, I never have to run any disk defragmentation or registry maintenance. I do not waste time in maintenance of hardware drivers: Apple design both hardware and software to work together, so that the user experience is always the smoothest. I&#39;m also an happy user of &lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt; Linux, which in my opinion is by far the best desktop Linux distribution. Ubuntu also runs daily in my Mac through a &lt;a href=&quot;http://www.virtualbox.org/&quot;&gt;VirtualBox&lt;/a&gt; image, when I have to run some Linux software for my work. Despite the fact Ubuntu software is (almost) as easy as a Mac to install, configure and run, the fact is that Canonical - the company behind Ubuntu - is a software firm only, so they have to run their beautiful O.S. on a&amp;nbsp;multitude&amp;nbsp;of different hardware devices and software device drivers. This is the same problem Windows has. Each computer comes with different internal devices (motherboard, CPU, hard disk, network cards, Wifi cards, graphic card, ....), so there always a combination of hardware devices and software drivers which could cause a compatibility issue. It is always a race for Canonical, Microsoft and the others to prove their software on a plethora of hardware and sometimes broken drivers. So, when we put the blame on Microsoft in cases when Windows can be occasionally unstable, actually we should blame the real source, which usually is some sub-component of our PC and quite always a buggy software driver, which is out of control of Microsoft and others.&lt;br /&gt;
&lt;br /&gt;
Of course, the above was especially true in the early days of personal computing, when enthusiasts like me were used to assemble their PC by hand. Now, if you buy especially a laptop from, say, Dell, HP, IBM, etc... you can be pretty sure all components are pre-tested, so everything will (almost) work just fine. However, nobody designs and produces beautiful hardware and client software like Apple does so, despite all competitors&#39; efforts, my position is that the overall &lt;a href=&quot;http://designshack.co.uk/articles/inspiration/15-design-tips-to-learn-from-apple&quot;&gt;Apple user experience&lt;/a&gt; is still by far superior, exactly because every single component, together with communication, is designed with integration and user&#39;s experience in mind. It is &lt;a href=&quot;http://www.cooper.com/#about:books&quot;&gt;interaction design&lt;/a&gt; at its best.&lt;br /&gt;
&lt;br /&gt;
This positive and viable integration, by contrast, is very hard to be experienced when moving from consumer computing to Enterprise systems nowadays. Let&#39;s be honest:&lt;i&gt;&amp;nbsp;distributed enterprise systems are a total mess of hardware and software combinations&lt;/i&gt;. The level of&amp;nbsp;incompatibility&amp;nbsp;that we could have in a single consumer devices is multiplied by a magnitude factor. The major problems with Enterprise systems implemented, for example, in JEE or .NET, are due to inter-application and external systems integration issues. The applicative layer usually runs into different application servers, which runs over different operating systems and usually must connect to different relational databases, external information systems (ERP, CRM, ECM, etc....) and messaging systems. There is an explosive combinatorial matrix of configurations in need for testing and QA. At the end each customer needs to run on the existing infrastructure with few variations, so most of the time spent maintaining enterprise applications is actually spent trying to force a software into a specific and unique infrastructure: pitfalls are everywhere. Support centers spend most of their time just running after specific software + hardware configuration issues. No wonder if today some crucial business processes are still running into very old but well HW + SW integrated mainframes.&lt;br /&gt;
&lt;br /&gt;
The positive Apple&#39;s integration model should work also for enterprise-class solutions. In my mind Sun Microsystems was one of the companies going closer to applying the Apple&#39;s consumer integrated design model to the enterprise world. Sun designed both hardware and software (Solaris O.S., Java, etc were tuned to specific Sun&#39;s servers and components). Buying a Sun server was usually a positive integrated experience, running Oracle on Sun servers was a rock-solid decision. The main problem, in my humble opinion, is that Sun was not ready or not willing to go the extra mile: moving the software stack up to applicative layer and moving their business out of the commoditized server business. I mean, Sun&#39;s management perceived they had to, as the late open-source initiatives testifies,&amp;nbsp;but the company has never been structured to make this vital step forward executing the process in the right way (McNealy &lt;a href=&quot;http://www.theregister.co.uk/2010/12/07/mcnealy_sun_and_open_source/&quot;&gt;almost&amp;nbsp;acknowledges&lt;/a&gt;&amp;nbsp;this), so most of the ideas remained on paper or stuck without execution until Oracle&#39;s acquisition was the only way to save the company.&lt;br /&gt;
&lt;br /&gt;
I think strong infrastructural integration is now not enough for a vendor to exit from commoditization trends and for a customer to solve integration&#39;s madeness. Some Cloud Computing initiatives are a clear step in the direction of moving the stack up from Infrastructure as a Service to actual Software as a Service. At the end, moving in the cloud the infrastructure only is not going to solve most of the applicative-level problems of moder enterprise solutions: if, for example, I run my software into Amazon EC2, I can solve many infrastructural provisioning problems in a row, but at the applicative layer my J2EE solution is still running into different O.S and application servers which need to be integrated and tested for compatibility and performances.&lt;br /&gt;
&lt;br /&gt;
I guess, even if existing platforms are maybe too young and still immature to move all solutions there, the right direction for better isolating applications and application development from infrastructural problems will be to provide a complete, uniform applicative platform where most reliability and scalability problems are solved by model&#39;s definition. I think initiatives like the &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;Google App Engine&lt;/a&gt;,&amp;nbsp;VMWare&#39;s &lt;a href=&quot;http://www.springsource.com/products&quot;&gt;Cloud Application Framework&lt;/a&gt;, &lt;a href=&quot;http://www.salesforce.com/platform/&quot;&gt;Salesforce Platfom&lt;/a&gt; are good examples of what could bring Apple&#39;s consumer-side positive experience into the enterprise applications ecosystem soon. Companies should eventually show some perspective,&amp;nbsp;intelligence&amp;nbsp;and courage and&amp;nbsp;&lt;a href=&quot;http://www.networkworld.com/news/2008/102908-bechtel.html&quot;&gt;start experimenting&lt;/a&gt; as soon as possible.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update&lt;/b&gt; (20 Jan 2011): Amazon has just announced the new &lt;a href=&quot;http://aws.typepad.com/aws/2011/01/introducing-elastic-beanstalk.html&quot;&gt;AWS Elastic Beanstalk&lt;/a&gt;, which I think should be included in the above list of advanced PaaS solution. It looks much like &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;GAP&lt;/a&gt; and at first sight &lt;a href=&quot;http://aws.amazon.com/elasticbeanstalk/&quot;&gt;Amazon&#39;s new platform&lt;/a&gt; shows an interesting degree of flexibility for developers. First released version is for Java.</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/387169161666879078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2011/01/its-time-to-apply-consumers-design.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/387169161666879078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/387169161666879078'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2011/01/its-time-to-apply-consumers-design.html' title='It&#39;s time to apply consumer&#39;s design models to Enterprise systems'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-7931423452650116950</id><published>2010-10-21T10:18:00.000+02:00</published><updated>2010-10-21T10:18:44.381+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="distributed"/><category scheme="http://www.blogger.com/atom/ns#" term="transactions"/><title type='text'>XA Transactions</title><content type='html'>Reading &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/xa.html&quot;&gt;MySQL documentation&lt;/a&gt; I have found a good description of how &lt;a href=&quot;http://en.wikipedia.org/wiki/X/Open_XA&quot;&gt;XA distributed transactions&lt;/a&gt; and two-phases commit work. I like to share it because it&#39;s short, clear and applies in general situations. It also teaches us why distributed transaction, being much more complex, should be managed very carefully to avoid severe&amp;nbsp;performance penalties.&lt;br /&gt;
&lt;blockquote&gt;Applications that use global transactions involve one or more &lt;b&gt;Resource Managers&lt;/b&gt; and a &lt;b&gt;Transaction Manager&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
A &lt;b&gt;Resource Manager&lt;/b&gt; (RM) provides access to transactional resources. A database server is one kind of resource manager. It must be possible to either commit or roll back transactions managed by the RM.&lt;br /&gt;
&lt;br /&gt;
A &lt;b&gt;Transaction Manager&lt;/b&gt; (TM) coordinates the transactions that are part of a global transaction. It communicates with the RMs that handle each of these transactions. The individual transactions within a global transaction are “branches” of the global transaction. Global transactions and their branches are identified by a naming scheme described later.&lt;br /&gt;
&lt;br /&gt;
The MySQL implementation of XA MySQL enables a MySQL server to act as a Resource Manager that handles XA transactions within a global transaction. A client program that connects to the MySQL server acts as the Transaction Manager.&lt;br /&gt;
&lt;br /&gt;
To carry out a global transaction, it is necessary to know which components are involved, and bring each component to a point when it can be committed or rolled back. Depending on what each component reports about its ability to succeed, they must all commit or roll back as an atomic group. That is, either all components must commit, or all components musts roll back. To manage a global transaction, it is necessary to take into account that any component or the connecting network might fail.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The process for executing a global transaction uses two-phase commit&lt;/b&gt; (2PC). This takes place after the actions performed by the branches of the global transaction have been executed.&lt;br /&gt;
&lt;br /&gt;
In the &lt;b&gt;first phase&lt;/b&gt;, all branches are prepared. That is, they are told by the TM to get ready to commit. Typically, this means each RM that manages a branch records the actions for the branch in stable storage. The branches indicate whether they are able to do this, and these results are used for the second phase.&lt;br /&gt;
&lt;br /&gt;
In the &lt;b&gt;second phase&lt;/b&gt;, the TM tells the RMs whether to commit or roll back. If all branches indicated when they were prepared that they will be able to commit, all branches are told to commit. If any branch indicated when it was prepared that it will not be able to commit, all branches are told to roll back.&lt;br /&gt;
&lt;br /&gt;
In some cases, a global transaction might use one-phase commit (1PC). For example, when a Transaction Manager finds that a global transaction consists of only one transactional resource (that is, a single branch), that resource can be told to prepare and commit at the same time.&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/7931423452650116950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2010/10/xa-transactions.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/7931423452650116950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/7931423452650116950'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2010/10/xa-transactions.html' title='XA Transactions'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-1349079407096567614</id><published>2010-10-03T10:32:00.002+02:00</published><updated>2010-10-22T14:30:14.533+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alfresco"/><category scheme="http://www.blogger.com/atom/ns#" term="macosx"/><category scheme="http://www.blogger.com/atom/ns#" term="WebDAV"/><title type='text'>Mounting Alfresco as a WebDAV Network Folder</title><content type='html'>I like &lt;a href=&quot;http://www.alfresco.com/products/collaboration/&quot;&gt;Alfresco Share&lt;/a&gt;&#39;s beautiful UI and I like Alfresco&#39;s &lt;a href=&quot;http://wiki.alfresco.com/wiki/CIFS_Windows&quot;&gt;CIFS&lt;/a&gt; capability of being mounted as a remote SMB/CIFS network drive. Anyway, one of the few shortcomings of Share is that you cannot download multiple files from the Web UI (you can upload multiple files), something you can easily do by mounting Alfresco as a SMB/CIFS drive, dragging &amp;amp; dropping files in and out.&lt;br /&gt;
&lt;br /&gt;
Note: &lt;i&gt;I think one of the coolest features we should add to Share&#39;s UI would be the ability to download a selection of folders as a ZIP file in one shot.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
CIFS is not enabled by default, so there are Alfresco deployments where you cannot mount it locally on your workstation, for security reasons or because of a lazy sys admin. However, to interact with Alfresco easily you always have an option: mount it as a &lt;a href=&quot;http://en.wikipedia.org/wiki/Webdav&quot;&gt;WebDAV&lt;/a&gt; network folder, which is easy to do from any operating system and it&#39;s enabled by default in Alfresco (unless your sys admin disabled it on purpose).&lt;br /&gt;
&lt;br /&gt;
On the Alfresco Wiki you can find &lt;a href=&quot;http://wiki.alfresco.com/wiki/Client_WebDAV&quot;&gt;instructions for mounting WebDAV on Windows&lt;/a&gt;. Here I want to quickly show you the same thing on  Mac OSX and Finder, which is even easier (of course, it&#39;s a Mac....).&lt;br /&gt;
&lt;br /&gt;
First of all, Alfresco&#39;s WebDAV is available from address: http(s)://&lt;i&gt;hostname&lt;/i&gt;:&lt;i&gt;port&lt;/i&gt;/alfresco/webdav/&lt;br /&gt;
in my case I&#39;m using a local Alfresco server, within my home network, so it is: http://myalfresco.it:8080/alfresco/webdav&lt;br /&gt;
Beware that in most cases Alfresco is configured to be accessible to the external world via HTTPS and not plain HTTP, so write your URL accordingly.&lt;br /&gt;
&lt;br /&gt;
Now open the Finder and press ⌘K to open the server connection dialog, adding you Alfresco&#39;s WebDAV URL like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinCeVxZ4Q71Gy-3BBl1sT7h57bFbBE5KrmHIQTioxWczpMFypwA-Ao6BgcCdwmErHDDKSxzAff6HabIG7shKCW4-4Z63qEtB4XS2ld5m0Pvfd-X_h44g6bZA214eMWFUmQGeN_9z0SHVE/s1600/Schermata+2010-10-03+a+10.15.42.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;175&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinCeVxZ4Q71Gy-3BBl1sT7h57bFbBE5KrmHIQTioxWczpMFypwA-Ao6BgcCdwmErHDDKSxzAff6HabIG7shKCW4-4Z63qEtB4XS2ld5m0Pvfd-X_h44g6bZA214eMWFUmQGeN_9z0SHVE/s320/Schermata+2010-10-03+a+10.15.42.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
After pressing &quot;connect&quot; (sorry, my screenshots are in Italian....) and entering your own Alfresco&#39;s username and password, you&#39;ll get this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVD_WsVJ-KbQnzAG1DaQ1CumZ1A-o593ClEzB0qhmSJZrpZSpQQqmXMsDULUPN4zY3ujWOjHp10eZgd_a7VH46UnWznxqK6u5ZcMwGDl4IF1uwf5hjHweiTsUjeVgAGov-yS5MPww9RFQ/s1600/Schermata+2010-10-03+a+10.17.29.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;197&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVD_WsVJ-KbQnzAG1DaQ1CumZ1A-o593ClEzB0qhmSJZrpZSpQQqmXMsDULUPN4zY3ujWOjHp10eZgd_a7VH46UnWznxqK6u5ZcMwGDl4IF1uwf5hjHweiTsUjeVgAGov-yS5MPww9RFQ/s320/Schermata+2010-10-03+a+10.17.29.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Now you could go to your Alfresco&#39;s User Home, in my case it&#39;s mturatti, and start dragging and dropping file into Alfresco, or from Alfresco into your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2hMrJ3BehhtmWL0QqnwhonI8JM7yPmsSzdG-ChOEJTfUsUD0FmNsHhovQEbT4MGC6hVyISTZ7wgmqgcY4N-XZzxeY-42Dwczmh-Z85FlJN8NMoNp7Nr0dedpMjHWptZZSZnHEgd7jQ6g/s1600/Schermata+2010-10-03+a+10.22.29.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;188&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2hMrJ3BehhtmWL0QqnwhonI8JM7yPmsSzdG-ChOEJTfUsUD0FmNsHhovQEbT4MGC6hVyISTZ7wgmqgcY4N-XZzxeY-42Dwczmh-Z85FlJN8NMoNp7Nr0dedpMjHWptZZSZnHEgd7jQ6g/s320/Schermata+2010-10-03+a+10.22.29.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/1349079407096567614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2010/10/mounting-alfresco-as-webdav-network.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/1349079407096567614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/1349079407096567614'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2010/10/mounting-alfresco-as-webdav-network.html' title='Mounting Alfresco as a WebDAV Network Folder'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinCeVxZ4Q71Gy-3BBl1sT7h57bFbBE5KrmHIQTioxWczpMFypwA-Ao6BgcCdwmErHDDKSxzAff6HabIG7shKCW4-4Z63qEtB4XS2ld5m0Pvfd-X_h44g6bZA214eMWFUmQGeN_9z0SHVE/s72-c/Schermata+2010-10-03+a+10.15.42.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-8911966502323456618</id><published>2010-09-23T15:39:00.001+02:00</published><updated>2010-09-23T15:40:15.925+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Activiti"/><category scheme="http://www.blogger.com/atom/ns#" term="BPM"/><title type='text'>BPMN 2.0 process modeling on the iPad</title><content type='html'>Have a look at &lt;a href=&quot;http://www.jorambarrez.be/blog/2010/09/22/bpmn-2-0-process-modeling-on-the-ipad/&quot;&gt;this blog post and video&lt;/a&gt;, &lt;a href=&quot;http://signavio.com/&quot;&gt;Signavio&lt;/a&gt; BPMN modeler can be used from iPad as well. The modeler works with &lt;a href=&quot;http://www.activiti.org/&quot;&gt;Activiti&lt;/a&gt;, as Signavio donated it to the open source project.</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/8911966502323456618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2010/09/bpmn-20-process-modeling-on-ipad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/8911966502323456618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/8911966502323456618'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2010/09/bpmn-20-process-modeling-on-ipad.html' title='BPMN 2.0 process modeling on the iPad'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-8333902419812841581</id><published>2010-09-22T08:36:00.000+02:00</published><updated>2010-09-22T08:36:09.653+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Glassfish"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><title type='text'>JavaOne 2010, Glassfish and Netbeans</title><content type='html'>Despite the rumors and my own pessimism, it looks like there are plenty of &lt;a href=&quot;http://goo.gl/tMdD&quot;&gt;Netbeans&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;http://blogs.sun.com/arungupta/entry/javaone_2010_is_right_here&quot;&gt;Glassfish&lt;/a&gt; sessions at &lt;a href=&quot;http://www.oracle.com/us/javaonedevelop/index.html&quot;&gt;JavaOne 2010&lt;/a&gt;. From my point of view the combination of Netbeans + Glassfish and &lt;a href=&quot;http://blog.springsource.com/2007/07/03/java-ee-6-gets-it-right/&quot;&gt;Java EE 6&lt;/a&gt; is the easiest and quickest way to develop and deploy Enterprise-class Java (and &lt;a href=&quot;http://groovy.codehaus.org/&quot;&gt;Groovy&lt;/a&gt;) applications, without all &lt;a href=&quot;http://java.dzone.com/news/draft-spring-xml-hell&quot;&gt;those boring xml configuration files&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
As reported by &lt;a href=&quot;http://blogs.sun.com/theaquarium/entry/report_from_glassfish_community_event&quot;&gt;many observers&lt;/a&gt;, if we look at the apparently outstanding number of people trying to attend Gf and Nb sessions at Javaone, I think nobody can deny the fact that,&amp;nbsp;contrarily&amp;nbsp;to previsions, interest around both &lt;a href=&quot;https://glassfish.dev.java.net/&quot;&gt;Glassfish&lt;/a&gt; and Netbeans is growing at great speed in the Java community.</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/8333902419812841581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2010/09/javaone-2010-glassfish-and-netbeans.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/8333902419812841581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/8333902419812841581'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2010/09/javaone-2010-glassfish-and-netbeans.html' title='JavaOne 2010, Glassfish and Netbeans'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-8124662802953875086</id><published>2010-08-11T11:13:00.002+02:00</published><updated>2010-08-15T01:01:31.833+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alfresco"/><category scheme="http://www.blogger.com/atom/ns#" term="email"/><category scheme="http://www.blogger.com/atom/ns#" term="IMAP"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>A short video demonstrating Alfresco IMAP integration</title><content type='html'>A short video from &lt;a href=&quot;http://www.alfresco.com/&quot;&gt;Alfresco&lt;/a&gt;&#39;s partner &lt;a href=&quot;http://www.ziaconsulting.com/&quot;&gt;Zia Consulting&lt;/a&gt; demonstrating how IMAP integration works in Alfresco. You can access and iteract the whole document repository from a regular email client, like Outlook, Thunderbird or Apple Mail. This opens a set of possible interesting use cases within a company, and doesn&#39;t force some employees to learn a new tool to effectively use the document management system.&lt;br /&gt;
&lt;br /&gt;
Some more links about email management with Alfresco:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://wiki.alfresco.com/wiki/IMAP&quot;&gt;IMAP on Alfresco Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://keytocontent.blogspot.com/2010/05/mounting-alfresco-as-imap-mount-point.html&quot;&gt;Mounting Alfresco as IMAP mount point&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://keytocontent.blogspot.com/2010/05/upload-files-to-alfresco-via-email.html&quot;&gt;Upload files to Alfresco via email&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;object height=&quot;385&quot; width=&quot;480&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/BsYFs-Nb-gE&amp;amp;hl=it_IT&amp;amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;al
ways&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/BsYFs-Nb-gE&amp;amp;hl=it_IT&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/8124662802953875086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2010/08/short-video-from-alfresco-s-partner-zia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/8124662802953875086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/8124662802953875086'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2010/08/short-video-from-alfresco-s-partner-zia.html' title='A short video demonstrating Alfresco IMAP integration'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-8012434870200927436</id><published>2010-07-28T09:58:00.000+02:00</published><updated>2010-07-28T09:58:03.260+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OpenESB"/><title type='text'>OpenESB Summit 2010 in Brussels</title><content type='html'>The OpenESB community now has a new web site:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.openesb-community.org/&quot;&gt;http://www.openesb-community.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Authors write:&lt;br /&gt;
&quot;&lt;i&gt;This site is dedicated to the OpenESB community. The aim of this site is not to to create a substitute to the previous sites dedicated to OpenESB. We simply try to fuel up the community with news, papers, blogs users feedback about OpenESB&lt;/i&gt;.&quot;&lt;br /&gt;
&lt;br /&gt;
The OpenESB community is trying hard to survive the impact of Oracle&#39;s acquisition, which has stopped most of &lt;a href=&quot;https://open-esb.dev.java.net/&quot;&gt;OpenESB&lt;/a&gt; development and practically killed &lt;a href=&quot;https://fuji.dev.java.net/&quot;&gt;Project Fuji&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
To revamp OpenESB is now mandatory creating a bigger and stronger open community around the product. Some companies seems the most active at present, the ones I know are: &lt;a href=&quot;http://logicoy.com/&quot;&gt;Logicoy&lt;/a&gt;, &lt;a href=&quot;http://forgerock.com/&quot;&gt;ForgeRock&lt;/a&gt; and &lt;a href=&quot;http://pymma.com/&quot;&gt;Pymma&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
This effort will be illustrated in the forthcoming &lt;a href=&quot;http://www.openesb-community.org/ezpublish/index.php/eng/OpenESB-Summits-2010-2011&quot;&gt;OpenESB Summit 2010&lt;/a&gt;, Brussels (Belgium) Monday 4th and Tuesday 5th of October 2010.&lt;br /&gt;
&lt;br /&gt;
On the other hand, I think the OpenESB (and &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_Business_Integration&quot;&gt;JBI&lt;/a&gt;, as Oracle has never been committed to JBI) communities needs to connect to the wider &lt;a href=&quot;http://netbeans.org/community/index.html&quot;&gt;Netbeans community&lt;/a&gt;, to join forces, as OpenESB to survive without Sun needs to keep the pace with newer Netbeans releases much better than what has been achieved so far.&lt;br /&gt;
&lt;br /&gt;
Personally, as from the beginning of this year I&#39;m fully employed with &lt;a href=&quot;http://www.alfresco.com/&quot;&gt;Alfresco Software&lt;/a&gt;, I will keep following the OpenESB evolution and experiment with Alfresco integration.&lt;br /&gt;
&lt;br /&gt;
Good luck to all former colleagues involved with this project.</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/8012434870200927436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2010/07/openesb-summit-2010-in-brussels.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/8012434870200927436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/8012434870200927436'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2010/07/openesb-summit-2010-in-brussels.html' title='OpenESB Summit 2010 in Brussels'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2123901513613960343.post-5840328147770030750</id><published>2010-07-27T12:46:00.013+02:00</published><updated>2012-10-08T01:00:22.671+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="WSDL"/><category scheme="http://www.blogger.com/atom/ns#" term="XML"/><title type='text'>XML Schema and WSDL modules for Netbeans 6.9</title><content type='html'>&lt;span style=&quot;font-size: large;&quot;&gt;*** UPDATE ***&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;The instructions below are still valid for Netbeans 6.9, but t&lt;/i&gt;&lt;i&gt;here is a new repository link for&amp;nbsp;&lt;/i&gt;&lt;i&gt;Netbeans 7.x&lt;/i&gt;&lt;i&gt;,&lt;/i&gt;&lt;i&gt;&amp;nbsp;have a look &lt;a href=&quot;http://camelcase.blogspot.it/2012/04/xml-schema-and-wsdl-modules-for.html&quot;&gt;here&lt;/a&gt; for more.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
In the latest Netbeans releases, for some reason I can&#39;t understand, they removed the XML and WSDL plugin from the list of default available. This plugin is one of the best tools you have in Netbeans, as it allows to create and modify XML files, XML Schemas and WSDL files easily and graphically. It is a reduced version of what you get with Altova&#39;s XML Spy.&lt;br /&gt;
&lt;br /&gt;
Browsing the Internet I have found a Netbeans repository from which I can install this plugin for Netbeans 6.9 also, what I did is to add a new Plugin download URL:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://dlc.sun.com.edgesuite.net/netbeans/updates/6.9/uc/m1/dev/catalog.xml.gz&quot;&gt;http://dlc.sun.com.edgesuite.net/netbeans/updates/6.9/uc/m1/dev/catalog.xml.gz&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Then I added the new plugin center:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjesYTOXjhmZ3jZ2bAhDB1UbTxqzoDHea5cW4gNQuoqUwgqnNYBWcXj-R8HB1Rms0cp4qNPWZ8WgE0iR2Yyb6Cx8-KPS5C2C5tqBBQlE-unqBErGf9B0UlOpqboLwXBY8F1IJRAp0zDCXA/s1600/Schermata+2010-07-27+a+12.26.20.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;187&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjesYTOXjhmZ3jZ2bAhDB1UbTxqzoDHea5cW4gNQuoqUwgqnNYBWcXj-R8HB1Rms0cp4qNPWZ8WgE0iR2Yyb6Cx8-KPS5C2C5tqBBQlE-unqBErGf9B0UlOpqboLwXBY8F1IJRAp0zDCXA/s400/Schermata+2010-07-27+a+12.26.20.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
From where I can install some development plugins:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuPdBPUEdilrrnGHIljFmUlNOV4-c9i4cKZzhfWMDv5DG33whWsVWmdwKH3ad5QGudPimQa_mlLyVwc8SRGY-qS0ICh2v3f5OGH8HQxTbIRd6w_UHff0Sozr-YYohQH3cOLJPV1MB2MlQ/s1600/Schermata+2010-07-27+a+12.32.49.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;408&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuPdBPUEdilrrnGHIljFmUlNOV4-c9i4cKZzhfWMDv5DG33whWsVWmdwKH3ad5QGudPimQa_mlLyVwc8SRGY-qS0ICh2v3f5OGH8HQxTbIRd6w_UHff0Sozr-YYohQH3cOLJPV1MB2MlQ/s640/Schermata+2010-07-27+a+12.32.49.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
To know what it&#39;s possible with this plugin, have a look at:&amp;nbsp;&lt;a href=&quot;http://xml.netbeans.org/&quot;&gt;http://xml.netbeans.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I&#39;d like to now if the URL above is the right one or there are different places from where it is possible to download updated releases of this.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://camelcase.blogspot.com/feeds/5840328147770030750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://camelcase.blogspot.com/2010/07/xml-schema-and-wsdl-modules-for.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/5840328147770030750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2123901513613960343/posts/default/5840328147770030750'/><link rel='alternate' type='text/html' href='http://camelcase.blogspot.com/2010/07/xml-schema-and-wsdl-modules-for.html' title='XML Schema and WSDL modules for Netbeans 6.9'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/14483021801536852402</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjesYTOXjhmZ3jZ2bAhDB1UbTxqzoDHea5cW4gNQuoqUwgqnNYBWcXj-R8HB1Rms0cp4qNPWZ8WgE0iR2Yyb6Cx8-KPS5C2C5tqBBQlE-unqBErGf9B0UlOpqboLwXBY8F1IJRAp0zDCXA/s72-c/Schermata+2010-07-27+a+12.26.20.png" height="72" width="72"/><thr:total>4</thr:total></entry></feed>