<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>A Big Bang</title>
	<atom:link href="http://abigbang.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://abigbang.wordpress.com</link>
	<description>ICT Strategy At Warwickshire County Council</description>
	<lastBuildDate>Thu, 23 May 2013 09:41:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='abigbang.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>A Big Bang</title>
		<link>http://abigbang.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://abigbang.wordpress.com/osd.xml" title="A Big Bang" />
	<atom:link rel='hub' href='http://abigbang.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Send it hence</title>
		<link>http://abigbang.wordpress.com/2013/05/23/send-it-hence/</link>
		<comments>http://abigbang.wordpress.com/2013/05/23/send-it-hence/#comments</comments>
		<pubDate>Thu, 23 May 2013 09:41:37 +0000</pubDate>
		<dc:creator>Rob Nichols</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=951</guid>
		<description><![CDATA[Application development: an email strategy Summary Configure applications to send all development emails to developer@localhost via SMTP. Background Many applications ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2013/05/23/send-it-hence/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=951&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><strong>Application development: an email strategy</strong></p>
<p><strong>Summary</strong><br />
Configure applications to send all development emails to <strong>developer@localhost</strong> via SMTP.</p>
<p><strong>Background</strong></p>
<p>Many applications require the facility to send out emails, and there are many ways of achieving this. However, when a team of developers are involved in creating and maintaining those applications, it is worth defining a strategy that all can use to safely test the email system within the development environment.</p>
<p><strong>Use standard protocols</strong></p>
<p>It is fairly easy to set up an SMTP server on any OS, and so to set up one in any development environment. Therefore, it is easy to set up a development system that will use the same protocols as those used in the production environment. This means that as far as the application is concerned, all that changes between development and production is the address of the SMTP server.</p>
<p><strong>Keep development emails local</strong></p>
<p>Here are three good reasons to keep the emails local:</p>
<ol>
<li>Remove dependence on network infrastructure when testing emails, thereby ensuring that the application&#8217;s email mechanisms are being tested rather than the efficiency of the network</li>
<li>Reduce the likelihood that test emails will get out of the development environment.</li>
<li>Give control to the developer as to how the emails are handled.</li>
</ol>
<p>.<br />
<strong>Use a simple generic mailbox name: developer</strong></p>
<p>If the application framework provides a mechanism to forward all development emails to a single email mailbox, use a generic mailbox name. If you do not use a generic mailbox name, each developer working on the application code will need to change that code to work with their own mailbox. &#8216;developer&#8217; is an obvious descriptive generic mailbox name.</p>
<p>The developer can choose how to set up their local mail server, and can either create a developer mailbox, or use aliasing to allow another mailbox to retrieve developer emails.</p>
<p><strong>Configure the server to send all emails to a single mailbox</strong></p>
<p>If the application framework does not provide a mechanism to forward all mail to a single mailbox, the local server can be configured to forward all incoming mail to a single mailbox.</p>
<p><strong>Developers control how the emails are handled via the configuration of their local mail server</strong></p>
<p>By using a local SMTP server, each developer can choose to handle the emails in the way that suits them. For example, they can choose to forward the emails to their usual provider, or they can configure an email client to access the local server. The key point being that the configuration they use modifies the local SMTP server, and not the application code.</p>
<p><strong>A Rails example</strong></p>
<p>In <a title="Simple local only mail" href="http://nicholshayes.co.uk/blog/?p=316" target="_blank">this blog post</a>, I describe how I set up my own system to receive developer@localhost emails. Below are the configuration changes, that I used to get a rails app to work with this set up. This code can be used as a template for any rails 3 app:</p>
<p>Added this to /config/environments/development.rb:</p>
<p><code><br />
config.action_mailer.smtp_settings = {<br />
:address =&gt; "localhost",<br />
:port =&gt; 25,<br />
:domain =&gt; 'localhost',<br />
:authentication =&gt; 'none',<br />
 <img src='http://s1.wp.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> penssl_verify_mode =&gt; 'none'<br />
}<br />
</code></p>
<p>And added this to the end of that file</p>
<p><code><br />
class OverrideMailReciptient<br />
def self.delivering_email(mail)<br />
mail.to = "developer@localhost"<br />
end<br />
end<br />
ActionMailer::Base.register_interceptor(OverrideMailReciptient)<br />
</code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/951/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/951/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=951&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2013/05/23/send-it-hence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7411b4e440685d2780fcddb7a1e756a9?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">robwark</media:title>
		</media:content>
	</item>
		<item>
		<title>Read me then sing me</title>
		<link>http://abigbang.wordpress.com/2013/02/20/read-me-then-sing-me/</link>
		<comments>http://abigbang.wordpress.com/2013/02/20/read-me-then-sing-me/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 11:04:45 +0000</pubDate>
		<dc:creator>Rob Nichols</dc:creator>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=944</guid>
		<description><![CDATA[Sinatra is a lovely light weight alternative to rails, and today I have used it to create my simplest web ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2013/02/20/read-me-then-sing-me/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=944&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a title="Sinatra" href="http://www.sinatrarb.com/" target="_blank">Sinatra</a> is a lovely light weight alternative to rails, and today I have used it to create my simplest web app to date.</p>
<p><strong>The problem</strong><br />
I have never been quite sure what my README.rdoc file will look like until I&#8217;ve posted it on github. Using rdoc markup ensures that the README is rendered nicely in github, but getting anchors and indentation to play nicely can be a bit of a fag.</p>
<p>You can generate an html version of the README.rdoc by entering this at the app root:</p>
<p><code>rdoc README.rdoc</code></p>
<p>But if you look at all the gubbins that is created along with the html file, it is evident that this is over the top. If nothing else, it creates a load of files you&#8217;ll need to git ignore, or delete after you&#8217;ve used them.</p>
<p><strong>The solution</strong><br />
Fortunately, <a href="http://docs.seattlerb.org/rdoc/RDoc/Markup.html" target="_blank">the rdocs documentation</a> offered a simpler solution. RDoc::Markup::ToHtml will convert rdoc markup to HTML. That gave me an HTML output, but how do I display it?</p>
<p>Sinatra to the rescue. I&#8217;ve posted <a title="display_readme as a gist" href="https://gist.github.com/reggieb/4739976" target="_blank">my code here</a>. I think the code speaks for itself.</p>
<p>To use it, just copy display_readme.rb to your app root, and</p>
<p><code>ruby display_readme.rb</code></p>
<p>Then point your browser at <a href="http://localhost:4567" rel="nofollow">http://localhost:4567</a> and your README.rdoc will be displayed in HTML.</p>
<p>It really is that easy, and that really is a web app in 10 lines of code!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/944/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=944&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2013/02/20/read-me-then-sing-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7411b4e440685d2780fcddb7a1e756a9?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">robwark</media:title>
		</media:content>
	</item>
		<item>
		<title>Fool&#8217;s gold</title>
		<link>http://abigbang.wordpress.com/2012/12/18/fools-gold/</link>
		<comments>http://abigbang.wordpress.com/2012/12/18/fools-gold/#comments</comments>
		<pubDate>Tue, 18 Dec 2012 15:45:34 +0000</pubDate>
		<dc:creator>Rob Nichols</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Developers]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=936</guid>
		<description><![CDATA[I hate JavaScript, but I love what you can do with it. Taming it is a necessary evil, if you ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2012/12/18/fools-gold/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=936&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I hate JavaScript, but I love what you can do with it. Taming it is a necessary evil, if you want to provide web users with the best interface available. So being able to reliably test JavaScript code is a real boon.</p>
<p>I have started to use <a title="Jasmine Introduction" href="http://pivotal.github.com/jasmine/" target="_blank">Jasmine</a> to provide a JavaScript test environment, and I have to admit that I like it a lot.</p>
<p>I added jasmine to my rails app by adding this to my Gemfile:</p>
<p><code>gem 'jasmine', :group =&gt; [:development, :test]</code></p>
<p>That adds Pivotal&#8217;s ruby plugin to the app. Setting it up is described <a title="Set up Jasmine for Ruby" href="https://github.com/pivotal/jasmine/wiki/A-ruby-project-%28with-or-without-rails%29" target="_blank">here</a>.</p>
<p>With that in place, I could start adding tests to my app via /spec/javascripts. Note that the test file name needs to end &#8216;_spec.js&#8217;.</p>
<p>The tests themselves are JavaScript files. The syntax is quite like rspec (which is a not a plus point in my book as I am not a fan of rspec, but I can live with it):</p>
<p><code><br />
describe("A suite", function() {<br />
it("contains spec with an expectation", function() {<br />
expect(true).toBe(true);<br />
});<br />
});<br />
</code></p>
<p>Note that .toBe is acting on expect, and not the item being tested, so none of the rspec monkey patching issues.</p>
<p>To run the tests, the jasmine gem adds a rake task:</p>
<p><code>rake jasmine</code></p>
<p>Running that starts a server on port 8888 (I get a warning &#8216;<em>WARN TCPServer Error: Address already in use &#8211; bind(2)</em>&#8216; but everything works as it should. The warning appears whichever port I use for the server. I think the server is seeing itself and erroneously issuing the warning.).</p>
<p>Pointing a browser at localhost:8888 then displays the test output.</p>
<p>I found using fixtures was useful. Jasmine fixtures are html pages that you can create with the elements you want your JavaScript to act upon. Which means you can test functionality in isolation and be more sure of what is being tested. To add fixtures, jquery support needs to be added to jasmine. I used a technique described in <a title="Rails cast: Testing JavaScript with Jasmine" href="http://railscasts.com/episodes/261-testing-javascript-with-jasmine" target="_blank">a RailsCast</a>, to install it. I&#8217;d recommend watching the RailsCast even if you don&#8217;t want to use fixtures, as it is a nice demonstration of using Jasmine with Rails.</p>
<p>You can see my first Jasmine test <a href="https://github.com/reggieb/SelfAssessment/blob/913bd72974a7b1b6e1fda247bc4183b319755a05/spec/javascripts/calculator_spec.js" target="_blank">here</a>. Now I have a decent test environment, I am a little more confident that the JavaScript in my app is behaving the way I intend it to.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/936/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/936/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=936&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2012/12/18/fools-gold/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7411b4e440685d2780fcddb7a1e756a9?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">robwark</media:title>
		</media:content>
	</item>
		<item>
		<title>Access to the dynamite store</title>
		<link>http://abigbang.wordpress.com/2012/12/11/access-to-the-dynamite-store/</link>
		<comments>http://abigbang.wordpress.com/2012/12/11/access-to-the-dynamite-store/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 14:30:01 +0000</pubDate>
		<dc:creator>Rob Nichols</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Developers]]></category>
		<category><![CDATA[rails 4]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=931</guid>
		<description><![CDATA[Rails 4 is coming over the horizon, and I think one of the most welcome changes will be the inclusion ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2012/12/11/access-to-the-dynamite-store/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=931&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Rails 4 is coming over the horizon, and I think one of the most welcome changes will be the inclusion of <a title="strong_parameters on github" href="https://github.com/rails/strong_parameters" target="_blank">strong_parameters</a> as standard.</p>
<p>One major web app security issue to be aware of occurs because most object creation and update http calls incorporate the passing to the server of a batch of changes. In rails these are bundled up into the params hash. To make processing the data efficient, the batch of data is handled in one step, for example via <a href="http://apidock.com/rails/ActiveRecord/Persistence/update_attributes" target="_blank">update_attributes</a>. The danger is that someone will add unwanted attributes to the batch.</p>
<p>Consider someone sending {admin: true} within the batch of data used to create a new user.</p>
<p>To deal with this, <a href="http://apidock.com/rails/ActiveModel/MassAssignmentSecurity/ClassMethods/attr_accessible" target="_blank">attr_accessible</a> was introduced. This adds a white list of parameters that can be used within batch update methods such as update_attributes.</p>
<p>The problem with attr_accessible is that as it is applied to the model, the white list acts everywhere the model is used; including places where the security is not needed. For example when your want to modify objects at the command console (rails c).</p>
<p><a href="https://github.com/rails/strong_parameters" target="_blank">strong_parameters</a> moves the control from the model to the controller. So the white list is applied where it needs to be, leaving behind the scenes operations to use batch commands such as update_attributes, as they are needed.</p>
<p>I&#8217;d recommend having a look at the strong_parameters README to see how it works:</p>
<p><a href="https://github.com/rails/strong_parameters" target="_blank">https://github.com/rails/strong_parameters</a></p>
<p>One thing to note is that the two approaches to white listing, do not sit nicely side by side. It is a case of using one approach or the other. In rails 4, you will be able to switch off strong_parameters. This means that you will not have to refactor existing apps to remove attr_accessible when upgrading to rails 4.</p>
<p>However, I think the case for using strong_parameters over attr_accessible is compelling, and therefore would recommend that new apps use this approach.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/931/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/931/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=931&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2012/12/11/access-to-the-dynamite-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7411b4e440685d2780fcddb7a1e756a9?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">robwark</media:title>
		</media:content>
	</item>
		<item>
		<title>Lazy rock tappers</title>
		<link>http://abigbang.wordpress.com/2012/11/29/lazy-rock-tappers/</link>
		<comments>http://abigbang.wordpress.com/2012/11/29/lazy-rock-tappers/#comments</comments>
		<pubDate>Thu, 29 Nov 2012 16:39:02 +0000</pubDate>
		<dc:creator>Rob Nichols</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=927</guid>
		<description><![CDATA[Do you get bored entering 1.9.2@project every time you enter a different project folder? Then learn to embrace your .rvmrc ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2012/11/29/lazy-rock-tappers/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=927&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Do you get bored entering 1.9.2@project every time you enter a different project folder? Then learn to embrace your <a title="rvmrc information on rvm site" href="https://rvm.io/workflow/rvmrc/">.rvmrc</a> file.</p>
<p>The simplest way to generate this file is to do so when you create the project gemset:</p>
<p><code><br />
cd ~/projects/projecta/<br />
rvm --rvmrc --create 1.9.3@projecta<br />
</code></p>
<p>That puts a .rvmrc file in the root of your project. cd out of the project fold and then back in and you will be prompted to trust the new .rvmrc file. Select yes and from this point on, every time you enter the project fold, rvm will automatically load the relevant gem set.</p>
<p>Personally I&#8217;d recommend you add .rvmrc to your .gitignore file, as the .rvmrc files includes a build specific ruby version number which can cause problem within groups of developers. Better to manage your own file in my opinion.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/927/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/927/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=927&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2012/11/29/lazy-rock-tappers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7411b4e440685d2780fcddb7a1e756a9?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">robwark</media:title>
		</media:content>
	</item>
		<item>
		<title>The Geologist</title>
		<link>http://abigbang.wordpress.com/2012/11/28/the-geologist/</link>
		<comments>http://abigbang.wordpress.com/2012/11/28/the-geologist/#comments</comments>
		<pubDate>Wed, 28 Nov 2012 15:12:45 +0000</pubDate>
		<dc:creator>Rob Nichols</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Case Study]]></category>
		<category><![CDATA[Developers]]></category>
		<category><![CDATA[Ruby Gems]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=897</guid>
		<description><![CDATA[I spent much of my time at university tapping on rocks with a small hammer. A geologist I, with the ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2012/11/28/the-geologist/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=897&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I spent much of my time at university tapping on rocks with a small hammer. A geologist I, with the beard to prove it. Yet now the nearest I get to geology is working with Ruby gems.</p>
<h2>ArrayLogic</h2>
<p>With my current project, I needed a tool to compare sets of arrays to user defined rules. In other words, a tool that would take a text rule, compare it to an array of objects, and return true where there were matches. The result was <a title="array_logic git repository" href="https://github.com/reggieb/array_logic" target="_blank">array_logic</a>.</p>
<p>My first step was to work out how I wanted my rules to work. For this, I took inspiration from <a href="https://github.com/justinfrench/formtastic" target="_blank">Justin French&#8217;s story of how he created formtastic</a>. That is, I sat down and wrote out a set of rules and how I wanted them to work:</p>
<p><code><br />
RuleSet logic<br />
a1 = Answer.find(1)<br />
a2 = Answer.find(2)<br />
.....<br />
an = Answer.find(n)<br />
rule_set(1) = '(a1 and a2) or (a3 and a4)'<br />
rule_set(2) = 'a1 and not a2'<br />
rule_set(3) = '2 in a1 a2 a3'<br />
rule_set(4) = '(2 in a1 a2 a3) or (1 in a4 a5)'<br />
</code></p>
<p>Once I&#8217;d done this, I realised that the functionality could be achieved by working with object ids only. So my objects didn&#8217;t need to be ActiveRecord objects or any other complex object. They just needed to have an <em>id</em> method that returned an integer. To manipulate such objects, I could use bare ruby which would allow me to keep my code very simple and self-contained.</p>
<p>I also realised that it was likely that I would want to use this functionality elsewhere. As it would be easy to make a solution as a standalone ruby app, it would be very easy to make it into a gem.</p>
<h2>The Thing</h2>
<p>One of the first things I did was create the <a href="https://github.com/reggieb/array_logic/blob/master/lib/array_logic/thing.rb" target="_blank">Thing</a> object. This is just a class whose instances have an id method. I added to this a class method <em>make</em> that made it easy to generate sequences of things for testing. I now had an object I could play with to get the functionality I wanted.</p>
<p>Next I needed a set of tests that described how the new tool needed to behave. However, before creating these I needed to create an ruby app framework.</p>
<h2>Ruby framework</h2>
<p>The framework for a ruby app can be a lot simpler than that required for rails. All I needed was a <em>lib</em> folder to hold my code, a <em>test</em> folder for my tests and a few files in the root. They were:</p>
<ul>
<li><a href="https://github.com/reggieb/array_logic/blob/master/MIT-LICENSE" target="_blank">licence file</a>: Not required, but a good idea to have one if you want to allow others to use your code.</li>
<li><a href="https://github.com/reggieb/array_logic/blob/master/README.rdoc" target="_blank">README</a>: To start with I put my rules text here. I made it a .rdoc file, as this allowed me to use rdoc markdown formatting to make the text a little prettier.</li>
<li><a href="https://github.com/reggieb/array_logic/blob/master/Rakefile" target="_blank">A rake file</a>: This allowed me to run a couple of useful rake tasks. Specifically <strong>rake test</strong></li>
</ul>
<h2>Namespace</h2>
<p>As I wanted to package up my code in a gem that could be used in many different projects, I needed to think about my object naming carefully. I did not want the array_logic classes interfering with objects within the parent applications (or vice versa). The easiest way to avoid this is to use a namespace.</p>
<p>There are two steps to using a namespace in ruby. First to create a module that acts as the name space container. Once this is created, any new class needs to be defined within this module. Secondly ruby expects named spaced classes to be stored within a folder with the underscore version of the namespace name. So I created the module <a href="https://github.com/reggieb/array_logic/blob/master/lib/array_logic.rb" target="_blank"><em>ArrayLogic</em></a> and put the files containing classes within this name space, in a folder called <a href="https://github.com/reggieb/array_logic/tree/master/lib/array_logic" target="_blank">&#8216;array_logic&#8217;</a></p>
<p>To put each class definition within the new namespace, I used this pattern:<br />
<code><br />
module ArrayLogic<br />
class ClassName<br />
end<br />
end<br />
</code><br />
I could also have used this style of name spacing:<br />
<code><br />
class ArrayLogic::ClassName<br />
end<br />
</code></p>
<p>I also added to my <a href="https://github.com/reggieb/array_logic/blob/master/lib/array_logic.rb" target="_blank">ArrayLogic declaration file</a>, require_relative declarations to the classes within the name space. This meant that simply requiring &#8216;array_logic&#8217; from outside the namespace, would automatically provide the required classes within the namespace.</p>
<p>Notice that I also name spaced my test files. So they went into /test/array_logic and were created within the module ArrayLogic. This meant that I could refer to the class Rule rather than having to use ArrayLogic::Rule within each test.</p>
<h2>Creation</h2>
<p>With that in place, I could start building my application. I started by creating a test for a very simple rule: &#8216;t1 and t2&#8242;, which translated as, &#8220;the array must contain an object with an id of 1, and an object with id of 2&#8243;. I then built my first version of ArrayLogic::Rule, that would pass this test.</p>
<p>It was then a case of progressively increasing the complexity of test and/or functionality described by the tests and updating my Rule class to suit. In this way I was able to start simple, and gradually develop a solution that did what was needed.</p>
<h2>Gem creation</h2>
<p>Once I had a version of array_logic that was ready to publish, it was then time to create a gem from it. To do this there were four steps.</p>
<ol>
<li>Set up a RubyGems account: You can set up a RubyGems account <a title="RubyGems sign up page" href="https://rubygems.org/users/new" target="_blank">here</a>.</li>
<li>Create a gemspec file</li>
<li>Build the gem</li>
<li>Push the gem to RubyGems</li>
</ol>
<p>Steps 2 to 4 are well described <a title="Make your own gem" href="http://guides.rubygems.org/make-your-own-gem/" target="_blank">here</a>, so I won&#8217;t repeat that. Have a look at <a href="https://github.com/reggieb/array_logic/blob/master/array_logic.gemspec" target="_blank">array_logic.gemspec</a> to see the options I used.</p>
<p>Notice that I have <a href="https://github.com/reggieb/array_logic/blob/master/lib/array_logic/version.rb">defined version within the ArrayLogic name space</a>. That makes it easier to manage changing version numbers. You cannot push a new revision of a gem into the same version number. So as your gem develops you need to increment the version number.</p>
<p>Also notice that I have set the home as the github location where the code is stored. That creates a nice link between the gem and the code in the repository.</p>
<h2>Using array_logic</h2>
<p>The resultant gem is held <a href="https://rubygems.org/gems/array_logic" target="_blank">here</a>.</p>
<p>To use the new gem, I added this to my rails app&#8217;s gemfile:<br />
<code>gem 'array_logic' # Used in rule_sets</code><br />
Note that I added a comment to the gem declaration. I believe this is good practice (see my blog for <a title="Comments in Gemfile" href="http://nicholshayes.co.uk/blog/?p=281" target="_blank">an explanation</a>).</p>
<p>I was then able to use array_logic in my <a href="https://github.com/reggieb/SelfAssessment/blob/master/app/models/rule_set.rb" target="_blank">RuleSet model</a>.</p>
<h2>Finally</h2>
<p>Creating gems makes it much easier to reuse your code. I find it also helps me focus on how to abstract my code into modular blocks, and as a result I believe I am becoming a better programmer. As you can see above, creating a gem is very straightforward and something I think every ruby developer should be aiming to do.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/897/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/897/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=897&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2012/11/28/the-geologist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7411b4e440685d2780fcddb7a1e756a9?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">robwark</media:title>
		</media:content>
	</item>
		<item>
		<title>Care in the Development Community</title>
		<link>http://abigbang.wordpress.com/2012/11/22/care-in-the-development-community/</link>
		<comments>http://abigbang.wordpress.com/2012/11/22/care-in-the-development-community/#comments</comments>
		<pubDate>Thu, 22 Nov 2012 15:31:00 +0000</pubDate>
		<dc:creator>swri2</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Developers]]></category>
		<category><![CDATA[object oriented programming]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[strategy implementation]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=575</guid>
		<description><![CDATA[With the core group now located and working closely together in Northgate Street, we’re keen to start getting others involved ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2012/11/22/care-in-the-development-community/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=575&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>With the core group now located and working closely together in Northgate Street, we’re keen to start getting others involved in the strategy implementation. Over the coming months we are looking to expand our usage of Ruby on Rails beyond the core group, and a training plan is being drawn up to enable our developers to become comfortable developing in Rails and contribute to the work ahead.</p>
<p>Formal training has already begun, as ten of our developers recently attended a five day Ruby on Rails course. Although there were no course prerequisites, those who had already started getting their hands dirty with Rails were a lot more comfortable with the course contents than those who hadn’t. Developing in Rails is a bit of a culture shock, especially for those coming from the Microsoft world. Lesson learned for next time – a bit of grounding in key areas before the course would certainly help!</p>
<p>Five days is never going to be enough to cover everything, and so it proved as much of the course focused on Ruby and Object-oriented programming. Knowledge of Ruby (and indeed OOP) is a key requirement for Rails development, but having had only a brief look at what Rails can offer, it is clear there is still a lot to learn.</p>
<p>Discussions that followed the course indicated there are areas we need to work on to ensure our developers can adapt to Rails development. Some were using a Linux environment for the first time and would have benefited from an overview before the course, especially as a lot of Rails work is done using the command line. Due to time constraints we were unable to cover many aspects of Rails in depth – unit testing, data modelling and database management were all mentioned as areas we could do with more understanding in, amongst others. There was a lot of useful information on the course but it sometimes lacked context, and wasn’t always clear when or why we would want to do what was being demonstrated to us.</p>
<p>The aim then is to build upon this knowledge, provide context and assist our developers in building tiered web applications from the ground up.</p>
<p>We will shortly be launching our development community area on Google, which we hope will prove an important resource for our developers and will assist those developing Rails applications, especially those who are new to Rails. We are producing documentation as we go along covering all aspects of application development from the ground up, so developers will have enough information to get started in building their own applications. As our knowledge grows we will continue to update our documentation for the community, while making sure we monitor our code to ensure we are following best practice. It is especially important we document proper usage of ActiveResource (our gem for communicating between multiple Rails applications), as there is a lack of documentation available for writing tiered applications in Rails and this is fundamental to building applications that will adhere to our architecture.</p>
<p>Over time, as the API is developed and our developers become comfortable working in this environment, we hope that future application development will be accelerated as web services will be available and code reuse will be encouraged, with common code available to adapt and reuse as required. We also expect that individuals will naturally gravitate towards specific areas of application development, so multiple developers can work on one application and utilise their skills in the right areas. It might take a bit of time to embrace this new way of working, but we once the initial hard work has been put in we will start to see the benefits of this approach for both our customers and our developers.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/575/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=575&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2012/11/22/care-in-the-development-community/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/55c9d7242bd8ce00d284d960f6b0a167?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">swri2</media:title>
		</media:content>
	</item>
		<item>
		<title>Lifetime Guarantee</title>
		<link>http://abigbang.wordpress.com/2012/11/19/lifetime-guarantee/</link>
		<comments>http://abigbang.wordpress.com/2012/11/19/lifetime-guarantee/#comments</comments>
		<pubDate>Mon, 19 Nov 2012 12:33:01 +0000</pubDate>
		<dc:creator>rnoowcc</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[ICT Strategy]]></category>
		<category><![CDATA[R&D]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=565</guid>
		<description><![CDATA[&#8220;Roll Up &#8211; Ladies and Gentleman, come and see the only knife you will ever need in your life&#8221;. I ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2012/11/19/lifetime-guarantee/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=565&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>&#8220;Roll Up &#8211; Ladies and Gentleman, come and see the only knife you will ever need in your life&#8221;.<br />
I strongly remember being dragged around a department store by my mum, trying to locate what the recent tannoy announcement was referring to.</p>
<p>&#8220;Come on, don&#8217;t be shy &#8211; one look at these knives and you will see the quality of the workmanship and the sharpness of the edge&#8221;<br />
My mum&#8217;s pace increased and her frenetic searching brought her towards a large crowd of people in the middle of the store, obviously cleared to allow for more people. Standing in the middle of them, was a short perfectly spherical man, with beads of sweat running down his face.</p>
<p>He put the microphone to his lips,<br />
&#8220;This is your one and only opportunity to own this knife, and if you buy today, not only will we throw in a second one completely free, I can also offer, for those smart enough to realise how much these cost, a lifetime guarantee. Yes, you heard me correct &#8211; a lifetime guarantee&#8221;</p>
<p>The audience whoops and sighs, the ebbs and flows of a pliant swarm of consumers.<br />
Once the price had been announced, a sea of hands holding £10 notes covered the shop floor. People were stretching and pushing to be next in line to receive this wonderful, life-assuring kitchen utensil. I turned to my mother, to find her bagging the newly purchased knives with care.</p>
<p>Now, you may wonder what this story has to do with technology, well it doesn&#8217;t so far. It&#8217;s what happened a little while later, when we came to try to get a replacement for the knives as they had broken within a couple of months of taking them home.</p>
<p>As we had purchased the knives from within the department store, we felt the responsibility for the purchase fell with the department store. Wrong! It turns out that the knives salesman, had just asked for some floor space, on the promise of getting more people to come into the store. The sales were directly carried out by him, and all offers and guarantees came from him, and not the store. On speaking with the store manager, it appeared that we were not the only ones attempting to claim on the lifetime guarantee. The department store had been inundated with guarantee claims, but the knives salesman was not contactable and had left no forwarding details or onward number. The store manager further commented, &#8220;I cannot believe so many people believed the promise of a lifetime guarantee, with such poor quality materials. He&#8217;s obviously cleaned out in this town, and is moving onto greener, equally gullible people in another town. It&#8217;s ok for him to make the promises and guarantees, when he knows he isn&#8217;t going to be around when it&#8217;s claimed on and doesn&#8217;t have to fulfil the promise. It&#8217;s left for everyone else to clean up his mess&#8221;.</p>
<p>Is there an ICT relevance in this story? If you rename the buying customers as a Corporation, the department store as the ICT department and the Knives salesman as a New Media technology consultancy brought in to remedy a perceived need, you may start to see a connection. As the New Media Company only has to make the promises to get the contract, delivery is key to their success: long-term sustainability is not. In the case of the Knives salesman, delivery was handing over the knives to his paying customers. Once implemented, the New Media Agency usually demands payment and moves onto pastures new. The Corp. is left with a system that works for today, but only just. As demands, use and technologies change, these delivered systems often reach the tipping point of obsolescence much earlier than other systems, because they were designed with a different set of priorities from those that use the system.</p>
<p>The priorities they were designed with of:<br />
1) Quick production<br />
2) Well presented<br />
3) Easier adoption<br />
4) Simple to use<br />
5) Works for now</p>
<p>were primarily to optimise sales and production. They were not designed for long-term satisfaction or maintainability. Seeing how little care and thought there is for backwards compatibility in the Ruby and Rails world reminds me of the Knives salesman. Whilst we may be lumbered with a system designed at its Zenith, those who created and distributed the code have moved onto pastures new and seem to have little consideration for those using it. Given that most of the code submitted appears to come from one-man-bands and New Media Agencies, having code that works a couple of years from now just doesn&#8217;t figure.</p>
<p>Is a 2 year shelf-life for a technology product acceptable? For those on the Apple hamster wheel, undoubtedly. I like to get more value from what I invest my time or money in.</p>
<p>The question, we have to ask as an organisation, is how do we harness the benefits that Ruby has to offer, with an appreciation that there are different priorities from those that contribute code and those that use code.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/565/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/565/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=565&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2012/11/19/lifetime-guarantee/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/bf1d30e8c82f15e36c6e845ab3973d41?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">rnoowcc</media:title>
		</media:content>
	</item>
		<item>
		<title>While my SOA gently weeps</title>
		<link>http://abigbang.wordpress.com/2012/11/12/while-my-soa-gently-weeps/</link>
		<comments>http://abigbang.wordpress.com/2012/11/12/while-my-soa-gently-weeps/#comments</comments>
		<pubDate>Mon, 12 Nov 2012 09:33:47 +0000</pubDate>
		<dc:creator>terryrichwhitehead</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[ICT Strategy]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[governance]]></category>
		<category><![CDATA[Service Oriented Architecture]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=560</guid>
		<description><![CDATA[What makes SOA fail and do people actually understand what SOA is, are businesses and organisations just integrating a load ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2012/11/12/while-my-soa-gently-weeps/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=560&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>What makes SOA fail and do people actually understand what SOA is, are businesses and organisations just integrating a load of services and not designing and building the architecture?</p>
<p>SOA does not just happen; it is something that virtually everyone contributes to in some way across the whole business. Adopting SOA also calls for commitment, not just lip service but real commitment. SOA does present challenges that can come in many guises and it can be all too easy to slip into practice of stringing a few web services together, building a app(lication), satisfying users and project managers and calling it an SOA implementation. This is all well and good but you are not only just fooling yourself but the business or organisation as a whole. Short term gains like this just plant the seeds of despair. Strong words, maybe but I can understand the reasons as to why this happens, threats to building a SOA come from many directions and it is up to all involved in building the architecture to recognise these threats and take appropriate action. These threats can come from Vendors, the business, governance, staff and that all to important project.</p>
<p>Vendors, in the main are not interested in the architecture &#8211; they are more interested in selling you a product. Some only pay lip service to SOA or more simply they just don’t understand it. Simple answer to this, don’t let vendors drive your strategy.</p>
<p>The business can have a poor understanding of what SOA means to them, failure to fully engage the business will just lower the importance of SOA in their eyes. SOA demands support from the stakeholders, they really do need to understand the concept and be fully committed to making it a success, without this any SOA initiatives are doomed to failure. The answer to this means talking to the business, explaining to them what SOA means in a language that they understand. If you do not engage the business then SOA will become marginalised and you’ll find it very hard to get a second chance.</p>
<p>Resistance to or fear of change is a noose that will slowly choke an SOA implementation, SOA does mean change, but IT evolves, it changes  that’s why it’s an interesting field to work in. Adopting an SOA approach will more than likely change the makeup of IT departments. For example people’s roles can change; this should not be viewed as something negative. To me learning new skills is always a plus point. Having the right skill sets helps to avoid the fear of change and it is important that developers have the support in adopting this new way of working. The tools that have been used in the past may not now be right for the job now, Developers need to be made aware of these new tools and working environments. Here in Warwickshire developers are most welcome to visit us and engage in what the authority is doing.</p>
<p>SOA is not a project, a SOA is built by projects contributing towards the architecture. Failure to include contributing to the SOA in IT projects will undermine efforts to build the architecture. Developers and project managers must work together and share the same goal. When deadlines are tight and there is no full commitment to SOA then there is a real risk that the ideals of SOA will be disregarded in order to get the job done.</p>
<p>The lack of the G word (Governance), to most it’s something we treat with contempt, as we don’t like been told what to do, but the alternative is anarchy and that’s what you don’t need when building the architecture. All must stick to the guidelines, deviations from this must properly addressed, not in the form of a witch hunt but more to discover why there was a deviation, what caused it, the impact and if necessary reviewing the rules.</p>
<p>As a footnote to this post I felt that I was writing an article for ‘Relate’ (marriage guidance), but SOA is bit like a relationship where all parties have to be committed to it or else it fails.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/560/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/560/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=560&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2012/11/12/while-my-soa-gently-weeps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90839b6d7c018f6b288f28e99467a1f8?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">terryrichwhitehead</media:title>
		</media:content>
	</item>
		<item>
		<title>Money for nothin’ SOA for &#8230;</title>
		<link>http://abigbang.wordpress.com/2012/10/04/money-for-nothin-soa-for/</link>
		<comments>http://abigbang.wordpress.com/2012/10/04/money-for-nothin-soa-for/#comments</comments>
		<pubDate>Thu, 04 Oct 2012 13:10:43 +0000</pubDate>
		<dc:creator>terryrichwhitehead</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://abigbang.wordpress.com/?p=554</guid>
		<description><![CDATA[Over the last week I have been give some thought SOA and the costs involved. To all businesses and organisations understanding ... <br /><a class="more-link" href="http://abigbang.wordpress.com/2012/10/04/money-for-nothin-soa-for/">Continue reading</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=554&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Over the last week I have been give some thought SOA and the costs involved. To all businesses and organisations understanding true costs of IT systems has always been a challenge. In adopting an SOA approach requires businesses and organisations to have a very thorough understanding of the SOA cost model. Without it there is the risk of poor decisions been made, budgets running out of control and applications that fail to meet the end users expectations. The advantage of understanding the SOA cost model is not just only the reverse of the previous statement but it also allows the businesses and organisations play the market getting the best deal and quickly taking advantage to changes.</p>
<p>Most current IT cost models do not model the true cost of running, developing and supporting an SOA environment, most of these models are been based on outdated predictions and practises. The SOA world is different, it effects how business and organisations function and more importantly it changes how IT functions. The only way a SOA will work positively with in a business or organisation is to have a cost model that accurately reflects the adoption of a SOA environment.</p>
<p>The SOA cost model has two main elements, development costs and the on-going cost of ownership, not to different from the traditional model on the face of it. However, SOA development costs must now understand the relationship between cost and the reuse of services, the benefits of integration in the loosely coupled SOA environment and the benefits of platform independent software design. Not only that the SOA cost model must also embrace the effects of reduced human intervention required in managing applications, as most supporting infrastructure is capable of self-management, we&#8217;ve all heard of the elastic cloud. The biggest change to more traditional costing models has to be able to fully understand the true cost of running a service, the bandwidth consumption, CPU time, storage that is consumed etc.</p>
<p>Billing information received from providers should also fed back into the SOA cost model as part of a feedback loop which will help in the fine tuning of the model. However, it must also be realised that when starting out in building a SOA environment costing’s fed back into the model will not be accurate as they will in the main relate to pilot projects, but in time as more services are productionised then accuracy will improve.</p>
<p>As more and more services are delivered into the SOA environment then with the right feedback mechanisms including costs fed back from system support activities i.e. help desks etc., the SOA cost model improves even more and the business or organisation will be able to make better judgements on development costs and the true cost of ownership.</p>
<p>Having a truly accurate SOA cost model will then allow the business or organisation to carryout full meaningful ROI analyses on projects, helping with prioritising developments and maximising on development resource. It will also so help in predicting future demands that will be made of the SOA, thus helping with capacity planning and securing prudent financial deals.</p>
<p>Looking to the future of SOA and adopting PaaS (Platform as a Service) for service provision the hosting of services will get dynamic. Let’s say a business or organisation is consuming platform service from three service providers, we’ll call them Provider A, B and C. Provider B and provider C lowers their costs on bandwidth, then using the SOA cost model the business or organisation could look at what services that were placed with Provider A that consumed large amount of bandwidth and move them to the other providers, thus reducing costs. Thinking more abstractly, what if the cost model understood the sessional effects on service demands are there gains to be had there? Could there be services that do not even need to be running all year round?  Get the model right and thing could get very interesting.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/abigbang.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/abigbang.wordpress.com/554/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=abigbang.wordpress.com&#038;blog=6915581&#038;post=554&#038;subd=abigbang&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://abigbang.wordpress.com/2012/10/04/money-for-nothin-soa-for/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90839b6d7c018f6b288f28e99467a1f8?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">terryrichwhitehead</media:title>
		</media:content>
	</item>
	</channel>
</rss>
