<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Xebia Blog</title>
	<atom:link href="http://blog.xebia.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com</link>
	<description></description>
	<pubDate>Tue, 01 Jul 2008 09:45:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Top 10 SOA Pitfalls: Wrap-up</title>
		<link>http://blog.xebia.com/2008/06/29/top-10-soa-pitfalls-wrap-up/</link>
		<comments>http://blog.xebia.com/2008/06/29/top-10-soa-pitfalls-wrap-up/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 11:26:42 +0000</pubDate>
		<dc:creator>Gero Vermaas</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=619</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/29/top-10-soa-pitfalls-wrap-up/&s=compact&t=Top 10 SOA Pitfalls: Wrap-up&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p><em>The Top 10 SOA Pitfalls countdown hit #1 last week with <a href="http://blog.xebia.com/author/rdegroot">Rik de Groot's</a> post on "<a rel="nofollow" href="http://blog.xebia.com/2008/06/23/top-10-soa-pitfalls-1-ignoring-culture-when-introducing-soa">Ignoring culture when introducing SOA</a>", time for a wrap-up.</em></p>
<p>Putting all pitfalls together in one simple 10 item list quickly reveals a grouping of types pitfalls. Number #1 and #2 are both related to organizational aspect. If the culture, mindset and attitude are not right, these are typically the pitfalls that a SOA endeavor may run in to. The next group covers the items #3 till #7, these are all related to architectural/design skills. And the last group, numbers #8 till #10, relates to implementation issues (although proper design could help to prevent these pitfalls from manifesting themselves).</p>
<p><span id="more-619"></span></p>
<p>The complete <em>Top 10 SOA pitfalls</em> list is:</p>
<p><em>Implementation pitfalls</em></p>
<ul>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/04/23/top-10-soa-pitfalls-10-not-invented-here-syndrome">#10 - Not Invented Here Syndrome</a></li>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/04/29/top-10-soa-pitfalls-9-%e2%80%93-versioning">#9 - Versioning</a></li>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/05/05/top-10-soa-pitfalls-8-security">#8 - Security</a></li>
</ul>
<p><em>Architectural/design pitfalls</em></p>
<ul>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/05/12/top-10-soa-pitfalls-7-incorrect-granularity-of-services">#7 - Incorrect Granularity of Services</a></li>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/05/19/top-10-soa-pitfalls-6-soa-does-not-solve-complexity-automatically">#6 - SOA does not solve complexity automatically</a></li>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/05/26/top-10-soa-pitfalls-5-big-design-up-front">#5 - Big Design Upfront</a></li>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/06/02/top-10-soa-pitfalls-4-incorrectly-applied-canonical-data-model">#4 - Incorrectly applied Canonical Data Model</a></li>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/06/09/top-10-soa-pitfalls-3-missing-skills">#3 - Missing skills</a></li>
</ul>
<p><em>Organizational pitfalls:</em></p>
<ul>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/06/16/top-10-soa-pitfalls-2-unclear-ownership-project-based-funding">#2 - Unclear ownership/Project based funding</a></li>
<li><a rel="nofollow" href="http://blog.xebia.com/2008/06/23/top-10-soa-pitfalls-1-ignoring-culture-when-introducing-soa">#1 - Ignoring culture when introducing SOA</a></li>
</ul>
<p>It was great fun to compile this list with the four of us and it also helped us to get a sharper view on why SOA projects or programs are challenging and hard to complete succesfully. Hopefully you've learned a thing or two and are able to prevent or at least recognize the pitfalls in your day-to-day work.</p>
<p>Thanks for having us,<br />
<a href="http://blog.xebia.com/author/rdegroot">Rik de Groot</a>, <a href="http://blog.xebia.com/author/vgrgic">Viktor Grgic</a>, <a href="http://blog.xebia.com/author/vpartington">Vincent Partington</a>,  and <a href="http://blog.xebia.com/author/gvermaas">Gero Vermaas</a></p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F29%2Ftop-10-soa-pitfalls-wrap-up%2F&amp;title=Top+10+SOA+Pitfalls%3A+Wrap-up', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/29/top-10-soa-pitfalls-wrap-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Moving to India. Step 4: Employment Contracts</title>
		<link>http://blog.xebia.com/2008/06/26/moving-to-india-step-4-employment-contracts/</link>
		<comments>http://blog.xebia.com/2008/06/26/moving-to-india-step-4-employment-contracts/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 21:52:15 +0000</pubDate>
		<dc:creator>Maarten Winkels</dc:creator>
		
		<category><![CDATA[Moving to India]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=620</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/26/moving-to-india-step-4-employment-contracts/&s=compact&t=Moving to India. Step 4: Employment Contracts&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p><em>Working abroad has been a wish of mine for some time now. Xebia offers me the opportunity to live and work in India. Through this blog series I will keep you informed of the progress and challenges of this project.</em></p>
<p>It has been quite a while since I wrote about our plans to go and work in India. A lot of people have asked me whether I had already returned so soon, assuming that I had already left! The truth is that our plans are still very much alive, but the past period has not been very exciting, so there was nothing much to blog about. Currently we are in the final stages of drafting the employment contracts and I would like to inform you about the structure we have in mind for this.<br />
<span id="more-620"></span><br />
<strong>Contract triangle</strong></p>
<p>Currently I have an employment contract with Xebia in the Netherlands. For me it would be easiest if this contract would remain in use and I would simply be posted in India under a deputation contract. Since I would be getting salary in India for a longer period, I would have to pay taxes to the Indian government. This would mean that the financial department in the Netherlands, responsible for paying my salary, would have to get in contact with the Indian governmental organization for taxes.</p>
<p>It seems more fit to sign an employment contract with Xebia in India. That way my salary would be paid in the same country as my taxes. The problem with signing a new contract for me is that the rights that I have built having a contract with Xebia over the last few years would have been forfeited. Also the Dutch laws on employment give a lot more protection to the employee than the Indian laws. We were looking for a way to retain these rights and protective rules, whilst signing a new contract.</p>
<p>After some consulting we decided upon keeping the original employment contract with Xebia in the Netherlands and putting this contract in a non-active state through an “unpaid leave” construction. This is a known construction in the Dutch juridical system, that practically suspends the execution of an employment contract for a certain period of time. The employment relation remains intact. During this period an employment contract between Xebia in India and me will be active, under which salary will be payable. To govern the relation between these two contracts, which are standard contracts, and to make some additional arrangements, an additional contract will be signed between Xebia in the Netherlands and me.</p>
<p><strong>Additional arrangements</strong></p>
<p>The new contract between Xebia in the Netherlands and me will contain the following arrangements:</p>
<ul>
<li>The duration of our stay in India is set to 2 years. Extension is negotiable. We will be able to end the stay earlier, after discussing this with Xebia.</li>
<li>Additional cost are for Xebia. These cost are for example medical cost of vaccination, insurance, moving and travelling cost.</li>
<li>Pension.</li>
</ul>
<p>Pension is under Dutch law an arrangement for postponed salary. It is practically a special type of saving. Taxes over this salary are payable when the pension is paid, thus after the employee ends his working live. As such it is mostly a fiscal arrangement: A part of the salary is saved and over this part no taxes are paid at that time. In addition, the employer also pays a part of the monthly pension amount.</p>
<p>The Indian fiscal system doesn’t have such an arrangement, as far as I know. The amount of money that would be paid for pension while working in India would be taxable. That would mean that taxes would be paid twice over this amount: Once to the Indian government (when the salary is paid) and once to the Dutch government (when the pension is paid). This could eventually cost a lot of money.</p>
<p>Under the Dutch fiscal law, an extra payment to a pension-fund can also be made when you have not been able to save for pension for a period of time due to working abroad. As additional arrangement for pension, Xebia will pay the amount that it would pay to my pension-fund over this period as a one-time bonus when the unpaid-leave period ends. I can then put this bonus into my pension-fund and use the fiscal advantages at that time.</p>
<p><strong>Financial picture</strong></p>
<p>The cost of my current contract to Xebia in the Netherlands will be the same as the cost of my future contract with Xebia in India. This means that I will get a lot of salary in India, compared to other employees. Most of my Dutch colleagues are quick in spotting this. They are definitely right (and I don’t understand why they don’t try to do the same… ;-)), but I do feel a bit offended by this slight suggestion of greediness and feel the need to explain.</p>
<p>For starters, life in India is definitely cheaper than live in India. Nonetheless, life in India for a foreigner that stays for a relatively short period, will definitely be more expensive than life for a native Indian. You have to do some investments for a rather short period, like furniture and cooking equipment. Those kind of things are all not very expensive, but you’ll be needing them for a rather short time, which makes them expensive in comparison. Some services will also be more expensive for foreigners and you need to be very careful not to be taken advantage of when doing any kind of financial<br />
transaction, from paying your taxi to doing your grocery or renting a car. That’s just normal live for a ‘rich westerner’ in India.</p>
<p>The other explanation is that I offer Xebia the opportunity to have a native Dutch employee in India for free! I could have just stayed in the Netherlands and gotten the same salary, without taking this risk of leaving everything behind and going to India. Of course I don’t see it this way, and neither does my girlfriend. We think of this as a great opportunity and adventure. From the perspective of Xebia though, it makes a lot of sense.</p>
<p>Actually, I don’t mind the gloomy, smiling faces of the people that make these kind of remarks. They are right and I don’t mind the lower cost of living in India. We’ll try to feed some of it back into the community by doing some social, voluntary work and maybe helping out one good initiative or another.</p>
<p><em>The next step in this project will be to get visa from the Indian Embassy. It appears that this is a bit more difficult than we had anticipated. I’ll also be trying to get a better idea of my tasks in the Indian team and to get a grasp on the expectations of management in the Netherlands. This will also be the main purpose of a visit to India that is planned for August. The big move will be around October 1th.</em></p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F26%2Fmoving-to-india-step-4-employment-contracts%2F&amp;title=Moving+to+India.+Step+4%3A+Employment+Contracts', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/26/moving-to-india-step-4-employment-contracts/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Agile Awareness Workshop 2008 - Delegates&#8217; Perspective.</title>
		<link>http://blog.xebia.com/2008/06/24/agile-awareness-workshop-2008-delegates-perspective/</link>
		<comments>http://blog.xebia.com/2008/06/24/agile-awareness-workshop-2008-delegates-perspective/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 09:32:08 +0000</pubDate>
		<dc:creator>Nancy Sharma</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Agile Awareness Workshop]]></category>

		<category><![CDATA[Agile for beginners]]></category>

		<category><![CDATA[Beginners]]></category>

		<category><![CDATA[Introduction]]></category>

		<category><![CDATA[Introduction to Agile]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=611</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/24/agile-awareness-workshop-2008-delegates-perspective/&s=compact&t=Agile Awareness Workshop 2008 - Delegates&#8217; Perspective.&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p>Recently held workshop on <strong>Agile Awareness </strong>in Xebia India was a great learning experience for all  the newbies into Agile way of working. The delegates who made up for the event  were from a wide range of portfolios starting from Team Lead, Project Manager to Software Developer. So, this made the whole stage quite interesting.</p>
<p>It started from "The Problems that we face generally in Software Development". And the answers that we had were quite unanimous.</p>
<ul>
<li>Unrealistic Deadlines</li>
<li>Poor Estimation</li>
<li>Surplus Documentation</li>
<li>Inadequate Testing</li>
</ul>
<p>and the most stressed point by all of us was "Changing Requirements".<span id="more-611"></span></p>
<p>After expressing our major 'Blockers' it seems  we were ready to take a plunge  into the Agile World. The buzz word here is <span style="underline;"><em><strong>"Iterative Incremental"</strong></em></span>. This simply means that Iteratively you keep on making progress by adding something to the structure, however small the increments may be.This is a lot different from what "Traditional" methods ask us to do. Simply put,in traditional methods,the peak comes only when you are at "All-at-once-Delivery Stage" which is when your project completes.</p>
<p>Nicely Stated by <a href="http://en.wikipedia.org/wiki/Craig_Larman" target="_self"><strong>Craig Larman</strong> </a><em>:"Usually a partial system grows incrementally with new features,iteration by iteration,in other words,incremental development."</em></p>
<p><a href="http://blog.xebia.com/wp-content/uploads/2008/06/adaptivevspredictive.jpg"><img class="alignnone size-medium wp-image-617" style="left;" src="http://blog.xebia.com/wp-content/uploads/2008/06/adaptivevspredictive-300x192.jpg" alt="" width="300" /></a><br />
 The dictionary defines<a href="http://dictionary.reference.com/browse/agile)" target="_self"> Agile </a>as "Nimbleness or Flexibility". Agile in context of software development paradigm is all about being Adaptive than Predictive or Rigid. To change is law of nature. So we should not be afraid of changes. Rather we should plan how to act according to the change. The ones who crib over the changes required are rigid in thier approach. And Agile calls for being flexible in accepting any change made or to be made.</p>
<p>Most of the delegates have already experienced the pain of changing requirements, thus we were excited to see how Agile would come to our rescue in this area</p>
<p>This was explained quite well .It goes like:</p>
<p>In Software development it is impossible to have "Frozen Requirements". And this is because we simply cannot freeze time. So we generally have bulk of requirements from the client  which can be modified , updated or scrapped by him in later stages of time. . Out of these  we first focus onto the "High Risk" and "High value" requirements. High Risks need to be tackled early in the development phase and High Value means more profits to the business. Apart from this we also have MoSCoW techniques to prioritize our requirements. For those who are thinking what is MoSCoW city to do with Agile and software..Take a look:</p>
<ul>
<li>
<div><span class="mw-headline"><strong>MoSCoW</strong></span></div>
<p><span class="mw-headline"><a title="MoSCoW" href="http://http//en.wikipedia.org/wiki/Dynamic_Systems_Development_Method#moscow" target="_self">MoSCoW</a> represents a way of prioritizing items. In the context of<a href="http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method" target="_self"> DSDM </a>the MoSCoW technique is used to prioritize requirements. It is an acronym that stands for:</span></li>
</ul>
<dl>
<dd><span class="mw-headline">MUST have this requirement to meet the business needs.</span></dd>
<dd><span class="mw-headline">SHOULD have this requirement if at all possible, but the project success does not rely on this.</span></dd>
<dd><span class="mw-headline">COULD have this requirement if it does not affect the fitness of business needs of the project.</span></dd>
<dd><span class="mw-headline">WOULD have this requirement at later date if there is some time left (or in the future development of the system).</span></dd>
</dl>
<p>A brief mention of <a title="Agile Manifesto" href="http://agilemanifesto.org/" target="_self">The Agile Manifesto </a>was also made which is followed by  the four points:</p>
<ol>
<li>Working software over Comprehensive Documents.. (Simply Said is: All that matters is what Works!!)</li>
<li>Customer Collaboration over Contract Negotiation..(Collaborates definitely sounds positive than Negotiates)</li>
<li>Responding to change(Definately with a plan!)</li>
<li>Individuals and interactions over processes and tools.</li>
</ol>
<p>Short Iterations, TDD, Potentially Shippable (or Working Software) product at the end of each iteration, individuals and interactions over processes---Is all what we need to do.</p>
<p>To summarize Agile Way of working ill put it like this:</p>
<p>PRIORTIZE --&gt; DO SOMETHING (ITERATION) --&gt; GET FEEDBACK --&gt;IMPROVE N GET GOING.</p>
<p>The two things that personally strike me are:</p>
<ul>
<li>Getting Feedback</li>
<li>Failing Early.</li>
</ul>
<p>I was amazed to see how "Real" is this way of development. Feedback was something we ve always taken/given. Be it shopping with friends or Areas of Improvements Column in magazines or newspapers.We all want to improve.</p>
<p>Another thing is to fail early. It's always appreciable if you fail early ,improve and then win your task. And as a developer this is what we should look for too.This Calls for the use of Test Driven Environment.</p>
<p>After opening up the umbrella of Agile in the" Why Agile?" session we were now braced to take a peek at various technologies comprising it.</p>
<p>Our first destination was SCRUM Techniques. Had heard the word "SCRUM" before which had to do with the Rugby team. It is when the team huddles together to discuss their plan of action for the next few minutes of the game. Was figuring out as to how it fits in here?  To this we were told that to work Agile way the teams should be self organised and cross functional. When we say cross functional it means that a team should be adept and complete in every sense. This can fuel a very common debate of Generalists over Specialists that is persisting in the industry since long. I came across a very <a href="http://www.infoq.com/news/2008/06/agile-generalist-specialist" target="_self">useful blog </a>on this topic which happened to be written by one of the speakers of this event.  The other key aspect is self discipline in the team. And I think this is what makes this simple concept a difficult one to follow. We don't like to be disciplined ..that's the general word..</p>
<p>After this we were introduced to various roles existing in Scrum. To give a short trip ..Product Backlog,Scrum Master,Sprint and Sprint backlog,Committed Backlog, Burndown chart. Another very important point that caught my attention was "Responsibilities are never given but taken". I agree.Responsibility "given" is more of an instruction. As someone has aptly said : "You cannot instruct to innovate". Later in the session we talked more about the iteration details.An iteration is a short period of time say 2-4 weeks in which a team goes for a complete development cycle.For traditional developers we can put as a whole waterfall within an iteration. In Agile starting from taking requirements into Sprint backlog to Sprint retrospectives -all becomes part of an iteration.In this whole discusssion it was little difficult to think in terms of velocity and complexity points though. Probably cause brain was busy receiving hunger signals!! <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>After breaking for snacks,it was e<span style="underline;">X</span>treme<span style="underline;">P</span>rogramming..second flavour of Agile. This name was little tough to comprehend than the earlier ones. It started on the note that everything done should have some business value and should make sense. So it was clear that its from the developer's perspective. Out of the four levers of a project namely:</p>
<ol>
<li>Time</li>
<li>Scope</li>
<li>Quality</li>
<li>Cost</li>
</ol>
<p>agile team plays with the lever of functionality i.e.Scope.  Its very common to see that about 60% of the functionalities of a product are never used and about 20% are intensively used.</p>
<p>Again coming back to real life association of agile..I believe that not everybody is a born genious. But two ordinary minds working together can definately come up with extra ordinary results. And simply put this is Pair Programming in Agile. No doubt it is a win-win situation if both of you pair well. But i was stuck with a question..What if you and your pair dont gel well? It could be disastrous to project's productivity. We then discussed number of intelligent ways to overcome such situations within the team. In this course of discussion one of the speakers came up with a really interesting Solution to this called "<em>CC and BCC". </em>Those who are wondering..CC is <em><span style="underline;">c</span>ommunication over <span style="underline;">c</span>offee</em> and BCC is<em> <span style="underline;">b</span>ullshit <span style="underline;">c</span>ommunication over <span style="underline;">c</span>offee</em>. Indeed, a lot can happen over coffee <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Here I would like to quote one of the speaker ..You need to have a lot of "Courage" to work Agile way. I guess that's absolutely true. When working agile way you need to shed all your inhibitions . Come out with any or all of your problems . Discuss with the team and move ahead. How many of us are really comfortable saying "I'm stuck with this problem , Dunno what to do?"Not many of us can really tell our weakness to others. This in particular calls for lot of "Courage"as agile encourages full interaction among the team.</p>
<p>Till the end of this session i was happy as i could now make this point clear that XP talks at developer level whereas SCRUM talks at project management level..</p>
<p>As we say in software industry there is nothing like theory sessions.. So here also a hands on session was awaiting. It was real fun to now imply the "simple and realistic rules of Agile".We went through two iterations..where we were given user story . We had to plan and assign complexity points to each user story. After this planning we had to commit to those stories which we thought were achievable in stipulated amount of time. And it was not points that made a team win but how much you learnt from  the mistakes.. We had a sprint retrospective after each iteration. This was the real learning of the day. At the end of this hands on we were now really comfortable with complexity points and velocity concept..</p>
<p>In the end to summarize i'll say that Agile way of development is not a revolution but evolution. It's realising your roots ,infact, coming back to your roots. Taking feedback , working in baby steps and improving, failing early is all we have been doing in our early days but then had kept them in oblivion. </p>
<p>Agile is not about revolutionizing software development but  breaking the ice of rigid mindsets!! Its time that we break free and appreciate the beauty of Agile way of development. I congratulate the speakers for their efforts which definitely ignited these sparks in most of us.</p>
<p><a href="http://blog.xebia.com/wp-content/uploads/2008/06/audience.jpg"><img class="alignnone size-medium wp-image-618" src="http://blog.xebia.com/wp-content/uploads/2008/06/audience-300x192.jpg" alt="" width="300" /></a></p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F24%2Fagile-awareness-workshop-2008-delegates-perspective%2F&amp;title=Agile+Awareness+Workshop+2008+-+Delegates%26%238217%3B+Perspective.', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/24/agile-awareness-workshop-2008-delegates-perspective/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Top 10 SOA Pitfalls: #1 - Ignoring culture when introducing SOA</title>
		<link>http://blog.xebia.com/2008/06/23/top-10-soa-pitfalls-1-ignoring-culture-when-introducing-soa/</link>
		<comments>http://blog.xebia.com/2008/06/23/top-10-soa-pitfalls-1-ignoring-culture-when-introducing-soa/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 11:17:57 +0000</pubDate>
		<dc:creator>Rik de Groot</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=610</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/23/top-10-soa-pitfalls-1-ignoring-culture-when-introducing-soa/&s=compact&t=Top 10 SOA Pitfalls: #1 - Ignoring culture when introducing SOA&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p><em>Last week <a href="http://blog.xebia.com/author/vgrgic">Viktor Grgic</a> explained <a href="http://blog.xebia.com/2008/06/16/top-10-soa-pitfalls-2-unclear-ownership-project-based-funding/">Unclear ownership / Project based funding</a>. This week we’ll continue with #1 - Ignoring culture when introducing SOA.</em></p>
<p>SOA is an approach. The culture aspect of introducing a SOA is important, but it seems that companies want to invest in tools and not in people. In order of making this SOA to work they force their employees into this new way of thinking/acting. Often this leads to resistance which undermines the SOA goals.  In this part we will look into ignoring culture when introducing SOA.<br />
<span id="more-610"></span></p>
<p><strong>Culture</strong><br />
First of all: what is a culture? An organizational culture compromises the attitudes, experiences, beliefs and values of an organization. <a href="http://en.wikipedia.org/wiki/Geert_Hofstede">Hofstede</a> identified five dimensions in his study :</p>
<ul>
<li> Small vs Large Power distance; degree of equality/inequality between people.</li>
<li> Uncertainty avoidance; the level of acceptance for uncertainty and risks.</li>
<li> Individualism vs collectivism; the contrast between individual or collective achievement and interpersonal relationships.</li>
<li> Masculinity vs femininity; is your organization based on male or female values.</li>
<li> Long vs short term orientation; contrast between relation values orientation.</li>
</ul>
<p>When introducing a SOA some of these dimensions are likely to change in order to improve the performance of an organization. But wait a minute, a cultural change? It was just an architectural style! Culture is certainly relevant for SOA. For instance, when you look at ownership the first dimension can change. The ownership shifts from IT to the business. When you look at the second dimension, a SOA introduces an uncertainty, because people are confronted with a new way of thinking/acting. In the third dimension the way of working together (business and IT) changes.</p>
<p><strong>Ivory tower</strong><br />
The way SOA is introduced in companies varies, but often SOA introduction is technology driven. From an ivory tower this new way of thinking is figured out and dumped into the organization (see also <a href="http://blog.xebia.com/2008/06/09/top-10-soa-pitfalls-3-missing-skills/">missing skills</a>). Sometimes with a few practical guidelines, which are often very abstract. The guidelines are misunderstood by the business and IT people which makes it more complex. The main problem here is that the SOA vision is not shared between business, IT and CxOs, (and ivory tower). You can document guidelines, but this does not imply that involved people share the same ideas.</p>
<p><strong>Awareness</strong><br />
In companies the adequate awareness is not filtered down to an enterprise level. Adoption of SOA might become a roadblock. The awareness starts with the concept of SOA. What is a SOA? In most cases people think they know what a SOA is, but have a different vision on the topic. Even people who do know what a SOA is, have different views on SOA. Therefore it is important to have the same vision at enterprise level.</p>
<p><strong>Resistance</strong><br />
Although SOA should not be used to change a culture, the introduction will probably change some cultural dimensions. Resistance to these changes needs to be handled with care. The success of the SOA depends on the acceptance of the SOA, reducing/removing of resistance is crucial to increase acceptance</p>
<p>The best way to introduce a SOA is to follow the following steps:</p>
<ol>
<li> Make the SOA vision a shared vision. Only a shared vision could lead to a successful SOA implementation. Without this first step a SOA is doomed.</li>
<li> Define a strategy of how to change. What is your strategy of changing to a SOA. Included cultural aspects and awareness.</li>
<li> Define clear tasks, roles and responsibilities.</li>
</ol>
<p>When using these steps the acceptance of a SOA will increase.</p>
<p>The cultural aspect is often forgotten when introducing a SOA. People that introduce a SOA, often change a culture without knowing. When you are not aware of this, this might lead to an adoption roadblock. Be careful with a large cultural change. Start small, think big.</p>
<p><em>Next week <a href="http://blog.xebia.com/author/vpartington">Vincent Partington</a> and <a href="http://blog.xebia.com/author/gvermaas">Gero Vermaas</a> will wrap up the SOA pitfall series.</em></p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F23%2Ftop-10-soa-pitfalls-1-ignoring-culture-when-introducing-soa%2F&amp;title=Top+10+SOA+Pitfalls%3A+%231+-+Ignoring+culture+when+introducing+SOA', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/23/top-10-soa-pitfalls-1-ignoring-culture-when-introducing-soa/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Agile Awareness Workshop2008</title>
		<link>http://blog.xebia.com/2008/06/18/agile-awareness-workshop2008/</link>
		<comments>http://blog.xebia.com/2008/06/18/agile-awareness-workshop2008/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 04:08:02 +0000</pubDate>
		<dc:creator>Abhishek Agrawal</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Agile Awareness Workshop]]></category>

		<category><![CDATA[Agile Hands-on]]></category>

		<category><![CDATA[Introduction to Agile]]></category>

		<category><![CDATA[Workshop]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=592</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/18/agile-awareness-workshop2008/&s=compact&t=Agile Awareness Workshop2008&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p><font size="2"><br />
<strong>Saturday, June 14, 2008</strong>: Xebia India organized an <strong>Agile Awareness Workshop </strong>that aimed at helping people very new to the Agile world of software development to understand the concept, appreciate the difference and know the jargon.</p>
<p>Keeping up with the Xebia tradition, we sent out an informal <a href='http://blog.xebia.com/wp-content/uploads/2008/06/invite.doc'>invite</a>.</p>
<p>Despite the schedule conflicting with <strong>India-Pak cricket finals</strong>, we had a good turn out and an excited audience.<br />
<span id="more-592"></span>I really liked the level of attention of the participants and the intelligent questions asked by them.<br />
Here's a short sum-up of how it went:<br />
<br/><br />
<a href='http://blog.xebia.com/wp-content/uploads/2008/06/whyagile.jpg'><img src="http://blog.xebia.com/wp-content/uploads/2008/06/whyagile-300x224.jpg" alt="" title="whyagile" width="150" class="alignnone size-medium wp-image-602" style="float:left;"/></a><strong>Sumit Gupta</strong> from RBS set the stage and had the audience excited with an interesting introduction to <a href='http://blog.xebia.com/wp-content/uploads/2008/06/whyagile.ppt'>"Why Agile?"</a> <br/><br/><br/><br/><br/><br/><br/></p>
<p><a href='http://blog.xebia.com/wp-content/uploads/2008/06/scrum.jpg'><img src="http://blog.xebia.com/wp-content/uploads/2008/06/scrum-300x224.jpg" alt="" title="scrum" width="150" class="alignnone size-medium wp-image-600" style="float:right;" /></a><strong>Deepak Mittal</strong> from <a href="http://www.intelligrape.com/">IntelliGrape</a> followed up with a striking insight into the <a href='http://www.slideshare.net/mittaldeepak01/introduction-to-scrum-463406'>Scrum</a><br />
 Flavor of Agile, nicely using Slide Share for the purpose (now that slide-share has got a few millions as funding, may be its high time to start exploring it as an alternative to the omnipresent ppt's). This was more from a project management perspective since scrum talks at that level.</p>
<p>By the time he finished, people were already "hungry" for more - so we decided to take care of their "hunger" and break for snacks <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>I was surprised to see that audience were already in the mode of "self organizing" things, and it did not take much on my part to have them back at the conference room well in time, all set for next session.</p>
<p><br/><br/></p>
<p><a href='http://blog.xebia.com/wp-content/uploads/2008/06/xp.jpg'><img src="http://blog.xebia.com/wp-content/uploads/2008/06/xp-300x224.jpg" alt="" title="xp" width="150" class="alignnone size-medium wp-image-603" style="float:left;"/></a><strong>Vikas Hazrati</strong> from Impetus took it from there on. With nice slides sharing his knowledge on <a href='http://blog.xebia.com/wp-content/uploads/2008/06/vikasagile_awareness_workshop_2008.ppt'>"XP"</a>, he ensured that the momentum went on. Using some very nice color coordinated slides (despite the fact that I had messed them a bit while switching the platform) with kool pics explaining pair programming and related concepts.<br />
XP is where we get down to the details and get our hands dirty with real stuff (unlike Scrum, it talks about implementation level details like "tasks", "pair programming" et al). Audience seemed to be liking it. He concluded with some food for thought for attendees who discussed the "co-existence of Scrum and XP". He pointed out something really significant: "<strong>Agile needs a change in mindset much more than a change in process</strong>"<br />
<br/><br/><br />
<a href='http://blog.xebia.com/wp-content/uploads/2008/06/xpgame.jpg'><img src="http://blog.xebia.com/wp-content/uploads/2008/06/xpgame-300x240.jpg" alt="" title="xpgame" class="alignnone size-medium wp-image-608"  width="200" style="float:left;"/></a>This was followed by a highly energetic run of the "<strong>XP game</strong>" conducted by <strong>Ganesh and myself </strong>from Xebia. People were seen rushing, jumping from seats, trying to win, and best of all understanding the whole process by critically analyzing each step they were going through.<br />
<br/><br />
<a href='http://blog.xebia.com/wp-content/uploads/2008/06/agileparticipants.jpg'><img src="http://blog.xebia.com/wp-content/uploads/2008/06/agileparticipants-300x224.jpg" alt="" title="agileparticipants" width="150" class="alignnone size-medium wp-image-596"  style="float:right;"/></a>The user stories were carefully chosen to ensure a lot of impediments, dependencies and potential traps. That led to rich and lively retrospective sessions.<br />
<br/><br />
We then casually discussed the jargon picked up in the day: <strong>"chicken-n-pig", "stand ups - One was enacted right there"</strong> et al.<br />
<br/><br/></p>
<p><a href='http://blog.xebia.com/wp-content/uploads/2008/06/casestudy4.jpg'><img src="http://blog.xebia.com/wp-content/uploads/2008/06/casestudy4-300x224.jpg" alt="" title="casestudy4" width="180" class="alignnone size-medium wp-image-605" style="float:left;"/></a>The day was concluded with a <strong>case study </strong>presented by me, towards the end of which the audience were left with a discussion on "Is Agile really <strong>revolutionary</strong> or just the next <strong>evolutionary</strong> step towards software development?"<br />
<br/><br/><br/><br/><br/><br/><br/><br/><br />
<strong>The Follow up:</strong></p>
<p>We plan to keep the momentum going, by following this up with:<br />
1. Certified Scrum Master Training by Pete Deemer: June 25, 26<br />
2. Agile Toolkit - June 27, 28<br />
3. Seminar with The Poppendiecks (Organized by ASCII, sponsored by Xebia) - July 06.<br />
</font></p>
<p><center><br />
<a href='http://blog.xebia.com/wp-content/uploads/2008/06/thanksspeakers.jpg'><img src="http://blog.xebia.com/wp-content/uploads/2008/06/thanksspeakers-300x225.jpg" alt="" title="thanksspeakers" width="300" height="225" class="alignnone size-medium wp-image-606" /></a> <a href='http://blog.xebia.com/wp-content/uploads/2008/06/dsc01180.jpg'><img src="http://blog.xebia.com/wp-content/uploads/2008/06/dsc01180-300x225.jpg" alt="" title="dsc01180" width="300" height="225" class="alignnone size-medium wp-image-609" /></a><br />
Presenting "token of thanks" to the speakers<br />
</center></p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F18%2Fagile-awareness-workshop2008%2F&amp;title=Agile+Awareness+Workshop2008', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/18/agile-awareness-workshop2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Top 10 SOA Pitfalls: #2 - Unclear ownership / Project based funding</title>
		<link>http://blog.xebia.com/2008/06/16/top-10-soa-pitfalls-2-unclear-ownership-project-based-funding/</link>
		<comments>http://blog.xebia.com/2008/06/16/top-10-soa-pitfalls-2-unclear-ownership-project-based-funding/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 15:55:06 +0000</pubDate>
		<dc:creator>Viktor Grgic</dc:creator>
		
		<category><![CDATA[Project Management]]></category>

		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=590</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/16/top-10-soa-pitfalls-2-unclear-ownership-project-based-funding/&s=compact&t=Top 10 SOA Pitfalls: #2 - Unclear ownership / Project based funding&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p><em>Last week <a href="http://blog.xebia.com/author/vgrgic">Viktor Grgic</a> explained the <a href="http://blog.xebia.com/2008/06/09/top-10-soa-pitfalls-3-missing-skills/">Missing skills</a> en this week we’ll continue with #2 - Unclear ownership / Project based funding</em></p>
<p>In the world of standalone applications, there is typically a clear sponsorship and ownership of an application. There is also a single project with one project manager. The systems could be small or big, but the pattern remains the same. Funding is based on a business case and can be easily defended.<br />
In SOA world, the story is different. There are the usual projects, each having their own objectives and often reluctant to work on generic services or enterprise components. If the ownership and funding for these components and aspects are unclear then chances are high that nothing happens on enterprise level or that it's not according to enterprise architecture or nobody feels responsible when things on enterprise level go wrong (e.g. security).<br />
Several projects working together is not a bad situation, but there should also be a SOA steering committee and SOA competence center well funded and supported by company board.<br />
<span id="more-590"></span><br />
The problems related to the unclear ownership / project based funding pitfall are:</p>
<p><em>Many projects with own interests</em><br />
There is usually an Enterprise Architect or someone else expecting separate projects to deliver reusable services and deliver according to the enterprise architecture. The projects are business-driven, but often projects only target one aspect of the business strategy. Exposing the services to others and making them reusable conflicts with direct business interests. It requires additional effort for a project to generalize services and expose them to others; as apposed to just using the functionality of the services in the project itself only. Especially waterfall projects have this problem, because this reusability aspect is quite difficult to plan in advance.</p>
<p><em>Single large SOA project</em><br />
Other companies define a single large SOA project which delivers "SOA" more or less as a product. This is strange, because SOA is an architecture style and not a product. Defining a business case for SOA is difficult. The usual consequence of an unclear business case is that SOA itself becomes the goal. The real goal is achievement of business requirements like faster time-to-market or cost reduction by better information and IT resources reusability.</p>
<p><em>Everything generic</em><br />
In companies where several projects are delivering business products in SOA fashion everybody is talking about generic services and many projects claim to build these. In practice, the projects are building these services for themselves and don't really gather requirements from other projects or departments. Again, why should they? It costs significant effort / money and creates project risks.</p>
<p><em>Centralized services</em><br />
It is a good practice to centralize services, which are not directly bound to one particular domain or department. These are often technical services. For example, security (authentication, authorization, audit log), message routing, reference data. But, what about transformation services specific to one business domain? In SOA projects, there is a tendency to centralize as much as possible. However centralization could cause more troubles. As an example, one problem is that it becomes very difficult to define how  responsibilities are divided. A shared responsibility mostly results in no responsibility. The main question is who is paying for development and maintenance.</p>
<p>The root cause of these problems can be found in unclear ownership and project based funding. It can get very messy if this is not organized well. The following are possible solutions:</p>
<p><strong>SOA competency center</strong><br />
With any SOA initiative, there should always be something like a SOA competency center. Eric Roch gives an <a href="http://blogs.ittoolbox.com/eai/business/archives/organizing-for-soa-success--22361">explaination</a> on how to organize such competency center. This is a team of people from different area's (technical integration specialists, developers, architects, business consultants) which are pro-actively solving the mentioned problems. This team has independent funding and has a short term delivery of results in short iterations. This team does not only deliver underlying infrastructure and middleware, but also generic, reusable, domain-independent services. Domain-specific services will still be delivered by normal projects. In addition this SOA competency center can also support projects in variety of other ways (making services reusable, middleware integration).</p>
<p><strong>Create market within the company</strong><br />
The projects need to invest in Enterprise aspects. The investment can be covered by having other departments/projects pay for it when services are needed. This is usually a single payment for requirements gathering and development effort.<img class="alignright" style="float: right;" title="soa-competence-center" src="http://blog.xebia.com/wp-content/uploads/2008/06/soa-competence-center.png" alt="" width="166" height="193" /></p>
<p><strong>Steering committee</strong><br />
The participants of the steering committee are representatives from departments. They discuss and make the decisions about enterprise subjects. The budget is determined by company management. The steering committee is also the sponsor and budget-holder for the services delivered by the SOA competence center.</p>
<p><strong>Guerilla Tactics (from <a href="http://cibit.nl/site.nsf/page/ict_nieuws_ict_de_top_10_guerilla_tactics">CIBIT-DNV</a>) if you are an Enterprise Architect</strong><br />
If the projects / departments are reluctant to cooperate, you have always guerilla tactics:</p>
<ul>
<li>Create a gang of architects from all these projects and make them do the dirty job. Project managers often don't really understand what architects do anyway. In this ways enterprise aspects are funded by the projects secretly.</li>
<li>Threat the projects with external legislation, security aspects, and anything else that you can think of.</li>
<li>Steal the enterprise subjects / components (core services and entities, logging, security) and hold them hostage. The projects will have to work with you and deliver these with their own budget. <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<p>Having clear ownership and funding for enterprise components and aspects like security, logging, message routing, message transformation, generic services, ESB, and so on solves not only the problems during development, but especially in production when operational aspects become essential.</p>
<p>Next week <a href="http://blog.xebia.com/author/rdegroot/">Rik de Groot</a> will take us to #1...</p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F16%2Ftop-10-soa-pitfalls-2-unclear-ownership-project-based-funding%2F&amp;title=Top+10+SOA+Pitfalls%3A+%232+-+Unclear+ownership+%2F+Project+based+funding', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/16/top-10-soa-pitfalls-2-unclear-ownership-project-based-funding/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RubyEnRails 2008</title>
		<link>http://blog.xebia.com/2008/06/12/rubyenrails-2008/</link>
		<comments>http://blog.xebia.com/2008/06/12/rubyenrails-2008/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 20:59:29 +0000</pubDate>
		<dc:creator>Sjors Grijpink</dc:creator>
		
		<category><![CDATA[JRuby]]></category>

		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[RubyEnRails2008]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=589</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/12/rubyenrails-2008/&s=compact&t=RubyEnRails 2008&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p>Last tuesday I  attended the “RubyEnRails2008 dag”, which is the Dutch RubyAndRails conference. It was the third time this conference was organized and this year it was located at the Hoge school in Amsterdam. The line up was really impressive. A number of the Ruby Rockstars gave presentations and at the end of the day David Heinemeier Hansson joined from Chicago for a Q&amp;A session</p>
<p><span id="more-589"></span></p>
<p><strong>EaRing</strong></p>
<p>The day started with a talk from Zed A. Shaw. He is the creator of Mongrel and became really famous with his rant against the Rails community. His presentation was very entertaining but not so much about Ruby than about how great a programmer he is (which he is btw.). The project he presented was the Meta-Literal Machine which makes learning ASM fun... It was written in 2 weeks and has support for some great features like: fully dynamic functions, access to .so files, dynamic constants(!) and it has even better error messages than Ruby interpreters. He used a Fibonacci number calculation program to show how fast the Meta-Literal Machine was. Calculating 96 Fibonacci numbers 5.000.000 times took on his laptop about 1.2 sec. There was some ranting against the idea to scale up application speed by parallelization. The arguments he used were quite solid and based on an extensive analysis with Amdahl’s law. So, to make programs run faster, don’t bet on parallelization but write faster programs...</p>
<p><strong>The worst Rails code you’ve ever seen</strong></p>
<p>This talk, by Obie Fernandez, was about bad coding practices in Rails projects. Obie Fernandez is a well known figure in the Ruby community and is the author of the book ‘The Rails Way’. In his talk he explained that worst (from the talk title) doesn’t mean stupid, but means programming a Rails application not in the Rails way. He gave some pointers on how to code the Rails way. One of the most important things to do is to learn Ruby. An other excellent advice he gave was that it is very useful to pair program with more experienced programmers. And never forget good OO principles when writing Rails code.</p>
<p><strong>Phusion Passenger™ (aka mod_rails)</strong></p>
<p>A better way of deploying Rails applications on apache was presented by Ninh Bui &amp; Hongli Lai. The apache module for running Rails apps was very outdated, not any more! The guys from Phusion created a great product for deploying Rails apps on Apache using Phusion Passenger and their Ruby Enterprise Edition. They announced version 2 of Passenger which includes many improvements like: fair load balancing (as opposite to a round robin strategy), parallel file upload (freeing up the Rails instance to handle new incoming requests) and a big reduction of the VM size. The architecture allows for running not only Rails, but also Merb, Camping, ... and even Django apps using there Rack and WSGI support. The benchmarks they presented were very impressive. Comparing different deployment strategies (not JRuby on Glassfish), the Apache plus Passenger setup wins hands down with respect to speed and memory consumption. I would have liked to see a deployment setup with JRuby on Glassfish in the benchmark though.</p>
<p><strong>JRuby</strong></p>
<p>A talk not to miss was given by Charles Olivier Nutter about running Ruby on the Java VM. The JRuby project is production ready for some time now, and on average apps run even faster on the JVM than when running on the standard Ruby Interpreter (MSI). He mentioned that Java for some people was surrounded with negativity due to emotional arguments (I don’t like the languages) and sometimes the arrogant attitude of the Java vendors (“the answer is Java. What was the question?”). He continued by praising the JVM and showed some really impressive demos of ruby programs running on the JVM  and leveraging the very rich collection of Java libraries (e.g. <a title="http://processing.org/" href="http://processing.org/">processing.org/</a> and <a title="http://www.the-shoebox.org/apps/44" href="http://www.the-shoebox.org/apps/44">www.the-shoebox.org/apps/44</a>).<br />
He then continued on showing how to run Rails apps on the JVM. The ease of deployment is really impressive. One can use any Java app server to run a Rails app as a WAR file build with the Warbler tool. Besides that, there is even an easier way provided by the guys from Glassfish using the Glassfish gem:<br />
&gt; gem install glassfish<br />
&gt; cd $your_rails_project_dir<br />
&gt; glassfish_rails<br />
And its done!</p>
<p>A number of companies already use JRuby in there production environment: Oracle, Sun, Thoughtworks (Mingle), ...</p>
<p><strong>Q&amp;A with David Heinemeier Hansson</strong></p>
<p>David Heinemeier Hansson is the creator of Ruby on Rails. There was a live video connection with him in Chicago giving us the possibility to ask questions. A lot of the questions were more about the business side of 37signals (his company) than actually on Rails and its future, but it was kinda nice to see him “live” <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> I give you some random notes I wrote up during this Q&amp;A:</p>
<ul>
<li>Rails is not equal to mainstream. The mainstream should bend to Rails.</li>
<li>No 5 year plan: Goal numbers are bull...</li>
<li>Flame wars are not leading to much <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>Localization should not be part of Rails (everybody has its own idea about what localization means)</li>
<li>37signals has 10TB of data on Amazon S3</li>
</ul>
<p>Scalability?</p>
<ul>
<li>the twitter rant is very loud, lots of noise</li>
<li>twitter might not be a good fit for rails (not really a traditional web app)</li>
<li><a title="Yellow Pages" href="http://www.yellowpages.com/" target="_blank">Yellow Pages</a> performs very well on Rails</li>
</ul>
<p>In the end a very fun and inspiring day at RubyEnRails 2008!</p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F12%2Frubyenrails-2008%2F&amp;title=RubyEnRails+2008', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/12/rubyenrails-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Top 10 SOA Pitfalls: #3 - Missing skills</title>
		<link>http://blog.xebia.com/2008/06/09/top-10-soa-pitfalls-3-missing-skills/</link>
		<comments>http://blog.xebia.com/2008/06/09/top-10-soa-pitfalls-3-missing-skills/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 06:59:46 +0000</pubDate>
		<dc:creator>Viktor Grgic</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=586</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/09/top-10-soa-pitfalls-3-missing-skills/&s=compact&t=Top 10 SOA Pitfalls: #3 - Missing skills&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p><em>Last week <a href="http://blog.xebia.com/author/gvermaas">Gero Vermaas</a> explained the <a href="http://blog.xebia.com/2008/06/02/top-10-soa-pitfalls-4-incorrectly-applied-canonical-data-model/">Incorrectly Applied CDM</a> en this week we’ll continue with #3 - Missing skills</em></p>
<p>Just like any other paradigm, a level of new knowledge and experience is required. Unfortunately, SOA requires lots of new knowledge and experience. It requires a different way of thinking of more or less everyone involved. People are used to closed environments on both organisational and technical level; largely well protected from influences and unwanted dependencies with the outside world. It's all in their area of influence which makes achieving short term results relatively easy. I'm referring to silo applications where the world is complicated enough. From their view, SOA makes things even more complex. There should be awareness that there is lack of knowledge, experience and attitude and something should be done about this first. There is no real solution, except for the obvious one: educate everyone involved. Also, agile methodologies have proven to be effective in building up knowledge and experience.<br />
<span id="more-586"></span><br />
Companies we come across introduce SOA in different ways:</p>
<ul>
<li>External consultant / architect advises the company to follow this new paradigm. If she is wise enough, she will first focus on the business case for SOA and make people understand why the company needs this architecture style. At the end, this makes things less confusing for people who don't understand SOA. At the same time, making an understandable business case for SOA is a daunting task. But very much worth the effort. At the same time, companies tend to approach SOA in their business cases as a thing which directly delivers value. They don't realize that SOA is just an architectural style and not a thing. Creating business case for SOA means making the match between the real business values and advantages of this architectural style.</li>
<li>Product vendor has an ESB (Enterprise Service Bus), which <em>seems</em> to match with wanted features, which <em>seems</em> to be backed by real business needs. In the end, everybody is playing with the toy. Playing becomes difficult over time, because knowledge development is often driven by the tool. Non-IT people tends to feel left out and see SOA as something technical. Strangely enough, even they seem to be happy with the big toy without the understanding how the toy solves their problems. Another proof we all have something childish in ourselves. <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>A group of people from within the company read the books, attend courses, conferences and so on and somehow realise SOA will solve many of their problems. They get together, start brainstorming and soon realize that this thing called SOA is huge and that there are many area's "where no man has gone before". According to them, if you want to do it well, you should spend a lot of time and effort in thinking and defining it. They act like researchers but without real plan covering the outline of this research, principles, results, criteria when the research is finished and so on. Another proof of childish behaviour. Children love to create something big, are satisfied if they learn something a long the way and be completely equanimous if the whole thing is not used or replaced with something else.</li>
</ul>
<p>Let me be clear that there are many ways to introduce SOA and that it very much depends on the concrete situation. Even the toy-based approach is in some situations the best possible approach. But, each of them suffers from a lack of knowledge and skills in many area's:</p>
<p><strong>Business Architecture</strong><br />
The term itself is quite new for many organisations and becomes important in SOA world. Creating business architecture in SOA means crossing the departmental boundaries, integrated business process modelling, creation of canonical data models, definition of business services (which are later translated into concrete services), defining different kind of security architecture, gathering business requirements and concerns of many stakeholders, and thinking in SOA design patterns.</p>
<p><strong>Software Requirements Engineering</strong><br />
The toolbox of an requirements engineer is often limited to Use Cases. This methodology is not very suitable in SOA environment because it covers a very limited area. Quality (deprecated term: non-functional) requirements become more important because the <a href="http://blog.xebia.com/2008/05/19/top-10-soa-pitfalls-6-soa-does-not-solve-complexity-automatically">complexity of a SOA architecture</a> has larger impact on performance, availability, application management.</p>
<p><strong>Project management</strong><br />
As a project manager, your project has budget and scope. It gets really fuzzy when people start requesting to build generic services and take care of their concerns. Your budget holder could also be reluctant to pay extra for something like this. Especially when you tell her what this means when the system is in production mode. A project manager should aim for two goals: usual delivery of the business product and "readiness" for SOA. These goals could conflict and project manager should be able to manage these conflicts. We see in practice that project managers simply ignore the SOA goals if the conflicts occur.</p>
<p><strong>Software Architects and Developers</strong><br />
They require skills on EAI/SOA patterns, webservices, messaging, ESB's, BPM engines. And particularly difficult to find are specialists with experience in XSLT, Xquery, ebXML and WS-* stack.</p>
<p><strong>Testing</strong><br />
Testers will also need to understand SOA and the exact implications of it on testing. Testing services independently of each other is relatively easy. But what about a complete business process, supply chain testing, transaction handling over multiple services when a transaction must be rolled back, asynchronous messaging, automated testing and so on.</p>
<p><strong>IT management</strong><br />
An IT manager who does not really understand SOA sees it as introduction of some large and expensive infrastructure components which <a href="http://blog.xebia.com/2008/05/19/top-10-soa-pitfalls-6-soa-does-not-solve-complexity-automatically/">magically solves the integration problems</a>. In large organisations there are several IT managers, one for each department. It proves almost impossible to introduce collective middleware. The problem is the <a href="http://blog.xebia.com/2008/05/12/top-10-soa-pitfalls-7-incorrect-granularity-of-services/">assigned responsibility and ownership</a>. One of the solutions is creation of a the separate Middleware Competence Center or Shared Service Center. This often is a complete new department. If you're lucky, the IT manager and her staff have SOA skills.</p>
<p><strong>Collaborative attitude</strong><br />
Separate departments can have a protective attitude. Although everybody in the company will tell you that collaboration is good for everyone, they will first protect interests of the department before they address overall company interests. The root cause is the unclear advantages of collaboration. People tend to see disadvantages, e.g. additional dependencies.</p>
<p>If a company lacks knowledge in only one these areas, the whole SOA undertaking is in danger. The symptoms are long discussions, sometimes for a year or longer and the only results are large documents and/or some unused middleware infrastructure. The discussions focus on who should do what and how are responsibilities divided. The root problem is that these people have many years of experience, but don't realize they are lacking the skills needed for SOA and they should be doing something about this first.<br />
Hiring experienced consultants to the job only solves the problem if everybody actively participates in  the learning process and consultants have coaching role.<br />
Lack of skills can be partially compensated by focusing on short term results and learning from mistakes, which is an Agile way of thinking.</p>
<p>Next week <a href="http://blog.xebia.com/author/vgrgic/">Viktor Grgic</a> will take us to #2...</p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F09%2Ftop-10-soa-pitfalls-3-missing-skills%2F&amp;title=Top+10+SOA+Pitfalls%3A+%233+-+Missing+skills', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/09/top-10-soa-pitfalls-3-missing-skills/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Querying associations in Grails with HQL, Criteria and HibernateCriteriaBuilder</title>
		<link>http://blog.xebia.com/2008/06/04/querying-associations-in-grails-with-hql-criteria-and-hibernatecriteriabuilder/</link>
		<comments>http://blog.xebia.com/2008/06/04/querying-associations-in-grails-with-hql-criteria-and-hibernatecriteriabuilder/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 08:35:29 +0000</pubDate>
		<dc:creator>Erik Pragt</dc:creator>
		
		<category><![CDATA[Grails]]></category>

		<category><![CDATA[Groovy]]></category>

		<category><![CDATA[Hibernate]]></category>

		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=582</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/04/querying-associations-in-grails-with-hql-criteria-and-hibernatecriteriabuilder/&s=compact&t=Querying associations in Grails with HQL, Criteria and HibernateCriteriaBuilder&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p>A thing I was playing with today was many-to-many relationships in Grails to create a Tag Cloud. To create a Tag Cloud, I must have a set of key/value pairs, each with a label and a value of the label, which could look like this: </p>
<p><code>['Java': 5, 'Grails': 16, 'Groovy': 12]</code></p>
<p>But to query this, I need to query a many to many relationship and produce the above result. This blog will describe how to do this with HQL, Criteria and the HibernateCriteriaBuilder.<br />
<span id="more-582"></span></p>
<h3>Domain</h3>
<p>My current domain looks like this:<br />
<a href='http://blog.xebia.com/wp-content/uploads/2008/06/many-to-many.png'><img src="http://blog.xebia.com/wp-content/uploads/2008/06/many-to-many-300x70.png" alt="" title="many-to-many" width="300" height="70" class="alignnone size-medium wp-image-583" /></a><br />
<i>(This picture is unfortunately missing a Tag attribute in the Snippet class).</i></p>
<p>As you can see, a Snippet can have multiple Tags, while a Tag can belong to multiple Snippets. How can we query this?</p>
<h3>Options</h3>
<p>We have three options in this case</p>
<ul>
<li>HQL</li>
<li>Hibernate Criteria</li>
<li>Hibernate Criteria using the HibernateCriteriaBuilder</li>
</ul>
<p><b>HQL</b><br />
The HQL version is not so hard (and neither are the other ones), but we have to start somewhere, so let's start with this one.</p>
<p>To start at the end: the query looks like this:</p>
<p><code>select tag.text, count(snippet.id)<br />
from Tag as tag<br />
inner join tag.snippets as snippet<br />
group by tag.text<br />
</code></p>
<p>To test this code, I find it easiest to start up the Grails console:<br />
<code>grails console</code><br />
and run the HQL there. You can do so by obtaining the SessionFactory from the ApplicationContext, which is done by accessing the implicit 'ctx' variable in the console. The complete code looks like this:</p>
<pre class="java">&nbsp;
def sessionFactory = ctx.<span style="color: #006600;">sessionFactory</span>
def session = sessionFactory.<span style="color: #006600;">getCurrentSession</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
def query = session.<span style="color: #006600;">createQuery</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;select tag.text, count(snippet.id) from Tag as tag inner join tag.snippets as snippet group by tag.text&quot;</span><span style="color: #66cc66;">&#41;</span>
def results = query.<span style="color: #006600;">list</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;</pre>
<p>Which, in my case, returns this (I have two snippets, one with 3 tags and one with 1 tag, which is a duplicate tag of the first snippet): </p>
<p><code>[["groovy", 1], ["io", 2], ["testing", 1]]</code></p>
<p><b>Hibernate Criteria</b><br />
Since Grails is built on Groovy/Java, Hibernate and Spring, it's easy to use that power while coming up with a solution to your problem. If you write Java code all day, and writing Hibernate Criteria is something you do daily, this won't be a problem at all. Just copy and paste your existing Java code into  Grails, and you'll produce something like this:</p>
<pre class="java">&nbsp;
def sessionFactory = ctx.<span style="color: #006600;">sessionFactory</span>
def session = sessionFactory.<span style="color: #006600;">getCurrentSession</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AList+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">List</span></a> results = session.<span style="color: #006600;">createCriteria</span><span style="color: #66cc66;">&#40;</span>Tag.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #66cc66;">&#41;</span>
  .<span style="color: #006600;">setProjection</span> <span style="color: #66cc66;">&#40;</span> Projections.<span style="color: #006600;">projectionList</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
     .<span style="color: #006600;">add</span> <span style="color: #66cc66;">&#40;</span>Projections.<span style="color: #006600;">groupProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;text&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
     .<span style="color: #006600;">add</span> <span style="color: #66cc66;">&#40;</span>Projections.<span style="color: #006600;">rowCount</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
  .<span style="color: #006600;">createCriteria</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;snippets&quot;</span><span style="color: #66cc66;">&#41;</span>
  .<span style="color: #006600;">list</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;</pre>
<p><b>Hibernate Criteria using the HibernateCriteriaBuilder</b><br />
If you, however feel that the above is lacking some style, you might want to check out the HibernateCriteriaBuilder, which is a DSL for building <a href="file://localhost/d:/download/Grails/grails-docs-1.0/guide/5.%20Object%20Relational%20Mapping%20(GORM).html#5.4.2 Criteria">Hibernate Criteria</a>. </p>
<p>When using the DSL, we first need to retrieve the HibernateCriteriaBuilder, which can be obtained from any domain class. After that, you'll have the full power of Hibernate contained in an easy, readable DSL.</p>
<pre class="groovy">&nbsp;
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span style="color: #000000; font-weight: bold;">def</span></a> c = Tag.<span style="color: #006600;">createCriteria</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span style="color: #000000; font-weight: bold;">def</span></a> results = c.<span style="color: #006600;">list</span> <span style="color: #66cc66;">&#123;</span>
   projections <span style="color: #66cc66;">&#123;</span>
      groupProperty<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;text&quot;</span><span style="color: #66cc66;">&#41;</span>
      rowCount<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#125;</span>
   snippets <span style="color: #66cc66;">&#123;</span> <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<h3>Conclusion</h3>
<p>As you can see, Grails provides a lot of options to query your domain. Whether you prefer HQL, the safe and sound Criteria, or the new HibernateCriteriaBuilder, the choice is up to you. By leveraging the power of existing frameworks, Grails provides an easy and powerful way to quickly develop an application with a minimal learning curve!</p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F04%2Fquerying-associations-in-grails-with-hql-criteria-and-hibernatecriteriabuilder%2F&amp;title=Querying+associations+in+Grails+with+HQL%2C+Criteria+and+HibernateCriteriaBuilder', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/04/querying-associations-in-grails-with-hql-criteria-and-hibernatecriteriabuilder/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wicket - Updating ListViews using an AjaxLink</title>
		<link>http://blog.xebia.com/2008/06/04/wicket-updating-listviews-using-an-ajaxlink/</link>
		<comments>http://blog.xebia.com/2008/06/04/wicket-updating-listviews-using-an-ajaxlink/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 08:20:56 +0000</pubDate>
		<dc:creator>Mischa Dasberg</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Wicket]]></category>

		<guid isPermaLink="false">http://blog.xebia.com/?p=581</guid>
		<description><![CDATA[<div class="diggthisplugin" style="float: right; width: 140px; padding-top: 10px; margin-left: 20px;"><iframe src="http://digg.com/tools/diggthis.php?u=http://blog.xebia.com/2008/06/04/wicket-updating-listviews-using-an-ajaxlink/&s=compact&t=Wicket - Updating ListViews using an AjaxLink&k=#FFFFFF" scrolling="no" style="border: none; height: 18px; width: 120px;"></iframe>
		</div><p>Consider the following senario: we want to display some data in a table like manner, and we want it to update when we click on a link or button. We do not want to do a complete page refresh, we want it in an ajax way. Also we would like the modify the css for each cell.</p>
<p>In wicket you can use a ListView iterate over a List of Objects and display them in a table like manner.<br />
This blog describes how you can update ListView data and modify the css for each cell.<br />
<span id="more-581"></span><br />
So how do we start?</p>
<p>Well first we need to create a ListView. Lets call it <em><strong>view</strong></em>.<br />
But before we do that we need a List of objects we want to display. So lets create it.<br />
I use a List of TestObject's.</p>
<p>As you can see below, this isn't very hard.</p>
<pre class="java">&nbsp;
<span style="color: #000000; font-weight: bold;">private</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AListView+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">ListView</span></a> view;
<span style="color: #000000; font-weight: bold;">private</span> List&lt;TestObject&gt; objects;
&nbsp;
objects = <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AArrays+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Arrays</span></a>.<span style="color: #006600;">asList</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> TestObject<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">new</span> TestObject<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;one&quot;</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>,
    <span style="color: #000000; font-weight: bold;">new</span> TestObject<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;two&quot;</span>, <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>,
    <span style="color: #000000; font-weight: bold;">new</span> TestObject<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;three&quot;</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
view = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AListView+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">ListView</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;view&quot;</span>, objects<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    @Override
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #993333;">void</span> populateItem<span style="color: #66cc66;">&#40;</span>ListItem item<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ALabel+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Label</span></a> label = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ALabel+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Label</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;label&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> PropertyModel<span style="color: #66cc66;">&#40;</span>item.<span style="color: #006600;">getModel</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #ff0000;">&quot;name&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
        label.<span style="color: #006600;">setOutputMarkupId</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
        item.<span style="color: #006600;">add</span><span style="color: #66cc66;">&#40;</span>label<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;
&nbsp;</pre>
<p>Next we will create an IndicatingAjaxFallbackLink which is basically a AjaxLink that shows an indicator.</p>
<pre class="java">&nbsp;
<span style="color: #000000; font-weight: bold;">private</span> IndicatingAjaxFallbackLink link;
&nbsp;
link = <span style="color: #000000; font-weight: bold;">new</span> IndicatingAjaxFallbackLink<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;link&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> onClick<span style="color: #66cc66;">&#40;</span>AjaxRequestTarget target<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        objects = <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AArrays+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Arrays</span></a>.<span style="color: #006600;">asList</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> TestObject<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">new</span> TestObject<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;four&quot;</span>, <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>,
            <span style="color: #000000; font-weight: bold;">new</span> TestObject<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;five&quot;</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>,
            <span style="color: #000000; font-weight: bold;">new</span> TestObject<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;six&quot;</span>, <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
        view.<span style="color: #006600;">setList</span><span style="color: #66cc66;">&#40;</span>objects<span style="color: #66cc66;">&#41;</span>;
        target.<span style="color: #006600;">addChildren</span><span style="color: #66cc66;">&#40;</span>view, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ALabel+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Label</span></a>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;
&nbsp;</pre>
<p>Thats all. Now see that we add a new List of objects to the ListView. To make sure the ListView is updated we add
<pre class="java">target.<span style="color: #006600;">addChildren</span><span style="color: #66cc66;">&#40;</span>view, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ALabel+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Label</span></a>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #66cc66;">&#41;</span>;</pre>
<p> instead of
<pre class="java">target.<span style="color: #006600;">addComponent</span><span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;</pre>
<p>. As a ListView is a repeater, we cannot updated it, but we can update components in a ListView.</p>
<p>So now we can update a ListView, but how do we change the css for each field?</p>
<p>We add an AttributeModifier. In the populateItem method show above we just add the following</p>
<pre class="java">&nbsp;
label.<span style="color: #006600;">add</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> AttributeModifier<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;class&quot;</span>, <span style="color: #000000; font-weight: bold;">true</span>, <span style="color: #000000; font-weight: bold;">new</span> PropertyModel<span style="color: #66cc66;">&#40;</span>item.<span style="color: #006600;">getModel</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #ff0000;">&quot;odd&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AObject+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> getObject<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABoolean+java.sun.com&amp;bntI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Boolean</span></a><span style="color: #66cc66;">&#41;</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006600;">getObject</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> ? <span style="color: #ff0000;">&quot;odd&quot;</span> : <span style="color: #ff0000;">&quot;even&quot;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;</pre>
<p>The getObject method is overridden, because the method getOdd() on the TestObject returns a boolean. So instead of returning true or false, it now returns "odd" or "even" which are css class styles.</p>
<p>That's it.</p>
<p>I have attached the example project  <a href='http://blog.xebia.com/wp-content/uploads/2008/06/wicket-example.zip'>here</a> so you can look into the code yourself.</p>
<div><a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?pub=&amp;url=http%3A%2F%2Fblog.xebia.com%2F2008%2F06%2F04%2Fwicket-updating-listviews-using-an-ajaxlink%2F&amp;title=Wicket+-+Updating+ListViews+using+an+AjaxLink', 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" /></a></div>]]></description>
		<wfw:commentRss>http://blog.xebia.com/2008/06/04/wicket-updating-listviews-using-an-ajaxlink/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
