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

<channel>
	<title>endjin blog</title>
	<atom:link href="http://blog.endjin.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.endjin.com</link>
	<description>work smarter</description>
	<lastBuildDate>Thu, 29 Mar 2012 12:03:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>TeamCityPowerShell</title>
		<link>http://blog.endjin.com/2012/03/teamcitypowershell/</link>
		<comments>http://blog.endjin.com/2012/03/teamcitypowershell/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 22:48:03 +0000</pubDate>
		<dc:creator>Howard van Rooijen</dc:creator>
				<category><![CDATA[ALM]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Engineering Practices]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[dotPeek]]></category>
		<category><![CDATA[JetBrains]]></category>
		<category><![CDATA[Pester]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[TeamCity]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/?p=429</guid>
		<description><![CDATA[Last week I was formally invited to become a member of the JetBrains Development Academy Board – to celebrate, I decided to give something back to the community that has a JetBrains flavour. As I mentioned in my last post – we’ve been doing a lot of ALM / DevOps work in the last year [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I was formally invited to become a member of the JetBrains Development Academy Board – to celebrate, I decided to give something back to the community that has a JetBrains flavour. As I mentioned <a href="http://blog.endjin.com/2012/03/an-omega-geeks-guide-to-learning-powershell/" target="_blank">in my last post</a> – we’ve been doing a lot of ALM / DevOps work in the last year and some of those projects have involved implementing TeamCity and other have involved using a lot of PowerShell – so I thought it would be a good idea to combine to two.</p>
<p>Rather than implement a PowerShell API from scratch I decided to “work smarter” and stand on the shoulders of giants – in this case fellow JetBrains Academy Member <a href="https://twitter.com/#!/stack72" target="_blank">Paul Stack</a>, who created a very nice C# TeamCity Wrapper called <a href="https://github.com/stack72/TeamCitySharp" target="_blank">TeamCitySharp</a>.</p>
<p>PowerShell is hosted on the CLR – so calling .NET types is a breeze – it was very straightforward to wrap the C# API. Firstly I used <a href="http://www.jetbrains.com/decompiler/" target="_blank">dotPeek</a> to list all the method names and I pasted these into a new PowerShell script and converted each of them into the vanilla <a href="https://github.com/scottmuc/Pester" target="_blank">Pester BDD</a> format and outlined some behaviours:</p>
<pre>Describe "Get-AllAgents" {
    It "should return multiple agents" {
    }
}</pre>
<p>The next step was to create the parameters to pass into the cmdlet. To start with I mimicked the C# API and had expressive function signatures – but after writing the first couple of cmdlets did a small refactoring and switched to using <a href="http://technet.microsoft.com/en-us/magazine/gg675931.aspx" target="_blank">splatting</a> (one of the most unknown / underused features of PowerShell), which allowed me to create a pseudo ConnectionDetails object that is in fact a hashtable – which is a much nicer data structure for describing all the different connection options. The final step is to test the results of your cmdlet.</p>
<pre>
$ConnectionDetails = @{
   ServerUrl = "teamcity.codebetter.com"
   Credential = New-Object System.Management.Automation.PSCredential("teamcitysharpuser", (ConvertTo-SecureString "qwerty" -asplaintext -force))
}

Describe "Get-AllAgents" {
    $parameters = @{ ConnectionDetails = $ConnectionDetails }
    $result = Get-AllAgents @parameters
    It "should return multiple agents" {
       $result.Count.should.have_count_greater_than(1)
    }
}
</pre>
<p>This test will obviously fail as we haven’t implemented the Get-AllAgents cmdlet – but that’s simple enough to fix:</pre>
<pre>
Function Get-AllAgents
{
   param
   (
      [Hashtable]
      $ConnectionDetails
   )

   $client = New-TeamCityConnection @PSBoundParameters
   return $client.AllAgents()
}
</pre>
<p>Note the use of <em>@PSBoundParameters</em> – this allows you to splat the parameters passed into the current cmdlet into a nested cmdlet. Very cool indeed and saves a lot of typing.</p>
<p>I repeated the process for the rest of the TeamCitySharp API and created the following cmdlets:</p>
<ul>
<li>Get-AllAgents</li>
<li>Get-AllBuildConfigs</li>
<li>Get-ArtifactsByBuildId</li>
<li>Get-Artifact</li>
<li>Get-ArtifactsAsArchive *</li>
<li>Get-BuildConfigByConfigurationName</li>
<li>Get-AllBuildsOfStatusSinceDate</li>
<li>Get-AllBuildsSinceDate</li>
<li>Get-AllChanges</li>
<li>Get-AllGroupsByUserName</li>
<li>Get-AllProjects</li>
<li>Get-AllRolesByUserName *</li>
<li>Get-AllServerPlugins *</li>
<li>Get-AllUserGroups</li>
<li>Get-AllUserRolesByUserGroup</li>
<li>Get-AllUsers *</li>
<li>Get-AllUsersByUserGroup</li>
<li>Get-AllVcsRoots</li>
<li>Get-BuildConfigByConfigurationId</li>
<li>Get-BuildConfigByConfigurationName</li>
<li>Get-BuildConfigByProjectIdAndConfigurationId</li>
<li>Get-BuildConfigByProjectIdAndConfigurationName</li>
<li>Get-BuildConfigByProjectNameAndConfigurationId</li>
<li>Get-BuildConfigByProjectNameAndConfigurationName</li>
<li>Get-BuildConfigsByBuildConfigId</li>
<li>Get-BuildConfigsByConfigIdAndTag</li>
<li>Get-BuildConfigsByConfigIdAndTags</li>
<li>Get-BuildConfigsByProjectId</li>
<li>Get-BuildConfigsByProjectName</li>
<li>Get-BuildsByBuildLocator *</li>
<li>Get-BuildsByUserName</li>
<li>Get-ChangeDetailsByBuildConfigId</li>
<li>Get-ChangeDetailsByChangeId</li>
<li>Get-ErrorBuildsByBuildConfigId *</li>
<li>Get-FailedBuildsByBuildConfigId *</li>
<li>Get-LastBuildByAgent</li>
<li>Get-LastBuildByBuildConfigId</li>
<li>Get-LastChangeDetailByBuildConfigId</li>
<li>Get-LastErrorBuildByBuildConfigId *</li>
<li>Get-LastFailedBuildByBuildConfigId</li>
<li>Get-LastSuccessfulBuildByBuildConfigId</li>
<li>Get-LatestArtifact</li>
<li>Get-NonSuccessfulBuildsForUser</li>
<li>Get-ProjectById</li>
<li>Get-ProjectByName</li>
<li>Get-ServerInfo</li>
<li>Get-SuccessfulBuildsByBuildConfigId</li>
<li>Get-VcsRootById</li>
</ul>
<p><sup>* denotes a cmdlet that has been implemented but doesn’t have a passing test (mainly due to a lack of rights on the <a href="http://teamcity.codebetter.com">http://teamcity.codebetter.com</a> server).</sup></p>
<p>Although the tests are integration tests and a little slow to run – there is nothing more reassuring than having a full suite of specifications:</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2012/03/teamcity-powershell-specs.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="teamcity-powershell-specs" src="http://blog.endjin.com/wp-content/uploads/2012/03/teamcity-powershell-specs_thumb.png" alt="teamcity-powershell-specs" width="789" height="462" border="0" /></a></p>
<p>A simple example of using the TeamCityPowerShell API is as follows:</p>
<pre>$parameters = @{
     ConnectionDetails = @{
         ServerUrl = "teamcity.codebetter.com"
         Credential = New-Object System.Management.Automation.PSCredential("teamcitysharpuser", (ConvertTo-SecureString "qwerty" -asplaintext -force))
     }
     BuildConfigId = "bt437"
}

$builds = Get-BuildConfigsByBuildConfigId @parameters

foreach($build in $builds)
{
    Write-Host $build.Number
}</pre>
<p>Very straight forward.</p>
<p>If you don’t want to store your TeamCity credentials in plain text you can either enter them interactively using the following code:</p>
<pre>$parameters = @{
   ConnectionDetails = @{
      ServerUrl = "teamcity.codebetter.com"
      Credential = Get-Credential
   }
   BuildConfigId = "bt437"
}</pre>
<p>Alternatively you can retrieve them disk using this PowerShell Cookbook recipe: “<a href="http://www.leeholmes.com/blog/2008/06/04/importing-and-exporting-credentials-in-powershell/" target="_blank">Importing and Exporting Credentials in PowerShell</a>”</p>
<p>One item to note - TeamCityPowerShell depends on TeamCitySharp which is a .NET 4.0 application. By default PowerShell only supports .NET 2.0 - to enable .NET 4.0 support copy TeamCityPowerShell\SetUp\PowerShell.exe.config to the PowerShell install directory - this allows PowerShell to host the .NET 4.0 runtime.</p>
<p>You can find <a href="https://github.com/endjin/TeamCityPowerShell" target="_blank">TeamCityPowershell on GitHub</a>. If you have any feedback – please get in contact.</p>
<p>@<a href="https://twitter.com/#!/howardvrooijen" target="_blank">HowardvRooijen</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2012/03/teamcitypowershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Omega Geek&#8217;s Guide to Learning PowerShell</title>
		<link>http://blog.endjin.com/2012/03/an-omega-geeks-guide-to-learning-powershell/</link>
		<comments>http://blog.endjin.com/2012/03/an-omega-geeks-guide-to-learning-powershell/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 10:50:28 +0000</pubDate>
		<dc:creator>Howard van Rooijen</dc:creator>
				<category><![CDATA[ALM]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Engineering Practices]]></category>
		<category><![CDATA[Work Smarter Not Harder]]></category>
		<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/2012/03/an-omega-geeks-guide-to-learning-powershell/</guid>
		<description><![CDATA[In the last 12 months we’ve been doing quite a lot of Application Lifecycle Management (ALM) projects helping teams setup Continuous Delivery processes. One of the tenets of Continuous Delivery is “Automate Everything” – which has been a core part of my “work smarter, not harder” ethic for a number of years. The technology that [...]]]></description>
			<content:encoded><![CDATA[<p>In the last 12 months we’ve been doing quite a lot of Application Lifecycle Management (ALM) projects helping teams setup <a href="http://continuousdelivery.com/">Continuous Delivery</a> processes. One of the tenets of Continuous Delivery is “Automate Everything” – which has been a core part of my “work smarter, not harder” ethic for a number of years. The technology that we’ve been using to do this work is one of the hidden gems of the Microsoft Platform – PowerShell. It amazed me that a technology that is over <a href="http://consultingblogs.emc.com/howardvanrooijen/archive/2006/06/04/4032.aspx" target="_blank">6 years old</a> still doesn’t seem to have mass adoption within the Microsoft Development Community. While the Alpha Geeks are frothing at the mouth over new tech such as Node / HTML 5 / WinRT, I really hope that more Omega Geeks will do themselves a great favour and start to learn PowerShell.</p>
<p>I’ve spent more of the last year working inside <a href="http://powergui.org">PowerGUI</a> than Visual Studio and I’ve tried hard to take a few of our customers on the learning journey too. I’m very pleased that after doing a quick brown bag session about PowerShell and knocking up a sample framework that one of the DevOps folks took it and ran with it – automating the provisioning of their internal development, test and production environments – from a series of thick word documents that took over 2 man days to work through (and were also horrifically prone to human error) to a series of PowerShell scripts that could automatically provision an environment within a couple of hours.</p>
<p>Thankfully there are a myriad of resources to help you learn PowerShell here are a select that I’ve found very useful:</p>
<p><strong>Free Guides</strong></p>
<p>If you really want to get your head around what comes out of the box in PowerShell 2.0 (which is installed by default on Windows 7 and Windows Server 2008) a great place to start is <a href="http://www.jonathanmedd.net/" target="_blank">Jonathan Medd’s</a> – <a href="http://www.jonathanmedd.net/wp-content/uploads/2010/09/PowerShell_2_One_Cmdlet_at_a_Time.pdf" target="_blank">PowerShell 2 – One Cmdlet at a Time</a> – which does exactly what it says on the tin – it lists every cmdlet (think function) and tells you what it does and how to use it.</p>
<p>One of the least known and most powerful features in PowerShell is remoting – the ability to execute PowerShell scripts, in context on a remote machine. This opens so many doors from a DevOps perspective. On the downside – because remoting requires you to deal with networks and security – it can be a bit painful to get up and running with and another indispensible guide is <a href="http://www.ravichaganti.com/blog/" target="_blank">Ravikanth Chaganti</a>’s &#8211; <a href="http://www.ravichaganti.com/blog/wp-content/plugins/download-monitor/download.php?id=22" target="_blank">Layman’s Guide to PowerShell 2.0 remoting</a> – to tell the truth – I felt bad reading this free guide – the amount of real world knowledge and blood, sweat and tears problem solving is of such a high quality that it really shouldn’t be a free ebook.</p>
<p><strong>Books</strong></p>
<p>The two free guides really wet my appetite and I wanted more – both depth and breadth and I found this in abundance in <a href="http://www.manning-sandbox.com/forum.jspa?forumID=542" target="_blank">Bruce Payette’s</a> – <a href="http://www.amazon.co.uk/gp/product/1935182137/ref=as_li_ss_tl?ie=UTF8&amp;tag=benchpeg-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=1935182137" target="_blank">PowerShell in Action 2nd Edition</a> – if you want a holistic view of the platform – it’s a great start. If you want a more practical guide to how to use PowerShell there are two other great resources – first is <a href="http://www.windowsitpro.com/blogcontent/powershell-with-a-purpose-blog-36" target="_blank">Don Jones</a> and his book <a href="http://www.manning.com/jones/" target="_blank">Learn Windows PowerShell in a Month of Lunches</a>. Don is a bit of a star he’s very active not only on his <a href="https://twitter.com/#!/concentrateddon" target="_blank">twitter account</a> – but he’s also produced a seriously large number of accompanying <a href="http://www.youtube.com/user/ConcentratedDon" target="_blank">screencasts, freely available on YouTube</a>. The second is <a href="http://www.leeholmes.com/blog/" target="_blank">Lee Holmes</a> (who’s been on the PowerShell team from the start), his book <a href="http://www.amazon.co.uk/gp/product/0596801505" target="_blank">The PowerShell Cookbook</a> is a wonderful resource – brimming with Problem –&gt; Solution recipes; if you’re getting started with PowerShell these are the type of problems you are going to hit straight away and such The PowerShell Cookbook should be your first port of call. The latest PowerShell book I’ve been reading is <a href="http://www.manning.com/siddaway2/" target="_blank">PowerShell and WMI</a> by Richard Siddaway which is a little more advanced and hard-core – but useful for those of us who want to interact with Windows Machines at a lower level.</p>
<p><strong>Blogs &amp; People</strong></p>
<p>As always the first place for a Microsoft Technology is the <a href="http://blogs.msdn.com/b/powershell/" target="_blank">Official Microsoft PowerShell Blog</a>. Next would be the man behind PowerShell, Microsoft Distinguished Engineer and  Lead Architect for the Windows Server Division – <a href="https://twitter.com/#!/jsnover" target="_blank">Jeffery Snover</a>, his enthusiasm for PowerShell and being more productive with automation is utterly infectious – he’s a really great speaker and I would highly recommend watching his talks (listed below). After Jeffery the next stop is <a href="http://www.leeholmes.com/blog/" target="_blank">Lee Holmes’ blog</a>. When you get stuck and start searching for help – chances are you’ll land on Joel Bennett’s <a href="http://huddledmasses.org/" target="_blank">Huddled Masses</a> blog – lots of great pragmatic content to be devoured there. Another great resource is the <a href="http://powershell.com/cs/">PowerShell Community Site</a>.</p>
<p><strong>Web Casts</strong></p>
<p>If you don’t have time to read books luckily Microsoft have put a lot of effort promoting PowerShell at their various conferences and via Channel9. I can’t recommend these talks highly enough – the topics are wide and varied – from using PowerShell to manage servers, to using PowerShell to create a management API over your applications – each of the talk shows how flexible PowerShell is and how productive you can be with it.</p>
<p><em>Channel 9</em></p>
<ul>
<li>Jeffrey Snover &amp; Bruce Payette  (2007) &#8211; <a href="http://channel9.msdn.com/Blogs/Charles/Windows-PowerShell-Origin-and-Future" target="_blank">Windows PowerShell: Origin and Future</a></li>
<li>Jeffrey Snover and Dmitry Sotnikov  (2007) &#8211; <a href="http://channel9.msdn.com/Blogs/Charles/Jeffrey-Snover-and-Dmitry-Sotnikov-Learn-and-Master-Windows-PowerShell-with-Quest-Softwares-PowerG" target="_blank">Learn and Master Windows PowerShell with Quest Software’s PowerGui</a></li>
<li>Expert to Expert (2008) &#8211; <a href="http://channel9.msdn.com/Shows/Going+Deep/Expert-to-Expert-Erik-Meijer-and-Jeffrey-Snover-Inside-PowerShell" target="_blank">Erik Meijer and Jeffrey Snover &#8211; Inside PowerShell</a></li>
</ul>
<p><em>PDC 2008</em></p>
<ul>
<li>Jeffrey Snover  &#8211; <a href="http://channel9.msdn.com/Events/PDC/PDC08/ES24" target="_blank">PowerShell: Creating Manageable Web Services</a></li>
</ul>
<p><em>PDC 2009</em></p>
<ul>
<li>Kenneth Hansen, Narayanan Lakshmanan &#8211; <a href="http://channel9.msdn.com/Events/PDC/PDC09/SVR12" target="_blank">Building Your Administration GUI over Windows PowerShell</a> &amp; <a href="http://channel9.msdn.com/Events/PDC/PDC09/SVR13" target="_blank">Windows PowerShell: An Automation Toolbox for Building Solutions That Span Small Businesses, Enterprises, and Cloud Services</a></li>
</ul>
<p><em>Tech-Ed 2010</em></p>
<ul>
<li>Mir Rosenberg, Refaat Issa &#8211; <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2010/WSV401" target="_blank">Advanced Automation Using Windows PowerShell 2.0</a></li>
<li>Jeffery Hicks &#8211; <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2010/WCL313" target="_blank">Paradigm Shift: Microsoft Visual Basic Scripting Edition to Windows PowerShell</a></li>
<li>Phil Pennington, Don Jones  &#8211; <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2010/WSV319" target="_blank">Manage Your Enterprise from a Single Seat: Windows PowerShell Remoting</a></li>
<li>Don Jones &#8211; <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2010/WCL308" target="_blank">Inventory Your Network and Clients with Windows PowerShell</a></li>
</ul>
<p><em>Build 2011</em></p>
<ul>
<li>Andrew Mason &amp; Jeffery Snover &#8211; <a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-416T" target="_blank">Windows Server 8 apps must run without a GUI &#8211; learn more now</a></li>
<li>Jeffrey Snover, Refaat Issa &#8211; <a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-644T" target="_blank">Make your product manageable</a> &amp; <a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-646T" target="_blank">Manage a highly-efficient environment at scale using the Windows Management Framework (WMF)</a></li>
<li>Christopher Palmer &#8211; <a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-565T" target="_blank">Windows networking with PowerShell: A foundation for data center management</a></li>
</ul>
<p><em>Tech-Ed 2011</em></p>
<ul>
<li>Dean Corcoran &#8211; <a href="http://channel9.msdn.com/Events/TechEd/Australia/Tech-Ed-Australia-2011/SVR309" target="_blank">PowerShell Above and Beyond: GUIs, Workflows, and More</a></li>
<li>Don Jones &#8211; <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WCL321" target="_blank">Windows PowerShell Remoting: Definitely NOT Just for Servers</a></li>
<li>Dan Harman, Jeffrey Snover &#8211; <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WSV406" target="_blank">Advanced Automation Using Windows PowerShell 2.0</a></li>
<li>Jeffery Hicks &#8211; <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WSV322" target="_blank">Managing the Registry with Windows PowerShell 2.0</a></li>
<li>Jeffrey Snover &#8211; <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WSV315" target="_blank">Windows PowerShell for Beginners</a></li>
</ul>
<p><strong>Writing testable scripts</strong></p>
<p>One of the most immature aspects of the PowerShell platform is writing tests for scripts – I’ve tried many of the frameworks that are out there – each has it’s own strengths and weaknesses – but the framework I’ve been using (with some success) of late is <a href="http://scottmuc.com/blog/development/pester-bdd-for-the-system-administrator/">Pester – a BDD style framework for PowerShell</a>, you can grab the code from the <a href="https://github.com/scottmuc/Pester">official GitHub Repository</a>.</p>
<p><strong>Tooling</strong></p>
<p>Lastly a word on tooling – even though Windows comes with PowerShell ISE (Integrated Scripting Environment) – I’ve found <a href="http://powergui.org">PowerGui</a> to be a much nicer environment to work in – the debugging support (which you will need) is far superior to ISE.</p>
<p>Remember: work smarter, not harder!</p>
<p>@<a href="http://twitter.com/HowardvRooijen">HowardvRooijen</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2012/03/an-omega-geeks-guide-to-learning-powershell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Machine that Changed the World</title>
		<link>http://blog.endjin.com/2011/08/the-machine-that-changed-the-world/</link>
		<comments>http://blog.endjin.com/2011/08/the-machine-that-changed-the-world/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 10:17:14 +0000</pubDate>
		<dc:creator>Steve.Garnett</dc:creator>
				<category><![CDATA[Musings]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/?p=410</guid>
		<description><![CDATA[First of all, I apologise for the length of this blog, but there&#8217;s some serious stuff to be said! The Machine that Changed the World by Womack, Jones &#38; Roos This is a book that has been on my reading list for a few years and I finally got round to reading it a few months [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>First of all, I apologise for the length of this blog, but there&#8217;s some serious stuff to be said!</p>
<p><strong>The Machine that Changed the World by Womack, Jones &amp; Roos</strong><br />
This is a book that has been on my reading list for a few years and I finally got round to reading it a few months back. It&#8217;s quite brilliant! Hard going at times&#8230; but brilliant.</p>
<p>A historical view &#8211; the story of the car manufacturing industry from Henry Ford to Toyota &#8211; from the creation of the mass production process in the early 1900&#8242;s to the lean production process of Toyota in the 1980&#8242;s.</p>
<p>For anyone interested in agile development or lean thinking, this book should be on your list.</p>
<p>Insight and parallels fly off the pages at you and I am finding that history is repeating itself within the agile movement. There are strong parallels between the problems faced by car manufacturers to adopt lean production, and the problems faced by IT departments / corporations in adopting agile or lean software development.</p>
<p>And at the heart of the entire book are the fundamental philosophies of lean thinking which resonate strongly with the agile manifesto:<br />
Individuals and interactions over processes and tools<br />
Working software over comprehensive documentation<br />
Customer collaboration over contract negotiation<br />
Responding to change over following a plan</p>
<p><strong>Matching Observable Behaviours, without Understanding Underlying Concepts</strong><br />
One of the key insights I&#8217;ve identified throughout the book is that companies attempting to adopt agile are making the same mistakes that western car companies made in trying to adopt lean.</p>
<p><em>Example 1:</em><br />
At Toyota:<br />
Within the lean supply chain, Toyota had a &#8220;just in time&#8221; approach to supplier fulfilment. This meant that Toyota only needed more parts when they emptied a box of parts, and therefore an empty box returned to the supplier WAS the purchase order. So Toyota only order what they need, and have hourly cycle times.</p>
<p>Western companies:<br />
By observing the Toyota process, what western car companies saw was not the lean process, but the observable behaviour of suppliers conducting multiple small deliveries of parts on a daily or hourly basis. So western car companies got their suppliers to do the same i.e. delivery more frequently in smaller batches. Now for the car company this had the advantage of reducing inventory&#8230; but instead of removing the inventory from the supply chain, rather they pushed the costs of more frequent delivery and inventory onto their suppliers.</p>
<p><em>Example 2:</em><br />
At Toyota:<br />
A car consists of around 10,000 parts and various car companies (assemblers) manufacture a certain percentage of their own parts and &#8220;out-source&#8221; the rest. Toyota in the 80&#8242;s was about 37%, whereas GM was 70%.</p>
<p>Sourcing these parts externally is an expensive, protracted process, so Toyota created a &#8220;tiered&#8221; structure where they dealt with a few hundred suppliers that provide a specific system for the car and the Tier 1 supplier then manages their out-sourced parts themselves. The approach is collaborative and in partnership, and in addition to this Toyota invests in the supplier companies, owning between 10-20% of these Tier 1 supplier companies.</p>
<p>Western companies&#8230;<br />
Typically western car companies had about 1500-2500 suppliers to a car, and at one point GM employed 6000 people in their purchasing department. They made the observation that lean car companies had smaller numbers of suppliers and by having smaller numbers their purchasing costs could be lower.<br />
So they reduced the number of suppliers&#8230; But importantly, they didn&#8217;t change the relationships &#8211; they just extended the contracts from an average of 1 year to 3 years and continued to measure the value of the supplier by cost and defects per shipment. In contrast to Toyota, they did not collaborate and try to make continuous improvements to the people, process and technologies across their supply chain.</p>
<p><em>Supplier Behaviour</em></p>
<p>Highlighting this lack of understanding of fundamentals, a western supplier won a contract with a lean car company and observed that quality standards were the route to maintaining the relationship. This western component supplier focussed on delivering high quality parts, and once it established itself in the relationship tried to increase its prices. The reason for this was that it was unsustainable for this company to maintain the quality level of products delivered.</p>
<p>This for me, highlighted the underlying problem perfectly, i.e. aiming to mimic the output without fundamentally changing mindset, processes and the culture of the company and its relationships. This supplier did achieve the quality goals but at what cost?</p>
<p><strong>Agile Programmes are Copying Observable Behaviours, but not Changing the Fundamentals!</strong></p>
<p>Hopefully, from the examples above I have clearly articulated the problem western car companies faced in the 1990&#8242;s in adopting lean production processes. They were observing and copying outputs and metrics without understanding the fundamentals and making change happen.</p>
<p>I believe that history is repeating itself for companies trying to adopt agile practices. The fundamentals are not right. Here&#8217;s a few key areas where companies are trying to adopt agile practices by mimicing behaviours but failing to grasp the fundamentals</p>
<p><strong>Lack of ability to change<br />
</strong>Fundamental and at the heart of agile practices is an empirical process. Building software with multiple feedback loops, where continuous reflection and improvements are made.</p>
<p>In order to support this philosophy, everyone from developer to CIO, should be focussed on impediment removal, retrospectives and continuous improvement activities.</p>
<p>An agile programme shouldn&#8217;t be a &#8220;planned&#8221; activity, it should be an entity focussed on helping teams to become more productive, more innovative, and more efficient at delivering business value through technology.</p>
<p>The agile programme should therefore be driven by the needs of the individual software teams whether its environment provision, training, process change, governance change, organisational change &#8211; whatever is at the source of an impediment, defect or element of waste.</p>
<p>By focussing on creating a culture of continuous improvement, companies will become &#8220;agile&#8221;.</p>
<p><strong>Relationships over Contracts</strong><br />
Toyota has often been quoted as stating that transforming to a lean organisation takes 10-12 years. I believe them. I&#8217;d also add that transforming a company from traditional to agile development will take years not months.</p>
<p>So what relationships do you want in place if you know you&#8217;re embarking on a 3-year change programme? Long ones!</p>
<p>Therefore supplier relationships need to be fostered and framework agreements put in place that encourage a collaborative continuous improvement process, with transparency of costs AND profits where both parties can profit from the joint activity.</p>
<p>AND a key change for the organisation is to focus on the retention of staff, even if this means significant pain! Software development people are knowledge workers, and when they walk, the knowledge walks.</p>
<p><strong>Still Measuring Against Cost and Time Instead of Demonstrable Value</strong><br />
Even relatively strong agile teams are still subjected to time and cost deadlines. The purpose of software development is not to deliver to time and cost, the purpose is to deliver business value &#8211; to help the business meet opportunities and threats in the marketplace through the provision of technology.<br />
Companies need to learn and adapt and find a way to measure the success of projects not on hitting deadlines or getting it live, but delivering business value. There are plenty of ways to do this, but changing executive mindsets is not easy and individual teams need to build enough trust with their executive to be able to work in this manner.</p>
<p><strong>Still Structured in Functional Departments Instead of Value Stream Teams</strong><br />
All the agile methodologies are focussed on adding incremental value, of constantly focussing and business value&#8230; So why aren&#8217;t organisations that have been &#8220;doing agile&#8221; for a couple of years structured on providing value to customers.<br />
Teams need to have the skillsets to create an increment of value within the company&#8217;s value stream. This does not mean a BA function, Test function, Dev function, PM function, Infrastructure function etc.</p>
<p><strong>Still planning portfolios in yearly cycles instead of responding to customer demand</strong><br />
How many commentators do we hear say that technology changes every 6 months, for the web its faster! So why do companies persist with annual portfolio planning? I can understand it for a piece of work that will take multiple years, and then, only if broken into incremental business value. Most work is not a whole year, most opportunities in the marketplace require rapid delivery, and annual portfolios are not the answer.</p>
<p><strong>The Burning Bridge</strong><br />
If you&#8217;re still reading this, congratulations I&#8217;m impressed and I&#8217;ve saved the best until last. My final observation is probably the most poignant and may well be at the heart of the problems of implementing agile.<br />
All the innovations that Toyota made, that collectively became known as Lean Thinking were forced upon them.<br />
Toyota had to evolve and had to change. They were being threatened by US imports, did not have the capital to copy the US system of manufacture. They also had union issues which resulted in Toyota&#8217;s &#8220;job for life&#8221; contract where all their employees were guaranteed a job for life. This meant that employee salaries became a fixed cost, and therefore they needed to &#8220;sweat the asset&#8221; which means pushing more responsibility towards the coalface and reducing management heads.<br />
In a competitive market with considerable constraints they needed to constantly reduce costs in order to make a profit and build consumer trust &#8211; there was a compelling need for change otherwise they wouldn&#8217;t exist.</p>
<p>Most change management books and guru&#8217;s talk about and allude to &#8220;Creating the Burning Bridge&#8221;. Scaring everyone enough so that they will feel uncomfortable and see the need to really change.&#8221; And lets be honest, if you&#8217;re making profit and fairly comfortable, why change?</p>
<p>Thoughtworks pretty much established its business by taking on failing projects, because when something&#8217;s so bad, maybe you&#8217;ll be willing change things and do things differently!</p>
<p>This may well be the true reason why significant and continuous improvement is eluding agile teams.</p>
<p>Agile change programmes need to create the burning bridge, and then spend their efforts removing impediments, actively working on retrospective data and continously improving the organisation.</p>
<p>Human nature is getting in the way!<br />
Evolution through fight or flight, but what if there&#8217;s no impending threat?</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2011/08/the-machine-that-changed-the-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CIO/IT Directors &#8211; What Agile Means to You</title>
		<link>http://blog.endjin.com/2011/08/cioit-directors-what-agile-means-to-you/</link>
		<comments>http://blog.endjin.com/2011/08/cioit-directors-what-agile-means-to-you/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 11:40:52 +0000</pubDate>
		<dc:creator>Steve.Garnett</dc:creator>
				<category><![CDATA[Musings]]></category>
		<category><![CDATA[agile change]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/?p=393</guid>
		<description><![CDATA[Agile is a double-edged sword! On the one hand, following a period of intense change, budget spend and organisational upheaval&#8230; your department will have quicker cycle times to market, be more predictable operationally, produce higher quality software, have better working relationships with its customers and will be more adaptive to changes of business objectives and [...]]]></description>
			<content:encoded><![CDATA[<h3><strong>Agile is a double-edged sword!</strong></h3>
<p>On the one hand, following a period of intense change, budget spend and organisational upheaval&#8230; your department will have<strong> quicker cycle times </strong>to market, be more predictable operationally, produce <strong>higher quality software</strong>, have <strong>better working relationships </strong>with its customers and will be more adaptive to changes of business objectives and requirements.</p>
<p>On the other hand, all the department&#8217;s problems that you know currently exist will become very visible and transparent very quickly. All those skeletons in closets you&#8217;ve been dampening down, or battles you&#8217;ve been fighting to secure funding will rise to the top of agendas. If you&#8217;re looking for an easy ride or at least some calm seas, don&#8217;t start agile.</p>
<p>Agile methodologies expose the weaknesses in your value stream of delivering software, it exposes poor infrastructure, asset management, governance, processes, delivery, and most fundamentally, it will expose weak people&#8230;</p>
<p>Agile not only highlights these problems, it rubs your face in it by reporting all the dirty linen as impediments and waste, and directly attributes slow delivery to the specific problem. These could include lack of testing environments, or poor VM performance, or production support interruptions, or no automated tests, or poor architecture etc, etc, etc.</p>
<p>Not only that, but if you walk this road, your department will start to judge you and the success of the agile initiative by your personal ability to secure funding and remove organisational impediments i.e. your executive skills.</p>
<p>So before you start down this road I think the first question for a CIO should be &#8220;Should building software be a core competency of this company?&#8221;</p>
<p>If the answer is no, then maybe the answer lies elsewhere in out-sourcing your software development to a good agile house. However, if there is a need for a strong software development capability because technology is fundamental to your business strategy, and the board of directors are in agreement, then agile is the best approach. This is because Agile development, specifically Extreme Programming, is one of the the most disciplined approaches to software development in the world.</p>
<p>So, let&#8217;s assume you&#8217;re a pro-active CIO/IT Director, with a supportive board behind you, ready for the challenge&#8230; Where do you start?</p>
<p>Fundamentally, you&#8217;re initiating a change programme to completely overhaul the way your company builds software. Don&#8217;t fool yourself into thinking you&#8217;re doing anything less!<br />
The change will affect everyone involved, your consumers, your internal customers, finance, marketing, HR, Operations and your own area.</p>
<p>Forget the Hype &#8211; Moving to Agile is a large organisational change programme that will overhaul your approach to software delivery.<br />
Make no mistake, it&#8217;s about people, its about change and therefore we all know it won&#8217;t be easy!</p>
<p>The good thing is that each change is incremental, there&#8217;s no big bang, you just have to keep removing barriers, impediments and keep the budgets going.<br />
It&#8217;s continuous improvement, not revolution.</p>
<p>You&#8217;re going to need help!</p>
<p>There&#8217;s plenty of agile consultancies out there at the moment flooding the market, but fundamentally I think you need to look for experience and named resources to cover 3 fundamental areas; the organisational change, the delivery process and the engineering practices:</p>
<ol>
<li>Experience of managing organisational and cultural change including the stakeholder communications, business case creation, and internal marketing. And be able to demonstrate the energy it requires. (regardless of if its agile or not).</li>
<li>Delivery management expertise, commonly Scrum is the predominant process adopted by agile teams. So look for Scrum Practitioners or Coaches with at least 5 years experience and references to back it up.</li>
<li>Engineering Practices &#8211; Extreme Programming expertise, automated tools usage, and deployment specialists&#8230; basically strong agile engineering experience.</li>
</ol>
<p>With competence in these 3 areas, you won&#8217;t go too far off track but do not underestimate the need for the Engineering Practices as it is fundamental to the quality of product and reducing cycles times to market.<br />
And as with all change programmes&#8230; this will take months not weeks.</p>
<p>&#8220;The propensity to exploit Agile delivery to achieve business success is directly proportional to the capacity of a company to change and continuously improve.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2011/08/cioit-directors-what-agile-means-to-you/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Dev4Good July 2011</title>
		<link>http://blog.endjin.com/2011/07/dev4good-july-2011/</link>
		<comments>http://blog.endjin.com/2011/07/dev4good-july-2011/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 14:23:04 +0000</pubDate>
		<dc:creator>Howard van Rooijen</dc:creator>
				<category><![CDATA[Good Causes]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[Dev4Good]]></category>
		<category><![CDATA[Goldsmiths Craft and Design Council]]></category>
		<category><![CDATA[Hope and Play]]></category>
		<category><![CDATA[Ministry of Stories]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/2011/07/dev4good-july-2011/</guid>
		<description><![CDATA[Ethical Foundations When we founded endjin, Matthew, Lloyd and I spent a lot of time thinking about the type of company we wanted to create; one recurring theme was that in our personal time we each did a significant amount of work for “good causes” and we derived a huge amount of joy and satisfaction [...]]]></description>
			<content:encoded><![CDATA[<h3>Ethical Foundations</h3>
<p>When we founded <a href="http://endjin.com" target="_blank">endjin</a>, Matthew, Lloyd and I spent a lot of time thinking about the type of company we wanted to create; one recurring theme was that in our personal time we each did a significant amount of work for “good causes” and we derived a huge amount of joy and satisfaction from it.</p>
<p>I co-founded <a href="http://benchpeg.com" target="_blank">benchpeg</a> with my sister in in 2007 to help improve communication and collaboration within the UK Jewellery Industry – to try and prevent other Jewellery &amp; Silversmithing Graduates from the isolating and demoralising 2 year experience my sister endured trying to get her first industry job.</p>
<p>Lloyd works with the <a href="https://www.facebook.com/officialbobbymoorefund" target="_blank">Bobby Moore Fund</a>; with them he helped <a href="http://www.youtube.com/watch?v=3SOyJddZOfE" target="_blank">build a school in Brazil in 2009</a> and in June 2011 helped <a href="http://www.cancerresearchuk.org/bobbymoorefund/getinvolved/events/projectnamibia/" target="_blank">renovate a school in Namibia</a>.</p>
<p>Matthew’s passion for cooking has lead him to befriend many of the top chefs in the UK and to get involved in pop-up restaurant events for charity, such as the recent <a href="http://blog.endjin.com/2011/04/quiet-day-on-monday/" target="_blank">Kai We Care event</a> which <a href="http://kaiwecare.weebly.com/" target="_blank">raised £70,000</a> for the New Zealand earthquake appeal.  He’s also working on a digital cookbook, all proceeds of which will go to the red cross.</p>
<h3>Dev4Good</h3>
<p>Then one morning in late April – I spotted the following tweet from <a href="http://twitter.com/#!/chillfire/" target="_blank">@chillfire</a>:</p>
<p><a href="http://twitter.com/#!/chillfire/status/63026772601614336"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.endjin.com/wp-content/uploads/2011/07/image.png" border="0" alt="image" width="539" height="252" /></a></p>
<p>Intrigued, I pinged him and asked if he’d fancy a pint &amp; a chat about the event and to see if endjin could help in some way.</p>
<p>After a very inspiring meeting with Craig, where he outlined his vision of finding good causes, getting them to pitch their problems to a room full of developers and then trying to steer them towards a solution, we decided to become one of the sponsors of the event.</p>
<p>One very interesting co-incidence was that Craig had already been contacted by <a href="http://www.hopeandplay.org" target="_blank">Hope &amp; Play</a>, a charity founded by my old boss, Iyas AlQasem. Craig had already lined up <a href="http://ministryofstories.org" target="_blank">Ministry of Stories</a> and I asked if it was ok to bring my own good cause along – in the form of <a href="http://craftanddesigncouncil.org.uk" target="_blank">The Goldsmiths’ Craft and Design Council</a>.</p>
<h3>The Event: Day 1</h3>
<p>The event was held at the wonderful <a href="http://hammersmithriverside.co.uk/" target="_blank">Auriol Kensington Rowing Club</a> in <a href="http://maps.google.co.uk/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=14+Lower+Mall++Hammersmith++London+W6+9DJ&amp;sll=53.800651,-4.064941&amp;sspn=14.097003,28.300781&amp;ie=UTF8&amp;hq=&amp;hnear=14+Lower+Mall,+London+W6+9DJ,+United+Kingdom&amp;ll=51.489848,-0.231421&amp;spn=0.003621,0.006909&amp;z=17" target="_blank">Hammersmith</a> -  a gem of a venue – with great staff, a great space (with its own bar) and happily – sandwiched in between two pubs. If you were thinking of running some kind of small developer event – I would seriously consider using the rowing club &amp; I’d also recommend reading Craig’s blog post on the subject of <a href="http://chillfire.blogspot.com/2011/07/running-developer-event-venue.html" target="_blank">finding a suitable venue</a>.</p>
<p><span style="font-weight: bold;">Introduction</span></p>
<p>Once all the assembled masses had been given breakfast, Craig called us to order on the top floor of the venue. He explained how the weekend was going to work and introduced the 3 Charities that we would be trying to help. He then invited the Charities to “pitch” their problem.</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-022.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Craig Hogan's opening speech at Dev4Good" src="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-022_thumb.jpg" border="0" alt="Craig Hogan's opening speech at Dev4Good" width="640" height="382" /></a></p>
<h4><span style="font-weight: bold;">Pitching</span></h4>
<p>First up was <strong>Hope and Play</strong> &#8211; <a href="http://www.hopeandplay.org">www.hopeandplay.org</a> -  who believe that every child has the right to safely play, learn and grow in a family environment, in an atmosphere of happiness, love and understanding. Hope and Play are an organisation dedicated to helping add hope and play to the lives of children who are denied these most basic rights. Hope and Play do this by building playgrounds so children can have places to play safely, by buying textbooks, laptops, and other educational materials to help create opportunities and give them hope in a future that they can have some control over. Hope and Play work with local communities and organisations to get these to the right people and places. Hope and Play will also occasionally undertake specific peaceful and legal actions to support them where there is an immediate humanitarian need.</p>
<p>Iyas, the founder of Hope and Play, was unable to attend in person (after changing Jobs for the first time in 15 years he had decided to take his family on a 6 month tour of South America) – so he pitched, via a video recording (and the result had a slight Max Headroom feel to it!)</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-019.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Iyas AlQasem doing his pitch via a video recording" src="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-019_thumb.jpg" border="0" alt="Iyas AlQasem doing his pitch via a video recording" width="640" height="478" /></a></p>
<p>One of the many things Hope and Play do is create playgrounds for children. Below is a before / after example of the work they have done in Gaza:</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/hope-and-play.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="The work Hope and Play has done to transform a derelict site into a playground" src="http://blog.endjin.com/wp-content/uploads/2011/07/hope-and-play_thumb.jpg" border="0" alt="The work Hope and Play has done to transform a derelict site into a playground" width="640" height="162" /></a></p>
<p>The problem they posed was that there is currently no way for Charities to see what work other Charities / NGOs are doing in the same region – if there was a mechanism to allow these organisation to share this type of information it would help enable collaboration on projects – or it would allow resource planning – for example if one of the big charities was already working within a specific area, then Hope &amp; Play could pick another area.</p>
<p>Next was Lucy MacNab from <strong>Ministry of Stories</strong> &#8211; <a href="http://www.ministryofstories.org/">http://www.ministryofstories.org/</a> – which aims to help young people write their own stories – it’s based on the hugely successful <a href="http://826valencia.org/">http://826valencia.org/</a> project.</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-028.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Lucy MacNab pitching for Ministry of Stories at Dev4Good" src="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-028_thumb.jpg" border="0" alt="Lucy MacNab pitching for Ministry of Stories at Dev4Good" width="640" height="346" /></a></p>
<p>The Ministry of Stories have a shop called the “Hoxton Street Monster Supplies” which stocks all manner of interesting products:</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/mos2_0.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="The Ministry of Stories Shop in Hoxton" src="http://blog.endjin.com/wp-content/uploads/2011/07/mos2_0_thumb.jpg" border="0" alt="The Ministry of Stories Shop in Hoxton" width="640" height="409" /></a></p>
<p>My favourite being the tins of “a vague sense of unease”</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/mos7_0.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Some of the products for sale at the Ministry of Stories Monster Shop" src="http://blog.endjin.com/wp-content/uploads/2011/07/mos7_0_thumb.jpg" border="0" alt="Some of the products for sale at the Ministry of Stories Monster Shop" width="640" height="408" /></a></p>
<p>and farmers market style “olde fashioned brain jam” or “organ marmalade”</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/mos9_0.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Some of the products for sale at the Ministry of Stories Monster Shop" src="http://blog.endjin.com/wp-content/uploads/2011/07/mos9_0_thumb.jpg" border="0" alt="Some of the products for sale at the Ministry of Stories Monster Shop" width="640" height="431" /></a></p>
<p>At the back of the shop is a secret door that the children step through to enter the secret writing room:</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/mos16_0.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="The secret writing room at the back of the Ministry of Stories Monster Shop in Hoxton" src="http://blog.endjin.com/wp-content/uploads/2011/07/mos16_0_thumb.jpg" border="0" alt="The secret writing room at the back of the Ministry of Stories Monster Shop in Hoxton" width="640" height="425" /></a></p>
<p>Below is a video from the Guardian that explains what happens in a little more detail and what the outcome is (happy, engaged children):</p>
<p><a href="http://www.guardian.co.uk/books/video/2010/nov/19/nick-hornby-ministry-stories-video" target="_blank"><img src="http://blog.endjin.com/wp-content/uploads/2011/07/mos-guardian.jpg" border="0" alt="" /></a></p>
<p>The problem Lucy posed was that the MoS would love to work out a way to allow young people to publish their stories to the world in a way that would also allow them to generate a little revenue.</p>
<p>The third and final charity was <strong>The Goldsmiths’ Craft and Design Council</strong> &#8211; <a href="http://www.craftanddesigncouncil.org.uk/">http://www.craftanddesigncouncil.org.uk/</a> – which was founded in 1908 to  encourage, stimulate and promote the pursuit of excellence in craftsmanship and design amongst all those in the United Kingdom engaged in Silversmithing, Goldsmithing, Jewellery and the Allied Crafts. The GC&amp;DC runs an award every year – which spans the breadth of the industry (every discipline from Chasers to Stone Carvers) and the depth of the industry (Apprentice, Trainee and Senior). Entries are judged by established, experienced and highly regarded members of the industry. The thing I love most about the GC&amp;DC awards is that, unlike the Oscars, where you will always have a “best actor”, if in any given year no entrant meets the quality level required by the judging panel – no award will be given. For me – this is the essence of having a quality mark. What this translates to is an award that has real meaning within the Industry. And when it is won by an apprentice or a trainee – it can help jump start their career. So these awards can have a life changing effect for anyone skilled enough to win one.</p>
<p>Robin Kyte – The Chairman of the Goldsmiths’ Craft and Design Council posed the problem that their current award application process is paper based – they have on average 1000 applications per year and it’s an intensive and laborious process for the volunteers who run the awards process. He wanted a way to bring the 100 year old process up to date and put the application process online.</p>
<h4><span style="font-weight: bold;">Team Formation</span></h4>
<p>After such compelling pitches from Hope and Play and Ministry of Stories – I was slightly worried that GC&amp;DC would be left without too many volunteers – but one of the most surprising aspects of the whole event was how evenly the volunteers distributed themselves across the 3 charities. It turned out that one of the volunteers – Mark Middlemist was actually from Birmingham and worked next door to the Birmingham Jewellery Quarter and also Joe Simmonds – felt a resonance between the craftsmanship in the jewellery industry and the burgeoning software craftsmanship movement.</p>
<h4><span style="font-weight: bold;">Planning</span></h4>
<p>In a very agile &amp; self organising way – the teams started to plan out how they were going to try and solve the problems. Below are some videos that capture the process (even when one of the teams, fed up with the temperamental wifi, decided to decamp to the pub next door)</p>
<p><iframe height="349" src="http://www.youtube.com/embed/ml0nhtuA9Bo?hl=en&amp;fs=1" frameborder="0" width="425" allowfullscreen></iframe></p>
<p><iframe height="349" src="http://www.youtube.com/embed/6Lhbg5l41O4?hl=en&amp;fs=1" frameborder="0" width="425" allowfullscreen></iframe></p>
<p><iframe height="349" src="http://www.youtube.com/embed/KPX8UOGDP1I?hl=en&amp;fs=1" frameborder="0" width="425" allowfullscreen></iframe></p>
<p><iframe height="349" src="http://www.youtube.com/embed/-dOAzqXEfLw?hl=en&amp;fs=1" frameborder="0" width="425" allowfullscreen></iframe></p>
<p><iframe height="349" src="http://www.youtube.com/embed/keYN4JdeHiI?hl=en&amp;fs=1" frameborder="0" width="425" allowfullscreen></iframe></p>
<p>We were very fortunate to have Robin for the whole day – having a stakeholder present to answer and and all questions allowed us to get huge amounts of information out of his head and into the development teams’. We decided to capture the information in a giant timeline – which you can see the team huddled around.</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/5894626339_0d8e6c40db_b.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="The Goldsmith Craft and Design Council Team's planning session" src="http://blog.endjin.com/wp-content/uploads/2011/07/5894626339_0d8e6c40db_b_thumb.jpg" border="0" alt="The Goldsmith Craft and Design Council Team's planning session" width="640" height="480" /></a></p>
<h4><span style="font-weight: bold;">Iterations</span></h4>
<p>Once the planning was over – we did our first iteration of development. Our initial task was to set up a GitHub repository that we could use to collaborate on.</p>
<p>Every few hours the teams would break for a quick iteration retrospective and mini planning session:</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-035.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Some of the team have a retrospective" src="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-035_thumb.jpg" border="0" alt="Some of the team have a retrospective" width="640" height="478" /></a></p>
<h4><span style="font-weight: bold;">Splitting the team</span></h4>
<p>Once Robin has prepped the team with all the info they needed and they were all set to try and build an Orchard CMS Module to manage the application process  – I decided to split off from the team and spend some one to one time with Robin to talk about how the GC&amp;DC could use social media to help get the message out about the awards and attract more applicants. This was a genuinely eye opening experience – I’ve been using social networks like facebook and twitter since they were launched and see them as a natural communication channel. But demonstrating what you can do with these platforms (and a smartphone) to a non-technical user was simply a delightful experience. The one thing that struck me that afternoon is that as a tech-savvy individual, you don’t need to write code to help a charity – simple tasks such as ensuring their hardware is update date &amp; protected or that mundane tasks such as setting up their email smartphones can really change their day to day experiences.</p>
<h4><span style="font-weight: bold;">Socialise!</span></h4>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-027.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="iphone 027" src="http://blog.endjin.com/wp-content/uploads/2011/07/iphone-027_thumb.jpg" border="0" alt="iphone 027" width="640" height="388" /></a></p>
<p>After 12 hours of coding the bar on level 2 of the rowing club (pictured above), unsurprisingly became a hub of activity – it was great to unwind and chat with the folks in some of the other teams.</p>
<h3>The Event: Day 2</h3>
<h4><span style="font-weight: bold;">Rebooting</span></h4>
<p>On Sunday morning our team had a quick stand-up to check progress. It was pretty obvious from all the problems the developers that choosing Orchard CMS as the base platform was a huge mistake. Quickly turning to the other 2 development teams (who also had initially chosen Orchard) it turned out that one of the other had experienced too much friction and had dropped it late in the previous evening. It was at that point that I decided we should scrap the work we’d done on Orchard and reboot the project to use <a href="http://www.sharparchitecture.net/" target="_blank">Sharp Architecture</a> instead. Hopefully the simple combination of ASP.NET MVC and NHibernate and Castle Winsor would allow us a much less complicated and more reliable framework in which to solve the problem.</p>
<h4><span style="font-weight: bold;">Transitioning to Open Source</span></h4>
<p>It became apparent quite quickly after midday that we weren’t going to get as far as we wanted to and so I decided to re-frame the objectives for the rest of the day: I wanted to get the two remaining developers set-up and prepped to continue to work on the project after the event as an Open Source Project.</p>
<p>The first step was to set up a <a href="http://groups.google.com/group/dev4good" target="_blank">Google Group that would allow the dev4good</a> participants to easily communicate, share ideas.</p>
<p>The second step was to give GCADC devs as much background reading around Sharp Architecture as possible so that they could get up to speed with how to use it.</p>
<p>The third step was to get them set up with a more novice friendly Git solution (Gitbash is powerful, but confusing if you’re totally new to the world of DVCS) – so I got them all to install the personal edition of <a href="http://www.syntevo.com/smartgit/index.html" target="_blank">SmartGit</a>.</p>
<h4><span style="font-weight: bold;">Retrospective</span></h4>
<p>At the end of the 2nd day we had a final retrospective about the whole weekend and how we could improve any future event:</p>
<p><img title="End of Day 2 Retrospective" src="http://farm6.static.flickr.com/5032/5900016487_2ff9c0564b_z.jpg" alt="End of Day 2 Retrospective" /></p>
<h3>The People</h3>
<p>I just wanted to say a big thank-you to all the wonderful developers who gave up their weekend (and in some cases travelled significant distances) in order to attend the event and help Hope &amp; Play, Ministry of Stories and The Goldsmiths’ Craft and Design Council. I don’t have the full list of people who attended – but I have a few twitter details of some of the chaps there:</p>
<ul>
<li>Andrew Vos &#8211; <a href="http://twitter.com/#!/AndrewVos">@andrewvos</a></li>
<li>David Hawes – <a href="http://twitter.com/#!/davehawes">@davehawes</a></li>
<li>Joe Simmonds &#8211; <a href="http://twitter.com/#!/JoeSimmonds">@joesimmonds</a></li>
<li>Rob Cooper &#8211; <a href="http://twitter.com/#!/robcthegeek">@robcthegeek</a></li>
<li>J D Mitchell &#8211; <a href="http://twitter.com/#!/jdmitchjoel">@jdmitchjoel</a></li>
<li>Mark Middlemist &#8211; <a href="http://twitter.com/#!/Delradie">@delradie</a></li>
<li>Neil Andrassy &#8211; <a href="http://twitter.com/#!/andrassy">@andrassy</a></li>
</ul>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/07/5900009917_7471be1584.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="The last ones standing at the end of Day 2" src="http://blog.endjin.com/wp-content/uploads/2011/07/5900009917_7471be1584_thumb.jpg" border="0" alt="The last ones standing at the end of Day 2" width="640" height="480" /></a></p>
<p>And a very special thank-you to Craig and the huge amount of effort and time he poured into the event.</p>
<p>The following Monday morning I received a lovely email from Robin:</p>
<blockquote><p><em>Brilliant work by all the experts &amp; volunteers and many thanks to all the sponsors that allowed the Goldsmiths&#8217; Craft &amp; Design Council to be part of the weekend. It was my privilege to be in such company.</em></p>
<p>Robin Kyte<br />
Chairman<br />
The Goldsmiths Craft &amp; Design Council</p></blockquote>
<p>I can’t wait until we deliver the finished application and see how much easier it will make the volunteer’s lives.</p>
<p>On July 7th – the Hope and Play team put their Charity Portal live, you can see the result at <a href="http://charityportal.dev4good.net/">http://charityportal.dev4good.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2011/07/dev4good-july-2011/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>On .NET Rocks! Talking about Sharp Architecture, Templify and StyleCop</title>
		<link>http://blog.endjin.com/2011/07/on-dot-net-rocks-talking-about-sharp-architecture-templify-and-stylecop/</link>
		<comments>http://blog.endjin.com/2011/07/on-dot-net-rocks-talking-about-sharp-architecture-templify-and-stylecop/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 09:24:59 +0000</pubDate>
		<dc:creator>Howard van Rooijen</dc:creator>
				<category><![CDATA[Engineering Practices]]></category>
		<category><![CDATA[Musings]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[ReSharper]]></category>
		<category><![CDATA[Sharp Architecture]]></category>
		<category><![CDATA[StyleCop]]></category>
		<category><![CDATA[Templify]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/?p=357</guid>
		<description><![CDATA[A few weeks ago Geoffrey Smith, the Sharp Architecture Development Lead and I were invited onto .NET Rocks! to be interviewed about the Sharp Architecture project. After we talked about Sharp Architecture &#8211; the conversation lead on to other open source projects I&#8217;ve been involved with such as Templify and StyleCop for ReSharper. You can listen to the [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago <a title="Geoffrey Smith" href="http://blog.sharparchitecture.net/author/GeoffreySmith.aspx" target="_blank">Geoffrey Smith</a>, the Sharp Architecture Development Lead and I were invited onto <a title=".NET Rocks!" href="http://www.dotnetrocks.com" target="_blank">.NET Rocks!</a> to be interviewed about the <a href="http://www.sharparchitecture.net/" target="_blank">Sharp Architecture</a> project. After we talked about Sharp Architecture &#8211; the conversation lead on to other open source projects I&#8217;ve been involved with such as <a href="http://opensource.endjin.com/templify/" target="_blank">Templify</a> and <a href="http://stylecop.codeplex.com/" target="_blank">StyleCop for ReSharper</a>.</p>
<p>You can <a href="http://www.dotnetrocks.com/default.aspx?showNum=679" target="_blank">listen to the show here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2011/07/on-dot-net-rocks-talking-about-sharp-architecture-templify-and-stylecop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quiet day on Monday&#8230;</title>
		<link>http://blog.endjin.com/2011/04/quiet-day-on-monday/</link>
		<comments>http://blog.endjin.com/2011/04/quiet-day-on-monday/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 13:12:15 +0000</pubDate>
		<dc:creator>Matthew Adams</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/2011/04/quiet-day-on-monday/</guid>
		<description><![CDATA[Anyone who follows me on Twitter will know that I love food. Cooking it, eating it, thinking about it… That industry has an above-average number of incredibly driven, creative, focused individuals who have a passion for what they do; the flair to do it; and, above all, the willingness to pass on that experience to [...]]]></description>
			<content:encoded><![CDATA[<p>Anyone who follows me on Twitter will know that I love food. Cooking it, eating it, thinking about it… That industry has an above-average number of incredibly driven, creative, focused individuals who have a passion for what they do; the flair to do it; and, above all, the willingness to pass on that experience to the next generation of chefs who share that passion. And it is not just the technical skills – no one will make a success of a restaurant without the business brains behind it, too.
<p>Sound familiar? Anyone in the technology space would recognize those as the fundamentals of a good software team. The catering business is, in fact, one of the things that have inspired me to try to get a proper apprenticeship model going in our industry. They really do some things much better over there, under enormously challenging circumstances. (Really: the cadence of the restaurant kitchen is somewhat shorter and more intense than the average development sprint.)
<p>Anyway – back to Monday. A bunch of top chefs got together to organize <a href="http://kaiwecare.weebly.com/" target="_blank">Kai We Care</a> &#8211; a popup restaurant in aid of the Red Cross earthquake fund for Christchurch, New Zealand. What started as a meal for 40 people, turned into a 9 course tasting menu with matching wines being served by a team of over 40 chefs, and 40 front-of-house staff, to around 200 guests.
<p>Mark Poynton is the Chef Patron of the (rightly) award winning <i><a href="http://www.restaurantalimentum.co.uk/" target="_blank">Alimentum</a></i> in Cambridge, and he was providing the main course: slow roasted lamb. We’ve got a couple of friends who live in Christchurch, and whose house was destroyed in the earthquake, so I was keen to see if there was anything I could do to help out. Mark was kind (brave) enough to let me come along and give him a hand on the day.
<p>Overall, it was a great experience; the atmosphere with so many chefs jammed into the kitchen was quite something. Working alongside Mark was amazing enough. When a culinary legend like Alyn Williams appears on the other side of the pass to rescue you from your own inexperience, you realize what an incredible event it was – and that’s before you even tot up the amount the team has raised for the appeal: over £60,000 so far.
<p>So, special thanks to @<a href="http://www.twitter.com/markalimentum" target="_blank">markalimentum</a>, @<a href="http://www.twitter.com/russellbateman" target="_blank">russellbateman</a>, @<a href="http://www.twitter.com/chefaj82" target="_blank">chefaj82</a>, @<a href="http://www.twitter.com/chefalyn" target="_blank">chefalyn</a>, and the guys who made lunch at The Ledbury an added pleasure: @<a href="http://www.twitter.com/chefbennett01" target="_blank">chefbennett01</a>, @<a href="http://www.twitter.com/darrengdwn" target="_blank">darrengdwn</a>, @<a href="http://www.twitter.com/christanner99" target="_blank">christanner99</a> and @<a href="http://www.twitter.com/jamestanner01" target="_blank">jamestanner01</a> (and everyone else I’ve forgotten to mention) for a great couple of days. It was a real privilege to meet everyone.
<p>Oh, and there was even some swag – just like a developer event.
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/04/swag.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="swag" border="0" alt="swag" src="http://blog.endjin.com/wp-content/uploads/2011/04/swag_thumb.jpg" width="244" height="183"></a>
<p>(Lots more photos from the event <a href="http://www.richardbudd.co.uk/blog/?p=1416" target="_blank">here</a>. See if you can find me…)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2011/04/quiet-day-on-monday/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>StyleCop and StyleCop for ReSharper have merged</title>
		<link>http://blog.endjin.com/2011/04/stylecop-and-stylecop-for-resharper-have-merged/</link>
		<comments>http://blog.endjin.com/2011/04/stylecop-and-stylecop-for-resharper-have-merged/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 20:48:47 +0000</pubDate>
		<dc:creator>Howard van Rooijen</dc:creator>
				<category><![CDATA[Engineering Practices]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[CodePlex]]></category>
		<category><![CDATA[JetBrains]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[ReSharper]]></category>
		<category><![CDATA[StyleCop]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/2011/04/stylecop-and-stylecop-for-resharper-have-merged/</guid>
		<description><![CDATA[In 2008 Microsoft released Source Analysis a tool to help solve the thorny problem of coding standards in C# projects, soon afterwards they re-launched it using it’s original internal Microsoft name, StyleCop (to avoid confusion with the TFS Code Analysis tools), along with an SDK that allowed the community to extend the product. In May [...]]]></description>
			<content:encoded><![CDATA[<p>In 2008 Microsoft released Source Analysis a tool to help solve the thorny problem of coding standards in C# projects, soon afterwards they re-launched it using it’s original internal Microsoft name, StyleCop (to avoid confusion with the TFS Code Analysis tools), along with an SDK that allowed the community to extend the product. In May 2010 Microsoft released StyleCop as an <a href="http://stylecop.codeplex.com" target="_blank">Open Source project on CodePlex</a>. In March 2011 Microsoft handed control of the project over to the community; the new project coordinator is the rather awesome <a href="http://www.codeplex.com/site/users/view/andyr" target="_blank">Andy Reeves</a>.</p>
<p>I’ve always believed that it’s very easy to point out someone’s faults; the real challenge is in helping correct them. At first, I just wanted developers writing code in Visual Studio to have the same experience as authors writing documents in Microsoft Word – I wanted red and green squiggly lines to highlight bad coding standards rather than spelling mistakes and bad grammar. But once I had this feature working I realised the actual real benefit would be to supply functionality to help people correct those errors, until they trained themselves not to make them in the future. This is where ReSharper and it’s incredibly powerful API enters the picture.</p>
<p>StyleCop + ReSharper are a dream combination and so it’s with great pleasure that I can announce that we have decided to <strong>merge the two projects together</strong>. The SCfR source code has been folded into the main StyleCop repository and I&#8217;ll be migrating documentation and issues across in the next few weeks.</p>
<p>This will bring quite a few advantages to the users, including a unified installer (SCfR# is now an install option), an auto updater, tighter integration of the two products which will allow us to finally solve many of those nagging bugs and feature requests that have been made over the last few years that have, up until this point, been impossible to solve.</p>
<p>In the last 3 years StyleCop has had over 100,000 downloads and  StyleCop for ReSharper has had over 60,000 – I’m hoping that all those users are as excited as we are about this announcement and continue to <a href="http://stylecop.codeplex.com/releases/view/44839" target="_blank">download</a>, <a href="http://stylecop.codeplex.com/workitem/list/basic" target="_blank">post issues</a> and <a href="http://stylecop.codeplex.com/SourceControl/list/changesets" target="_blank">contribute</a>!</p>
<p>I wanted to take the opportunity to say a very big thank-you to <a href="http://www.devjitsu.com/blog/" target="_blank">Jason Allor</a> &amp; Team for creating such a great product and allowing the <a href="http://stylecop.codeplex.com/team/view" target="_blank">community</a> to help it grow from strength to strength.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2011/04/stylecop-and-stylecop-for-resharper-have-merged/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>On Apprenticeships&#8230;</title>
		<link>http://blog.endjin.com/2011/02/on-apprenticeships/</link>
		<comments>http://blog.endjin.com/2011/02/on-apprenticeships/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 19:22:14 +0000</pubDate>
		<dc:creator>Howard van Rooijen</dc:creator>
				<category><![CDATA[Apprenticeships]]></category>
		<category><![CDATA[Musings]]></category>
		<category><![CDATA[apprenticeships]]></category>
		<category><![CDATA[charity]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[mentoring]]></category>
		<category><![CDATA[pro-bono]]></category>
		<category><![CDATA[psychology]]></category>
		<category><![CDATA[university]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/2011/02/on-apprenticeships/</guid>
		<description><![CDATA[I’ve always been surprised by the number of people within the technology sector, in particular the software development industry who don&#8217;t have a  traditional computer science background. Some of the most talented software developers I’ve worked with have university backgrounds in chemistry, astrophysics,  geography, marine biology, just not Computer Science and two of the most [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve always been surprised by the number of people within the technology sector, in particular the software development industry who don&#8217;t have a  traditional computer science background. Some of the most talented software developers I’ve worked with have university backgrounds in chemistry, astrophysics,  geography, marine biology, just not Computer Science and two of the most talented technologists I know bypassed university system all together in favour of gaining real world experience in the workplace.</p>
<p>I would like to say that my career was carefully planned and immaculately executed – but in truth I owe much to serendipity; I couldn’t decide what degree to apply for, so handed my sister the UCAS course directory and said “Y<em>ou know me better than anyone, can you pick something I’d like?</em>”. She selected “Intelligent Systems BSc” at Reading University a split course that combined Computer Science, Cybernetics and Psychology; it looked fascinating, so I applied and was given an unconditional offer.</p>
<p>Shortly after starting the course, I really began to struggle; rather than being a true split course which selectively took 1/3 of the modules from the Computer Science, Cybernetics and Psychology course it was the full syllabus of all 3 courses; the workload was immense; the 1st year Computer Science modules were a mixture of Delphi (good) and assembler (not good), Cybernetics had turned out to be mainly about Engineering Mathematics and its applications (feedback loops and even that was taught badly – the class even revolted and had one of the lecturers replaced), only Psychology was interesting, but I became increasingly disengaged with the course – it just wasn’t stimulating – I was overworked, stressed out, but becoming increasingly aware I was bored! Then suddenly my Father became seriously ill and I had to split my time between home and university; I ended up failing my 1st year exams and had to retake them over the summer.</p>
<p>Those few weeks were a time of intense self-reflection and soul-searching – I came to realise that even if I passed my resits I would continue to struggle in the following two years and that even if I managed to make it to Graduation Day, I would just be waving a bit of paper along with 200 other people within the department; only their bits of paper would be much better than mine. I also  was starting to believe, based on the course content that those bits of paper were totally irrelevant to the modern business world (which was buzzing with terms like “internet” and “web”) and that for me to actually get a job, I was going to need to differentiate myself from those other paper-waving graduates and that would need to happen by exploring what else the university had to offer other than what was on the curriculum.</p>
<p>I passed my resits and dropped Computer Science and Cybernetics and focused on Psychology. Suddenly my workload became manageable, I joined the student newspaper as a co-editor as I was seriously starting to consider design or journalism as a career.</p>
<p>My 2nd year at university was the polar opposite to the 1st; I was enjoying the Psychology course and working on the paper was a great creative outlet; at the end of the summer term someone mentioned seeing a job advert for a web designer for a university department. I was really excited – it could be the perfect summer job – combining my love of design and computers – I had some web experience at college and had kept tinkering throughout university. I spent days getting a portfolio together and creating an example site for the interview. The interview went well, so I was devastated when I received an email the next day telling me that I wasn’t quite what they were looking for. I was utterly crestfallen as I had pinned all my hopes on that job.</p>
<p>Then the first instance of serendipity happened; the person they had given the job suddenly decided that he actually wanted to go travelling over the summer; so I received a phone call asking me if I was still interested in the position. <em>Oh yes</em>.</p>
<p>Then the second instance of serendipity happened; the day before I started, the department’s Network / IT Manager resigned and walked out. There was pandemonium on my first day – the department was highly technical – with over 60 PCs, financial feeds and racks of servers and now they didn’t have anyone to manage them. I simply said “I can look after them until you find a replacement – it’s not difficult – they’re only computers.” It took them about 6 months to find a replacement – so on my first day I went from Web Designer to Network Manager. I was totally out of my depth but for the first time ever I felt fully engaged and developed a unquenchable thirst to learn everything I could to support the systems, because it was now <em>my responsibility</em>.</p>
<p>Then a few weeks in I was asked to create a new database connection for one of the teaching staff. I did as much research as I could, searched the web for any info – but I couldn’t find anything that helped. Humbly, I had to turn around to my boss and say “<em>I don’t know what to do. Is there anyone I can ask for help?</em>”. Having to admit I was stuck was a very hard thing to do.</p>
<p>She pondered a bit and then said:</p>
<p>“<em>There was this old retired guy called Bill, he used to help out a bit, but he left a few months ago to have his hip replaced. You could give him a call.</em>”</p>
<p>So I did. I explained who I was and what I needed and he politely informed me that his lunch had just been served by his wife and he would call me back once he was finished. Then my boss’s phone rang.</p>
<p>“<em>Hello Bill. No, no – that’s Howard – he’s helping us out over the summer.</em>”</p>
<p>Bill phoned me back a few minutes later:</p>
<p>“<em>I’m sorry about that,  I thought you were one of the great unwashed trying to hack the department’s systems. I’m free tomorrow if you want some help?</em>” and that was my introduction to the wonderful Bill Widdis.</p>
<p>The next day Bill arrived and I was quite surprised; it turned out he wasn’t just an “old retired guy”, he had a very successful career working for the London Stock Exchange and had retired just a few years previously “to concentrate on his golf”. We got on instantly. While we worked together to solve the problem, Bill filled me in on some of his history and the history of the department. At the end of a very enjoyable afternoon troubleshooting, we cracked it; Bill leant back in his chair with a very satisfied smile on his face, which suddenly vanished when he realised that he had fulfilled his duty.</p>
<p>“<em>Is there anything else you need a hand with?</em>”</p>
<p>“<em>Oh god, yes</em>” I said, thankfully “<em>I think there’s a few issues with the Exchange server and they want me to take a look at making some changes to the student records system. I don’t know where to start</em>”. And that was when my apprenticeship  with Bill began.</p>
<p>Over the next year, Bill spent a lot time working with me, he taught me how to code (in a way that actually made sense to me, something my course tutors had never managed), how to test my code, how to use version control, how to deploy,  how to manage my time, do estimates, identify and manage risk, create a project plan, manage end users, how to do troubleshooting via root cause analysis and most importantly how you can get immense satisfaction and gratification out of solving problems with code. Bill had a lifetime’s experience in the IT Industry – he had learnt everything the hard way, by doing it. He had been part of big successes and big failures – most notably <a href="http://inderscience.metapress.com/app/home/contribution.asp?referrer=parent&amp;backto=issue,6,6;journal,106,126;linkingpublicationresults,1:110891,1" target="_blank">Project Taurus</a>, had learnt the lessons from them and fortunately for me, was happy to pass on those insights.</p>
<p>Bill gave me the real-world skills and knowledge that the university was incapable of doing. When I finally graduated and was waving a bit of paper what was not as good as all the other people’s, it didn’t matter because I now had something much more valuable &#8211; a year’s industry experience and some of the skills and knowledge of an industry veteran. The passion for software development that Bill ignited was what led to me being offered a job at a small company called OS-Integration (that would one day become Conchango, then EMC Consulting) and I was then fortunate enough to work with a series of great mentors who were able to constructively channel the passion and enthusiasm I had and also pass on the benefits of their own experiences.</p>
<p>In the last couple of years I’ve been doing little bits of altruistic work: I helped build a <a href="http://www.sustainability-centre.org/project.php?id=9" target="_blank">woodland classroom for The Sustainability Centre</a>, I started a company with my sister, called <a href="http://benchpeg.com" target="_blank">benchpeg</a> – which was founded to help my sister’s industry, the Jewellery Trade, specifically to help graduates keep informed (graduating and going home, can be an isolating experience) and get their first job (as my sister’s experiences getting her first industry job was quite horrific and we wanted to prevent other people having to tread the same path).</p>
<p>For the last two years I’ve been invited to speak at  &#8220;<a href="http://www.thegoldsmiths.co.uk/news/getting-started-2011/" target="_blank">Getting Started</a>&#8221; &#8211; <a href="http://www.thegoldsmiths.co.uk/" target="_blank">The Goldsmiths&#8217; Company</a> annual week-long programme for recent UK graduates of precious metal courses and have spoken about how small businesses can use technology. I’ve also been doing some pro-bono consulting for <a href="http://www.goldsmiths-centre.org/" target="_blank">The Goldsmith’s Centre</a> -  a new £17.5 million investment to build a new centre to provide vocational training for the jewellery industry via <a href="http://goldsmiths-centre.org/the-goldsmiths'-institute/" target="_blank">The Goldsmiths’ Institute</a> and the <a href="http://www.thegoldsmiths.co.uk/technology-training/careers/apprenticeships/" target="_blank">Goldsmiths’ Company Apprenticeship Scheme</a>. It’s been fascinating gaining a small insight into an organisation that has been running an apprenticeship scheme since 1334 and their vision for what such a scheme should look like in the 21st Century.</p>
<p>Last year, a decade after graduating, I was thinking about starting my own company, my thoughts kept coming back to the time I spent with Bill and how pivotal he was in helping me find “my path” and I wanted to pay that forward to the next generation of software developers. I’m convinced that apprenticeships are the mechanism for achieving those goals.</p>
<p>One of the most exciting aspects of creating endjin was the first time I mentioned my ideas around apprenticeships to Matt, Lloyd and Steve and their eyes lit up. I knew I had found kindred spirits. We agreed that apprenticeships would be woven into the fabric of endjin.</p>
<p>I was really looking forward to seeing Bill at Christmas, for our annual festive curry, where we catch up on the years’ happenings. I was planning to tell him about setting up endjin and that he had been the inspiration for our plans to create an apprenticeship scheme and just to thank him for everything he had done for me.  But I never got the chance to as I was deeply saddened to discover that Bill had succumbed to cancer over the summer.<img style="background-image: none; margin: 17px 10px 10px 22px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border: 0px;" title="The wonderful Bill Widdis" src="http://blog.endjin.com/wp-content/uploads/2011/02/bill-widdis.jpg" border="0" alt="The wonderful Bill Widdis" width="215" height="350" align="right" /></p>
<p>That’s why, during <a href="http://www.apprenticeships.org.uk/" target="_blank">National Apprenticeship Week</a>, I’ve decided to share this story with you, Dear Reader, because I never got the chance to thank Bill.</p>
<p>Although endjin’s apprenticeship plans are embryonic, when they come to fruition, they will be dedicated to the wonderful Bill Widdis.</p>
<p>Sharing the knowledge you have amassed and teaching the skills you have spent your career perfecting, with the next generation is one of the best ways to prove your working life wasn’t wasted.</p>
<p>There’s one bit of advice Bill gave me and has served me well thus far, that I’d thought I’d share:</p>
<p>“<em>If anyone tries to promote you away from code and into management, turn them down! I didn’t and that’s when all the fun went out of my job!</em>” – Bill Widdis</p>
<p><a href="http://twitter.com/HowardvRooijen">@HowardvRooijen</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2011/02/on-apprenticeships/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Where do my Visual States come from in Blend?</title>
		<link>http://blog.endjin.com/2011/01/where-do-my-visual-states-come-from-in-blend/</link>
		<comments>http://blog.endjin.com/2011/01/where-do-my-visual-states-come-from-in-blend/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 11:12:54 +0000</pubDate>
		<dc:creator>Matthew Adams</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.endjin.com/2011/01/where-do-my-visual-states-come-from-in-blend/</guid>
		<description><![CDATA[This blog was prompted by a question from fellow endjineer and all-round genius, Ian Griffiths. He wanted to know how Expression Blend managed to find the Visual States exposed by the standard controls, and how you might, therefore, do the same job in your own code. (If you want to read up a bit about [...]]]></description>
			<content:encoded><![CDATA[<p>This blog was prompted by a question from fellow endjineer and all-round genius, <a href="http://www.interact-sw.co.uk/iangblog/">Ian Griffiths</a>. He wanted to know how Expression Blend managed to find the Visual States exposed by the standard controls, and how you might, therefore, do the same job in your own code.</p>
<p>(If you want to read up a bit about the visual state manager, Ian has a <a href="http://www.interact-sw.co.uk/iangblog/2008/06/10/visual-state">great tutorial here</a>. You can get a more in-depth view from the <a href="http://www.pluralsight-training.net/microsoft/find.aspx?f=silverlight&amp;olt=true&amp;h=false">Pluralsight On Demand Silverlight courses</a>.)</p>
<p>In Silverlight this is fairly straightforward.</p>
<p>Here are the Visual States for a <font face="Courier New">CheckBox</font>, as displayed in Blend:</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/01/image.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.endjin.com/wp-content/uploads/2011/01/image_thumb.png" width="244" height="238"></a></p>
<p>And here is the corresponding code for a <font face="Courier New">CheckBox</font> as provided by Reflector:</p>
<pre class="brush: csharp;">[TemplateVisualState(Name="MouseOver", GroupName="CommonStates"),
 TemplateVisualState(Name="Normal", GroupName="CommonStates"),
 TemplateVisualState(Name="Checked", GroupName="CheckStates"),
 TemplateVisualState(Name="InvalidFocused", GroupName="ValidationStates"),
 TemplateVisualState(Name="Disabled", GroupName="CommonStates"),
 TemplateVisualState(Name="Unfocused", GroupName="FocusStates"),
 TemplateVisualState(Name="Focused", GroupName="FocusStates"),
 TemplateVisualState(Name="Pressed", GroupName="CommonStates"),
 TemplateVisualState(Name="Unchecked", GroupName="CheckStates"),
 TemplateVisualState(Name="Indeterminate", GroupName="CheckStates"),
 TemplateVisualState(Name="Valid", GroupName="ValidationStates"),
 TemplateVisualState(Name="InvalidUnfocused", GroupName="ValidationStates")]
public class CheckBox : ToggleButton
{
}</pre>
<p>All those <font face="Courier New">TemplateVisualState</font> attributes give Blend the information it needs. It can just enumerate the metadata for the control, and present the UI.</p>
<p>How about WPF?</p>
<p>Well, Blend looks pretty much exactly the same:</p>
<p><a href="http://blog.endjin.com/wp-content/uploads/2011/01/image2.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.endjin.com/wp-content/uploads/2011/01/image_thumb2.png" width="244" height="231"></a></p>
<p>But if we look at the code, there don’t seem to be any of those visual state attributes.</p>
<pre class="brush: csharp;">[DefaultEvent("CheckStateChanged"),
 Localizability(LocalizationCategory.CheckBox)]
public class CheckBox : ToggleButton
{
}</pre>
<p>This is a shame, because the WPF framework <em>does</em> define the attribute (and you should use it on your own controls in exactly the same way as you would in Silverlight). If the standard controls don’t make use of it, though, how is Blend discovering these states, and building the UI?</p>
<p>A bit of rummaging around in the guts of Blend reveals an assembly called <font face="Courier New">Microsoft.Expression.DesignSurface</font>. This contains a type called <font face="Courier New">DesignSurfaceMetadata</font>, which itself contains a method called <font face="Courier New">CreatePresentationFrameworkAssemblyInformation()</font>. As the name sort-of implies, this adds additional metadata to the standard controls in the WPF presentation framework – specifically (but not exclusively) the missing <font face="Courier New">TemplateVisualState</font> attributes.</p>
<p>Aha! I thought; this is it. While the relevant Blend view model just enumerates those attributes to discover what to show in the UI, the infrastructure has previously added extra (hard-coded) attributes so it can do its job. It looks like a combination of doing it nicely in the view model layer, with some groinky hard-coding to work-around the lack of attributes on the relevant controls.</p>
<p>Turns out that’s nearly but not quite the case. If you look at the implementation of that method, it doesn’t fully cover all the standard controls.</p>
<p>Armed with this information, Ian had a bit more of a dig around, and found another suspect, in another assembly: <font face="Courier New">Microsoft.Expression.Platform.WPF</font>. There’s a class in there called <font face="Courier New">CommonAttributeTableBuilder</font> which does exactly the same job, but rather more comprehensively. It derives from a type called <font face="Courier New">AttributeTableBuilder</font>, which is a part of the standard metadata extensibility framework.</p>
<p>Either way, the conclusion is the same. You just have to know what states are exposed by the WPF standard controls; they don’t participate in the built-in discovery mechanism.</p>
<p>If you do need the same kind of discovery model as Blend, then the approach it has taken is a good one: add the additional metadata yourself somewhere in your bootstrapping process, then enumerate that metadata in your view model. That way, if a future version of WPF includes the relevant attributes, then you simply need to remove your hacky hard-coded extra metadata and your view model will continue to work correctly.</p>
<p>That’s not quite the end of the story, though. Intriguingly, VS2010 ships a version of the <font face="Courier New">Microsoft.Expression.Platform.WPF</font> assembly. An old version, but a version nonetheless. If that’s the case, then maybe we can use (via reflection) that internal <font face="Courier New">CommonAttributeTableBuilder</font> class to add the attributes for us, without taking a dependency on Blend? Maybe?</p>
<p>Turns out that the answer is again, no. The type isn’t present in the version that ships with VS2010. We still have to do it ourselves.</p>
<p>What about VS2010SP1 Beta? Yes! They have updated the version of the assembly. It isn’t one you can ship with your application, but you might reasonably expect it to be there if SP1 is present. Sadly, the WPF controls themselves haven’t been updated with the relevant attributes, though, and the metadata class is not publically available to us.</p>
<p>The conclusion, then is:</p>
<p>1) Annotate your own controls with the <font face="Courier New">TemplateVisualStateAttribute</font> if you make use of visual states. For an “industrial strength” control library, you can do that in an external assembly using the same <a href="http://msdn.microsoft.com/en-us/library/system.activities.presentation.metadata.iregistermetadata.aspx">metadata extension mechanism</a> that Blend uses, to minimize the size of your control assembly. For a one-off control, you might not want to bother, and just annotate the control itself.</p>
<p>2) If you need to programmatically enumerate the visual states for a control, look for those attributes</p>
<p>3) If you need to do that for the standard Silverlight controls, that’s fine – they add the relevant attributes.</p>
<p>4) If you need to do that for WPF, then you will need to hard-code a solution. The Blend approach of extending the metadata (effectively adding the attributes dynamically) is a good one, so your enumeration mechanism doesn’t need special case code. You may (or may not) be able to use the internal <font face="Courier New">CommonAttributeTableBuilder</font> class in <font face="Courier New">Microsoft.Expression.Platform.WPF</font> to help you. At the very least, you can look at in Reflector it for inspiration.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.endjin.com/2011/01/where-do-my-visual-states-come-from-in-blend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

