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

<channel>
	<title>Xebia Blog</title>
	<atom:link href="http://blog.xebia.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com</link>
	<description>Software development done right!</description>
	<lastBuildDate>Wed, 01 Feb 2012 00:30:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Why Application Release Automation needs a Release and an Operations view</title>
		<link>http://blog.xebia.com/2012/02/01/why-application-release-automation-needs-a-release-and-an-operations-view/</link>
		<comments>http://blog.xebia.com/2012/02/01/why-application-release-automation-needs-a-release-and-an-operations-view/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 00:30:00 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Xebia Labs]]></category>
		<category><![CDATA[application release automation]]></category>
		<category><![CDATA[continuous delivery]]></category>
		<category><![CDATA[devops]]></category>

	<!-- AutoMeta Start -->
	<category>myapplication</category>
	<category>myapplication</category>
	<category>perspectives</category>
	<category>prod</category>
	<category>devops</category>
	<category>delivery</category>
	<category>owned</category>
	<category>pipeline</category>
	<category>myapplication</category>
	<category>myapplication</category>
	<category>perspectives</category>
	<category>prod</category>
	<category>devops</category>
	<category>delivery</category>
	<category>owned</category>
	<category>pipeline</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8559</guid>
		<description><![CDATA[As the interface between Development and Operations, Application Release Management1 handles information that is highly relevant to your Release and Operations teams. Selecting an Application Release Automation solution that provides insight and analytics from both perspectives is thus a key component of an effective DevOps strategy. Here, we explain how Deployit&#8216;s Infrastructure and new Release [...]]]></description>
			<content:encoded><![CDATA[<p>As the interface between Development and Operations, Application Release Management<sup>1</sup> handles information that is highly relevant to your Release and Operations teams. Selecting an Application Release Automation solution that provides insight and analytics from <em>both</em> perspectives is thus a key component of an effective DevOps strategy.</p>
<p>Here, we explain how <a href="http://www.xebialabs.com/tour" target="_new">Deployit</a>&#8216;s Infrastructure and new Release Overview features help you achieve this goal.<br />
<span id="more-8559"></span></p>
<h3>Continuous Delivery &#038; the Release Perspective</h3>
<p>In today&#8217;s highly competitive economic environment, the need to bring new features to market quickly, flexibly and reliably is paramount &#8211; a goal that is ultimately the aim of the main IT trends Cloud, Agile and DevOps.</p>
<p>Continuous Delivery &#8211; extending <a href="/2010/10/12/deployment-automation-vs-build-automation/" target="_new">Continuous Integration</a> to  automatically transition applications down the <em>Dev-Test-Acc-Prod</em> delivery pipeline &#8211; is a key component of this strategy. In order to be able to effectively implement this, your ARA solution needs to allow your developers &#8211; or, in larger organisations, release or DevOps teams, to quickly and efficiently answer questions such as:</p>
<ul>
<li><strong>How far is <em>MyApplication</em> down the road to Production?</strong></li>
<li><strong>When will <em>MyApplication</em> take the next step down the road?</strong></li>
<li><strong>What do I still need to do before that next step can be taken<sup>2</sup>?</strong></li>
</ul>
<p><img src="http://blog.xebialabs.com/wp-content/uploads/2012/01/two-perspectives-release1.png" alt="" title="two-perspectives-release" class="aligncenter size-full wp-image-8347" /></p>
<p>Ideally, this dashboard would also allow you to plan <em>MyApplication</em>&#8216;s next step and calculate the estimated go-live data, perhaps even based on an analysis of previews versions of <em>MyApplication</em>.</p>
<h3>(Virtual) Environment Management &#038; the Operations Perspective</h3>
<p>From an Operations point of view, an individual application is only a small part of the picture. Across your <em>Dev-Test-Acc-Prod</em> landscape, you will need to track <em>all</em> applications vying for these environments, to manage potentially conflicting resource requests, plan environment maintenance activities and the like.</p>
<p>Since these environments are often owned and managed by different teams and certainly have varying service levels, you will also want to limit your view to one or a subset of these environments at a time.</p>
<p>Your Operations or DevOps teams need to know:</p>
<ul>
<li><strong>Which application versions are currently deployed to my environment(s), or were deployed at a certain point in time?</strong></li>
<li><strong>Which components do these applications consist of? On which middleware and infrastructure systems are these components deployed?</strong></li>
<li><strong>What are the current values of any properties or settings for these components? Which environment-specific customizations have been applied?</strong></li>
</ul>
<p><img src="http://blog.xebialabs.com/wp-content/uploads/2012/01/two-perspectives-ops1.png" alt="" title="two-perspectives-release" class="aligncenter" /></p>
<p>Cloud and the on-demand environments it enables will eventually replace the rigid <em>Dev-Test-Acc-Prod</em> distinction<sup>3</sup>. Nevertheless, the ability to present an environment-centric view will still be required, since virtual environments will still be owned by different groups or teams. Indeed, such a perspective will be even <em>more</em> important if you want to effectively combat &#8220;virtual sprawl&#8221;.</p>
<p>While the coming generations of &#8220;true&#8221; cloud architectures will hopefully reduce the shared resource conflicts that greatly complicate much of today&#8217;s <em>Dev-Test-Acc-Prod</em> management, databases, legacy systems and external payment providers are not likely to disappear anytime soon.</p>
<p>In fact, Facebook, Twitter and other social elements of your future business services may even <em>increase</em> the number of shared resources you need to manage!</p>
<h3>Incorporating ARA Data in the Service Delivery Picture</h3>
<p>Whilst your ARA solution should be your &#8220;go-to&#8221; platform for answers about how your applications and environments relate, it is equally important to consider when this data might be more effectively embedded in a broader service delivery picture. </p>
<p>For example, your ARA platform is not a good candidate for providing a release calendar, since it is not aware of much of the information that is relevant in this context, such as CAB<sup>4</sup> meeting schedules, business sign-off dates or operational maintenance windows.</p>
<p>It is thus important to ensure that your ARA solution can make its data accessible via APIs such as RSS feeds, iCal calendars and other APIs, to enable effective integrations with the rest of your service delivery tooling.</p>
<h3>Conclusion</h3>
<p>The right Application Release Automation platform gives your Delivery and Operations teams fast, accurate insight into your application environments and delivery pipeline. </p>
<p>Choosing a solution like <a href="http://www.xebialabs.com/tour" target="_new">Deployit</a> with focused Operations and Delivery overviews as well as open APIs for easy integration into your overall Service Delivery dashboards and reports greatly enhances the accessibility and effectiveness of your application release management.</p>
<div style="background-color: #efeeea; border: 1px solid #AAAAAA; margin: 0.8em; padding: 0.4em; font-size: 85%;"><strong>Footnotes</strong></p>
<ol>
<li>a.k.a. <em>Deployment Automation</em> &#8211; choose your favourite <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>For instance, certain blocking release conditions, such as test sign-off, may still need to be met.</li>
<li>and have long done so in many forward-looking organisations</li>
<li><a href="http://en.wikipedia.org/wiki/Change_Advisory_Board" target="_new"><strong>C</strong>hange <strong>A</strong>dvisory <strong>B</strong>oard</a></li>
</ol>
</div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2012/02/01/why-application-release-automation-needs-a-release-and-an-operations-view/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2012%2F02%2F01%2Fwhy-application-release-automation-needs-a-release-and-an-operations-view%2F&amp;title=Why%20Application%20Release%20Automation%20needs%20a%20Release%20%3Cem%3Eand%3C%2Fem%3E%20an%20Operations%20view" id="wpa2a_2"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2012/02/01/why-application-release-automation-needs-a-release-and-an-operations-view/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile is niet te vermijden</title>
		<link>http://blog.xebia.com/2012/01/27/agile-is-niet-te-vermijden/</link>
		<comments>http://blog.xebia.com/2012/01/27/agile-is-niet-te-vermijden/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 13:08:10 +0000</pubDate>
		<dc:creator>mvanbenthem</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[agile project]]></category>
		<category><![CDATA[generatie y]]></category>
		<category><![CDATA[generatie z]]></category>
		<category><![CDATA[jong talent]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[survey]]></category>
		<category><![CDATA[Xebia]]></category>

	<!-- AutoMeta Start -->
	<category>procent</category>
	<category>procent</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8529</guid>
		<description><![CDATA[Net als in 2010 heeft Xebia in 2011 het jaarlijks onderzoek naar de de status van Agile in Nederland uitgevoerd. Met ook dit jaar weer opvallende resultaten. Zo zegt bijna 90 procent van de bedrijven die met Agile werken sterk verbeterde resultaten te realiseren bij hun (ICT) projecten. De vraagt die direct bij mij opkomt bij dit soort hoge percentages is waarom niet iedereen [...]]]></description>
			<content:encoded><![CDATA[<p>Net als in 2010 heeft <a href="http://www.xebia.nl/">Xebia</a> in 2011 het jaarlijks onderzoek naar de de status van Agile in Nederland uitgevoerd. Met ook dit jaar weer opvallende resultaten. Zo zegt bijna 90 procent van de bedrijven die met Agile werken sterk verbeterde resultaten te realiseren bij hun (ICT) projecten. De vraagt die direct bij mij opkomt bij dit soort hoge percentages is waarom niet iedereen met Agile aan de slag gaat.</p>
<p>Daarnaast ervaart 83 procent van de Nederlandse bedrijven die Agile werken hebben geadopteerd, meer werkplezier en 85 procent meer teammotivatie. Dit percentage is aanzienlijk hoger dan vorig jaar, toen gaf driekwart van de respondenten aan meer werkplezier en teammotivatie te ervaren. Dus de mensen die Agile werken varen er wel bij, naar mijn mening een van de belangrijkste redenen voor het succes van Agile. Dit komt ook veelal tot uiting in een lager ziekteverzuim en grotere loyaliteit naar de werkgever toe.<br />
<span id="more-8529"></span><br />
Andere belangrijke effecten zijn een verkorte time-to-market volgens 79 procent van de ondervraagden en toename van de productiviteit (66 procent). Het onderzoek laat ook zien dat kostenverlaging een belangrijker effect van Agile werken is dan vorig jaar (38 procent in 2011 tegen 21 procent in 2010). Niet zo vreemd natuurlijk in deze economisch zware tijden. Maar dit betekent wel dat Agile steeds meer wordt ingezet als onderdeel van een kostenverlagingstraject. Dan is het wel heel belangrijk ervoor te waken, dat met het (meer) sturen op deze doelen de Agile gedachte niet ten onder gaat in de zoektocht naar kostenverlaging. Indien kostenverlaging wordt neergezet als primair doel met Agile als middel, is de kans groot weer te verzanden in &#8216;ouderwets&#8217; contract en KPI management waarvan we in het verleden nou juist geleerd hebben dat dat niet effectief is.</p>
<p>In de overgang naar het Agile werken is de bedrijfscultuur net als vorig jaar de belangrijkste bottleneck voor veel organisaties (49 procent). En ook dat is geen nieuw inzicht. Maar het is wel iets dat te vaak onderschat wordt, zeker door belangrijke personen die juist onderdeel zijn van die bestaande bedrijfscultuur. De adoptie van Agile vereist veel focus en energie voor langere tijd en de daadwerkelijke borging vindt plaats juist via een inbedding in die bedrijfscultuur.</p>
<p>Door het verbeteren van kennis, kunde en bovenal mindset van Agile zal de uitrol een grotere kans van slagen hebben. De ondervraagde organisaties erkennen dit gegeven zelf overigens ook, want volgens 36 procent is een gebrek aan kennis en kunde de belangrijkste beperkende factor in de (verdere) implementatie en uitrol van Agile. Door juist in deze economisch uitdagende tijden in kennis, kunde en mindset van Agile te investeren zullen organisaties meer rendement kunnen behalen. Het verbeteren van bedrijfsresultaat is nu bijvoorbeeld voor veel financiële instellingen in Nederland een belangrijke reden om Agile te gaan werken: zo kunnen zij namelijk effectief hun te hoge kostenstructuur aanpakken.</p>
<p>Agile belooft dus veel, maar maakt dit ook waar. Zeker gezien de huidige generaties Y en Z die nu opgroeien en de toekomstige werkbevolking van Nederland gaan vormen, is er geen ontkomen meer aan (iets als) Agile. Regelmatig spreek ik diverse (jongere) sollicitanten die Agile, en de manier van werken en omgaan met elkaar die daarbij hoort, heel normaal en gewoon vinden en die gruwelen bij een beschrijving van het traditionele waterval model en bijbehorende werkaanpak. Het aantrekken van jong talent en een werkwijze die niets met Agile of elementen daarvan te maken heeft, staat bijna haaks op elkaar. Blijvende continiuteit en succes op langere termijn voor ieder bedrijf bestaat voor een belangrijk deel uit het aan kunnen blijven trekken en behouden van jong talent. Agile worden of zijn, lijkt hier een belangrijke voorwaarde voor te zijn.</p>
<p>Ik ben benieuwd wanneer u op de succesvolle trein stapt die Agile heet!</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2012/01/27/agile-is-niet-te-vermijden/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2012%2F01%2F27%2Fagile-is-niet-te-vermijden%2F&amp;title=Agile%20is%20niet%20te%20vermijden" id="wpa2a_4"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2012/01/27/agile-is-niet-te-vermijden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One practice a day&#8230;</title>
		<link>http://blog.xebia.com/2012/01/25/one-practice-a-day/</link>
		<comments>http://blog.xebia.com/2012/01/25/one-practice-a-day/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 21:22:38 +0000</pubDate>
		<dc:creator>Nicole Belilos</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Scrum]]></category>

	<!-- AutoMeta Start -->
	<category>fruit</category>
	<category>healthy</category>
	<category>smoking</category>
	<category>eating</category>
	<category>habits</category>
	<category>mindset</category>
	<category>daily</category>
	<category>practices</category>
	<category>fruit</category>
	<category>healthy</category>
	<category>smoking</category>
	<category>eating</category>
	<category>habits</category>
	<category>mindset</category>
	<category>daily</category>
	<category>practices</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8538</guid>
		<description><![CDATA[How do you change the way you live or work? Many people, and companies, seem to think it&#8217;s enough to adopt just one or two practices. While they continue their old habits, too. Will this lead you to your desired outcome? Or will you just get frustrated?  The desire to change Suppose one day, after [...]]]></description>
			<content:encoded><![CDATA[<p><em>How do you change the way you live or work? Many people, and companies, seem to think it&#8217;s enough to adopt just one or two practices. While they continue their old habits, too. Will this lead you to your desired outcome? Or will you just get frustrated? </em></p>
<p><span id="more-8538"></span></p>
<h4>The desire to change</h4>
<p>Suppose one day, after a particularly bad hangover, you decide to change your life.  You long for a trim body, a balanced spirit, lots of energy and no more headaches. In short, a happy mind in a healthy, good looking body. But how do you get there?</p>
<p>Well, we all know that there are many practices that will help you achieve those goals.  Exercise three times a week, stop smoking, reduce your alcohol intake, and change your eating patterns. Oh, also, get more sleep, less stress, no more pills, and drink herbal tea instead of espressos.</p>
<p>But you hate sports, you love chocolate and smoking is your way to reduce your stress.  So what do you do?</p>
<h4>The daily fruit practice</h4>
<p>In order to get healthy, you decide that from now on, every day, you will eat a piece of fruit at lunch.   It’s pretty easy to do, even though you don’t like fruit very much.  So now you are satisfied, you do a healthy thing every day, and you expect to reach your goals (more energy! greater happiness! better looks!) anytime soon.</p>
<p>Will you? Of course not! While the daily piece of fruit is a step in the right direction, you will never fully get the benefits you are seeking if you keep up your old habits of smoking, drinking and eating greasy food,. And after a while you might even get disappointed and frustrated, and you will decide to stop eating fruit, claiming that “a healthy lifestyle simply doesn’t work for you”.</p>
<p>Doing just one healthy practice, or even a couple of them, isn’t enough. What you really need is to change your mindset. You want to <strong>be</strong> a healthy person, not <strong>do</strong> some healthy stuff. Once the healthy mindset becomes your way of life, the practices will simply be the natural way to go. And they will be a lot easier to start with and maintain for a long time.</p>
<h4>The daily Agile practice</h4>
<p>The same applies to Agile. We see many companies and teams that ‘ do‘ Agile. They take a couple of practices from an Agile framework such as Scrum, and they figure that that will be enough to give them all the Agile benefits. Some teams even think that if they just do a daily stand-up, they do ‘ Agile’.  While daily stand-ups, just like that daily piece of fruit, are definitely a good practice, your are still far removed from true agility if the rest of your behaviour consists of old, non-Agile practices.</p>
<p>A company or team only gets the most out of being Agile, when its mindset is based on the Agile principles stated in the <a href="http://agilemanifesto.org/principles.html">Agile manifesto</a>, such as continuous learning at all levels in the organization, business and IT working closely together, delivering the highest business value first, welcoming change, and creating an environment where motivated individuals can be creative and self-directing.</p>
<p>So if you are doing ‘some’ Agile, expand your practices. But more importantly, change your mindset. Don’t do Agile, be Agile. And remember:</p>
<p style="text-align: center;"><em>One practice a day does <span style="text-decoration: underline;">not</span> keep the old habits away&#8230;</em></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2012/01/25/one-practice-a-day/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2012%2F01%2F25%2Fone-practice-a-day%2F&amp;title=One%20practice%20a%20day%26%238230%3B" id="wpa2a_6"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2012/01/25/one-practice-a-day/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Installing a nodejs application without your good old internet</title>
		<link>http://blog.xebia.com/2012/01/23/installing-a-nodejs-application-without-your-good-old-internet/</link>
		<comments>http://blog.xebia.com/2012/01/23/installing-a-nodejs-application-without-your-good-old-internet/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 18:55:41 +0000</pubDate>
		<dc:creator>Kris Geusebroek</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

	<!-- AutoMeta Start -->
	<category>findit</category>
	<category>findit</category>
	<category>bundledependencies</category>
	<category>bundledependencies</category>
	<category>packagefile</category>
	<category>tarball</category>
	<category>tarball</category>
	<category>pack</category>
	<category>findit</category>
	<category>findit</category>
	<category>bundledependencies</category>
	<category>bundledependencies</category>
	<category>packagefile</category>
	<category>tarball</category>
	<category>tarball</category>
	<category>pack</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8513</guid>
		<description><![CDATA[While we were building a little server to enable auditlogging on our hadoop cluster (more on that in a future blogpost) we needed a way to distribute our application. This blog is about the packaging of this application. The application is build with nodejs and packaging and dependency management is mostly done with npm (the [...]]]></description>
			<content:encoded><![CDATA[<p>While we were building a little server to enable auditlogging on our hadoop cluster (more on that in a future blogpost) we needed a way to distribute our application.<br />
This blog is about the packaging of this application. The application is build with nodejs and packaging and dependency management is mostly done with npm (the node package manager).</p>
<p>Of course installing this application in the production environment should have been as easy as the setup on our own laptop&#8217;s right? Wrong! On our laptops it was a easy git clone followed by a npm install and voila we have a running application. So how hard could it be to do this on a server at the client. Let me tell you&#8230;.<br />
<span id="more-8513"></span></p>
<p>This server is not connected to the internet, so the git clone wouldn&#8217;t work in the first place. Not really a problem because it&#8217;s a small app and we could just make a tarball and ship it to the server.<br />
Next thing was all our dependencies. We used a few modules which were mentioned as dependencies in our package.json file so npm with the install command would do it&#8217;s magic.</p>
<p>The npm install magic consists, among other things, of getting the modules from the npm registry and that fails if you&#8217;re not connected to the internet. Searching for a way to do this differently I figured out that npm had a cache directory and thought I could get the stuff from there. This might have worked, but with that solution I would miss the dependencies where these modules depended on. And it would be a messy kind of script that I needed to make.</p>
<p>Browsing the internet didn&#8217;t provide me with the right answer but it led me on the path to the npm pack function. This is used to pack your module together with all dependencies. The only thing you need to configure it correctly, is a separate array containing the dependencies to bundle with your app.</p>
<p>So far so good, so I went on and added a bundleDependencies section in my package.json and ran npm pack.<br />
The result was a nice .tgz file containing all the files needed for the application together with all the modules it depended on. At least the main modules it depended on. My fellow programmers in crime from which I got these modules hadn&#8217;t bothered to add this extra section, so npm had no notice of the modules they depended on.</p>
<p>This was easy to solve. Just add a correct section of bundleDependencies to all package.json files.<br />
Sounded like a boring task to do this manually and because I love my programming job, I decided to write a program for it.</p>
<p>My obvious choice of programming languages was: awk, grep and sed. Why? Because I can.<br />
Without further ado, here it is:</p>
<pre class="brush: bash; title: ; notranslate">
    awk '/dependencies/,/]|}/' $file |
    grep -o '\&quot;.*\&quot;.*:' |
    sed 's/^.*{//g' |
    sed 's/\&quot;dependencies.*\://g' |
    grep -v -e '^$' |
    uniq |
    sed 's/\&quot;[ ^I]\:/\&quot;,/g' |
    sed 's/\&quot;\:/\&quot;,/g' |
    sed '$ s/,/ ]/' |
    sed '1 s/\&quot;/\&quot;bundleDependencies\&quot; \: [ \&quot;/' |
    sed 's/\&quot;/\\&quot;/g' |
    tr -d '\n'
</pre>
<p>What it does, you ask?<br />
I'll explain line by line:</p>
<p>line1: get the dependencies part (an array or json object) from the file (the package.json file)<br />
<strong>ex</strong>: "dependencies" : { "express": "0.2.2", "findit" : "0.0.1" }</p>
<p>line2: get only the stuff from that object between the double quotes before the colon (removing the version number part of the dependency)<br />
<strong>ex</strong>: "express":<br />
"findit":</p>
<p>line3: remove anything preceding the {<br />
line4: remove the original dependencies text<br />
line5: remove any empty lines<br />
line6: remove duplicates</p>
<p>line7 and line8: replace the ": by ", so we can create an array from it<br />
<strong>ex</strong>: "express",<br />
"findit",</p>
<p>line9: replace the last , by an ] to close the array<br />
<strong>ex</strong>: "express",<br />
"findit"]</p>
<p>line10: replace the first " by "bundleDependencies" : [ "<br />
<strong>ex</strong>: "bundleDependencies" : [ "express",<br />
"findit"]</p>
<p>line11: precede all quotes by a backslash so it can be safely used in the sed command to add it to the file</p>
<p>line12: remove all newlines<br />
<strong>ex</strong>: "bundleDependencies" : [ "express", "findit"]</p>
<p>This is added to the package.json file we are currently processing and if we have finished doing this for all package.json files we can use npm pack to create our tarball.<br />
Works pretty well I might say. But I'm the first to admit this isn't the most readable program ever written.</p>
<p>Of course when building a node application you might have node around to help you do this so I also created a javascript version to do this:</p>
<pre class="brush: jscript; title: ; notranslate">
var fs=require('fs')
var findit=require('findit')

findit.find('.', function(name) {
  if (endsWith(name,'package.json')) {
    handleFile(name)
  }
}).on('end', bundleApp)

function handleFile(file) {
  var data = fs.readFile(file, function(err, data) {
    if (err) {
      console.log('Not processesed '+file+' bo the following error: '+err)
    } else {
      var arr = []
      var packageFile = JSON.parse(data)
      if (packageFile.bundleDependencies) {
        console.log('Bundledeps already present. Skipping')
      } else {
        for (var d in packageFile.dependencies) {
          arr.push(d+&quot;&quot;)
        }
        if (arr.length &gt; 0) {
          packageFile['bundleDependencies'] = arr
          fs.writeFile(file, JSON.stringify(packageFile, null, 4))
        }
      }
    }
  })
}

function bundleApp() {
  console.log('Finished. preparing package.json files for packaging. Now run npm pack to create the fullblown tarball')
  //exercise left for the reader to require('npm') and run the pack command
}

function endsWith(str, suffix) {
  return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
</pre>
<p>Hope somebody can benefit from this in the future.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2012/01/23/installing-a-nodejs-application-without-your-good-old-internet/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2012%2F01%2F23%2Finstalling-a-nodejs-application-without-your-good-old-internet%2F&amp;title=Installing%20a%20nodejs%20application%20without%20your%20good%20old%20internet" id="wpa2a_8"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2012/01/23/installing-a-nodejs-application-without-your-good-old-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beware of the timezone</title>
		<link>http://blog.xebia.com/2012/01/15/beware-of-the-timezone/</link>
		<comments>http://blog.xebia.com/2012/01/15/beware-of-the-timezone/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 02:26:36 +0000</pubDate>
		<dc:creator>Maarten Kennis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

	<!-- AutoMeta Start -->
	<category>calendar</category>
	<category>1937</category>
	<category>samoa</category>
	<category>timezone</category>
	<category>gettime</category>
	<category>timezoneamsterdam</category>
	<category>timezoneapia</category>
	<category>nearest</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8495</guid>
		<description><![CDATA[The country of Samoa has decided to skip a day, the 30th of december 2011 doesn&#8217;t exist on Samoa. This decision was driven by economical reasons. I wonder, what potential problems we can run into regarding software development for our IT systems depending on timezone information? To skip a day, it all sounds so easy. [...]]]></description>
			<content:encoded><![CDATA[<p>The country of Samoa has decided to skip a day, the 30th of december 2011 doesn&#8217;t exist on Samoa. This decision was driven by economical reasons. I wonder, what potential problems we can run into regarding software development for our IT systems depending on timezone information?</p>
<p>To skip a day, it all sounds so easy. First of all i was curious to know if similar situations have occured in the past and what the software development pitfalls could be. A small investigation showed me that you need to be careful with assumptions regarding regional timezone issues. Let&#8217;s have look at how a programming language like JAVA handles these kinds of situations.<br />
<span id="more-8495"></span></p>
<p>To demonstrate the consequences of this kind of detailed timezone changes and how JAVA handles them, i have compiled the following example (Apia is the capital of Samoa):<br />
<code><b>1.</b> TimeZone timeZoneApia = TimeZone.getTimeZone("Pacific/Apia");<br />
<b>2.</b> SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");<br />
<b>3.</b> sdf.setTimeZone(timeZoneApia);<br />
<b>4.</b> Calendar calendar = new GregorianCalendar(timeZoneApia);<br />
<b>5.</b> calendar.set(2011, 11, 29, 23, 59, 59);<br />
<b>6.</b> System.out.println(sdf.format(calendar.getTime()));</code><br />
Obviously, the output of line 6 is:<br />
<code>29-12-2011 23:59:59</code><br />
Now, let&#8217;s add the following lines:<br />
<code><b>7.</b> calendar.add(Calendar.SECOND, 1);<br />
<b>8.</b> System.out.println(sdf.format(calendar.getTime()));</code><br />
The output of line 8 depends on the JAVA 7 version you use. If you use the original released JAVA 7 or JAVA 7 update 1, the output will be:<br />
<code>30-12-2011 00:00:00</code><br />
If you run JAVA 7 update 2 (or if you are running a previous version of JAVA 7 and have updated the timezone configuration) the output will be:<br />
<code>31-12-2011 00:00:00</code><br />
This example demonstrates how well JAVA has implemented their timezone awareness.</p>
<p>JAVA 7 update 1 was released on the 18th of october 2011, the &#8220;Samoa case&#8221; was not included here. However, Oracle provides a tool called <a href="http://www.oracle.com/technetwork/JAVA/javase/downloads" target="_blank">Timezone Update Tool</a> to update your JAVA timezone configuration. The <a href="http://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html" target="_blank">changelog</a> of the tool gives a nice overview of recent timezone changes. I was suprised by the amount of updates regarding timezones.</p>
<p>This made me curious about other, similar, cases. I found a number of cases and would like to point out one interesting case in the Netherlands where they did not skip a whole day but only a couple of seconds.</p>
<p>Consider the following example:<br />
<code><b>1.</b> TimeZone timeZoneAmsterdam = TimeZone.getTimeZone("Europe/Amsterdam");<br />
<b>2.</b> SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");<br />
<b>3.</b> sdf.setTimeZone(timeZoneAmsterdam);<br />
<b>4.</b> calendar = new GregorianCalendar(timeZoneAmsterdam);<br />
<b>5.</b> calendar.set(1937, 5, 30, 23, 59, 59);<br />
<b>6.</b> System.out.println(sdf.format(calendar.getTime()));</code><br />
Obviously, the output of line 6 is:<br />
<code>30-06-1937 23:59:59</code><br />
Now, let&#8217;s to the same trick as with the &#8220;Samoa case&#8221;. Add the following lines:<br />
<code><b>7.</b> calendar.add(Calendar.SECOND, 1);<br />
<b>8.</b> System.out.println(sdf.format(calendar.getTime()));</code><br />
Question: What will be the output of line 8?</p>
<p>The correct answer is:<br />
<code>01-07-1937 00:00:28</code><br />
The short story behind this: in the early 1900s the Dutch government declared that the official time in the Netherlands was &#8220;Amsterdam Time&#8221;. To be more specific, the meridian of the &#8220;Westertoren&#8221; in Amsterdam. This resulted in an offset of 19 minutes and 32 seconds with GMT.</p>
<p>On the 1st of July 1937 it was decided that the offset with GMT should be 20 minutes, creating a 28 second gap. So, officially, the first 28 seconds of the July 1st 1937 do not exist in the Netherlands. Probably, in 1937, not so many people were worried about the possible IT consequences of such a decision.</p>
<h2>Conclusion</h2>
<p>With this article i wanted to show that, especially in IT, you need to be careful about assumptions regarding calendar and timezone related issues. Hard to spot errors may be around the corner without realizing it. For example, when constructing a Calendar for a date/time/timezone combination that does not exists, the following happens:</p>
<ul>
<li>JAVA returns a date which is &#8220;rounded off&#8221; to the nearest valid value in the future (we have seen this in both examples in this article)</li>
<li>If you don&#8217;t want JAVA to return the nearest valid value in the future, please set the value of the Lienient property to false and you will receive an exception instead of the nearest valid value in the future.</li>
</ul<br />
So, when you are unaware of the interesting variations in the timezone you develop software for, working with calendars and dates may result in unexpected return values or exceptions.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2012/01/15/beware-of-the-timezone/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2012%2F01%2F15%2Fbeware-of-the-timezone%2F&amp;title=Beware%20of%20the%20timezone" id="wpa2a_10"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2012/01/15/beware-of-the-timezone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Product Owner Scaling Problems</title>
		<link>http://blog.xebia.com/2012/01/13/product-owner-scaling-problems/</link>
		<comments>http://blog.xebia.com/2012/01/13/product-owner-scaling-problems/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 10:45:19 +0000</pubDate>
		<dc:creator>Daniel Burm</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ACT]]></category>
		<category><![CDATA[product owner]]></category>
		<category><![CDATA[productowner]]></category>
		<category><![CDATA[scaling]]></category>

	<!-- AutoMeta Start -->
	<category>scaling</category>
	<category>po’s</category>
	<category>parallel</category>
	<category>timebox</category>
	<category>scaling</category>
	<category>po’s</category>
	<category>parallel</category>
	<category>timebox</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8472</guid>
		<description><![CDATA[Scaling the productowner (PO) role is tricky business. When you scale up too much within the same context, things become cumbersome. We don’t want to bring back the same centralized fear ridden ineffective decision making climate, we tried to kill off in the first place. When people spend so much time and effort to bring [...]]]></description>
			<content:encoded><![CDATA[<p>Scaling the productowner (PO) role is tricky business. When you scale up too much within the same context, things become cumbersome. We don’t want to bring back the same centralized fear ridden ineffective decision making climate, we tried to kill off in the first place. When people spend so much time and effort to bring back entrepreneurship, they don’t want to create layer over layer of hierarchical PO/CPO relationships.<br />
So if there is this perceived risk of fallback involved, why do we actually want to scale the PO role at all?<br />
<span id="more-8472"></span><br />
Here are some reasons I came up with when thinking of a project context(*)  </p>
<p>The perceived need for scaling could follow as a reaction to the scope of the project at hand. It is quite common within projects to try and do as much as possible parallel development of different semi-detached functional areas of the product. This comes quite close to how I used to manage projects in the past. Whatever in the same timebox could be done in parallel, should. I was very efficiency driven back then, but also taught and stimulated to think this way.<br />
Within this paradigm it would be preferable, that the PO has some sort of party around him helping to create the user stories he would be in charge of. Creating big teams gives us more capacity to do more work in our timebox. Larger teams and more work create the need for more coordination, because of limited span of control, thus creating the need to scale. </p>
<p>Also, I think we are still very much driven by the paradigm of the chain of command. It is simply comfortable when there is someone who can make the tough decisions for us and mediate between us whenever conflicting interests arise. The need for extra coordination between and over PO’s in the same context thus fits very naturally with our needs in a growing project context.<br />
Come to think of it, maybe it is no coincidence that the person designated CPO is more times than not the first PO that was on the project. If we look deep within ourselves wouldn’t every PO actually want their first project steps to be so successful, that the extra means are granted to grow the team and consequently rise above to lead the way as CPO? And should we be that CPO, would we ever fully trust another colleague with the work we carefully prepared and poured our blood sweat and tears into? It would be great if we could somehow keep some sort of supervision on the others. Make sure the projects success and our hard work isn’t killed off in the next sprint or two. Scaling with a CPO construction would provide means to fulfill these needs.</p>
<p>Of course the above reasons to scale could be valid, but there are also downsides to them. </p>
<p>Although doing parallel work may sound efficient, maybe validation with your customers shows that the product increment doesn’t fulfill their needs as thought up in the first place. Since you have done a lot of parallel work, the risk of waste is also greater. Should you need to radically pivot your product in another direction, it will be much harder due to the already large scale of your operation.<br />
I thus think that scaling towards having different teams work on the same backlog potentially inhibits us from maximizing validated business value, as you are pulling forward less important features from the backlog, before actually validating and thereby knowing whether you have actually delivered value with your top items. From this angle, it would be wise considering not to scale.</p>
<p>When scaling from success, we run the risk of slipping into a power monger mode and form a team beneath us to gain status and control instead of branching out sideways.<br />
When this happens we are not working towards joint company stakeholdership any more, but we trying to build our own ivory towers. When the CPO leading the PO’s claims decisive power in certain areas, I believe you would not be creating the right entrepreneurial environment in which decisions are based on arguments and value for the customer and company. Maybe, as a PO, if you already know you need a decision from the CPO, you are inclined to use other influencing methods rather than comparable and less subjective measures than for example business cases, jeopardizing the quality of decision making and therefore the success of the product.<br />
<a href="http://blog.xebia.com/wp-content/uploads/2012/01/CPO22.jpg"><img src="http://blog.xebia.com/wp-content/uploads/2012/01/CPO22-300x283.jpg" alt="" title="CPO2" width="300" height="283" class="aligncenter size-medium wp-image-8488" /></a></p>
<p>During my study, I was taught “there is no one best way to organize”. I think of this line as a universal truth, that in my opinion also applies to scaling the PO role. I therefor think that form is less important than the route taking you there. Knowing that there are risks involved in scaling and consciously dealing with them helps you along this route to find a form that works for you.</p>
<p>(*)Scaling is also common in productline contexts (for instance a CPO over a group of PO’s managing a product family) or within business units where you would have various strategic themes that the CPO would like to have implemented over the same time period.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2012/01/13/product-owner-scaling-problems/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2012%2F01%2F13%2Fproduct-owner-scaling-problems%2F&amp;title=Product%20Owner%20Scaling%20Problems" id="wpa2a_12"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2012/01/13/product-owner-scaling-problems/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On cloud 3&#215;3</title>
		<link>http://blog.xebia.com/2011/12/29/on-cloud-3x3/</link>
		<comments>http://blog.xebia.com/2011/12/29/on-cloud-3x3/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 13:50:06 +0000</pubDate>
		<dc:creator>Adé Mochtar</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Virtualization]]></category>

	<!-- AutoMeta Start -->
	<category>paas</category>
	<category>cloudfoundry</category>
	<category>dropbox</category>
	<category>openstack</category>
	<category>iaas</category>
	<category>heroku</category>
	<category>jclouds</category>
	<category>openshift</category>
	<category>paas</category>
	<category>cloudfoundry</category>
	<category>dropbox</category>
	<category>openstack</category>
	<category>iaas</category>
	<category>heroku</category>
	<category>jclouds</category>
	<category>openshift</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8339</guid>
		<description><![CDATA[2011 has been an interesting year for cloud computing. Traditionally, cloud computing can be divided into three categories: Software-as-a-Service (SaaS) Platform-as-a-Service (PaaS) Infrastructure-as-a-Service (IaaS) While SaaS has been around for some time (Salesforce.com started in 1999!), we are seeing an increase in adoption of IaaS and some heavy development in the PaaS world. Now that [...]]]></description>
			<content:encoded><![CDATA[<p>2011 has been an interesting year for cloud computing. Traditionally, cloud computing can be divided into three categories:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Software_as_a_service" target="_blank">Software-as-a-Service</a> (SaaS)</li>
<li><a href="http://en.wikipedia.org/wiki/Platform_as_a_service" target="_blank">Platform-as-a-Service</a> (PaaS)</li>
<li><a href="http://en.wikipedia.org/wiki/Infrastructure_as_a_service" target="_blank">Infrastructure-as-a-Service</a> (IaaS)</li>
</ul>
<p>While SaaS has been around for some time (Salesforce.com started in 1999!), we are seeing an increase in adoption of IaaS and some heavy development in the PaaS world.</p>
<p>Now that 2011 is coming to an end, this is also the time for lists. So here are my 3 top 3’s of cloud computing.</p>
<p><span id="more-8339"></span><strong></strong></p>
<p><strong>Software-as-a-Service</strong></p>
<p><img class="size-medium wp-image-8344 alignright" style="border-style: initial; border-color: initial;" title="GitHub Social Coding" src="http://blog.xebia.com/wp-content/uploads/2011/12/github-social-300x145.png" alt="" width="300" height="145" align="right" />3. GitHub</p>
<p>Distributed version control systems are gaining track rapidly, with Git leading the way. <a title="GitHub" href="http://github.com/" target="_blank">GitHub</a> provides Git as a service, and offers unlimited repositories for open source software. It provides an excellent interface that stimulates social coding. This means it is a great incentive for open source development.</p>
<p>2. Dropbox</p>
<p>Well, who doesn’t use <a title="Dropbox" href="http://www.dropbox.com/" target="_blank">Dropbox</a>? Dropbox offers a filesharing service that is easy to use. There are two reasons for the success of Dropbox; it is easy to start with 2GB of free space, and it provides clients for almost all platforms.</p>
<p>1. Google Apps</p>
<p>Google is trying hard to get us all to work in the cloud, and their <a href="http://www.google.com/apps" target="_blank">Google Apps</a> service is their way to do so. They even have a free service for private use. Google Apps provides a full application suite including e-mail, calendar and docs. GMail is massively adopted and has been a game-changer since introduction in 2004.</p>
<p><strong>Infrastructure-as-a-Service</strong></p>
<p><strong></strong>3. OpenStack</p>
<p>When talking about IaaS, people immediately think about the Amazon AWS platform. But what if you don’t like their terms-of-service, or simply want to create something similar in your own data center? Enter <a href="http://www.openstack.org" target="_blank">OpenStack</a>. If there is one DIY IaaS framework that has momentum, it is OpenStack. It is backed by no less than <a href="http://openstack.org/community/companies/" target="_blank">144 companies</a>, and best of all, it’s open source.</p>
<p>2. jclouds</p>
<p>If all the IaaS frameworks and providers and all their different APIs are giving you an headache, <a href="http://www.jclouds.org/" target="_blank">jclouds</a> is the framework for you. The jclouds API provides an abstraction of the different cloud-specific implementations. Currently over 30 providers are supported, including all the usual suspects (Amazon AWS, OpenStack, Azure, etc).</p>
<p><img class="alignright size-medium wp-image-8345" style="border-style: initial; border-color: initial;" title="Amazon AWS Monkey" src="http://blog.xebia.com/wp-content/uploads/2011/12/AWS-monkey-300x225.jpg" alt="" width="200" height="150" align="right" />1. Amazon AWS</p>
<p>The undisputed number 1 of IaaS is of course <a href="http://aws.amazon.com/" target="_blank">Amazon AWS</a>. Ever since the introduction in 2002, Amazon AWS is the reference implementation for IaaS. It sets the standard and the rest of the IaaS providers are merely trying to catch up. Amazon also doesn’t sit still, it constantly adds new services to its platform (and is slowly growing into a PaaS). It is available around the globe, with data centers in almost every continent.</p>
<p><strong>Platform-as-a-Service</strong></p>
<p><strong></strong>3. Heroku</p>
<p><a href="http://www.heroku.com/" target="_blank">Heroku</a> is a fully hosted PaaS platform. It supports lots of languages, and it completely hides the infrastructure (servers, instances, etc) from your applications. It has a partnership with Facebook, creating the Heroku Facebook App Package, which enables quick development of Facebook apps. I think it is one of the best examples of a public PaaS.</p>
<p><img class="alignright size-medium wp-image-8347" title="cloud-foundry" src="http://blog.xebia.com/wp-content/uploads/2011/12/cloud-foundry-300x211.jpg" alt="" width="300" height="211" align="right" />2. CloudFoundry</p>
<p>CloudFoundry is being developed by VMware. After acquiring SpringSource back in 2009, this is the next logical step for them. CloudFoundy is positioned as the Open PaaS. While most PaaS solutions limit the choice of frameworks and infrastructure services, CloudFoundry tries to be open and extensible. And best of all, you can use the <a href="https://my.cloudfoundry.com/micro" target="_blank">micro edition</a> for development, the <a href="http://cloudfoundry.org/" target="_blank">private (open source) edition</a> in your own data center and the <a href="http://www.cloudfoundry.com/" target="_blank">hosted edition</a> as a public PaaS (or even a hybrid setup).</p>
<p>1. ???</p>
<p>We are seeing <a title="Ever growing list of PaaS" href="http://upon2020.com/2011/04/the-ever-growing-list-of-paas-companies-and-paas-projects/" target="_blank">lots of development</a> in this area with all different flavors of PaaS platforms and services. We have even built custom PaaS platforms for our customers based on the traditional application servers (JBoss, WebLogic, etc). But there is still lots of work to be done, before full stack solutions will be readily available. So, I think there is no number 1… yet.</p>
<p><strong>And beyond&#8230;</strong></p>
<p>2012 looks like it will be a good year for the cloud. I am very curious to see what the PaaS providers are going to bring to the table. Projects like <a href="https://openshift.redhat.com" target="_blank">OpenShift</a>, <a href="http://www.cloudfoundry.org" target="_blank">CloudFoundry</a> and <a href="http://wso2.com/cloud/stratos/" target="_blank">Stratos</a> are looking very promising, and I can’t wait to dive into them.</p>
<p>What are your top cloud services? Or which ones do you think that will become the next best thing? Feel free to add them to the comments below.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/12/29/on-cloud-3x3/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F12%2F29%2Fon-cloud-3x3%2F&amp;title=On%20cloud%203%26%23215%3B3" id="wpa2a_14"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/12/29/on-cloud-3x3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Innovative Agile</title>
		<link>http://blog.xebia.com/2011/12/23/innovative-agile/</link>
		<comments>http://blog.xebia.com/2011/12/23/innovative-agile/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 15:01:04 +0000</pubDate>
		<dc:creator>Daniel Burm</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[ACT]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[innovative agile]]></category>
		<category><![CDATA[product owner]]></category>

	<!-- AutoMeta Start -->
	<category>innovation</category>
	<category>marks</category>
	<category>radical</category>
	<category>matrix</category>
	<category>markets</category>
	<category>accommodate</category>
	<category>portfolio</category>
	<category>additive</category>
	<category>innovation</category>
	<category>marks</category>
	<category>radical</category>
	<category>matrix</category>
	<category>markets</category>
	<category>accommodate</category>
	<category>portfolio</category>
	<category>additive</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8314</guid>
		<description><![CDATA[My motto regarding innovation is: being a first mover is a strategic choice, moving fast isn’t. Agile and scrum can help you move fast, so how can it accommodate innovation? Getting a view on innovation When a company fills in a portfolio tool like a Boston Consulting Group (BCG) matrix, it gets a view on [...]]]></description>
			<content:encoded><![CDATA[<p>My motto regarding innovation is: being a first mover is a strategic choice, moving fast isn’t. Agile and scrum can help you move fast, so how can it accommodate innovation?</p>
<p><span id="more-8314"></span></p>
<p><strong>Getting a view on innovation</strong><br />
When a company fills in a portfolio tool like a Boston Consulting Group (BCG) matrix, it gets a view on its product market combination (PMC) portfolio. You can tell a lot about the company and its business from how a BCG matrix (*) develops over time. One of the most fun things in my eyes is the amount of question marks turning into stars. A question mark being a PMC in a high growth, low share section (e.g.; doing something relatively new), a star being a PMC in a high growth, high share section (e.g.; being successful in doing new stuff).</p>
<p style="text-align: center;"><a href="http://blog.xebia.com/wp-content/uploads/2011/12/BCG.jpg"><img class="aligncenter size-medium wp-image-8323" title="BCG" src="http://blog.xebia.com/wp-content/uploads/2011/12/BCG-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>The amount of question marks in the portfolio illustrates the amount of newly launched PMC’s on to target markets. When you also consider the amount of ideas not becoming question marks, and turn this into a ratio, you could get some idea on how innovative the company is. Add to his the amount of question marks turned into stars and you really get a sense of outward successful innovation. I distinguish outward and inward innovation, because I believe that experiencing a commercial hypothesis to be proved wrong is at least just as valuable as seeing it proved right.<br />
This doesn’t mean that innovation can’t be applied in other quadrants, just that it might not be the smartest thing to do when for instance handling dogs. In many cases adding features to cash cow products can be a brilliant strategy. Take for example razors, where adding more razorblades, self-adjusting blades and other sleight handling improvements constantly extends the product lifecycle.</p>
<p><strong>Innovation flavours</strong><br />
To get an idea of how scrum could accommodate for innovation, first we have to get an idea on the various sorts of innovation like “additive innovation” out there. In general there are four forms of innovation a company can venture into:</p>
<p><em>Incremental innovation</em>: small improvements leading to slightly better results</p>
<p><em>Additive Innovation</em>: adding product features, customization, new products in existing business lines</p>
<p><em>Complementary innovation</em>: creating new offerings new in current business, but adjacent to current product lines</p>
<p><em>Radical innovation</em>: doing completely new things, unknown to business and/or target markets.</p>
<p><strong>Using agile to suit innovation</strong><br />
In the following section I will highlight a couple of alternative ways in which you could use agile and scrum mechanics to shape and facilitate these forms of innovation:</p>
<p>Incremental innovation:<br />
1. Spend a retrospective or a section on this product improvement; try to get in one small improvement each sprint. Maybe this will ease the team into providing more input for the backlog.<br />
2. Agree with the team that every sprint every individual team member comes up with at least one idea to improve the product in some way.</p>
<p>Additive innovation:<br />
1. Create spikes in sprints to prototype new features, validate these with customers;<br />
2. Hold demo like meetings with your target audience; ask them what they think about the product.</p>
<p>Complementary innovation<br />
1. Keep key options open, have stories worked out in two variations and do validate these paths in spikes and demo meetings;<br />
2. Invest time in finding the appropriate product owner for the job. Market and customer knowledge is important here as the company is going to serve adjacent and different markets than before;<br />
3. Take care that the entire DMU is taken into account in the story map. Also look at internal impact of providing new services and products, for instance customer service needs.</p>
<p>Radical innovation<br />
1. Make sure the innovation team is freed from all organizational gravity. Pull them away from status quo and peer paradigms;<br />
2. Reserve time for existing teams to work on a free format project. This could be a once every month time box of a day for example. It can be whatever they would like, as log as results are made transparent. Let them the same social objects as in scrum (boards, graphs, backlogs);<br />
3. Take care that you have means to measure relevant metrics early on. Every addition should increase sales, market share and other relevant metrics. Use retrospectives to find root causes and steer through story map;<br />
4. Keep all options open, incorporate A/B tests, multi-variant tests, prototypes, feature polls and so on. Sprint goals are hypotheses you would like to see validated.</p>
<p>What I love about scrum, is that it so lightweight and adaptable. On the incremental- to radical innovation scale, there is no step in which scrum can’t be adapted to accommodate for innovation while remaining to move fast.</p>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/science3.jpg"><img class="size-medium wp-image-8322 alignright" title="science" src="http://blog.xebia.com/wp-content/uploads/2011/12/science3-300x225.jpg" alt="" width="300" height="225" /></a><a href="http://blog.xebia.com/wp-content/uploads/2011/12/science2.jpg"><br />
</a></p>
<p>The above list is just a brain dump of what I quickly came up with. I am convinced that there are many more creative ways in which we could adapt agile and scrum practices towards innovation. Please view this blog as an open invite to share your thoughts on this subject.</p>
<p>PS: Merry Christmas and a very Happy New Year!</p>
<p>(*)<em>A BCG matrix says nothing about profitability of the PMC, so market share in a growth market could be labeled as a vanity metric. The matrix also builds on the premise that you know a market to put question marks in. Sometimes however you don’t know what your market is going to be. Furthermore, the BCG matrix can be filled in numerous ways depending on how you define for example the market scope.</em></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/12/23/innovative-agile/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F12%2F23%2Finnovative-agile%2F&amp;title=Innovative%20Agile" id="wpa2a_16"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/12/23/innovative-agile/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to walk with spacewalk</title>
		<link>http://blog.xebia.com/2011/12/19/how-to-walk-with-spacewalk/</link>
		<comments>http://blog.xebia.com/2011/12/19/how-to-walk-with-spacewalk/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 02:20:16 +0000</pubDate>
		<dc:creator>Maarten Kennis</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8234</guid>
		<description><![CDATA[Introduction One of the most common challenges of managing the configuration of servers in your typical DTAP environment is, in my opinion, keeping all the involved hosts at the same level of configuration in terms of installed operating system packages and their configuration files. It really can be a pain to keep all the systems [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.xebia.com/wp-content/uploads/2011/12/spacewalk-logo.png"/></p>
<h3>Introduction</h3>
<p>One of the most common challenges of managing the configuration of servers in your typical DTAP environment is, in my opinion, keeping all the involved hosts at the same level of configuration in terms of installed operating system packages and their configuration files. It really can be a pain to keep all the systems at the same configuration level. Faillure to do so can lead to interesting situations where software produced by the project team does not run or perform on the acceptance and/or production environment while it was running perfectly on the development and/or test servers.<br />
<span id="more-8234"></span><br />
Ofcourse, there is the possibility of creating one golden virtualized image and pass it around your DTAP environment. However, this can introduce serious issues. For example, when the company hosting your acceptance or production environment does not accept, for obvious reasons, an alien virtualized image to be installed on their precious server farm. By that time, the project has already been running for several months, the engineer who developed the golden virtualized images has left the project and the documentation turned out to be not sufficient to reproduce the golden image.</p>
<p>This is where a Linux systems management solution like Red Hat Satellite can help you out. Since you need a Red Hat subscription for Satellite, this article will discuss the open source alternative called Spacewalk. Spacewalk is an open source Linux systems management solution. It is the upstream community project from which the Red Hat Network Satellite product is derived. Spacewalk manages software content updates for Red Hat derived distributions such as Fedora, CentOS, and Scientific Linux.</p>
<p>With spacewalk you can deploy linux systems, over and over again and always the same way (using kickstart). Centrally manage the packages to be installed on a system and last but not least centrally manage configuration files for each deployed system.</p>
<h3>Sounds cool, i want this too!</h3>
<p>So, enough about the theory, how does this actually work? To demonstrate this, i have compiled the following cookbook. At the end of this cookbook you will have:</p>
<ul>
<li>A 64 bit CentOS 5.7 server running spacewalk 1.5</li>
<li>Deployed a base 64 bit CentOS 6.1 vm using spacewalk</li>
<li>Deployed packages on the deployed system using spacewalk</li>
<li>Deployed configuration files managed by spacewalk to the deployed server</li>
</ul>
<h4>Prerequisites</h4>
<ul>
<li>Create a vm with the following properties:</li>
<ul>
<li>1 cpu</li>
<li>1 GB of memory</li>
<li>Size of harddisk = 6 GB (excluding swap) + (number of distributions x 6 GB)</li>
<li>vm must have internet access during installation</li>
</ul>
<li>Make sure you have the following installation binaries available:</li>
<ul>
<li><a href="http://centos.org/" target="_blank">CentOS-5.7-x86_64-netinstall.iso</a></li>
<li><a href="http://oracle.com/technetwork/database/express-edition/downloads/" target="_blank">oracle-xe-11.2.0-1.0.x86_64.rpm</a></li>
<li><a href="http://oracle.com/technetwork/database/features/instant-client/" target="_blank">oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm</a></li>
<li><a href="http://oracle.com/technetwork/database/features/instant-client/" target="_blank">oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm</a></li>
</ul>
</ul>
<h3>Getting the VM up and running</h3>
<p>I prefer to keep things lean and mean. For this blogpost a minimal 64 bit CentOS 5.7 will be installed using the net-installer. The following walkthrough provides you with vm ready for spacewalk to be installed.</p>
<p>Start your empty vm booting from the attached CentOS net installer iso. During installation select the defaults or change it to whatever suits your environment for language and keyboard-type. The installation-method is, of course, http. tcp/ip configuration: whatever suits your local network needs for internet access.</p>
<p>Select a mirror service from <a title="the centos website" href="http://www.centos.org/modules/tinycontent/index.php?id=30" target="_blank">the CentOS website</a>.</p>
<p>Provide the web site name: my.fast.mirror.com<br />
CentOS directory: path/to/5.7/os/x86_64</p>
<p>Click next on the welcome screen, choose to do a fresh install of CentOS.</p>
<p>Partition your disk to suit your needs. <strong>Important note regarding partitioning</strong>: This blog article assumes some defaults, based on those defaults you should be aware that there are two locations which need sufficient disk space, you may want to keep this in mind while partitioning:</p>
<ul>
<li>/var/satellite (5GB per distro)</li>
<li>/u01/app/oracle/oradata/XE (1GB per distro)</li>
</ul>
<p>Network setup: configure as needed for your vm to fit in your network and to have internet connection.</p>
<p>Finalize the installation by selecting your timezone, entering your root password and unselecting all installation tasks including the default selected &#8220;Desktop – Gnome&#8221;. Let the installer do it&#8217;s job, once the system is rebooted you have a fresh base 64 bit centos 5.7 vm available.</p>
<h3>Preparing the system for Spacewalk</h3>
<p>Spacewalk uses a database for it&#8217;s back-end administration, this can be eighter a Oracle (XE) or PostgreSQL database. In this article we are going to use the Oracle 11g Express Edition (XE) database together with the Oracle 11g instant client. Transfer the rpm&#8217;s to your vm and install them (as user root) using the following commands:<br />
<code>yum install --nogpgcheck oracle-xe-11.2.0-1.0.x86_64.rpm<br />
yum install --nogpgcheck oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm<br />
yum install --nogpgcheck oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm</code><br />
After installation start configuration by:<br />
<code>/etc/init.d/oracle-xe configure</code><br />
After accepting the defaults (to avoid port conflicts later on in the article, it may be a good idea to specify an other http port then suggested by default. This article assumes you use port 8888), choosing passwords and specifing oracle-xe to start at boot you should have a running oracle XE available. This can be checked by executing the following command:<br />
<code>ps -ef | grep pmon</code><br />
which should be returning something like this:<br />
<code>[root@spacewalk ~]# ps -ef | grep pmon<br />
oracle    1763     1  0 16:21 ?        00:00:00 xe_pmon_XE<br />
root      3739  1957  0 16:56 pts/0    00:00:00 grep pmon<br />
[root@spacewalk ~]#</code><br />
Next step is to create a tablespace for spacewalk to store it&#8217;s data. Start by loading the Oracle XE environment settings (note the space between th &#8216;.&#8217; and &#8216;/&#8217;):<br />
<code>. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh</code><br />
Next, start an sqlplus session.<br />
<code>sqlplus sys as sysdba</code><br />
Create a tablespace as follows:<br />
<code>create bigfile tablespace spacewalk datafile '/u01/app/oracle/oradata/XE/spacewalk.dbf' size 1G autoextend on;</code><br />
Create a spacewalk database user and grant it the required privileges:<br />
<code>create user spacewalk identified by spacewalk default tablespace spacewalk;<br />
grant dba to spacewalk;</code><br />
Oracle XE comes with an apex based management console which can be reached at:<br />
<code>http://hostnameOfYourSpacewalkServer:8888/apex/f?p=4950</code><br />
Navigate your browser to the url mentioned above and check if management console shows up. For future reference: Oracle XE can be stopped or started using the following command:<br />
<code>service oracle-xe stop<br />
service oracle-xe start</code></p>
<h3>Install Spacewalk</h3>
<p>Finally we have arrived at the point where Spacewalk is going to be installed. As user root, perform the following commands to acquire the required repositories:<br />
<code>rpm -Uvh http://spacewalk.redhat.com/yum/1.5/RHEL/5/x86_64/spacewalk-repo-1.5-1.el5.noarch.rpm<br />
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm<br />
rpm -Uvh http://spacewalk.redhat.com/yum/1.5-client/RHEL/5/x86_64/spacewalk-client-repo-1.5-1.el5.noarch.rpm</code><br />
Next step is to actually install spacewalk (note: due to the speed of the spacewalk repo&#8217;s this step may take up to 30 minutes to complete).<br />
<code>yum install spacewalk-oracle</code><br />
Next, configure spacewalk by issuing the following command:<br />
<code>spacewalk-setup -disconnected</code><br />
After providing the setup program with the Oracle SID (XE), spacewalk db username en password the database is populated. Mostly the defaults can be accepted and/or obvious data can be provided during the rest of the setup program.</p>
<p>For future reference: Spacewalk can be started and stopped using the following commands:<br />
<code>/usr/sbin/spacewalk-service stop<br />
/usr/sbin/spacewalk-service start</code><br />
Check if the spacewalk server is up and running using the following url (note: you may get a certificate exception upon opening this page):<br />
<code>https://hostnameOfYourSpacewalkServer/</code><br />
The first time this url is selected the following screen appears allowing you to create an administrative user.</p>
<p><img title="spacewalk-opening-screen" src="http://blog.xebia.com/wp-content/uploads/2011/12/spacewalk-opening-screen.png" width="600"/></p>
<h3>Populate Spacewalk</h3>
<p>The goal is to deploy a new machine with an os, this means the obvious next step is to populate spacewalk with a Red Hat derived Linux distribution of your choice. In this article the 64 bit version of CentOS 6.1 is used.</p>
<p>First step is to mount the CentOS 6.1 iso&#8217;s somewhere on your spacewalk server. Make sure to get a full distro iso, this means that required directories like, for example, images/pxeboot do exist. A minimal or netinst iso of a distribution, in general, does not contain these directories. These directories are used later on in this article, most important at this stage is the content and location of the Packages directory of your distribution&#8217;s iso.</p>
<p>The packages which belong to a distribution are administered in Spacewalk as software channels, so we first have to create a software channel before we can add/upload packages to it.</p>
<p>Create a new software channel by opening the spacewalk console and navigate to:</p>
<p>&#8220;Channels&#8221; -&gt; &#8220;Manage Software Channels&#8221; -&gt; &#8220;Create New Channel&#8221;</p>
<p>Enter a reasonable channel name (this is for display only, this article uses: &#8220;CentOS 6.1 &#8211; 64 Bit&#8221;), a channel label (remember this name for later use, this article uses: &#8220;centos6.1-x86_64&#8243;) and select the correct architecture (x86_64).</p>
<p>Next step is to populate spacewalk with the CentOS packages, this proces is started by issuing the following command:</p>
<p><code>rhnpush -v --channel=centos6.1-x86_64 --server=http://localhost –dir=/path/to/Packages</code></p>
<p>where &#8220;/path/to/Packages&#8221; is the absolute path of the Packages directory of the mounted iso.</p>
<p>CentOS 6.1 consists of two dvd&#8217;s, execute above step for both dvd&#8217;s.</p>
<p>The rhnpush process uploads all packages and registers them in spacewalk. On average, rhnpush processes packages at a rate of around 2000 packages per 30 minutes (ofcourse depending on the configuration of your host and vm). CentOS 6.1 contains almost 6200 packages so, it will take around one and a half hour to upload all packages from dvd1 and dvd2 to spacewalk.</p>
<p>Since we want the deployed linux system to be able to connect to the spacewalk server and use it&#8217;s package and configuration management facilities it is recommended to include the spacewalk client packages in a spacewalk channel as well. In this article we will upload the packages directly from the online repository into a child channel of the just created CentOS channel.</p>
<p>In the spacewalk console navigate to:</p>
<p>&#8220;Channels&#8221; -> &#8220;Manage Software Channels&#8221; -> &#8220;Create New Channel&#8221;</p>
<p>Enter a reasonable channel name (this is for display only, this article uses: &#8220;Spacewalk Client 1.5 &#8211; el6 &#8211; 64 Bit&#8221;), a channel label (remember this name for later use, this article uses: &#8220;swclnt1.5-el6-x86_64&#8243;), the correct architecture (x86_64) <u>and the correct parent channel</u> (this article uses: &#8220;CentOS 6.1 &#8211; 64 Bit&#8221;).</p>
<p>Populating spacewalk with the spacewalk client packages directly from the online repository is started by issuing the following command:</p>
<p><code>spacewalk-repo-sync -c swclnt1.5-el6-x86_64 --url http://spacewalk.redhat.com/yum/1.5-client/RHEL/6/x86_64</code></p>
<p>The spacewalk client has a dependency on the python-hwdata-1.2-1.el6.noarch.rpm package from the epel repository. Download the python-hwdata-1.2-1.el6.noarch.rpm package from the epel repository ( http://download.fedora.redhat.com/pub/epel/6/x86_64/ ) and upload it to the spacewalk client child channel using the command (assuming you downloaded the rpm to a folder named epel):</p>
<p><code>rhnpush -v --channel=swclnt1.5-el6-x86_64 --server=http://localhost -dir=epel</code></p>
<h3>Create a distribution</h3>
<p>For automating the installation of a Linux system a method called <a href="http://en.wikipedia.org/wiki/Kickstart_%28Linux%29" target="_blank">kickstart</a> can be used. First, we have to setup a directory structure on the spacewalk server based on content of the CentOS dvd1 iso. From your CentOS 6.1 dvd1, copy the following directories:</p>
<ul>
<li>images</li>
<li>isolinux</li>
<li>repodata</li>
</ul>
<p>to:<br />
<code>/var/distro-trees/centos6.1-x86_64</code></p>
<p>Next, open the spacewalk console and navigate to the following location:</p>
<p>systems -> kickstart -> distributions -> new distribution</p>
<p>Enter the following parameters for the new distribution:</p>
<ul>
<li>Distribution label: centos6.1-x86_64</li>
<li>tree path: /var/distro-trees/centos6.1-x86_64</li>
<li>Base Channel: CentOS 6.1 &#8211; 64 Bit</li>
<li>Installer Generation: Red Hat Enterprise Linux 6</li>
</ul>
<p>Next step is to create a kickstart profile for the channel and distribution. Open the spacewalk console and navigate to the following location:</p>
<p>systems -> kickstart -> create new kickstart profile</p>
<p>Enter the following parameters for the new kickstart profile:</p>
<ul>
<li>Label: centos61-minimal
</li>
<li>Base channel: CentOS 6.1 &#8211; 64 Bit
</li>
<li>Kickstartable tree: centos6.1-x86_64
</li>
<li>Virtualization type: none
</li>
</ul>
<p>To make sure the spacewalk client repository is used during kickstart, navigate to the following location:</p>
<p>systems -> kickstart -> profiles -> centos61-minimal -> operating system</p>
<p>Make sure the child channel swclnt1.5-el6-x86_64 is checked.</p>
<p>Also, have a look at the other tabs to have an idea of the configuration options which are available. Possible interesting area&#8217;s are:</p>
<ul>
<li><b>Software</b>: Adding extra packages or package groups in addition to the base installation. Add the package just by adding it on a new line, package groups can be added by an @-sign followed by the group name. A package can be excluded by an hyphen (-) followed by the package name</li>
<li><b>Kickstart details -> Details -> Kernel options</b>: Adding and removing kernel options. You can add a kernel option, just by adding it&#8217;s key/value pair to the input field. Removal is done by just mentioning the kernel option preceded by an ! and giving it ~ as a value. For example, the value &#8220;!text=~ resolution=800&#215;600&#8243; in the kernel option box forces the use of the graphical installer (remove the text kernel option) and sets screen resolution to 800&#215;600.</li>
<li><b>Kickstart details -> Advanced options</b>: Allows detailed configuration of the kickstarted system. For example, to add an user,during installation, named weblogic with password weblogic01, tick the &#8220;user&#8221; checkbox and add the value &#8220;&#8211;name=weblogic &#8211;password=weblogic01 &#8211;plaintext&#8221; to the input field.</li>
<li><b>Kickstart details -> Variables</b>: the usage of variables can be done by adding a key/value pair and refer to it in another tab. For example (might be a bad example but it is just to demonstrate the usage), to define the hostname during kickstart, add a key/value pair (hostname=appsrvr1) in the variables tab and refer to it in the Advanced options by adding &#8220;&#8211;hostname $hostname&#8221; to the network text box.</li>
</ul>
<h3>Let&#8217;s cobbler</h3>
<p>Next step is to create an iso image to boot a new vm from. <b>Important note:</b> In the next couple of steps we are going to deploy a new linux virtual machine. If your virtualization network setup supports a dns where the spacewalk server can be found by it&#8217;s hostname you can skip the next step. In other words, your newly created vm must be able to find the spacewalk server using it&#8217;s hostname during boot/initial setup. If this is not the case or if you are unsure, please perform the following step to change the spacewalk hostname to it&#8217;s ip-address, if you are sure dns is in place you can skip this step:</p>
<p><code>In <b>/etc/rhn/rhn.conf</b> change the value of the parameter <b>cobbler.host</b> to the ip address of the spacewalk server.<br />
In <b>/etc/cobbler/settings</b> change the value of the parameters <b>server</b> and <b>redhat_management_server</b> to the ip-address of the spacewalk server.</code></p>
<p>On the spacewalk server, run the command (this only needs to be done once):</p>
<p><code>cobbler get-loaders</code></p>
<p>Next, start building the iso using the command:</p>
<p><code>cobbler buildiso</code></p>
<p>The result of the buildiso command is a file named <b>generated.iso</b> in the directory from where you issued the command.</p>
<h3>Let&#8217;s kickstart</h3>
<p>On your host, create a new virtual machine and provide it with the generated.iso file to boot from. Upon boot you will see a menu allowing you to specify the centos61-minimal setup to be installed.</p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2011/12/iso-boot.png" width="600"/></p>
<p>Select this entry and the setup will install a base 64 bit CentOS 6.1 Linux system. If all goes well, this will happen completely automated, without any user intervention whatsoever. If, during install, you receive messages like &#8220;Error downloading kickstart file&#8221;, this probably means you have to look into dns issues as described earlier in the article.</p>
<p>Verify that the system registered itself in spacewalk, it should appear in the system tab on the main screen of the spacewalk web console.</p>
<h3>Configuring the client</h3>
<p>Now that we have installed a fresh 64 bit CentOS 6.1 Linux vm we have to configure it as a client for spacewalk. Open an ssh session to the newly deployed CentOS 6.1 vm and install the packages rhncfg-client and rhn-check using yum.<br />
<code>yum install -y --nogpgcheck rhncfg-client rhn-check</code></p>
<p>Managing the configuration of this newly created vm can be done in the following two ways:</p>
<ul>
<li>Deploy new packages to the client</li>
<li>Deploy (configuration) files to the client</li>
</ul>
<h4>Deploy new packages to the client</h4>
<p>To install a new package from the repository to the new server, go to the spacewalk web console and navigate to the following location:</p>
<p>system -> &#8220;your system&#8221; -> Software -> Packages -> Install </p>
<p>Select the required package from the repository (for example xauth) and click on &#8220;Install Selected Packages&#8221;</p>
<p>Next, select &#8220;Schedule action as soon as possible&#8221; at the confirmation screen and click on &#8220;Confirm&#8221;</p>
<p>Now, log on to the client and verify the software channels it is subscribed to by executing:</p>
<p><code>rhn-channel --list</code></p>
<p>Check if the channel where you made the pending change is in the list. Next, verify if the selected package is not installed yet by executing, on the client:</p>
<p><code>[root@appsrvr1 ~]# rpm -qa | grep -i xauth<br />
[root@appsrvr1 ~]#</code></p>
<p>If the package is not installed yet, apply the pending change (installation of the package) by executing:</p>
<p><code>rhn_check</code></p>
<p>The server will check for any pending actions (in this case installing the selected package) and execute (install the package) them. Now, check again to verify that the (xauth) package was installed by executing:</p>
<p><code>[root@appsrvr1 ~]# rpm -qa | grep -i xauth<br />
xorg-x11-xauth-1.0.2-7.1.el6.x86_64<br />
[root@appsrvr1 ~]#</code></p>
<h4>Deploy (configuration) files to the client</h4>
<p>In case of managing the configuration files of a linux system through spacewalk, this can be done through configuration channels.</p>
<p>First of all, create a new configuration channel. Open the spacewalk web console and navigate to the following location:</p>
<p>Configuration -> Configuration channels -> create new config channel</p>
<p>Enter information to identify the config channel:</p>
<p><code>Name: My Config Channel<br />
Label: myConfigChannel<br />
Description: My Config Channel</code></p>
<p>Next step is to populate this channel with files and directories by navigating to the following location:</p>
<p>Select the configuration channel -> add files -> create file</p>
<p>Now you can create files, directories and symlinks, set ownerships and file permissions. In case of creating a file it is possible to add the actual content of the file in the inline editor. Click on &#8220;Create Configuration File&#8221; to finalize this action.</p>
<p>To deploy this file to the managed linux system, this system must first be subscribed to the config channel. In the spacewalk web console, navigate to the following location:</p>
<p>systems -> &#8220;your system&#8221; -> configuration -> manage configuration channels -> subscribe to channels</p>
<p>Next, verify if the client is successfully subscribed to the newly created config channel by executing the following command on the client:<br />
<code>[root@appsrvr1 ~]# rhncfg-client channels<br />
Using server name spacewalk<br />
Config channels:<br />
Label                           Name<br />
-----                           ----<br />
myConfigChannel                 My Config Channel<br />
[root@appsrvr1 ~]# </code></p>
<p>If the channel appears in the output of the  previous command you can get those files (or directories) by issuing:</p>
<p><code>[root@appsrvr1 ~]# rhncfg-client get<br />
Using server name spacewalk<br />
Deploying /opt/oracle<br />
Deploying /opt/oracle/middleware<br />
Deploying /opt/oracle/middleware/jrockit<br />
[root@appsrvr1 ~]#<br />
</code></p>
<p>If you want to verify if there is a delta between your system and the config channel you can do so by executing<br />
<code>rhncfg-client diff</code></p>
<h3>Conclusion</h3>
<p>As usual with this kind of systems, it takes a lot of effort upfront to set it all up. With this article i hope i will help the reader by setting up a spacewalk system relatively easy and fast. Hopefully, the reader will realize pretty soon that managing Linux systems now really is a breeze and all effort for setting it up was worth it. In my opinion, as of version 1.5, which is current at the time of writing this article, stability and functionality has increased a lot since I started working with Spacewalk. If you’re looking for a way to manage your Red Hat derived Linux systems, i highly recommend taking a look at Spacewalk.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/12/19/how-to-walk-with-spacewalk/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F12%2F19%2Fhow-to-walk-with-spacewalk%2F&amp;title=How%20to%20walk%20with%20spacewalk" id="wpa2a_18"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/12/19/how-to-walk-with-spacewalk/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Continuous Delivery for Enterprise Java Applications</title>
		<link>http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/</link>
		<comments>http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 12:00:41 +0000</pubDate>
		<dc:creator>Mark van Holsteijn</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Virtualization]]></category>

	<!-- AutoMeta Start -->
	<category>puppet</category>
	<category>layer7</category>
	<category>balancer</category>
	<category>puppet</category>
	<category>layer7</category>
	<category>balancer</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8202</guid>
		<description><![CDATA[How do you setup a environment that support the continuous deliver of enterprise Java applications? How do you manage the large number of machines that are involved? How do you enable self-service, continuous delivery of applications onto the platform? In this blog post we will give a description of an open source Java Application Platform [...]]]></description>
			<content:encoded><![CDATA[<p>How do you setup a environment that support the continuous deliver of enterprise Java applications? How do you manage the large number of machines that are involved? How do you enable self-service, continuous delivery of applications onto the platform?</p>
<p>In this blog post we will give a description of an open source Java Application Platform as a Service that we created for our customer, using VMware, Redhat Enterprise Linux, Apache WebServer, JBoss Enterprise Application Platform, JBoss Operations Network, Puppet, Deployit,  F5 Load Balancer and  a Layer7 SecureSpan gateway.</p>
<p><span id="more-8202"></span></p>
<h1>Data Center Quality Platform</h1>
<p>The customer wanted a data center quality Java Application Platform with the following features:</p>
<ul>
<li>Standard configuration</li>
<li>Standardized provisioning</li>
<li>Standardized deployment</li>
<li>Centralized monitoring</li>
<li>Centralized access control</li>
<li>Virtual environment</li>
<li>Proving technology</li>
</ul>
<h2>Current situation</h2>
<p>As the current Java application platform was based on HP-UX on Itanium, the customer was facing high cost for hardware, software licenses and fading support from software vendors.  As all applications ran on a HP Superdome, it was very difficult to add resources to individual applications. In addition, development teams spend too much time taking their software through the development, test and acceptance environments, resulting in slow delivery of software into production. Finally, it was difficult to provide 24&#215;7 availability because all applications are running on a single machine.</p>
<h1><strong><span style="font-family: helvetica;">Java Application Platform </span></strong></h1>
<p>The following figure illustrate the solution architecture of the java application platform.</p>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/jap-solution-overview.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="jap solution overview" src="http://blog.xebia.com/wp-content/uploads/2011/12/jap-solution-overview_thumb.jpg" alt="jap solution overview" width="668" height="375" border="0" /></a></p>
<p>In the following paragraphs we will describe the purpose of the most important components.</p>
<h2>Dual Data Center – HP</h2>
<p>Not shown in the figure, is the hardware setup of the platform. It consists of <a href="http://h18004.www1.hp.com/products/blades/bladesystem/index.html" target="_blank">HP</a> blades setup in two data centers on two different locations. This provides the basic infrastructure for 24&#215;7 availability and fault tolerance.</p>
<h2>VMware ESX</h2>
<p><a href="http://www.vmware.com" target="_blank">VMware</a> ESX is deployed on top of the hardware in the dual data center. This provides us with the ability to create virtual machines and provide high availability in case of single server of single site failures. It also allows us the quickly scale up virtual machines and increase the resources assigned to individual virtual machines.</p>
<p>For all machines in the platform we use a single VMware template image. This image is installed with RedHat Enterprise Linux and a puppet client.</p>
<h2>Puppet</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/vm-template1.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="vm-template" src="http://blog.xebia.com/wp-content/uploads/2011/12/vm-template_thumb1.jpg" alt="vm-template" width="308" height="142" border="0" /></a></p>
<p><a href="http://www.puppetlabs.com" target="_blank">Puppet</a> fully automates system management. It is used for the installation of software packages, conformity tests and day to day system administration tasks.  For every type of node, we have a puppet plan. When the machines boots, the puppet agent provisions the machine with all the necessary software and configuration according to the plan for that machine.</p>
<p>The use of Puppet completely automates and standardizes the configuration, ensures 100% reproducibility of the configuration and is fast. Provisioning of a new machine from the template to full operational mode is done in a matter of minutes.</p>
<h2>JBoss EAP</h2>
<p><a href="http://www.jboss.com/products/platforms/application/" target="_blank">JBoss Enterprise Application Platform</a> is the Enterprise Java applications server for all java applications.  The installation and configuration is done by Puppet and uses the official RedHat RPMs.  Puppet configures JBoss to ensure that :</p>
<ul>
<li>JBoss management applications authenticate users against Active Directory, providing a single point of authorization for operations.</li>
<li>A JBoss Oracle database schema is automatically provisioned for that specific instance of JBoss, providing persistence for the JBoss server system state.</li>
<li>All Business Applications can authenticate users using SAML against the Layer7 Identity provider, providing a single point of authentication and authorization for their customers.</li>
<li>The JBoss instance is added to the pool in the F5 Load balancer</li>
<li>The application server is added to the Deployit infrastructure inventory, providing the tenants of the platform with the ability to deploy applications to the server.</li>
</ul>
<p>JBoss application servers are always deployed in multiples of two, where each server of a pair is assigned to a physically different data center location by VMware.</p>
<p>The use of puppet provides us with a fast and reproducible way of provisioning JBoss application servers, allowing for a fast and reliable scale out mechanism for the applications.</p>
<h2>JBoss Operations Network</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb.png" alt="image" border="0" /></a></p>
<p><a href="http://www.redhat.com/jboss_on/" target="_blank">JBoss Operations Network (</a>JON) is used for monitoring all the resources in the platform.   By default, Puppet installs a JON agent on every machine. This agent scans the inventory of the machine and reports it to the JON server.</p>
<p>JON has a very good support for high availability and fail over. By simply adding a JON server machine, agents will automatically distribute themselves across the servers and failover if necessary. Each JON server also runs a JON agent, making sure that unavailability of a JON server is also covered.</p>
<p>In JON we created a number of alert templates for different resource types (os, apache, jboss, jon, puppet, etc.)  that will monitor and report critical conditions on the system.  All error messages from the JBoss servers logs are reported as incidents.</p>
<p>All alerts and clearing conditions from JBoss Operations network are reported via SNMP to TNG Unicenter.</p>
<p>Through the  use of JBoss Operations Network all machines, servers and resources in the platform are automatically added to the centralize monitoring system.</p>
<h2>Deployit</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb1.png" alt="image" width="244" height="148" border="0" /></a></p>
<p><a title="Deployit" href="http://www.xebialabs.com" target="_blank">Deployit</a> is used for the automated deployment of applications onto the platform. It automatically deploys all the application components in a stack to the appropriate containers.  Deployit :</p>
<ul>
<li>deploys static content and proxy configuration to the apache webservers,</li>
<li>deploys enterprise java application components to all individual JBoss servers in the farm,</li>
<li>executes SQL scripts to the database,</li>
<li>configures the F5 loadbalancers to add or remove servers or applications to the pool,</li>
<li>applies environment specific changes to the application configuration.</li>
</ul>
<p>The deployment plan for a specific application is prepared in close cooperation between the application developer and platform management staff. When the deployment plan is finished, developers can deploy new versions of the application themselves, directly from a build tool or manually.This ensures solving any installation or configuration problem isn&#8217;t postponed until the application is installed for production use, but rather is solved at the early stage of any development.</p>
<p>The same deployment plan is used for all environments. Authorization can be configured per enviroment and per application. LDAP is used to authorize software developers to deploy and configure an application for development and testing purposes, while integration specialist can deploy the application in production.</p>
<p>The use of Deployit provides the platform with a fully automated and standardized deployment mechanism, improving the speed of deployment of applications through the development, test and acceptance environments while reducing the number of staff involved and lowering the number of configuration errors.</p>
<h2>F5 Load Balancer</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image2.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb2.png" alt="image" width="244" height="229" border="0" /></a></p>
<p>The<a title="F5 Load balancers" href="http://www.f5.com/products/big-ip/" target="_blank"> F5 Load balancers</a> is used to support scalability and fail over for the JBoss Application Server farm.</p>
<p>The pools are configured to use a sticky session protocol based upon the JSESSIONID session cookie. If the cookie is not present, round-robin load balancing of the HTTP requests is performed.</p>
<p>Puppet adds the JBoss servers to the  pool in the F5 Load Balancer.</p>
<p>When a server is scheduled for a restart, the server is taken out of the pool. This ensures that this server does not get any new request, but will still be servicing existing sessions. When the session count in JBoss drops to zero, the server is restarted and restored to the pool.</p>
<p>The use of the F5 Load Balancer provides us with the ability to increase and decrease the number of servers in the farm, provide load balancing, fail over and graceful decommissioning of servers in the farm.</p>
<h2>Layer7 XML Gateway / Identity Provider</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image3.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb3.png" alt="image" width="244" height="149" border="0" /></a></p>
<p>The<a href="http://www.layer7tech.com/products/soa-gateway" target="_blank"> Layer7 SecureSpan Gateway</a> is used as centralized security policy enforcement point and SAML identity provider.</p>
<p>Layer7 supports multiple authentication methods, Kerberos, digital certificates, username+password and is able to use multiple identity stores.</p>
<p>Puppet configures all JBoss application servers with SAML support and configures Layer7 as the identity provider: JBoss receives authentication (identity) and authorization (roles) information as a SAML-token. The information contained in the token is translated to a standard JEE-principal user (using a tiny layer of custom code), so all JEE applications can access the authentication and authorization information in a standard way.  Whether the JEE application is a web application or provides webservices, from a security there&#8217;s no distinction. All application designers have to do is declare the application security roles conform the JEE standard.</p>
<p>The use of Layer7 standardizes the authentication and authorization for all business applications and centralizes access control.</p>
<h1>Conclusion</h1>
<p>The customer wanted a modern data center quality Java Application Platform to ensure that java applications could be deployed with lower cost and with high availability and easy scalability.</p>
<p>VMware, the dual data center, Layer7, the F5 Load balancer and JBoss provide the infrastructure for a  high availability and scalability for any java application. The combination of VMware, Puppet and Deployit are the fabric to enable continuous delivery of enterprise java applications.</p>
<p>Through virtualization and automated provisioning and deployment it has become possible to add a completely new, correctly configured machine to a cluster in a matter of minutes, completely secure and under full monitoring.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F12%2F14%2Fcontinuous-delivery-for-enterprise-java-applications%2F&amp;title=Continuous%20Delivery%20for%20Enterprise%20Java%20Applications" id="wpa2a_20"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/feed/ ) in 0.82614 seconds, on Feb 4th, 2012 at 6:05 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 4th, 2012 at 7:05 am UTC -->
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- Quick Cache Is Fully Functional :-) ... A Quick Cache file was just served for (  blog.xebia.com/feed/ ) in 0.00104 seconds, on Feb 4th, 2012 at 6:11 am UTC. -->
