<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
	<channel>
		
		<title>JEDI - Just Enough Developed Infrastructure</title>
		<description>development, infrastructure and other stuff </description>
		<link>http://www.jedi.be/blog</link>
		<pubDate>Fri, 24 May 2013 06:34:14 -0000</pubDate>
		<generator>webby rss script</generator>
		<lastBuildDate>Fri, 24 May 2013 06:34:14 -0000</lastBuildDate>
		<managingEditor>Patrick.Debois@jedi.be (Patrick Debois)</managingEditor>
		<webMaster>Patrick.Debois@jedi.be (Patrick Debois)</webMaster>
		<language>en</language>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/jedi/IZwx" /><feedburner:info uri="jedi/izwx" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
			<title>Infrastructure as Code - A comprehensive overview</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/Dn15t0ayqHY/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2013/05/24/Infrastructure as Code/</guid>
			
			<pubDate>Fri, 24 May 2013 08:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2013/05/24/Infrastructure as Code/#comments</comments>
			<description>&lt;p&gt;I've been tracking &lt;strong&gt;infrastructure as code&lt;/strong&gt; for a few years now. Over the years it has gotten closer to &lt;strong&gt;real code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Close but no sigar yet.... We've come a long way but when you compare it to &lt;em&gt;real languages&lt;/em&gt; it still feels in it's infancy. In this updated overview I gave at the &lt;a href="http://abug5.eventbrite.com/"&gt;ABUG&lt;/a&gt;, I went through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the basic concepts of infrastructure as code&lt;/li&gt;
&lt;li&gt;the differences/concepts in the languages (chef, puppet, ...)&lt;/li&gt;
&lt;li&gt;the editors , syntax checkers, highlighting&lt;/li&gt;
&lt;li&gt;integration with git version control&lt;/li&gt;
&lt;li&gt;integration with CI systems&lt;/li&gt;
&lt;li&gt;the different forms of testing (syntax, compile, unit, smoke testing)&lt;/li&gt;
&lt;li&gt;using vagrant, veewee and the tools in that eco-system&lt;/li&gt;
&lt;li&gt;debugging , profiling your code&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This talk is probably the &lt;strong&gt;most comprehensive tool list&lt;/strong&gt; that I've seen/made about the subject. But feel free to post and add your findings in the comments!&lt;/p&gt;

&lt;p&gt;Note: that at the end of the presentation there are many extra links still to be sorted or slight outdated tools.&lt;/p&gt;

&lt;center&gt;
&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/21814324" width="512" height="421" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="http://www.slideshare.net/jedi4ever/infrastructure-as-code-abug-session" title="Infrastructure as Code - ABUG Session" target="_blank"&gt;Infrastructure as Code - ABUG Session&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="http://www.slideshare.net/jedi4ever" target="_blank"&gt;Patrick Debois&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/center&gt;


&lt;p&gt;I've given previous versions of this talk at Devoxx 2012 and Jax2012. Enjoy the Jax2012 video here:&lt;/p&gt;

&lt;center&gt;
&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/cuJZbRngWC0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/center&gt;

</description>
		

           		

   						<category><![CDATA[devops]]></category>
					
   						<category><![CDATA[devopsdays]]></category>
					
   						<category><![CDATA[abug]]></category>
					
   						<category><![CDATA[chef]]></category>
					
   						<category><![CDATA[cfengine]]></category>
					
   						<category><![CDATA[puppet]]></category>
					
   						<category><![CDATA[opscode]]></category>
					
   						<category><![CDATA[puppetlabs]]></category>
					
   						<category><![CDATA[vagrant]]></category>
					
   						<category><![CDATA[veewee]]></category>
					
		        
		   
			<content:encoded><![CDATA[<p>I've been tracking <strong>infrastructure as code</strong> for a few years now. Over the years it has gotten closer to <strong>real code</strong>.</p>

<p>Close but no sigar yet.... We've come a long way but when you compare it to <em>real languages</em> it still feels in it's infancy. In this updated overview I gave at the <a href="http://abug5.eventbrite.com/">ABUG</a>, I went through:</p>

<ul>
<li>the basic concepts of infrastructure as code</li>
<li>the differences/concepts in the languages (chef, puppet, ...)</li>
<li>the editors , syntax checkers, highlighting</li>
<li>integration with git version control</li>
<li>integration with CI systems</li>
<li>the different forms of testing (syntax, compile, unit, smoke testing)</li>
<li>using vagrant, veewee and the tools in that eco-system</li>
<li>debugging , profiling your code</li>
</ul>


<p>This talk is probably the <strong>most comprehensive tool list</strong> that I've seen/made about the subject. But feel free to post and add your findings in the comments!</p>

<p>Note: that at the end of the presentation there are many extra links still to be sorted or slight outdated tools.</p>

<center>
<iframe src="http://www.slideshare.net/slideshow/embed_code/21814324" width="512" height="421" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/jedi4ever/infrastructure-as-code-abug-session" title="Infrastructure as Code - ABUG Session" target="_blank">Infrastructure as Code - ABUG Session</a> </strong> from <strong><a href="http://www.slideshare.net/jedi4ever" target="_blank">Patrick Debois</a></strong> </div>
</center>


<p>I've given previous versions of this talk at Devoxx 2012 and Jax2012. Enjoy the Jax2012 video here:</p>

<center>
<iframe width="560" height="315" src="http://www.youtube.com/embed/cuJZbRngWC0" frameborder="0" allowfullscreen></iframe>
</center>

]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2013/05/24/Infrastructure as Code/</feedburner:origLink></item>
			<item>
			<title>Compiling a nodejs projects as a single binary</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/qRTb1uLPo4A/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2013/05/14/Compiling - packaging a nodejs project as a single binary/</guid>
			
			<pubDate>Tue, 14 May 2013 05:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2013/05/14/Compiling - packaging a nodejs project as a single binary/#comments</comments>
			<description>&lt;p&gt;Let's face it, if you write software it's often hard to distribute it: you have the runtime , the modules you depend on and your software itself. Sure you can package that all but packages ofter require you to have root-privileges to install.&lt;/p&gt;

&lt;p&gt;Therefore at times it's convenient to have a single file/binary distribution. Download the executable and run it.
For ruby project you can convert things into a single jar using Jruby. A good example is the &lt;a href="http://logstash.net"&gt;logstash&lt;/a&gt; project: download 1 file , run it and you're in business.
But you'd still require the java runtime to be installed. (thanks Apple, NOT).&lt;/p&gt;

&lt;p&gt;This is a extra of the GO language but I was looking for a similar thing for &lt;strong&gt;nodejs&lt;/strong&gt;.
And the following documentation is the closest I could it get: (it works!)&lt;/p&gt;

&lt;h2&gt;Compiling plain javascript (no external modules)&lt;/h2&gt;

&lt;p&gt;Enter &lt;a href="https://github.com/crcn/nexe"&gt;nexe&lt;/a&gt; a tool to compile nodejs projects to an executable binary.&lt;/p&gt;

&lt;p&gt;The way it works is:
- it downloads the &lt;a href="http://nodejs.org/download/"&gt;nodejs source&lt;/a&gt; of your choice
- it creates a single file nodejs source (using &lt;a href="https://github.com/crcn/sardines"&gt;sardines&lt;/a&gt; )
- it monkey patches the nodejs code to include this single file in the binary (adding it to the lib/nexe.js directory)&lt;/p&gt;

&lt;p&gt;Creating a binary is as simple as:&lt;/p&gt;

&lt;pre&gt;$ nexe -i myproject.js -o myproject.bin -r 0.10.3&lt;/pre&gt;


&lt;p&gt;Caveats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I had an issue with unicode chars that got converted: it uses uglify.js and this needs to be configured to leave them alone
&lt;a href="https://github.com/crcn/sardines/pull/13"&gt;Sardines Patch Unichode&lt;/a&gt; . This was necessary to get &lt;a href="https://github.com/c3ks/terminal.js"&gt;terminal.js&lt;/a&gt; to compile&lt;/li&gt;
&lt;li&gt;Next issue was to get &lt;a href="https://github.com/LearnBoost/socket.io-client"&gt;socket.io-client&lt;/a&gt; to compile: the swfobject has document and navigator objects, so this had to be fixed as well - &lt;a href="https://github.com/crcn/sardines/pull/14"&gt;Sardines Patch Document &amp;amp; Navigator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For now, you'll need to execute nexe inside the nxe directory and not in the project directory - I think it's because sardines looks at the package.json file for names&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Alternatives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rogerwang/node-webkit/wiki/How-to-package-and-distribute-your-apps"&gt;Node-webkit&lt;/a&gt; to package nodejs apps that require UI interaction&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tidesdk.multipart.net/docs/user-dev/generated/"&gt;http://tidesdk.multipart.net/docs/user-dev/generated/&lt;/a&gt; - seems similar but could not really grasp it&lt;/li&gt;
&lt;li&gt;AppJS - &lt;a href="http://appjs.org/#why"&gt;http://appjs.org/#why&lt;/a&gt; - aims to create HTML5/Javascript native apps&lt;/li&gt;
&lt;li&gt;NPKG - &lt;a href="https://github.com/wearefractal/npkg"&gt;https://github.com/wearefractal/npkg&lt;/a&gt; - old but interesting code&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Embedding a native module (in the nodejs binary)&lt;/h2&gt;

&lt;p&gt;Many of these single packaging tools, suffer from the problem of handline native modules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/crcn/nexe"&gt;nexe&lt;/a&gt; doesn't handle native modules (yet).&lt;/p&gt;

&lt;p&gt;But with a little persistance and creativity, this is what I did to add the &lt;a href="https://github.com/chjj/pty.js/"&gt;pty.js&lt;/a&gt; native module directly to the nodejs binary&lt;/p&gt;

&lt;pre&gt;
$ tar -xzvf node-v0.8.21.tar.gz
$ cd node-v0.8.21

# Copy the native code in the src directory
# If there is a header file copy/adapt it too
$ cp ~/dev/terminal.js/node_modules/pty.js/src/unix/pty.cc src/node_pty.cc

# Correct the export name of the module
# Add the node_ prefix to the node_module name
# Last line should read - NODE_MODULE(node_pty, init)

# add node_pty to src/node_extensions.h (f.e. right after node_zlib)
# NODE_EXT_LIST_ITEM(node_pty)

# Copy the pty.js file
$ cp ~/dev/pty.js/lib/pty.js lib/pty.js

# Add the pty.js to the node.gyp
# Somewhere in the library list add pty.js
# Somewhere in the source list add node_pty.cc

# Adapt the namings/bindings in lib/pty.js
# 1) replace: var pty = require('../build/Release/pty.node');
#    with: var binding = process.binding('pty');
# 2) replace all references to pty. to binding.

$ make clean
$ ./configure
$ make

&lt;/pre&gt;


&lt;p&gt;Now you have a custom build &lt;strong&gt;node&lt;/strong&gt; in &lt;strong&gt;out/Release/node&lt;/strong&gt;
The filesize was about 10034856 , you can further strip it and 6971192 (6.6M)&lt;/p&gt;

&lt;p&gt;Now you need to remove the native dependency from your package.json before you nexe build it&lt;/p&gt;

&lt;h2&gt;Packaging the file&lt;/h2&gt;

&lt;p&gt;A single binary now makes it easy to to make a curl installer from it as it only requires you to download file. &lt;a href="http://spin.atomicobject.com/2011/11/23/considered-harmful/"&gt;Remember the caveat of this.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And you can still package it up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create a rpm, deb, etc.. package from it using &lt;a href="https://github.com/jordansissel/fpm"&gt;fpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;or create a native MacOSX .app file from it as &lt;a href="https://twitter.com/mathias"&gt;Matthias Bynens&lt;/a&gt; suggest in &lt;a href="http://mathiasbynens.be/notes/shell-script-mac-apps"&gt;http://mathiasbynens.be/notes/shell-script-mac-apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/subtleGradient/Appify-UI"&gt;https://github.com/subtleGradient/Appify-UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.coolaj86.com/articles/how-to-create-an-osx-pkg-installer.html"&gt;http://blog.coolaj86.com/articles/how-to-create-an-osx-pkg-installer.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;build a DMG - &lt;a href="http://www.recital.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=108%3Ahowto-build-a-dmg-file-from-the-command-line-on-mac-os-x&amp;amp;Itemid=59"&gt;http://www.recital.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=108%3Ahowto-build-a-dmg-file-from-the-command-line-on-mac-os-x&amp;amp;Itemid=59&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Extras&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://groups.google.com/forum/#!topic/nodejs/mPIcq5mHihM"&gt;Rant about why it's a good or bad Idea - Secure Nodejs distribution&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More info on the process.binding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.carbonfive.com/2011/03/14/node-js-part-ii-spelunking-in-the-code/"&gt;http://blog.carbonfive.com/2011/03/14/node-js-part-ii-spelunking-in-the-code/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/?fromgroups#!topic/nodejs/R5fDzBr0eEk"&gt;https://groups.google.com/forum/?fromgroups#!topic/nodejs/R5fDzBr0eEk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Convert nodejs projects to single file/beautifier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Npk - &lt;a href="https://github.com/cfsghost/npk"&gt;https://github.com/cfsghost/npk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;UglifyJS - &lt;a href="https://github.com/mishoo/UglifyJS/"&gt;https://github.com/mishoo/UglifyJS/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RequireJS - &lt;a href="http://requirejs.org/"&gt;http://requirejs.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Browserify - &lt;a href="http://browserify.org/"&gt;http://browserify.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OneJS - &lt;a href="https://github.com/azer/onejs"&gt;https://github.com/azer/onejs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Cross compiling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/felixge/node-cross-compiler"&gt;https://github.com/felixge/node-cross-compiler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://n8.io/cross-compiling-nodejs-v0.8/"&gt;http://n8.io/cross-compiling-nodejs-v0.8/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
		

           		

   						<category><![CDATA[nodejs]]></category>
					
   						<category><![CDATA[compile]]></category>
					
   						<category><![CDATA[binary]]></category>
					
   						<category><![CDATA[nexe]]></category>
					
   						<category><![CDATA[package]]></category>
					
   						<category><![CDATA[single]]></category>
					
		        
		   
			<content:encoded><![CDATA[<p>Let's face it, if you write software it's often hard to distribute it: you have the runtime , the modules you depend on and your software itself. Sure you can package that all but packages ofter require you to have root-privileges to install.</p>

<p>Therefore at times it's convenient to have a single file/binary distribution. Download the executable and run it.
For ruby project you can convert things into a single jar using Jruby. A good example is the <a href="http://logstash.net">logstash</a> project: download 1 file , run it and you're in business.
But you'd still require the java runtime to be installed. (thanks Apple, NOT).</p>

<p>This is a extra of the GO language but I was looking for a similar thing for <strong>nodejs</strong>.
And the following documentation is the closest I could it get: (it works!)</p>

<h2>Compiling plain javascript (no external modules)</h2>

<p>Enter <a href="https://github.com/crcn/nexe">nexe</a> a tool to compile nodejs projects to an executable binary.</p>

<p>The way it works is:
- it downloads the <a href="http://nodejs.org/download/">nodejs source</a> of your choice
- it creates a single file nodejs source (using <a href="https://github.com/crcn/sardines">sardines</a> )
- it monkey patches the nodejs code to include this single file in the binary (adding it to the lib/nexe.js directory)</p>

<p>Creating a binary is as simple as:</p>

<pre>$ nexe -i myproject.js -o myproject.bin -r 0.10.3</pre>


<p>Caveats:</p>

<ul>
<li>I had an issue with unicode chars that got converted: it uses uglify.js and this needs to be configured to leave them alone
<a href="https://github.com/crcn/sardines/pull/13">Sardines Patch Unichode</a> . This was necessary to get <a href="https://github.com/c3ks/terminal.js">terminal.js</a> to compile</li>
<li>Next issue was to get <a href="https://github.com/LearnBoost/socket.io-client">socket.io-client</a> to compile: the swfobject has document and navigator objects, so this had to be fixed as well - <a href="https://github.com/crcn/sardines/pull/14">Sardines Patch Document &amp; Navigator</a></li>
<li>For now, you'll need to execute nexe inside the nxe directory and not in the project directory - I think it's because sardines looks at the package.json file for names</li>
</ul>


<p>Alternatives:</p>

<ul>
<li><a href="https://github.com/rogerwang/node-webkit/wiki/How-to-package-and-distribute-your-apps">Node-webkit</a> to package nodejs apps that require UI interaction</li>
<li><a href="http://tidesdk.multipart.net/docs/user-dev/generated/">http://tidesdk.multipart.net/docs/user-dev/generated/</a> - seems similar but could not really grasp it</li>
<li>AppJS - <a href="http://appjs.org/#why">http://appjs.org/#why</a> - aims to create HTML5/Javascript native apps</li>
<li>NPKG - <a href="https://github.com/wearefractal/npkg">https://github.com/wearefractal/npkg</a> - old but interesting code</li>
</ul>


<h2>Embedding a native module (in the nodejs binary)</h2>

<p>Many of these single packaging tools, suffer from the problem of handline native modules.</p>

<p><a href="https://github.com/crcn/nexe">nexe</a> doesn't handle native modules (yet).</p>

<p>But with a little persistance and creativity, this is what I did to add the <a href="https://github.com/chjj/pty.js/">pty.js</a> native module directly to the nodejs binary</p>

<pre>
$ tar -xzvf node-v0.8.21.tar.gz
$ cd node-v0.8.21

# Copy the native code in the src directory
# If there is a header file copy/adapt it too
$ cp ~/dev/terminal.js/node_modules/pty.js/src/unix/pty.cc src/node_pty.cc

# Correct the export name of the module
# Add the node_ prefix to the node_module name
# Last line should read - NODE_MODULE(node_pty, init)

# add node_pty to src/node_extensions.h (f.e. right after node_zlib)
# NODE_EXT_LIST_ITEM(node_pty)

# Copy the pty.js file
$ cp ~/dev/pty.js/lib/pty.js lib/pty.js

# Add the pty.js to the node.gyp
# Somewhere in the library list add pty.js
# Somewhere in the source list add node_pty.cc

# Adapt the namings/bindings in lib/pty.js
# 1) replace: var pty = require('../build/Release/pty.node');
#    with: var binding = process.binding('pty');
# 2) replace all references to pty. to binding.

$ make clean
$ ./configure
$ make

</pre>


<p>Now you have a custom build <strong>node</strong> in <strong>out/Release/node</strong>
The filesize was about 10034856 , you can further strip it and 6971192 (6.6M)</p>

<p>Now you need to remove the native dependency from your package.json before you nexe build it</p>

<h2>Packaging the file</h2>

<p>A single binary now makes it easy to to make a curl installer from it as it only requires you to download file. <a href="http://spin.atomicobject.com/2011/11/23/considered-harmful/">Remember the caveat of this.</a></p>

<p>And you can still package it up:</p>

<ul>
<li>create a rpm, deb, etc.. package from it using <a href="https://github.com/jordansissel/fpm">fpm</a></li>
<li>or create a native MacOSX .app file from it as <a href="https://twitter.com/mathias">Matthias Bynens</a> suggest in <a href="http://mathiasbynens.be/notes/shell-script-mac-apps">http://mathiasbynens.be/notes/shell-script-mac-apps</a></li>
<li><a href="https://github.com/subtleGradient/Appify-UI">https://github.com/subtleGradient/Appify-UI</a></li>
<li><a href="http://blog.coolaj86.com/articles/how-to-create-an-osx-pkg-installer.html">http://blog.coolaj86.com/articles/how-to-create-an-osx-pkg-installer.html</a></li>
<li>build a DMG - <a href="http://www.recital.com/index.php?option=com_content&amp;view=article&amp;id=108%3Ahowto-build-a-dmg-file-from-the-command-line-on-mac-os-x&amp;Itemid=59">http://www.recital.com/index.php?option=com_content&amp;view=article&amp;id=108%3Ahowto-build-a-dmg-file-from-the-command-line-on-mac-os-x&amp;Itemid=59</a></li>
</ul>


<h2>Extras</h2>

<p><a href="https://groups.google.com/forum/#!topic/nodejs/mPIcq5mHihM">Rant about why it's a good or bad Idea - Secure Nodejs distribution</a></p>

<p>More info on the process.binding:</p>

<ul>
<li><a href="http://blog.carbonfive.com/2011/03/14/node-js-part-ii-spelunking-in-the-code/">http://blog.carbonfive.com/2011/03/14/node-js-part-ii-spelunking-in-the-code/</a></li>
<li><a href="https://groups.google.com/forum/?fromgroups#!topic/nodejs/R5fDzBr0eEk">https://groups.google.com/forum/?fromgroups#!topic/nodejs/R5fDzBr0eEk</a></li>
</ul>


<p>Convert nodejs projects to single file/beautifier:</p>

<ul>
<li>Npk - <a href="https://github.com/cfsghost/npk">https://github.com/cfsghost/npk</a></li>
<li>UglifyJS - <a href="https://github.com/mishoo/UglifyJS/">https://github.com/mishoo/UglifyJS/</a></li>
<li>RequireJS - <a href="http://requirejs.org/">http://requirejs.org/</a></li>
<li>Browserify - <a href="http://browserify.org/">http://browserify.org/</a></li>
<li>OneJS - <a href="https://github.com/azer/onejs">https://github.com/azer/onejs</a></li>
</ul>


<p>Cross compiling:</p>

<ul>
<li><a href="https://github.com/felixge/node-cross-compiler">https://github.com/felixge/node-cross-compiler</a></li>
<li><a href="http://n8.io/cross-compiling-nodejs-v0.8/">http://n8.io/cross-compiling-nodejs-v0.8/</a></li>
</ul>

]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2013/05/14/Compiling - packaging a nodejs project as a single binary/</feedburner:origLink></item>
			<item>
			<title>The future of devops</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/QBP9CUceU_s/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2013/05/02/The future for Devops - Devopsdays Austin 2013/</guid>
			
			<pubDate>Thu, 02 May 2013 08:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2013/05/02/The future for Devops - Devopsdays Austin 2013/#comments</comments>
			<description>&lt;p&gt;I had a blast at &lt;a href="http://devopsdays.org/events/2013-austin"&gt;Devopsdays Austin 2013&lt;/a&gt; . Here's my keynote on the 'future of devops'.&lt;/p&gt;

&lt;p&gt;My main point is that besides repeating the devops stories, we also need to seek diversity and make sure we keep adapting to situations.&lt;/p&gt;

&lt;p&gt;The slides are available on slideshare - &lt;a href="http://www.slideshare.net/jedi4ever/future-ofdevopsv2"&gt;http://www.slideshare.net/jedi4ever/future-ofdevopsv2&lt;/a&gt;&lt;/p&gt;

&lt;iframe src="http://player.vimeo.com/video/65547464" width="500" height="375" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;

</description>
		

           		

   						<category><![CDATA[devops]]></category>
					
   						<category><![CDATA[devopsdays]]></category>
					
   						<category><![CDATA[austin]]></category>
					
		        
		   
			<content:encoded><![CDATA[<p>I had a blast at <a href="http://devopsdays.org/events/2013-austin">Devopsdays Austin 2013</a> . Here's my keynote on the 'future of devops'.</p>

<p>My main point is that besides repeating the devops stories, we also need to seek diversity and make sure we keep adapting to situations.</p>

<p>The slides are available on slideshare - <a href="http://www.slideshare.net/jedi4ever/future-ofdevopsv2">http://www.slideshare.net/jedi4ever/future-ofdevopsv2</a></p>

<iframe src="http://player.vimeo.com/video/65547464" width="500" height="375" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>

]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2013/05/02/The future for Devops - Devopsdays Austin 2013/</feedburner:origLink></item>
			<item>
			<title>What if Devops was invented by Coca Cola</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/GZk8KJ-F5FU/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2013/04/22/What if Devops was invented by Coca Cola/</guid>
			
			<pubDate>Mon, 22 Apr 2013 08:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2013/04/22/What if Devops was invented by Coca Cola/#comments</comments>
			<description>&lt;p&gt;Ever wondered what Devops would look like when it would be invented by Coca Cola?&lt;/p&gt;

&lt;p&gt;Enjoy my Ignite session from &lt;a href="http://devopsdays.org/events/2013-paris"&gt;Devopsdays Paris 2013&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;
&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/19106839" width="512" height="421" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="http://www.slideshare.net/devopsdays/what-if-devops-was-invented-by-coca-cola" title="What if devops was invented by Coca Cola" target="_blank"&gt;What if devops was invented by Coca Cola&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="http://www.slideshare.net/devopsdays" target="_blank"&gt;devopsdays&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/center&gt;

</description>
		

           		

   						<category><![CDATA[devops]]></category>
					
   						<category><![CDATA[devopsdays]]></category>
					
   						<category><![CDATA[paris]]></category>
					
		        
		   
			<content:encoded><![CDATA[<p>Ever wondered what Devops would look like when it would be invented by Coca Cola?</p>

<p>Enjoy my Ignite session from <a href="http://devopsdays.org/events/2013-paris">Devopsdays Paris 2013</a></p>

<center>
<iframe src="http://www.slideshare.net/slideshow/embed_code/19106839" width="512" height="421" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/devopsdays/what-if-devops-was-invented-by-coca-cola" title="What if devops was invented by Coca Cola" target="_blank">What if devops was invented by Coca Cola</a> </strong> from <strong><a href="http://www.slideshare.net/devopsdays" target="_blank">devopsdays</a></strong> </div>
</center>

]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2013/04/22/What if Devops was invented by Coca Cola/</feedburner:origLink></item>
			<item>
			<title>What if Config Management was created by Game Designers</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/-l2ZGjmOYqs/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2013/03/26/What if Config Management was created by Game designers/</guid>
			
			<pubDate>Tue, 26 Mar 2013 08:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2013/03/26/What if Config Management was created by Game designers/#comments</comments>
			<description>&lt;p&gt;Ever wondered what Config Management would look like if it was created by Game Designers?&lt;/p&gt;

&lt;p&gt;Enjoy my Ignite session from &lt;a href="http://devopsdays.org/events/2013-london"&gt;Devopsdays London 2013&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;
&lt;iframe src="http://player.vimeo.com/video/62689929" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;

&lt;hr&gt;
&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/17233085" width="512" height="421" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="http://www.slideshare.net/jedi4ever/what-ifconfigmgtwasdesignedbygamers" title="What if-configmgt-was-designed-by-gamers" target="_blank"&gt;What if-configmgt-was-designed-by-gamers&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="http://www.slideshare.net/jedi4ever" target="_blank"&gt;Patrick Debois&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/hr&gt;
&lt;/center&gt;

</description>
		

           		

   						<category><![CDATA[devops]]></category>
					
   						<category><![CDATA[infrastructure as code]]></category>
					
   						<category><![CDATA[ansible]]></category>
					
   						<category><![CDATA[chef]]></category>
					
   						<category><![CDATA[cfengine]]></category>
					
   						<category><![CDATA[puppet]]></category>
					
   						<category><![CDATA[config management]]></category>
					
   						<category><![CDATA[game designers]]></category>
					
   						<category><![CDATA[gamification]]></category>
					
		        
		   
			<content:encoded><![CDATA[<p>Ever wondered what Config Management would look like if it was created by Game Designers?</p>

<p>Enjoy my Ignite session from <a href="http://devopsdays.org/events/2013-london">Devopsdays London 2013</a></p>

<center>
<iframe src="http://player.vimeo.com/video/62689929" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>

<hr>
<iframe src="http://www.slideshare.net/slideshow/embed_code/17233085" width="512" height="421" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/jedi4ever/what-ifconfigmgtwasdesignedbygamers" title="What if-configmgt-was-designed-by-gamers" target="_blank">What if-configmgt-was-designed-by-gamers</a> </strong> from <strong><a href="http://www.slideshare.net/jedi4ever" target="_blank">Patrick Debois</a></strong> </div>
</hr>
</center>

]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2013/03/26/What if Config Management was created by Game designers/</feedburner:origLink></item>
			<item>
			<title>A configuration Management Carol</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/N2dqMns250A/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2012/12/26/A Configuration Management Carol/</guid>
			
			<pubDate>Wed, 26 Dec 2012 08:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2012/12/26/A Configuration Management Carol/#comments</comments>
			<description>&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/15754312" width="600" height="1015" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt; &lt;/iframe&gt;


&lt;p&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="http://www.slideshare.net/jedi4ever/a-configuration-management-carol" title="A Configuration Management Carol" target="_blank"&gt;A Configuration Management Carol&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="http://www.slideshare.net/jedi4ever" target="_blank"&gt;Patrick Debois&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;&lt;/p&gt;
</description>
		

           		

   						<category><![CDATA[devops]]></category>
					
   						<category><![CDATA[puppet]]></category>
					
   						<category><![CDATA[chef]]></category>
					
   						<category><![CDATA[cfengine]]></category>
					
   						<category><![CDATA[ansible]]></category>
					
		        
		   
			<content:encoded><![CDATA[<iframe src="http://www.slideshare.net/slideshow/embed_code/15754312" width="600" height="1015" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>


<p> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/jedi4ever/a-configuration-management-carol" title="A Configuration Management Carol" target="_blank">A Configuration Management Carol</a> </strong> from <strong><a href="http://www.slideshare.net/jedi4ever" target="_blank">Patrick Debois</a></strong> </div></p>
]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2012/12/26/A Configuration Management Carol/</feedburner:origLink></item>
			<item>
			<title>Devops Areas - Codifying devops practices</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/PNJgDse0lmQ/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/</guid>
			
			<pubDate>Sat, 12 May 2012 08:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/#comments</comments>
			<description>&lt;p&gt;While working on the &lt;a href="http://itrevolution.com/books/the-devops-cookbook/"&gt;Devops Cookbook&lt;/a&gt; with my fellow authors &lt;a href="http://twitter.com/realgenekim"&gt;Gene Kim&lt;/a&gt;,&lt;a href="http://twitter.com/botchagalupe"&gt;John Willis&lt;/a&gt;,&lt;a href="http://twitter.com/mikeorzenleanit"&gt;Mike Orzen&lt;/a&gt; we are gathering a lot of "devops" practices. For some time we struggled with structuring them in the book. I figured we were missing a mental model to relate the practices/stories to.&lt;/p&gt;

&lt;p&gt;This blogpost is a first stab at providing a structure to &lt;strong&gt;codify devops practices&lt;/strong&gt;. The wording, descriptions are pretty much work in progress, but I found them important enough to share to get your feedback.&lt;/p&gt;

&lt;h3&gt;Devops in the right perspective&lt;/h3&gt;

&lt;p&gt;As you probably know by now, there are many definitions of devops. One thing that occasionally pops up is that people want to change the name to extend it to other groups within the IT area: star-ops, dev-qa-ops, sec-ops, ...
From the beginning I think people involved in the first devops thinking had the idea to expand the thought process beyond just dev and ops. (but a name bus-qa-sec-net-ops would be that catchy :).&lt;/p&gt;

&lt;p&gt;I've started reffering to :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;devops&lt;/strong&gt; : collaboration,optimization across the whole organisation. Even beyond IT (HR, Finance...) and company borders (Suppliers)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;devops 'lite'&lt;/strong&gt; : when people zoom in on 'just' dev and ops collaboration.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://dev2ops.org/blog/2010/11/7/devops-is-not-a-technology-problem-devops-is-a-business-prob.html"&gt;As rightly pointed out by Damon Edwards&lt;/a&gt; , &lt;strong&gt;devops is not about a technology , devops is about a business problem&lt;/strong&gt;. &lt;a href="http://nl.wikipedia.org/wiki/Theory_of_constraints"&gt;The theory of Contraints&lt;/a&gt; tells us to &lt;em&gt;optimize the whole&lt;/em&gt; and not the individual 'silos'. For me that whole is the business to customer problem , or in lean speak, the whole value chain.
Bottlenecks and improvements could be happen anywhere and have a local impact on the dev and ops part of the company.&lt;/p&gt;

&lt;p&gt;So even if your problem exists in dev or ops, or somewhere between, the optimization might need to be done in another part of the company. As a result describing pre-scriptive steps to solve the 'devops' problem (if there is such a problem) are impossible. The problems you're facing within your company could be vastly different and the solutions to your problem might have different effects/needs.&lt;/p&gt;

&lt;p&gt;If not pre-scriptive, we can &lt;strong&gt;gather practices&lt;/strong&gt; people have been doing to overcome similar situations. I've always encouraged people to share their stories so other people could learn from them. (one of the core reasons devopsdays exists) This helps in capturing practices, I'd leave it in the middle to say that they are good or best practices.&lt;/p&gt;

&lt;p&gt;Currently a lot of the stories/practices are zooming in on areas like deployment, dev and ops collaboration, metrics etc.. (Devops Lite) . This is a natural evolution of having dev and ops in the term's name and given the background of people currently discussing the approaches. I hope that in the future this discussion expands itself to other company silos too: f.i. &lt;a href="http://www.spikelab.org/devops-job-title/"&gt;synergize HR and Devops&lt;/a&gt;(Spike Morelli) or relate our metrics to financial reporting.&lt;/p&gt;

&lt;p&gt;Another thing to be aware of is that a system/company is continously in flux: whenever something changes to the system it can have an impact; So you can't take for granted that problems,bottle-necks will not re-emerge after some time. It needs continuous attention. That will be easier if you get closer to a steady-state, but still, devops like security is a journey, not an end state.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//complete-devops.png'&gt;&lt;/p&gt;

&lt;h3&gt;Beyond just dev and ops&lt;/h3&gt;

&lt;p&gt;Let's zoom in on some of the practices that are commonly discussed: the direct field between 'dev' and 'ops'.&lt;/p&gt;

&lt;p&gt;In most cases, 'dev' actually means 'project' and 'ops' presents 'production'. Within projects we have methodologies like (Scrum, Kanban, ...) and within operations (ITIL, Visble Ops, ...).
Both parts have been extending their project methodology over the years: from the dev perspective this has lead to 'Continous Delivery' and from the Ops side ITIL was extended with Application Life Cycle (ALM). They both worked hard on optimize the individual part of the company and less on integration with other parts. Those methodologies had a hard time solving a bottleneck that outside their 'authority'.  I think this where devops kicks in: it seeks the active collaboration between different silos so we can start seeing the complete system and optimize where needed, not just in individual silos.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//devops-lite.png'&gt;&lt;/p&gt;

&lt;h3&gt;Devops Areas&lt;/h3&gt;

&lt;p&gt;In my mental model of devops there are four 'key' areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Area 1 : Extend delivery to production (Think Jez Humble) : this is where dev and ops collaborate to improve anything on delivering the project to production&lt;/li&gt;
&lt;li&gt;Area 2 : Extend Operation to project (Think John Allspaw) : all information from production is radiated back to the project&lt;/li&gt;
&lt;li&gt;Area 3 : Embed Project(Dev) into Operations : when the project takes co-ownership of everything that happens in production&lt;/li&gt;
&lt;li&gt;Area 4 : Embed Production(Ops) into Project : when operations are involved from the beginning of the project&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;In each of these areas there will be a bi-directonal interaction between dev and ops, resulting in knowledge exchange and feedback.&lt;/p&gt;

&lt;p&gt;Depending on where your most pressing 'current' bottleneck manifests itself, you may want to address things in different areas. There is no need to first address things in area1 than area2. Think of them as pressure points that you can stress but requiring a balanced pressure.&lt;/p&gt;

&lt;p&gt;Area 1 and Area2 tend to be heavier on the tools side , but not strictly tools focused. Area3 and Area4 will be more related to people and cultural changes as their 'reach' is further down the chain.&lt;/p&gt;

&lt;p&gt;When visualized in a table this gives you:&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//devops-areas-schematic.png'&gt;&lt;/p&gt;

&lt;p&gt;As you can see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the DEV and OPS part keep having their own internal processes specific to their job&lt;/li&gt;
&lt;li&gt;the two processes are becoming aligned and the areas extend both DEV and OPS to production and projects&lt;/li&gt;
&lt;li&gt;it's almost like a double loop with area1 and area2 as the first loop and area3 and area4 as the second loop&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Note 1&lt;/strong&gt;: these areas definitely need 'catchier' names to make them easier to remember.
&lt;strong&gt;Note 2&lt;/strong&gt;: Ben Rockwoods post on &lt;a href="http://cuddletech.com/blog/?p=624"&gt;"The Three Aspects of Devops"&lt;/a&gt; lists already 3 aspects but I think the areas make it more specific&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//devops-areas.png'&gt;&lt;/p&gt;

&lt;h3&gt;Area Layers&lt;/h3&gt;

&lt;p&gt;In each of these areas, we can interact at the traditional 'layers' tools, process, people:&lt;/p&gt;

&lt;p&gt;So whenever I hear story , I try to relate it's practice to one of these areas as described above and the layer it's adressing. Practices can have an impact at different layers so I see them as 'tags' to quickly label stories.
Another benefit is that whenever you look at an area, you can ask yourself what practices we  can do to improve each of these layers. To have a maximum impact on each of the layers, it's clear that the approach needs to be layered in all three.&lt;/p&gt;

&lt;p&gt;The ultimate devops tools would support the whole people and process in all of these areas, not just in Area1 (deployment) or Area2 (monitoring/metrics). Therefore a devops toolchain with different tools interacting in each of the areas makes more sense. Also the tool by itself doesn't make it a devops tool: configuration mangement systems like chef and puppet are great, but when applied in Ops only don't help our problem much. Of course Ops gets infrastructure agilitity, but it isn't until it is applied to the delivery (f.i. to create test and development environments) that it becomes 'devops'. This shows that the mindset of the person applying the tool makes it a devops tool, not the tool by itself.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//devops-layers.png'&gt;&lt;/p&gt;

&lt;h3&gt;Area Maturity Levels&lt;/h3&gt;

&lt;p&gt;Now that we have the areas and layers identified, we want to track progress as we start solving our problems and are improving things.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/adrianco"&gt;Adrian Cockroft&lt;/a&gt; &lt;a href="http://groups.google.com/group/devops/browse_frm/thread/f3de603a4cea493e?scoring=d"&gt;suggested using CMMI levels for devops&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;CMMI levels allow you to quantify the 'maturity' of your process. That addresses only one layer (although an equally important one). In a nutshell CMMI describes the different levels as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Initial&lt;/strong&gt; : Unpredictable and poorly controlled process and reactive nature&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Managed&lt;/strong&gt; : Focused on project and still reactive nature&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Defined&lt;/strong&gt; : Focused on organization and proactive&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quantively Managed&lt;/strong&gt; : Measured and controller approach&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizing&lt;/strong&gt; : Focus on Improvement&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;All these levels could be applied to dev , ops or devops combined. It gives you an idea at what level process is in, while you are optimizing in an area.&lt;/p&gt;

&lt;p&gt;An alternative way of expressing maturity levels is used by the &lt;a href="http://blogs.urbancode.com/continuous-integration/continuous-integration-maturity-model/"&gt;Continuous Integration Maturity Model&lt;/a&gt;.
It puts a set of practices in levels of maturity: (industry consensus)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Intro&lt;/strong&gt; : using source control ...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Novice&lt;/strong&gt; : builds trigger by commit ...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intermediate&lt;/strong&gt; : Automated deployment to testing ..&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced&lt;/strong&gt; : Automated Functional testing ...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insane&lt;/strong&gt; : Continuous Deployment to Production ...&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Instead of focusing on the proces only , it could be applied to a set of tools, process or people practices. What people consider the most advanced would get the highest maturity level.&lt;/p&gt;

&lt;h3&gt;Practices, Patterns and principles&lt;/h3&gt;

&lt;p&gt;A practice could be anything from an anecdotal item to a systemic approach.  Similar practices can be &lt;strong&gt;grouped into patterns&lt;/strong&gt; to elevate them to another level. Similar to the Software Design Patterns we can start grouping devops practices in devops patterns.&lt;/p&gt;

&lt;p&gt;Practices and patterns will rely on principles and it's these underlying principles that will guide you when and you to apply the pattern or practice. These principles can be 'borrowed' from other fields like Lean, Systems Theory etc, Human Psychology. The principles are what the agile manifesto is about for example.&lt;/p&gt;

&lt;p&gt;Slowly we will turn the practices -&gt; patterns -&gt; principles .&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I'm wondering if there will be new principles that will emerge from from devops itself or it will be apply existing principle to a new perspective.&lt;/p&gt;

&lt;h3&gt;A few practical examples:&lt;/h3&gt;

&lt;p&gt;Below are a few example 'practices' codified in a standard template. The practices/patterns/principles are not yet very well described. The point is more that this can serve as a template to codify practices.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//practice-example-dev-test-prod.png'&gt;
&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//practice-example-expose-information.png'&gt;
&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//practice-example-dev-pagers.png'&gt;
&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//practice-example-integrated-backlog.png'&gt;&lt;/p&gt;

&lt;h3&gt;Area Indicators&lt;/h3&gt;

&lt;p&gt;The idea is to list metrics/indicators that can tracked. The numbers as such might be not be too relevant but the rate of change would be. This is similar to tracking the velocity of storypoints or the tracking of mean time to recovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I'm scared of presenting these as metrics to track, therefore I call them indicators to soften that.&lt;/p&gt;

&lt;p&gt;Examples would be :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools Layer : Deploys/Day&lt;/li&gt;
&lt;li&gt;Process Layer : Number of Change Requests/Day&lt;/li&gt;
&lt;li&gt;People Layer : People Involved per deploy&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This is not yet fleshed out enough , I'm guessing it will be based on my research done for my &lt;a href="http://www.slideshare.net/jedi4ever/devops-metrics"&gt;Velocity 2011 Presentation (Devops Metrics)&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Devops Scorecard&lt;/h3&gt;

&lt;p&gt;To present progress during your 'devops' journey you can put all these things in a nice matrix, to get an overview on where you are at optimizing at the different layers and areas.&lt;/p&gt;

&lt;p&gt;Obviously this only makes sense if you don't lie to yourself, your boss, your customers.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//devops-scorecard.png'&gt;&lt;/p&gt;

&lt;h3&gt;Project Teams, Product Teams and NOOPS&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://twitter.com/jezhumble"&gt;Jez Humble&lt;/a&gt; often talks about project teams evolving to product teams: largere silos will split of not by skill, but for product functionality they are delivering.
Splitting teams like that, has the potential danger of creating new silos. It's obvious these product teams need to collaborate again. You should treat other product teams are external dependencies, just like other Silos.
The areas of interaction will be very similar.&lt;/p&gt;

&lt;p&gt;Also you can see the term NOOPS as working with product teams outside your company, like you rely on SAAS for certain functions. It's important not only to integrate in each of the areas on the tools layer, but also on the people and process layer. Something that is often forgotten. Automation and abstraction allows you to go faster but when things fail or even changes occur, synchronisation needs to happen.&lt;/p&gt;

&lt;h3&gt;CAMS and areas&lt;/h3&gt;

&lt;p&gt;The &lt;a href="http://www.opscode.com/blog/2010/07/16/what-devops-means-to-me/"&gt;CAMS acronym&lt;/a&gt; (Culture, Automation, Measurement, Sharing) could be loosely mapped onto the areas structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automation&lt;/strong&gt; seems to map to Area1: the delivery process&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Measurement&lt;/strong&gt; seems to map to Area2: the feedback process&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Culture&lt;/strong&gt; to Area3 : embedded devs in Production&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sharing&lt;/strong&gt; to Area4: embedded ops in Projects&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Of course automation, measurement, culture and sharing can happen in any of the areas, but some of the areas seem to have a stronger focus on each of these parts.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices//devops-areas-cams.png'&gt;&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Devops areas, layers and maturity levels, give us a framework to capture new practices stories and it can be used to identify areas of improvements related to the devops field. I'd love feedback on this.
If anyone wants to help, I'd like to bring up a website where people can enter their stories in this structure and make it easily available for anyone to learn. I don't have too much CPU cycles left currently , but I'm happy to get this going :)&lt;/p&gt;

&lt;p&gt;P.S. @littleidea: &lt;a href="http://www.techdarkside.com/FSOP.jpg"&gt;I do want to avoid the FSOP Cycle&lt;/a&gt;&lt;/p&gt;
</description>
		

           		

   						<category><![CDATA[devops]]></category>
					
   						<category><![CDATA[maturity levels]]></category>
					
   						<category><![CDATA[metrics]]></category>
					
   						<category><![CDATA[areas]]></category>
					
   						<category><![CDATA[people process tools]]></category>
					
   						<category><![CDATA[layers]]></category>
					
		        
		   
			<content:encoded><![CDATA[<p>While working on the <a href="http://itrevolution.com/books/the-devops-cookbook/">Devops Cookbook</a> with my fellow authors <a href="http://twitter.com/realgenekim">Gene Kim</a>,<a href="http://twitter.com/botchagalupe">John Willis</a>,<a href="http://twitter.com/mikeorzenleanit">Mike Orzen</a> we are gathering a lot of "devops" practices. For some time we struggled with structuring them in the book. I figured we were missing a mental model to relate the practices/stories to.</p>

<p>This blogpost is a first stab at providing a structure to <strong>codify devops practices</strong>. The wording, descriptions are pretty much work in progress, but I found them important enough to share to get your feedback.</p>

<h3>Devops in the right perspective</h3>

<p>As you probably know by now, there are many definitions of devops. One thing that occasionally pops up is that people want to change the name to extend it to other groups within the IT area: star-ops, dev-qa-ops, sec-ops, ...
From the beginning I think people involved in the first devops thinking had the idea to expand the thought process beyond just dev and ops. (but a name bus-qa-sec-net-ops would be that catchy :).</p>

<p>I've started reffering to :</p>

<ul>
<li><strong>devops</strong> : collaboration,optimization across the whole organisation. Even beyond IT (HR, Finance...) and company borders (Suppliers)</li>
<li><strong>devops 'lite'</strong> : when people zoom in on 'just' dev and ops collaboration.</li>
</ul>


<p><a href="http://dev2ops.org/blog/2010/11/7/devops-is-not-a-technology-problem-devops-is-a-business-prob.html">As rightly pointed out by Damon Edwards</a> , <strong>devops is not about a technology , devops is about a business problem</strong>. <a href="http://nl.wikipedia.org/wiki/Theory_of_constraints">The theory of Contraints</a> tells us to <em>optimize the whole</em> and not the individual 'silos'. For me that whole is the business to customer problem , or in lean speak, the whole value chain.
Bottlenecks and improvements could be happen anywhere and have a local impact on the dev and ops part of the company.</p>

<p>So even if your problem exists in dev or ops, or somewhere between, the optimization might need to be done in another part of the company. As a result describing pre-scriptive steps to solve the 'devops' problem (if there is such a problem) are impossible. The problems you're facing within your company could be vastly different and the solutions to your problem might have different effects/needs.</p>

<p>If not pre-scriptive, we can <strong>gather practices</strong> people have been doing to overcome similar situations. I've always encouraged people to share their stories so other people could learn from them. (one of the core reasons devopsdays exists) This helps in capturing practices, I'd leave it in the middle to say that they are good or best practices.</p>

<p>Currently a lot of the stories/practices are zooming in on areas like deployment, dev and ops collaboration, metrics etc.. (Devops Lite) . This is a natural evolution of having dev and ops in the term's name and given the background of people currently discussing the approaches. I hope that in the future this discussion expands itself to other company silos too: f.i. <a href="http://www.spikelab.org/devops-job-title/">synergize HR and Devops</a>(Spike Morelli) or relate our metrics to financial reporting.</p>

<p>Another thing to be aware of is that a system/company is continously in flux: whenever something changes to the system it can have an impact; So you can't take for granted that problems,bottle-necks will not re-emerge after some time. It needs continuous attention. That will be easier if you get closer to a steady-state, but still, devops like security is a journey, not an end state.</p>

<p><img src='/blog/2012/05/12/codifying-devops-area-practices//complete-devops.png'></p>

<h3>Beyond just dev and ops</h3>

<p>Let's zoom in on some of the practices that are commonly discussed: the direct field between 'dev' and 'ops'.</p>

<p>In most cases, 'dev' actually means 'project' and 'ops' presents 'production'. Within projects we have methodologies like (Scrum, Kanban, ...) and within operations (ITIL, Visble Ops, ...).
Both parts have been extending their project methodology over the years: from the dev perspective this has lead to 'Continous Delivery' and from the Ops side ITIL was extended with Application Life Cycle (ALM). They both worked hard on optimize the individual part of the company and less on integration with other parts. Those methodologies had a hard time solving a bottleneck that outside their 'authority'.  I think this where devops kicks in: it seeks the active collaboration between different silos so we can start seeing the complete system and optimize where needed, not just in individual silos.</p>

<p><img src='/blog/2012/05/12/codifying-devops-area-practices//devops-lite.png'></p>

<h3>Devops Areas</h3>

<p>In my mental model of devops there are four 'key' areas:</p>

<ul>
<li>Area 1 : Extend delivery to production (Think Jez Humble) : this is where dev and ops collaborate to improve anything on delivering the project to production</li>
<li>Area 2 : Extend Operation to project (Think John Allspaw) : all information from production is radiated back to the project</li>
<li>Area 3 : Embed Project(Dev) into Operations : when the project takes co-ownership of everything that happens in production</li>
<li>Area 4 : Embed Production(Ops) into Project : when operations are involved from the beginning of the project</li>
</ul>


<p>In each of these areas there will be a bi-directonal interaction between dev and ops, resulting in knowledge exchange and feedback.</p>

<p>Depending on where your most pressing 'current' bottleneck manifests itself, you may want to address things in different areas. There is no need to first address things in area1 than area2. Think of them as pressure points that you can stress but requiring a balanced pressure.</p>

<p>Area 1 and Area2 tend to be heavier on the tools side , but not strictly tools focused. Area3 and Area4 will be more related to people and cultural changes as their 'reach' is further down the chain.</p>

<p>When visualized in a table this gives you:</p>

<p><img src='/blog/2012/05/12/codifying-devops-area-practices//devops-areas-schematic.png'></p>

<p>As you can see:</p>

<ul>
<li>the DEV and OPS part keep having their own internal processes specific to their job</li>
<li>the two processes are becoming aligned and the areas extend both DEV and OPS to production and projects</li>
<li>it's almost like a double loop with area1 and area2 as the first loop and area3 and area4 as the second loop</li>
</ul>


<p><strong>Note 1</strong>: these areas definitely need 'catchier' names to make them easier to remember.
<strong>Note 2</strong>: Ben Rockwoods post on <a href="http://cuddletech.com/blog/?p=624">"The Three Aspects of Devops"</a> lists already 3 aspects but I think the areas make it more specific</p>

<p><img src='/blog/2012/05/12/codifying-devops-area-practices//devops-areas.png'></p>

<h3>Area Layers</h3>

<p>In each of these areas, we can interact at the traditional 'layers' tools, process, people:</p>

<p>So whenever I hear story , I try to relate it's practice to one of these areas as described above and the layer it's adressing. Practices can have an impact at different layers so I see them as 'tags' to quickly label stories.
Another benefit is that whenever you look at an area, you can ask yourself what practices we  can do to improve each of these layers. To have a maximum impact on each of the layers, it's clear that the approach needs to be layered in all three.</p>

<p>The ultimate devops tools would support the whole people and process in all of these areas, not just in Area1 (deployment) or Area2 (monitoring/metrics). Therefore a devops toolchain with different tools interacting in each of the areas makes more sense. Also the tool by itself doesn't make it a devops tool: configuration mangement systems like chef and puppet are great, but when applied in Ops only don't help our problem much. Of course Ops gets infrastructure agilitity, but it isn't until it is applied to the delivery (f.i. to create test and development environments) that it becomes 'devops'. This shows that the mindset of the person applying the tool makes it a devops tool, not the tool by itself.</p>

<p><img src='/blog/2012/05/12/codifying-devops-area-practices//devops-layers.png'></p>

<h3>Area Maturity Levels</h3>

<p>Now that we have the areas and layers identified, we want to track progress as we start solving our problems and are improving things.</p>

<p><a href="http://twitter.com/adrianco">Adrian Cockroft</a> <a href="http://groups.google.com/group/devops/browse_frm/thread/f3de603a4cea493e?scoring=d">suggested using CMMI levels for devops</a>:</p>

<p>CMMI levels allow you to quantify the 'maturity' of your process. That addresses only one layer (although an equally important one). In a nutshell CMMI describes the different levels as:</p>

<ol>
<li><strong>Initial</strong> : Unpredictable and poorly controlled process and reactive nature</li>
<li><strong>Managed</strong> : Focused on project and still reactive nature</li>
<li><strong>Defined</strong> : Focused on organization and proactive</li>
<li><strong>Quantively Managed</strong> : Measured and controller approach</li>
<li><strong>Optimizing</strong> : Focus on Improvement</li>
</ol>


<p>All these levels could be applied to dev , ops or devops combined. It gives you an idea at what level process is in, while you are optimizing in an area.</p>

<p>An alternative way of expressing maturity levels is used by the <a href="http://blogs.urbancode.com/continuous-integration/continuous-integration-maturity-model/">Continuous Integration Maturity Model</a>.
It puts a set of practices in levels of maturity: (industry consensus)</p>

<ol>
<li><strong>Intro</strong> : using source control ...</li>
<li><strong>Novice</strong> : builds trigger by commit ...</li>
<li><strong>Intermediate</strong> : Automated deployment to testing ..</li>
<li><strong>Advanced</strong> : Automated Functional testing ...</li>
<li><strong>Insane</strong> : Continuous Deployment to Production ...</li>
</ol>


<p>Instead of focusing on the proces only , it could be applied to a set of tools, process or people practices. What people consider the most advanced would get the highest maturity level.</p>

<h3>Practices, Patterns and principles</h3>

<p>A practice could be anything from an anecdotal item to a systemic approach.  Similar practices can be <strong>grouped into patterns</strong> to elevate them to another level. Similar to the Software Design Patterns we can start grouping devops practices in devops patterns.</p>

<p>Practices and patterns will rely on principles and it's these underlying principles that will guide you when and you to apply the pattern or practice. These principles can be 'borrowed' from other fields like Lean, Systems Theory etc, Human Psychology. The principles are what the agile manifesto is about for example.</p>

<p>Slowly we will turn the practices -> patterns -> principles .</p>

<p><strong>Note:</strong> I'm wondering if there will be new principles that will emerge from from devops itself or it will be apply existing principle to a new perspective.</p>

<h3>A few practical examples:</h3>

<p>Below are a few example 'practices' codified in a standard template. The practices/patterns/principles are not yet very well described. The point is more that this can serve as a template to codify practices.</p>

<p><img src='/blog/2012/05/12/codifying-devops-area-practices//practice-example-dev-test-prod.png'>
<img src='/blog/2012/05/12/codifying-devops-area-practices//practice-example-expose-information.png'>
<img src='/blog/2012/05/12/codifying-devops-area-practices//practice-example-dev-pagers.png'>
<img src='/blog/2012/05/12/codifying-devops-area-practices//practice-example-integrated-backlog.png'></p>

<h3>Area Indicators</h3>

<p>The idea is to list metrics/indicators that can tracked. The numbers as such might be not be too relevant but the rate of change would be. This is similar to tracking the velocity of storypoints or the tracking of mean time to recovery.</p>

<p><strong>Note:</strong> I'm scared of presenting these as metrics to track, therefore I call them indicators to soften that.</p>

<p>Examples would be :</p>

<ul>
<li>Tools Layer : Deploys/Day</li>
<li>Process Layer : Number of Change Requests/Day</li>
<li>People Layer : People Involved per deploy</li>
</ul>


<p>This is not yet fleshed out enough , I'm guessing it will be based on my research done for my <a href="http://www.slideshare.net/jedi4ever/devops-metrics">Velocity 2011 Presentation (Devops Metrics)</a></p>

<h3>Devops Scorecard</h3>

<p>To present progress during your 'devops' journey you can put all these things in a nice matrix, to get an overview on where you are at optimizing at the different layers and areas.</p>

<p>Obviously this only makes sense if you don't lie to yourself, your boss, your customers.</p>

<p><img src='/blog/2012/05/12/codifying-devops-area-practices//devops-scorecard.png'></p>

<h3>Project Teams, Product Teams and NOOPS</h3>

<p><a href="http://twitter.com/jezhumble">Jez Humble</a> often talks about project teams evolving to product teams: largere silos will split of not by skill, but for product functionality they are delivering.
Splitting teams like that, has the potential danger of creating new silos. It's obvious these product teams need to collaborate again. You should treat other product teams are external dependencies, just like other Silos.
The areas of interaction will be very similar.</p>

<p>Also you can see the term NOOPS as working with product teams outside your company, like you rely on SAAS for certain functions. It's important not only to integrate in each of the areas on the tools layer, but also on the people and process layer. Something that is often forgotten. Automation and abstraction allows you to go faster but when things fail or even changes occur, synchronisation needs to happen.</p>

<h3>CAMS and areas</h3>

<p>The <a href="http://www.opscode.com/blog/2010/07/16/what-devops-means-to-me/">CAMS acronym</a> (Culture, Automation, Measurement, Sharing) could be loosely mapped onto the areas structure:</p>

<ul>
<li><strong>Automation</strong> seems to map to Area1: the delivery process</li>
<li><strong>Measurement</strong> seems to map to Area2: the feedback process</li>
<li><strong>Culture</strong> to Area3 : embedded devs in Production</li>
<li><strong>Sharing</strong> to Area4: embedded ops in Projects</li>
</ul>


<p>Of course automation, measurement, culture and sharing can happen in any of the areas, but some of the areas seem to have a stronger focus on each of these parts.</p>

<p><img src='/blog/2012/05/12/codifying-devops-area-practices//devops-areas-cams.png'></p>

<h3>Conclusion</h3>

<p>Devops areas, layers and maturity levels, give us a framework to capture new practices stories and it can be used to identify areas of improvements related to the devops field. I'd love feedback on this.
If anyone wants to help, I'd like to bring up a website where people can enter their stories in this structure and make it easily available for anyone to learn. I don't have too much CPU cycles left currently , but I'm happy to get this going :)</p>

<p>P.S. @littleidea: <a href="http://www.techdarkside.com/FSOP.jpg">I do want to avoid the FSOP Cycle</a></p>
]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/</feedburner:origLink></item>
			<item>
			<title>Conference time - Summer of 2012</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/K9g4izDhwMM/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2012/05/11/conference-time/</guid>
			
			<pubDate>Fri, 11 May 2012 08:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2012/05/11/conference-time/#comments</comments>
			<description>&lt;p&gt;It's the time of year that all conferences are gearing up. Here's a list of conferences I'm speaking or wish I was attending.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://chefconf.opscode.com/"&gt;ChefConf 12&lt;/a&gt; - May 15-17 : the place to be if you're anything with chef these days&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://gotocon.com/cph-2012/"&gt;GOTOCon Copenhagen&lt;/a&gt; - May 21-23 &lt;a href="http://gotocon.com/cph-2012/speaker/Patrick+Debois"&gt;(me speaking)&lt;/a&gt; : fun conference and very well organized although a bit too static to my taste.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://devopsdays.org/events/2012-tokyo/"&gt;Devopsdays Tokyo&lt;/a&gt; - May 26: Tokyo was always on my list, I can't go , bummers. Botchagalupe is winning :)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://summit.atlassian.com/"&gt;Atlassian Summit&lt;/a&gt; - May 30,June 1 &lt;a href="http://summit.atlassian.com/?tab=agenda---training"&gt;(me speaking)&lt;/a&gt; : really proud to be opening the devops track at my current employer. First time my employer has an explicit interest in devops. Go-go atlassian!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://agilemanagement.net/index.php/Blog/kanban_for_devops_ghent_belgium_-_june_18-19_2012/"&gt;Kanban for Devops , Belgium&lt;/a&gt; June 18-19: initially announced that I would be there, and I was very keen on doing so. Work got in the way, so can't make. But if you can , you should! I'm sure &lt;a href="http://twitter.com/dominica"&gt;@dominica&lt;/a&gt; will get your WIP (that is Work in Progress :)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://velocityconf.com/velocity2012"&gt;Velocity&lt;/a&gt; - June 25-27 : the uber conference on anything on web and performance&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://devopsdays.org/events/2012-mountainview/"&gt;Devopsdays MountainView&lt;/a&gt; - June 28-29 : this year at Google, looking forward to so much fun!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://webperfdays.org/"&gt;Webperfdays&lt;/a&gt; - June 28 : interesting unconference happening on performance. Happening at the same time as Devopsdays at Google.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://puppetconf.com/"&gt;Puppetconf&lt;/a&gt; - September 27-28 : and if you're into puppet, or config mgmt in general. A cool place to be , hope I can make it this year&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://velocityconf.com/velocityeu2012"&gt;Velocity Europe&lt;/a&gt; - October 2-4 : since the success last year, Velocity Europe strikes again: Web Performance isn't a US only concern!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://devopsdays.org/events/2012-italy/"&gt;Devopsdays Italy&lt;/a&gt; - October 6-7 : Rome, sweet rome - sun and devops - the perfect mix&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.appsecusa.org/"&gt;AppSec USA 2012&lt;/a&gt; - October 23-24 : not 100% sure on this one, but rumors go on a devops track in a security conference - sounds like fun to me.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Busy times .... but .... Fun times!&lt;/p&gt;
</description>
		

           		

   						<category><![CDATA[devops]]></category>
					
   						<category><![CDATA[devopsdays]]></category>
					
   						<category><![CDATA[gotocon]]></category>
					
   						<category><![CDATA[atlassian]]></category>
					
   						<category><![CDATA[kanban]]></category>
					
   						<category><![CDATA[chefcon]]></category>
					
   						<category><![CDATA[gotocon]]></category>
					
   						<category><![CDATA[webperfdays]]></category>
					
   						<category><![CDATA[velocity]]></category>
					
		        
		   
			<content:encoded><![CDATA[<p>It's the time of year that all conferences are gearing up. Here's a list of conferences I'm speaking or wish I was attending.</p>

<ul>
<li><p><a href="http://chefconf.opscode.com/">ChefConf 12</a> - May 15-17 : the place to be if you're anything with chef these days</p></li>
<li><p><a href="http://gotocon.com/cph-2012/">GOTOCon Copenhagen</a> - May 21-23 <a href="http://gotocon.com/cph-2012/speaker/Patrick+Debois">(me speaking)</a> : fun conference and very well organized although a bit too static to my taste.</p></li>
<li><p><a href="http://devopsdays.org/events/2012-tokyo/">Devopsdays Tokyo</a> - May 26: Tokyo was always on my list, I can't go , bummers. Botchagalupe is winning :)</p></li>
<li><p><a href="http://summit.atlassian.com/">Atlassian Summit</a> - May 30,June 1 <a href="http://summit.atlassian.com/?tab=agenda---training">(me speaking)</a> : really proud to be opening the devops track at my current employer. First time my employer has an explicit interest in devops. Go-go atlassian!</p></li>
<li><p><a href="http://agilemanagement.net/index.php/Blog/kanban_for_devops_ghent_belgium_-_june_18-19_2012/">Kanban for Devops , Belgium</a> June 18-19: initially announced that I would be there, and I was very keen on doing so. Work got in the way, so can't make. But if you can , you should! I'm sure <a href="http://twitter.com/dominica">@dominica</a> will get your WIP (that is Work in Progress :)</p></li>
<li><p><a href="http://velocityconf.com/velocity2012">Velocity</a> - June 25-27 : the uber conference on anything on web and performance</p></li>
<li><p><a href="http://devopsdays.org/events/2012-mountainview/">Devopsdays MountainView</a> - June 28-29 : this year at Google, looking forward to so much fun!</p></li>
<li><p><a href="http://webperfdays.org/">Webperfdays</a> - June 28 : interesting unconference happening on performance. Happening at the same time as Devopsdays at Google.</p></li>
<li><p><a href="http://puppetconf.com/">Puppetconf</a> - September 27-28 : and if you're into puppet, or config mgmt in general. A cool place to be , hope I can make it this year</p></li>
<li><p><a href="http://velocityconf.com/velocityeu2012">Velocity Europe</a> - October 2-4 : since the success last year, Velocity Europe strikes again: Web Performance isn't a US only concern!</p></li>
<li><p><a href="http://devopsdays.org/events/2012-italy/">Devopsdays Italy</a> - October 6-7 : Rome, sweet rome - sun and devops - the perfect mix</p></li>
<li><p><a href="http://www.appsecusa.org/">AppSec USA 2012</a> - October 23-24 : not 100% sure on this one, but rumors go on a devops track in a security conference - sounds like fun to me.</p></li>
</ul>


<p>Busy times .... but .... Fun times!</p>
]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2012/05/11/conference-time/</feedburner:origLink></item>
			<item>
			<title>Monitoring URLs by the thousands in Nagios</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/vb0AiqXDE14/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2012/05/06/monitoring urls by the thousands in Nagios/</guid>
			
			<pubDate>Sun, 06 May 2012 08:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2012/05/06/monitoring urls by the thousands in Nagios/#comments</comments>
			<description>&lt;h3&gt;10K websites x 5 URL's to monitor&lt;/h3&gt;

&lt;p&gt;For our &lt;a href="https://my.atlassian.com/ondemand/signup"&gt;Atlassian Hosted Platform&lt;/a&gt;, we have about 10K websites we need to monitor. Those sites are monitored from a remote location to measure responsetime and availability. Each server would have about 5 sub URLs on average to check, resulting in 50K URL checks.&lt;/p&gt;

&lt;p&gt;Currently we employ Nagios with &lt;a href="https://my.atlassian.com/ondemand/signup"&gt;check_http&lt;/a&gt; and require roughly about 14 Amazon Large Instances.
While the nagios servers are not fully overloaded, we make sure that all checks would complete within a 5 minutes check cycle.&lt;/p&gt;

&lt;p&gt;In a recent spike we investigated if we could do any optimizations to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use less server resources, not only to reduce costs but also avoiding the management of multiple nagios servers which don't dynamically rebalance checks across multiple nagios hosts.&lt;/li&gt;
&lt;li&gt;have all checks complete within a smaller window (say 1 minute), as this would increase our MTTD&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;While looking at this, we wanted the technology to be reusable with our future idea of a fully scalable and distributed monitoring in mind (think &lt;a href="https://github.com/auxesis/flapjack"&gt;Flapjack&lt;/a&gt; or the new kid on the block &lt;a href="http://joemiller.me/2012/01/19/getting-started-with-the-sensu-monitoring-framework/"&gt;Sensu&lt;/a&gt;). But for now, we wanted to focus on the checks only.&lt;/p&gt;

&lt;p&gt;In the first blogpost of the series we look at the integration and options within Nagios. In a second blogpost we will provide proof of concept code for running an external process (ruby based) to execute and report back to nagios.
Even though Nagios isn't the most fun to work with, a lot of solutions that try to replace it, focus on replacing the checks section. But Nagios gives you more the reporting, escalation, dependency management. I'm not saying there aren't solutions out there, but we consider that to be for another phase.&lt;/p&gt;

&lt;h4&gt;Check HTTP&lt;/h4&gt;

&lt;p&gt;The canonical way in Nagios to run a check is to execute &lt;a href="http://nagiosplugins.org/man/check_http"&gt;Check_http&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;F.i. to have it execute a check if confluence is working on https://somehost.atlassian.net/wiki , we would provide the options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;-H (virtual hostname), -I (ipaddress) , -p (port)&lt;/li&gt;
&lt;li&gt;-u (path of url) , -S (ssl) , -f follow (follow redirects)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;-t (timeout)&lt;/p&gt;

&lt;p&gt;  $ /usr/lib64/nagios/plugins/check_http -H somehost.atlassian.net -p 443 -u /wiki -f follow -S -v -t 2
  HTTP OK: HTTP/1.1 200 OK - 546 bytes in 0.734 second response time |time=0.734058s;;;0.000000 size=546B;;;0&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Some observations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For each check configure Nagios will fork twice and exec check_http, avoiding this would improve performance as fork is considered expensive.&lt;/li&gt;
&lt;li&gt;If we were to have many URL's on the same host, we can't leverage connection reuse, making it less efficient&lt;/li&gt;
&lt;li&gt;For status checking, we can configure it to use the -J HEAD if our check doens't rely on the content of the page (saving on transfer time and reduce check time)&lt;/li&gt;
&lt;li&gt;Redirects: not an issue of Nagios, but we currently have quite a few redirects going from the login-page logic, reducing those would again improve check time.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;We can reduce part of the forks by using the &lt;strong&gt;&lt;a href="http://nagios.sourceforge.net/docs/3_0/configmain.html#use_large_installation_tweaks"&gt;use_large_installation_tweaks=1&lt;/a&gt;&lt;/strong&gt; setting. &lt;a href="http://nagios.sourceforge.net/docs/3_0/largeinstalltweaks.html"&gt;The benefits and caveats are explained in the docs&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Check scheduling&lt;/h4&gt;

&lt;p&gt;Nagios itself tries to be smart to schedule the checks. It tries to spread the number of service checks within the check interval you configure. More information can be found in &lt;a href="http://nagios.manubulon.com/traduction/docs14en/checkscheduling.html"&gt;older Nagios documentation&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;Configuration options that influence the scheduling are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;normal_check_interval : how long between re-executing the same check&lt;/li&gt;
&lt;li&gt;retry_check_interval : how fast to retry a check if it failed&lt;/li&gt;
&lt;li&gt;check_period: total time for a complete check cycle&lt;/li&gt;
&lt;li&gt;inter_check_delay_method: method to schedule checks (&lt;/li&gt;
&lt;li&gt;service_interleave_factor: time between checks to the same remote host&lt;/li&gt;
&lt;li&gt;max_concurrent_checks: obvious not ?&lt;/li&gt;
&lt;li&gt;service_reaper_frequency : frequency to check for rogue checks&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Default for the inter_check_delay_method is to use smart, if we want to execute the checks as fast as possible&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;n = Don't use any delay - schedule all service checks to run immediately (i.e. at the same time!)&lt;/li&gt;
&lt;li&gt;d = Use a "dumb" delay of 1 second between service checks&lt;/li&gt;
&lt;li&gt;s = Use a "smart" delay calculation to spread service checks out evenly (default)&lt;/li&gt;
&lt;li&gt;x.xx = Use a user-supplied inter-check delay of x.xx seconds&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Distributing checks&lt;/h4&gt;

&lt;p&gt;When one host can't cut it anymore, we have to scale eventually. Here are some solutions that live completely in the Nagios world:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://labs.consol.de/lang/de/nagios/mod-gearman/"&gt;Mod Gearman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dnx.sourceforge.net/"&gt;DNX - Distributed Nagios Executor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://exchange.nagios.org/directory/Addons/Passive-Checks/OCSP-Sweeper/details"&gt;OCSP Sweeper&lt;/a&gt; - &lt;a href="http://olex.openlogic.com/wazi/2011/how-to-build-a-distributed-monitoring-solution-with-nagios/"&gt;Blogpost&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Our future solution would have a similar approach to dispatching the checks command and gathering the results back over queue, but we'd like it to be less dependent on the Nagios solution and be possible to be integrated with other monitoring solutions (Think Unix Toolchain philosophy)
A great example idea can be seen in the Velocityconf presentation &lt;a href="http://velocityconf.com/velocity2011/public/schedule/detail/17848"&gt;Asynchronous Real-time Monitoring with Mcollective&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Submitting check results back to Nagios&lt;/h4&gt;

&lt;p&gt;So with distribution we just split our problem again in smaller problems. So let's focus again on the single host running checks problem, after all, the more checks we can run on 1 host, the less we have to distribute.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://exchange.nagios.org/directory/Addons/Passive-Checks"&gt;Nagios Passive Checks&lt;/a&gt; easily allow you to uncouple the checks from your main nagios loop and submit the check results later.
&lt;a href="http://exchange.nagios.org/directory/Addons/Passive-Checks/NSCA--2D-Nagios-Service-Check-Acceptor/details"&gt;NSCA&lt;/a&gt;  (Nagios Service Check Acceptor) is the most used solution for this.&lt;/p&gt;

&lt;p&gt;NSCA does have a few limitations:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.techworld.com/monitoring-the-pulse-of-it/2011/01/next-generation-distributed-monitoring-the-opsview-way/index.htm"&gt;Opsview writes&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only the first 511 bytes of plugin out was returned to the master, limiting the usefulness of the information you could display&lt;/li&gt;
&lt;li&gt;Only the 1st line of data was returned, meaning you had to cramp output together&lt;/li&gt;
&lt;li&gt;NSCA communication used fixed size packets which were inefficient&lt;/li&gt;
&lt;li&gt;While results were sent, Nagios would wait for completion, introducing a bottleneck&lt;/li&gt;
&lt;li&gt;If there was a communication problem with the master, results were dropped&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This lead them to using &lt;a href="http://code.google.com/p/nrd/"&gt;NRD (Nagios Result Distributor)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://madebyryan.blogspot.com/2011/12/high-performance-ncsa-alternative-for.html"&gt;Ryan Writes&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;"What no one tells you when you are deploy NCSA is that it send service checks in series while nagios performs service checks in parallel"&lt;/p&gt;

&lt;p&gt;This lead him to writing &lt;a href="http://madebyryan.blogspot.com/2011/12/high-performance-ncsa-alternative-for.html"&gt;A highperformance NSCA&lt;/a&gt; replacement involving feeding the result direct into the livestatus pipe instead of over the NSCA protocol baked into nagios
On a similar note Jelle Smet has created &lt;a href="https://github.com/smetj/nscaweb"&gt;NSCAWEb Easily submit passive host and service checks to Nagios via external commands&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We would leverage the &lt;a href="http://exchange.nagios.org/directory/Addons/Passive-Checks/send_nsca-Ruby-Gem/details"&gt;Send NSCA Ruby Gem&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why is this relevant to our solution? Without employing some of these optimizations, our bottleneck would shift from running the checks to accepting the check results.&lt;/p&gt;

&lt;p&gt;Another solution could be run an NRPE server , and we could probably leverage some ruby logic from &lt;a href="https://github.com/krobertson/metis"&gt;Metis - a ruby NRPE server&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Even after the following optimizations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;using head vs get&lt;/li&gt;
&lt;li&gt;large installation tweaks&lt;/li&gt;
&lt;li&gt;tuning the inter_check_delay_method&lt;/li&gt;
&lt;li&gt;parallel NSCA submissions vs serial submissions&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;we can still optimize with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;avoid the fork process by running all checks from the same process&lt;/li&gt;
&lt;li&gt;reusing the http connection across multiple requests for the same host (potentially even do &lt;a href="http://en.wikipedia.org/wiki/HTTP_pipelining"&gt;http pipelining&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;In the next blogpost we will show the results of proof of concept code involving ruby/eventmachine/jruby and various httpclient libraries.&lt;/p&gt;
</description>
		

           		

   						<category><![CDATA[devops]]></category>
					
   						<category><![CDATA[monitoringsucks]]></category>
					
   						<category><![CDATA[nagios]]></category>
					
		        
		   
			<content:encoded><![CDATA[<h3>10K websites x 5 URL's to monitor</h3>

<p>For our <a href="https://my.atlassian.com/ondemand/signup">Atlassian Hosted Platform</a>, we have about 10K websites we need to monitor. Those sites are monitored from a remote location to measure responsetime and availability. Each server would have about 5 sub URLs on average to check, resulting in 50K URL checks.</p>

<p>Currently we employ Nagios with <a href="https://my.atlassian.com/ondemand/signup">check_http</a> and require roughly about 14 Amazon Large Instances.
While the nagios servers are not fully overloaded, we make sure that all checks would complete within a 5 minutes check cycle.</p>

<p>In a recent spike we investigated if we could do any optimizations to:</p>

<ul>
<li>use less server resources, not only to reduce costs but also avoiding the management of multiple nagios servers which don't dynamically rebalance checks across multiple nagios hosts.</li>
<li>have all checks complete within a smaller window (say 1 minute), as this would increase our MTTD</li>
</ul>


<p>While looking at this, we wanted the technology to be reusable with our future idea of a fully scalable and distributed monitoring in mind (think <a href="https://github.com/auxesis/flapjack">Flapjack</a> or the new kid on the block <a href="http://joemiller.me/2012/01/19/getting-started-with-the-sensu-monitoring-framework/">Sensu</a>). But for now, we wanted to focus on the checks only.</p>

<p>In the first blogpost of the series we look at the integration and options within Nagios. In a second blogpost we will provide proof of concept code for running an external process (ruby based) to execute and report back to nagios.
Even though Nagios isn't the most fun to work with, a lot of solutions that try to replace it, focus on replacing the checks section. But Nagios gives you more the reporting, escalation, dependency management. I'm not saying there aren't solutions out there, but we consider that to be for another phase.</p>

<h4>Check HTTP</h4>

<p>The canonical way in Nagios to run a check is to execute <a href="http://nagiosplugins.org/man/check_http">Check_http</a>.</p>

<p>F.i. to have it execute a check if confluence is working on https://somehost.atlassian.net/wiki , we would provide the options:</p>

<ul>
<li>-H (virtual hostname), -I (ipaddress) , -p (port)</li>
<li>-u (path of url) , -S (ssl) , -f follow (follow redirects)</li>
<li><p>-t (timeout)</p>

<p>  $ /usr/lib64/nagios/plugins/check_http -H somehost.atlassian.net -p 443 -u /wiki -f follow -S -v -t 2
  HTTP OK: HTTP/1.1 200 OK - 546 bytes in 0.734 second response time |time=0.734058s;;;0.000000 size=546B;;;0</p></li>
</ul>


<p>Some observations:</p>

<ol>
<li>For each check configure Nagios will fork twice and exec check_http, avoiding this would improve performance as fork is considered expensive.</li>
<li>If we were to have many URL's on the same host, we can't leverage connection reuse, making it less efficient</li>
<li>For status checking, we can configure it to use the -J HEAD if our check doens't rely on the content of the page (saving on transfer time and reduce check time)</li>
<li>Redirects: not an issue of Nagios, but we currently have quite a few redirects going from the login-page logic, reducing those would again improve check time.</li>
</ol>


<p>We can reduce part of the forks by using the <strong><a href="http://nagios.sourceforge.net/docs/3_0/configmain.html#use_large_installation_tweaks">use_large_installation_tweaks=1</a></strong> setting. <a href="http://nagios.sourceforge.net/docs/3_0/largeinstalltweaks.html">The benefits and caveats are explained in the docs</a></p>

<h4>Check scheduling</h4>

<p>Nagios itself tries to be smart to schedule the checks. It tries to spread the number of service checks within the check interval you configure. More information can be found in <a href="http://nagios.manubulon.com/traduction/docs14en/checkscheduling.html">older Nagios documentation</a> .</p>

<p>Configuration options that influence the scheduling are:</p>

<ul>
<li>normal_check_interval : how long between re-executing the same check</li>
<li>retry_check_interval : how fast to retry a check if it failed</li>
<li>check_period: total time for a complete check cycle</li>
<li>inter_check_delay_method: method to schedule checks (</li>
<li>service_interleave_factor: time between checks to the same remote host</li>
<li>max_concurrent_checks: obvious not ?</li>
<li>service_reaper_frequency : frequency to check for rogue checks</li>
</ul>


<p>Default for the inter_check_delay_method is to use smart, if we want to execute the checks as fast as possible</p>

<ul>
<li>n = Don't use any delay - schedule all service checks to run immediately (i.e. at the same time!)</li>
<li>d = Use a "dumb" delay of 1 second between service checks</li>
<li>s = Use a "smart" delay calculation to spread service checks out evenly (default)</li>
<li>x.xx = Use a user-supplied inter-check delay of x.xx seconds</li>
</ul>


<h4>Distributing checks</h4>

<p>When one host can't cut it anymore, we have to scale eventually. Here are some solutions that live completely in the Nagios world:</p>

<ul>
<li><a href="http://labs.consol.de/lang/de/nagios/mod-gearman/">Mod Gearman</a></li>
<li><a href="http://dnx.sourceforge.net/">DNX - Distributed Nagios Executor</a></li>
<li><a href="http://exchange.nagios.org/directory/Addons/Passive-Checks/OCSP-Sweeper/details">OCSP Sweeper</a> - <a href="http://olex.openlogic.com/wazi/2011/how-to-build-a-distributed-monitoring-solution-with-nagios/">Blogpost</a></li>
</ul>


<p>Our future solution would have a similar approach to dispatching the checks command and gathering the results back over queue, but we'd like it to be less dependent on the Nagios solution and be possible to be integrated with other monitoring solutions (Think Unix Toolchain philosophy)
A great example idea can be seen in the Velocityconf presentation <a href="http://velocityconf.com/velocity2011/public/schedule/detail/17848">Asynchronous Real-time Monitoring with Mcollective</a></p>

<h4>Submitting check results back to Nagios</h4>

<p>So with distribution we just split our problem again in smaller problems. So let's focus again on the single host running checks problem, after all, the more checks we can run on 1 host, the less we have to distribute.</p>

<p><a href="http://exchange.nagios.org/directory/Addons/Passive-Checks">Nagios Passive Checks</a> easily allow you to uncouple the checks from your main nagios loop and submit the check results later.
<a href="http://exchange.nagios.org/directory/Addons/Passive-Checks/NSCA--2D-Nagios-Service-Check-Acceptor/details">NSCA</a>  (Nagios Service Check Acceptor) is the most used solution for this.</p>

<p>NSCA does have a few limitations:</p>

<p><a href="http://blogs.techworld.com/monitoring-the-pulse-of-it/2011/01/next-generation-distributed-monitoring-the-opsview-way/index.htm">Opsview writes</a>:</p>

<ul>
<li>Only the first 511 bytes of plugin out was returned to the master, limiting the usefulness of the information you could display</li>
<li>Only the 1st line of data was returned, meaning you had to cramp output together</li>
<li>NSCA communication used fixed size packets which were inefficient</li>
<li>While results were sent, Nagios would wait for completion, introducing a bottleneck</li>
<li>If there was a communication problem with the master, results were dropped</li>
</ul>


<p>This lead them to using <a href="http://code.google.com/p/nrd/">NRD (Nagios Result Distributor)</a></p>

<p><a href="http://madebyryan.blogspot.com/2011/12/high-performance-ncsa-alternative-for.html">Ryan Writes</a>:</p>

<p>"What no one tells you when you are deploy NCSA is that it send service checks in series while nagios performs service checks in parallel"</p>

<p>This lead him to writing <a href="http://madebyryan.blogspot.com/2011/12/high-performance-ncsa-alternative-for.html">A highperformance NSCA</a> replacement involving feeding the result direct into the livestatus pipe instead of over the NSCA protocol baked into nagios
On a similar note Jelle Smet has created <a href="https://github.com/smetj/nscaweb">NSCAWEb Easily submit passive host and service checks to Nagios via external commands</a></p>

<p>We would leverage the <a href="http://exchange.nagios.org/directory/Addons/Passive-Checks/send_nsca-Ruby-Gem/details">Send NSCA Ruby Gem</a></p>

<p>Why is this relevant to our solution? Without employing some of these optimizations, our bottleneck would shift from running the checks to accepting the check results.</p>

<p>Another solution could be run an NRPE server , and we could probably leverage some ruby logic from <a href="https://github.com/krobertson/metis">Metis - a ruby NRPE server</a></p>

<h3>Conclusion</h3>

<p>Even after the following optimizations:</p>

<ul>
<li>using head vs get</li>
<li>large installation tweaks</li>
<li>tuning the inter_check_delay_method</li>
<li>parallel NSCA submissions vs serial submissions</li>
</ul>


<p>we can still optimize with:</p>

<ul>
<li>avoid the fork process by running all checks from the same process</li>
<li>reusing the http connection across multiple requests for the same host (potentially even do <a href="http://en.wikipedia.org/wiki/HTTP_pipelining">http pipelining</a></li>
</ul>


<p>In the next blogpost we will show the results of proof of concept code involving ruby/eventmachine/jruby and various httpclient libraries.</p>
]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2012/05/06/monitoring urls by the thousands in Nagios/</feedburner:origLink></item>
			<item>
			<title>Devops a Wicked problem</title>
			<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/x3kwId7-npk/</link>
			
			<guid isPermaLink="false">http://www.jedi.be/blog/2012/01/08/devops-a-wicked-problem/</guid>
			
			<pubDate>Sun, 08 Jan 2012 08:35:34 -0000</pubDate>
			<comments>http://www.jedi.be/blog/2012/01/08/devops-a-wicked-problem/#comments</comments>
			<description>&lt;p&gt;One of the strong pillars of devops (if not the strongest) is the collaboration/communication. For the talk &lt;a href="http://www.slideshare.net/jedi4ever/devops-metrics"&gt;about Devops Metrics for Velocity 2011&lt;/a&gt; I researched how to prove collaboration is a good thing: while discussing devops to people it sometimes comes to believe that it makes sense to collaborate more or that all this collaboration is overkill. I think at time I came across Design Thinking and read &lt;a href="http://www.tandfonline.com/doi/pdf/10.1080/15710880701875068"&gt;how it evolved from 1 person doing the design to listening to user requirements to participatory design&lt;/a&gt;. In the book &lt;a href="http://www.amazon.com/Design-Thinking-Understanding-Designers-Think/dp/1847886361/ref=pd_sim_b_6"&gt;Design Thinking - Understanding Designers Think&lt;/a&gt; Nigel Cross writes that design used to be collaborative thing (like guilds trying to push their craft forward).&lt;/p&gt;

&lt;h4&gt;Symmetry of Ignorance&lt;/h4&gt;

&lt;p&gt;One of the concepts introduced was the &lt;em&gt;symmetry of ignorance&lt;/em&gt; &lt;a href="http://l3d.cs.colorado.edu/~gerhard/papers/kbs2000.pdf"&gt;PDF&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Complex design problems require more knowledge than any one single person can possess, and the knowledge relevant to a problem is often distributed and controversial. Rather than being a limiting factor, “symmetry of ignorance” can provide the foundation for social creativity. Bringing different points of view together and trying to create a shared understanding among all stakeholders can lead to new insights, new ideas, and new artifacts. Social creativity can be supported by new media that allow owners of problems to contribute to framing and solving these problems. These new media need to be designed from a meta-design perspective by creating environments in which stakeholders can act as designers and be more than consumers.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Sounds like systems thinking and reminded me of the knowledge divide within the devops problem space. When you spend time with each group/silo individually they would of think themselves superior to the other group: "ha those devs they don't know anything about the systems, ha those ops don't anything about coding". So it seems more about the &lt;em&gt;symmetry of arrogance&lt;/em&gt; . That arrogance symmetry reminded "&lt;a href="http://www.slideshare.net/jedi4ever/bootstrapping-a-devops-mentality-at-skillsmatter-by-patrick-debois"&gt;We judge others by their behavior, we judge ourselves by our intentions&lt;/a&gt;". We might think we know more/can do better, but that often not visible in our actions.&lt;/p&gt;

&lt;p&gt;This kind of got me intrigued and I wanted to explore the subject more for the next &lt;a href="http://www.cutter.com/summit/2012.html"&gt;Cutter Summit 2012&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Wicked Problem&lt;/h4&gt;

&lt;p&gt;Part of the designing thinking and this symmetry of ignorance is &lt;a href="http://thoughtclearing.blogspot.com/2008/09/symmetry-of-ignorance.html"&gt;related to the concept of &lt;em&gt;wicked problems&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rittel and Webber's (1973) formulation of wicked problems specifies ten characteristics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;There is no definitive formulation of a wicked problem (defining wicked problems is itself a wicked problem).&lt;/li&gt;
&lt;li&gt;Wicked problems have no stopping rule.&lt;/li&gt;
&lt;li&gt;Solutions to wicked problems are not true-or-false, but better or worse.&lt;/li&gt;
&lt;li&gt;There is no immediate and no ultimate test of a solution to a wicked problem.&lt;/li&gt;
&lt;li&gt;Every solution to a wicked problem is a "one-shot operation"; because there is no opportunity to learn by trial and error, every attempt counts significantly.&lt;/li&gt;
&lt;li&gt;Wicked problems do not have an enumerable (or an exhaustively describable) set of potential solutions, nor is there a well-described set of permissible operations that may be incorporated into the plan.&lt;/li&gt;
&lt;li&gt;Every wicked problem is essentially unique.&lt;/li&gt;
&lt;li&gt;Every wicked problem can be considered to be a symptom of another problem.&lt;/li&gt;
&lt;li&gt;The existence of a discrepancy representing a wicked problem can be explained in numerous ways. The choice of explanation determines the nature of the problem's resolution.&lt;/li&gt;
&lt;li&gt;The planner has no right to be wrong (planners are liable for the consequences of the actions they generate).&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;I'll let you judge if you think devops (or even monitoring sucks :) is a wicked problem&lt;/p&gt;

&lt;p&gt;More readings to explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.idemployee.id.tue.nl/g.w.m.rauterberg/conferences/CD_doNotOpen/ADC/final_paper/014.pdf"&gt;Evaluating the Semantic Approach through Horst Rittel's Second-Generation System Analysis &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dubberly.com/articles/why-horst-wj-rittel-matters.html"&gt;Why Horst W.J. Rittel Matters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.leanessays.com/2002/01/wicked-problems.html"&gt;Lean Essays - Wicked Problems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/2004/09/development-is-inherently-wicked.html"&gt;Development is Inherently wicked&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.ikmemergent.net/files/IKM_Working_Paper-11-Robin_Mansell-July2010-final-pdf.pdf"&gt;Power and Interest in Developing Knowledge Societies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linkedin.com/answers/business-operations/project-management/OPS_PRJ/640391-21068376"&gt;Please list out 3 most important Tactics for solving Wicked Problems?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ctr-organizational-change.msloc.northwestern.edu/events/exploring-design-thinking/"&gt;Exploring ‘design thinking’ and organizational change: A Conversation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.army.gov.au/lwsc/docs/sp319.pdf"&gt;The Lost Operational Art: Invigorating Campaigning into the Australian Defence Force&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://thecrispianadvantage.com/2011/03/20/complexity-the-%E2%80%9Cnew-normal%E2%80%9D-2-leading-to-the-essence/"&gt;Complexity, the “New Normal” 2: Leading to the Essence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://thecrispianadvantage.com/2011/04/17/complexity-the-new-norm-3-listen-to-your-guts-%E2%80%93-are-they-really-on-the-same-page/"&gt;Complexity the New Norm 3: Listen to your guts – Are they really on the same page?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://thecrispianadvantage.com/2011/05/17/complexity-the-new-norm-3-listen-to-your-guts-%E2%80%93-are-they-really-on-the-same-page-2/"&gt;Complexity the New Norm 4: Improving Sales Performance – Are you ready for the Challenge?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://l3d.cs.colorado.edu/~gerhard/presentations/tutorial-ozchi-lec3-edc.pdf"&gt;Transcending the Individual Human Mind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dodccrp.org/events/14th_iccrts_2009/papers/049.pdf"&gt;Bounding Wicked Problems: The C2 of Military Planning  Topic 3: Information Sharing and Collaboration Processes and Behaviors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblog.tomgraves.org/2009/04/22/spiral-dimensions/"&gt;Dimensions of a Spiral&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Cynefin&lt;/h4&gt;

&lt;p&gt;The whole discission on what is a wicked problem or not reminded me of a talk by Dave Snowden. He helped creating the &lt;a href="http://en.wikipedia.org/wiki/Cynefin"&gt;Cynefin&lt;/a&gt; model.&lt;/p&gt;

&lt;p&gt;The Cynefin framework has five domains.The first four domains are:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Cynefin_framework_Feb_2011.jpeg/280px-Cynefin_framework_Feb_2011.jpeg"&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Simple, in which the relationship between cause and effect is obvious to all, the approach is to Sense - Categorise - Respond and we can apply best practice.&lt;/li&gt;
&lt;li&gt;Complicated, in which the relationship between cause and effect requires analysis or some other form of investigation and/or the application of expert knowledge, the approach is to Sense - Analyze - Respond and we can apply good practice.&lt;/li&gt;
&lt;li&gt;Complex, in which the relationship between cause and effect can only be perceived in retrospect, but not in advance, the approach is to Probe - Sense - Respond and we can sense emergent practice.&lt;/li&gt;
&lt;li&gt;Chaotic, in which there is no relationship between cause and effect at systems level, the approach is to Act - Sense - Respond and we can discover novel practice.&lt;/li&gt;
&lt;li&gt;Disorder&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Note this a sense making framework, not a ordering framework: it's not always that exact to put your problems in each of the spaces, but it gets you thinking about which solutions to apply to which problems. And it fits in nicely with other frameworks as explained in &lt;a href="http://agilitrix.com/2011/04/a-tour-of-agile-adoption-and-transformation-models/"&gt;A Tour of Adoption and Transformation models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So devops in my opinion, falls into the complex problem space.&lt;/p&gt;

&lt;p&gt;A great video explaining it was recorded at the ALE 2011:&lt;/p&gt;

&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/nTZKVlP2un8" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;


&lt;p&gt;He explains many things, but here a few things that resonated with me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why in some problem spaces there is no best practice but only good practice&lt;/li&gt;
&lt;li&gt;we have to create fail-safe environments&lt;/li&gt;
&lt;li&gt;providing a solution to the problems in complex problems can be done by probing&lt;/li&gt;
&lt;li&gt;the human factor makes the difference / we are not machines (automation)&lt;/li&gt;
&lt;li&gt;the solution is often easy once you have solved it but you need to go through the proces of discovery.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;that last point reminded me of the &lt;a href="http://www.youtube.com/watch?v=pqeJFYwnkjE"&gt;Debt Metaphor -  Ward Cunningham&lt;/a&gt;. &lt;a href="http://twitter.com/littleidea"&gt;@littleidea&lt;/a&gt;  explained that Ward was using a different concept for Technical Debt that most people use: he explains technical debt as the difference between the implementation and the ideal implementation on hinsight. Not because of bad implementation, or deliberate shortcuts, but because of new insights gathered during the discovery/problem solving process.&lt;/p&gt;

&lt;iframe width="480" height="360" src="http://www.youtube.com/embed/pqeJFYwnkjE" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;


&lt;p&gt;More research can be found at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.cognitive-edge.com/blogs/dave/Graves%20Feb%202010.pdf"&gt;More on Chaos and Cynefin- Tom Graves / Tetradian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.noop.nl/2008/08/simple-vs-complicated-vs-complex-vs-chaotic.html"&gt;Simple vs Complicated vs Complex vs Chaotic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cognitive-edge.com/ceresources/presentations/ScanAgile%20Oct%2009.pdf"&gt;Scan Agile 2009 - Snowden&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://groupaya.net/blog/2012/01/finding-the-simplicity-embedded-in-complexity/"&gt;Finding the Simplicity Embedded in Complexity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.leanssc.org/files/201004/powerpoint/4.22%202.30pm%20Sivertsen%20CognitiveKanban.pdf"&gt;Cognitive Kanban&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The fact that problems don't always stay/match one of the locations on the diagram is greatly visualized by adding dimensions to the diagram (a thing that got lost in the initial publication)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.cfkurtz.com/Kurtz%202009b%20Wisdom%20of%20Clouds.pdf"&gt;The wisdom of Clouds - Cynthia F.Kurtz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.storycoloredglasses.com/p/confluence-sensemaking-framework.html"&gt;Confluence - Sensemaking Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.storycoloredglasses.com/2010/06/confluence.html"&gt;Confluence explanation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;To tackle complex problems he suggests using three principles of complexity based management:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use fine grained objects: avoid "chunking"&lt;/li&gt;
&lt;li&gt;Distributed Cognition: the wisdom but not the foolishness of crowds&lt;/li&gt;
&lt;li&gt;Disintermediation: connecting decision makers with raw data&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;This could result in the &lt;a href="http://www.cognitive-edge.com/blogs/dave/2011/03/the_resilient_organisation_int.php"&gt;Resilient Organisation&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Resilience engineering&lt;/h4&gt;

&lt;p&gt;Because in complex systems it's hard to predict the exact behavior, Dave Snowden also talks about going &lt;a href="http://www.cognitive-edge.com/blogs/dave/2010/05/from_robustness_to_resiliance_1.php"&gt;From Robustness to Resiliance&lt;/a&gt;. It almost sounded like the difference between MTBF and MTTR like John Allspaw explains in &lt;a href="http://www.slideshare.net/jallspaw/etsy-codeascraft-allspaw1"&gt;Outages Post-Mortems and Human Error 101&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I came across those articles but never put them into the light of the Snowden perspective. More to explore so.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ctlab.org/documents/How%20Complex%20Systems%20Fail.pdf"&gt;Why complex systems fail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kitchensoap.com/2009/11/12/how-complex-systems-fail-a-webops-perspective/"&gt;How Complex systems fail - a webops perspective&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://radar.oreilly.com/2011/05/resilience-engineering-web-operations.html"&gt;How resilience engineering applies to the web world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kitchensoap.com/2011/04/07/resilience-engineering-part-i/"&gt;Resilience Engineering: Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ilabra.org/blog/why-resilience-term-worth-preserving"&gt;Why resilience is a term worth preserving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vinay.howtolivewiki.com/blog/global/beyond-resilience-visionary-adaptation-1374"&gt;Beyond Resilience: Visionary Adaptation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Silos and Resilience&lt;/h4&gt;

&lt;p&gt;The final document I'd like to highlight is about &lt;a href="http://www.resorgs.org.nz/pubs/Silos.pdf"&gt;Reducing the impact of Organisational Silos on Resilience&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Stone quotes five questions suggested by Angela Drummond (a practitioner in the area of silo breaking and organisational change) to help executives identify and overcome silos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“does your organisation structure promote collaboration, or do silos exist?&lt;/li&gt;
&lt;li&gt;“do you have collaboration in your culture and as part of your value system?&lt;/li&gt;
&lt;li&gt;“do you have the IT infrastructure for effective collaboration?&lt;/li&gt;
&lt;li&gt;“do you believe in collaboration?  Do you model that belief?&lt;/li&gt;
&lt;li&gt;“do you have a reward system for collaboration?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Quoting from the article:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Resilience cannot be achieved in isolation of other units and organisations.  In summary, there is a need to recognise:&lt;/p&gt;&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;the characteristics of silo formation, particularly in the creation of new organisational structures or as part of change management processes&lt;/li&gt;
&lt;li&gt;a convergence of interests, taking account of the fact that “we are all in this together”.  Efforts are needed to achieve seamless internal relationships at the intraorganisational level and a commitment to work with others to advance community resilience (perhaps with a judicious contribution from government) at the broader societal level&lt;/li&gt;
&lt;li&gt;the case for collaboration.  Gains are often possible by pooling ideas and resources (the total is greater than the sum of the parts)&lt;/li&gt;
&lt;li&gt;the value of harnessing grass-root capability including through continuous knowledge-building and sharing learnings in a trusted environment&lt;/li&gt;
&lt;li&gt;that cost-effectiveness calculations don’t easily take account of broad organisational or social needs and that the analysis may need supplementation if wide objectives are to be met&lt;/li&gt;
&lt;/ul&gt;


&lt;blockquote&gt;&lt;p&gt;Leadership is the key to bringing these elements together.  Leadership is needed to reduce and mitigate risks before crises occur.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;It was fascinating to read the collaboration and resilience go hand in hand. And breaking the silos is really a must there and requires collaboration. Also the inter-company silos fits in nicely with &lt;a href="http://theagileexecutive.com/2011/10/26/a-new-context-for-agile/"&gt;The Agile Executive - A new Context for Agile&lt;/a&gt; presentation on how we come to rely on external services in a SAAS model and this will be another silo to tackle.&lt;/p&gt;

&lt;h4&gt;Final note&lt;/h4&gt;

&lt;p&gt;This is all research in progress, but it's exciting to see a lot of different concepts fit in nicely. I apologize that this isn't yet a complete polished train of thought, but it might be useful to explore more on the subject.&lt;/p&gt;
</description>
		

           		

   						<category><![CDATA[devops]]></category>
					
   						<category><![CDATA[symmetry of ignorance]]></category>
					
   						<category><![CDATA[resilience]]></category>
					
   						<category><![CDATA[complex]]></category>
					
   						<category><![CDATA[snowden]]></category>
					
		        
		   
			<content:encoded><![CDATA[<p>One of the strong pillars of devops (if not the strongest) is the collaboration/communication. For the talk <a href="http://www.slideshare.net/jedi4ever/devops-metrics">about Devops Metrics for Velocity 2011</a> I researched how to prove collaboration is a good thing: while discussing devops to people it sometimes comes to believe that it makes sense to collaborate more or that all this collaboration is overkill. I think at time I came across Design Thinking and read <a href="http://www.tandfonline.com/doi/pdf/10.1080/15710880701875068">how it evolved from 1 person doing the design to listening to user requirements to participatory design</a>. In the book <a href="http://www.amazon.com/Design-Thinking-Understanding-Designers-Think/dp/1847886361/ref=pd_sim_b_6">Design Thinking - Understanding Designers Think</a> Nigel Cross writes that design used to be collaborative thing (like guilds trying to push their craft forward).</p>

<h4>Symmetry of Ignorance</h4>

<p>One of the concepts introduced was the <em>symmetry of ignorance</em> <a href="http://l3d.cs.colorado.edu/~gerhard/papers/kbs2000.pdf">PDF</a></p>

<blockquote><p>Complex design problems require more knowledge than any one single person can possess, and the knowledge relevant to a problem is often distributed and controversial. Rather than being a limiting factor, “symmetry of ignorance” can provide the foundation for social creativity. Bringing different points of view together and trying to create a shared understanding among all stakeholders can lead to new insights, new ideas, and new artifacts. Social creativity can be supported by new media that allow owners of problems to contribute to framing and solving these problems. These new media need to be designed from a meta-design perspective by creating environments in which stakeholders can act as designers and be more than consumers.</p></blockquote>

<p>Sounds like systems thinking and reminded me of the knowledge divide within the devops problem space. When you spend time with each group/silo individually they would of think themselves superior to the other group: "ha those devs they don't know anything about the systems, ha those ops don't anything about coding". So it seems more about the <em>symmetry of arrogance</em> . That arrogance symmetry reminded "<a href="http://www.slideshare.net/jedi4ever/bootstrapping-a-devops-mentality-at-skillsmatter-by-patrick-debois">We judge others by their behavior, we judge ourselves by our intentions</a>". We might think we know more/can do better, but that often not visible in our actions.</p>

<p>This kind of got me intrigued and I wanted to explore the subject more for the next <a href="http://www.cutter.com/summit/2012.html">Cutter Summit 2012</a>.</p>

<h4>Wicked Problem</h4>

<p>Part of the designing thinking and this symmetry of ignorance is <a href="http://thoughtclearing.blogspot.com/2008/09/symmetry-of-ignorance.html">related to the concept of <em>wicked problems</em></a></p>

<p>Rittel and Webber's (1973) formulation of wicked problems specifies ten characteristics:</p>

<ol>
<li>There is no definitive formulation of a wicked problem (defining wicked problems is itself a wicked problem).</li>
<li>Wicked problems have no stopping rule.</li>
<li>Solutions to wicked problems are not true-or-false, but better or worse.</li>
<li>There is no immediate and no ultimate test of a solution to a wicked problem.</li>
<li>Every solution to a wicked problem is a "one-shot operation"; because there is no opportunity to learn by trial and error, every attempt counts significantly.</li>
<li>Wicked problems do not have an enumerable (or an exhaustively describable) set of potential solutions, nor is there a well-described set of permissible operations that may be incorporated into the plan.</li>
<li>Every wicked problem is essentially unique.</li>
<li>Every wicked problem can be considered to be a symptom of another problem.</li>
<li>The existence of a discrepancy representing a wicked problem can be explained in numerous ways. The choice of explanation determines the nature of the problem's resolution.</li>
<li>The planner has no right to be wrong (planners are liable for the consequences of the actions they generate).</li>
</ol>


<p>I'll let you judge if you think devops (or even monitoring sucks :) is a wicked problem</p>

<p>More readings to explore:</p>

<ul>
<li><a href="http://www.idemployee.id.tue.nl/g.w.m.rauterberg/conferences/CD_doNotOpen/ADC/final_paper/014.pdf">Evaluating the Semantic Approach through Horst Rittel's Second-Generation System Analysis </a></li>
<li><a href="http://www.dubberly.com/articles/why-horst-wj-rittel-matters.html">Why Horst W.J. Rittel Matters</a></li>
<li><a href="http://www.leanessays.com/2002/01/wicked-problems.html">Lean Essays - Wicked Problems</a></li>
<li><a href="http://www.codinghorror.com/blog/2004/09/development-is-inherently-wicked.html">Development is Inherently wicked</a></li>
<li><a href="http://wiki.ikmemergent.net/files/IKM_Working_Paper-11-Robin_Mansell-July2010-final-pdf.pdf">Power and Interest in Developing Knowledge Societies</a></li>
<li><a href="http://www.linkedin.com/answers/business-operations/project-management/OPS_PRJ/640391-21068376">Please list out 3 most important Tactics for solving Wicked Problems?</a></li>
<li><a href="http://ctr-organizational-change.msloc.northwestern.edu/events/exploring-design-thinking/">Exploring ‘design thinking’ and organizational change: A Conversation</a></li>
<li><a href="http://www.army.gov.au/lwsc/docs/sp319.pdf">The Lost Operational Art: Invigorating Campaigning into the Australian Defence Force</a></li>
<li><a href="http://thecrispianadvantage.com/2011/03/20/complexity-the-%E2%80%9Cnew-normal%E2%80%9D-2-leading-to-the-essence/">Complexity, the “New Normal” 2: Leading to the Essence</a></li>
<li><a href="http://thecrispianadvantage.com/2011/04/17/complexity-the-new-norm-3-listen-to-your-guts-%E2%80%93-are-they-really-on-the-same-page/">Complexity the New Norm 3: Listen to your guts – Are they really on the same page?</a></li>
<li><a href="http://thecrispianadvantage.com/2011/05/17/complexity-the-new-norm-3-listen-to-your-guts-%E2%80%93-are-they-really-on-the-same-page-2/">Complexity the New Norm 4: Improving Sales Performance – Are you ready for the Challenge?</a></li>
<li><a href="http://l3d.cs.colorado.edu/~gerhard/presentations/tutorial-ozchi-lec3-edc.pdf">Transcending the Individual Human Mind</a></li>
<li><a href="http://www.dodccrp.org/events/14th_iccrts_2009/papers/049.pdf">Bounding Wicked Problems: The C2 of Military Planning  Topic 3: Information Sharing and Collaboration Processes and Behaviors</a></li>
<li><a href="http://weblog.tomgraves.org/2009/04/22/spiral-dimensions/">Dimensions of a Spiral</a></li>
</ul>


<h4>Cynefin</h4>

<p>The whole discission on what is a wicked problem or not reminded me of a talk by Dave Snowden. He helped creating the <a href="http://en.wikipedia.org/wiki/Cynefin">Cynefin</a> model.</p>

<p>The Cynefin framework has five domains.The first four domains are:</p>

<p><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Cynefin_framework_Feb_2011.jpeg/280px-Cynefin_framework_Feb_2011.jpeg"></p>

<ol>
<li>Simple, in which the relationship between cause and effect is obvious to all, the approach is to Sense - Categorise - Respond and we can apply best practice.</li>
<li>Complicated, in which the relationship between cause and effect requires analysis or some other form of investigation and/or the application of expert knowledge, the approach is to Sense - Analyze - Respond and we can apply good practice.</li>
<li>Complex, in which the relationship between cause and effect can only be perceived in retrospect, but not in advance, the approach is to Probe - Sense - Respond and we can sense emergent practice.</li>
<li>Chaotic, in which there is no relationship between cause and effect at systems level, the approach is to Act - Sense - Respond and we can discover novel practice.</li>
<li>Disorder</li>
</ol>


<p>Note this a sense making framework, not a ordering framework: it's not always that exact to put your problems in each of the spaces, but it gets you thinking about which solutions to apply to which problems. And it fits in nicely with other frameworks as explained in <a href="http://agilitrix.com/2011/04/a-tour-of-agile-adoption-and-transformation-models/">A Tour of Adoption and Transformation models</a></p>

<p>So devops in my opinion, falls into the complex problem space.</p>

<p>A great video explaining it was recorded at the ALE 2011:</p>

<iframe width="560" height="315" src="http://www.youtube.com/embed/nTZKVlP2un8" frameborder="0" allowfullscreen></iframe>


<p>He explains many things, but here a few things that resonated with me:</p>

<ul>
<li>why in some problem spaces there is no best practice but only good practice</li>
<li>we have to create fail-safe environments</li>
<li>providing a solution to the problems in complex problems can be done by probing</li>
<li>the human factor makes the difference / we are not machines (automation)</li>
<li>the solution is often easy once you have solved it but you need to go through the proces of discovery.</li>
</ul>


<p>that last point reminded me of the <a href="http://www.youtube.com/watch?v=pqeJFYwnkjE">Debt Metaphor -  Ward Cunningham</a>. <a href="http://twitter.com/littleidea">@littleidea</a>  explained that Ward was using a different concept for Technical Debt that most people use: he explains technical debt as the difference between the implementation and the ideal implementation on hinsight. Not because of bad implementation, or deliberate shortcuts, but because of new insights gathered during the discovery/problem solving process.</p>

<iframe width="480" height="360" src="http://www.youtube.com/embed/pqeJFYwnkjE" frameborder="0" allowfullscreen></iframe>


<p>More research can be found at:</p>

<ul>
<li><a href="http://www.cognitive-edge.com/blogs/dave/Graves%20Feb%202010.pdf">More on Chaos and Cynefin- Tom Graves / Tetradian</a></li>
<li><a href="http://www.noop.nl/2008/08/simple-vs-complicated-vs-complex-vs-chaotic.html">Simple vs Complicated vs Complex vs Chaotic</a></li>
<li><a href="http://cognitive-edge.com/ceresources/presentations/ScanAgile%20Oct%2009.pdf">Scan Agile 2009 - Snowden</a></li>
<li><a href="http://groupaya.net/blog/2012/01/finding-the-simplicity-embedded-in-complexity/">Finding the Simplicity Embedded in Complexity</a></li>
<li><a href="http://www.leanssc.org/files/201004/powerpoint/4.22%202.30pm%20Sivertsen%20CognitiveKanban.pdf">Cognitive Kanban</a></li>
</ul>


<p>The fact that problems don't always stay/match one of the locations on the diagram is greatly visualized by adding dimensions to the diagram (a thing that got lost in the initial publication)</p>

<ul>
<li><a href="http://www.cfkurtz.com/Kurtz%202009b%20Wisdom%20of%20Clouds.pdf">The wisdom of Clouds - Cynthia F.Kurtz</a></li>
<li><a href="http://www.storycoloredglasses.com/p/confluence-sensemaking-framework.html">Confluence - Sensemaking Framework</a></li>
<li><a href="http://www.storycoloredglasses.com/2010/06/confluence.html">Confluence explanation</a></li>
</ul>


<p>To tackle complex problems he suggests using three principles of complexity based management:</p>

<ol>
<li>Use fine grained objects: avoid "chunking"</li>
<li>Distributed Cognition: the wisdom but not the foolishness of crowds</li>
<li>Disintermediation: connecting decision makers with raw data</li>
</ol>


<p>This could result in the <a href="http://www.cognitive-edge.com/blogs/dave/2011/03/the_resilient_organisation_int.php">Resilient Organisation</a></p>

<h4>Resilience engineering</h4>

<p>Because in complex systems it's hard to predict the exact behavior, Dave Snowden also talks about going <a href="http://www.cognitive-edge.com/blogs/dave/2010/05/from_robustness_to_resiliance_1.php">From Robustness to Resiliance</a>. It almost sounded like the difference between MTBF and MTTR like John Allspaw explains in <a href="http://www.slideshare.net/jallspaw/etsy-codeascraft-allspaw1">Outages Post-Mortems and Human Error 101</a>.</p>

<p>I came across those articles but never put them into the light of the Snowden perspective. More to explore so.</p>

<ul>
<li><a href="http://www.ctlab.org/documents/How%20Complex%20Systems%20Fail.pdf">Why complex systems fail</a></li>
<li><a href="http://www.kitchensoap.com/2009/11/12/how-complex-systems-fail-a-webops-perspective/">How Complex systems fail - a webops perspective</a></li>
<li><a href="http://radar.oreilly.com/2011/05/resilience-engineering-web-operations.html">How resilience engineering applies to the web world</a></li>
<li><a href="http://www.kitchensoap.com/2011/04/07/resilience-engineering-part-i/">Resilience Engineering: Part 1</a></li>
<li><a href="http://ilabra.org/blog/why-resilience-term-worth-preserving">Why resilience is a term worth preserving</a></li>
<li><a href="http://vinay.howtolivewiki.com/blog/global/beyond-resilience-visionary-adaptation-1374">Beyond Resilience: Visionary Adaptation</a></li>
</ul>


<h4>Silos and Resilience</h4>

<p>The final document I'd like to highlight is about <a href="http://www.resorgs.org.nz/pubs/Silos.pdf">Reducing the impact of Organisational Silos on Resilience</a>.</p>

<p>Stone quotes five questions suggested by Angela Drummond (a practitioner in the area of silo breaking and organisational change) to help executives identify and overcome silos.</p>

<ul>
<li>“does your organisation structure promote collaboration, or do silos exist?</li>
<li>“do you have collaboration in your culture and as part of your value system?</li>
<li>“do you have the IT infrastructure for effective collaboration?</li>
<li>“do you believe in collaboration?  Do you model that belief?</li>
<li>“do you have a reward system for collaboration?</li>
</ul>


<p>Quoting from the article:</p>

<blockquote><p>Resilience cannot be achieved in isolation of other units and organisations.  In summary, there is a need to recognise:</p></blockquote>

<ul>
<li>the characteristics of silo formation, particularly in the creation of new organisational structures or as part of change management processes</li>
<li>a convergence of interests, taking account of the fact that “we are all in this together”.  Efforts are needed to achieve seamless internal relationships at the intraorganisational level and a commitment to work with others to advance community resilience (perhaps with a judicious contribution from government) at the broader societal level</li>
<li>the case for collaboration.  Gains are often possible by pooling ideas and resources (the total is greater than the sum of the parts)</li>
<li>the value of harnessing grass-root capability including through continuous knowledge-building and sharing learnings in a trusted environment</li>
<li>that cost-effectiveness calculations don’t easily take account of broad organisational or social needs and that the analysis may need supplementation if wide objectives are to be met</li>
</ul>


<blockquote><p>Leadership is the key to bringing these elements together.  Leadership is needed to reduce and mitigate risks before crises occur.</p></blockquote>

<p>It was fascinating to read the collaboration and resilience go hand in hand. And breaking the silos is really a must there and requires collaboration. Also the inter-company silos fits in nicely with <a href="http://theagileexecutive.com/2011/10/26/a-new-context-for-agile/">The Agile Executive - A new Context for Agile</a> presentation on how we come to rely on external services in a SAAS model and this will be another silo to tackle.</p>

<h4>Final note</h4>

<p>This is all research in progress, but it's exciting to see a lot of different concepts fit in nicely. I apologize that this isn't yet a complete polished train of thought, but it might be useful to explore more on the subject.</p>
]]></content:encoded>
		<feedburner:origLink>http://www.jedi.be/blog/2012/01/08/devops-a-wicked-problem/</feedburner:origLink></item>
	
	</channel>
</rss>
